|
|
| Linje 1: |
Linje 1: |
| local p = {}
| |
|
| |
|
| --[[--------------------------< inline_error >-----------------------
| |
|
| |
| Render red error message inline (as opposed to the system error() in large font)
| |
| Add article to tracking category.
| |
|
| |
| ]]
| |
|
| |
| function p.inline_error(arg, msg)
| |
| return '<span style="font-size:100%" class="error citation-comment">Error in wayback template: Check <code style="color:inherit; border:inherit; padding:inherit;">|' .. arg .. '=</code> value. ' .. msg .. '</span>'
| |
| end
| |
|
| |
| --[[--------------------------< trimArg >-----------------------
| |
|
| |
| trimArg returns nil if arg is "" while trimArg2 returns 'true' if arg is ""
| |
| trimArg2 is for args that might accept an empty value, as an on/off switch like nolink=
| |
|
| |
| ]]
| |
|
| |
| function p.trimArg(arg)
| |
| if arg == "" or arg == nil then
| |
| return nil
| |
| else
| |
| return mw.text.trim(arg)
| |
| end
| |
| end
| |
| function p.trimArg2(arg)
| |
| if arg == nil then
| |
| return nil
| |
| else
| |
| return mw.text.trim(arg)
| |
| end
| |
| end
| |
|
| |
| --[[--------------------------< isdf >-----------------------
| |
|
| |
| Given df argument, return "yes" or "no" confirming what it is
| |
| Default is "yes". If df is nil or "", return "yes".
| |
|
| |
| ]]
| |
|
| |
| function isdf(df)
| |
|
| |
| if df == "ja" or df == "j" or df == "JA" or df == "yes" or df == "Yes" or df == "YES" or df == "y" or df == "Y" or df == "dmy" or df == "DMY" then
| |
| return "yes"
| |
| elseif df == "iso" or df == "ISO" then
| |
| return "iso"
| |
| end
| |
| return "yes"
| |
|
| |
| end
| |
|
| |
| --[[--------------------------< monthen2no >-----------------------
| |
|
| |
| Convert English month to Norwegian
| |
|
| |
| ]]
| |
|
| |
| function p.monthen2no(month)
| |
|
| |
| local nmonth
| |
|
| |
| month = mw.ustring.lower( month )
| |
|
| |
| if month == "january" then
| |
| nmonth = "januar"
| |
| elseif month == "february" then
| |
| nmonth = "februar"
| |
| elseif month == "march" then
| |
| nmonth = "mars"
| |
| elseif month == "april" then
| |
| nmonth = "april"
| |
| elseif month == "may" then
| |
| nmonth = "mai"
| |
| elseif month == "june" then
| |
| nmonth = "juni"
| |
| elseif month == "july" then
| |
| nmonth = "juli"
| |
| elseif month == "august" then
| |
| nmonth = "august"
| |
| elseif month == "september" then
| |
| nmonth = "september"
| |
| elseif month == "october" then
| |
| nmonth = "oktober"
| |
| elseif month == "november" then
| |
| nmonth = "november"
| |
| elseif month == "december" then
| |
| nmonth = "desember"
| |
| else
| |
| nmonth = month
| |
| end
| |
|
| |
| return nmonth
| |
|
| |
| end
| |
|
| |
| --[[--------------------------< makedate >-----------------------
| |
|
| |
| Given a year, month and day, convert into a full date while respecting df (dmy or mdy)
| |
|
| |
| ]]
| |
|
| |
| function p.makedate(year, month, day, df)
| |
|
| |
| local nmonth, zmonth, zday
| |
|
| |
| if not year or year == "" or not month or month == "" or not day or day == "" then
| |
| return nil
| |
| end
| |
|
| |
| zmonth = month
| |
| month = month:match("0*(%d+)") -- strip leading 0
| |
| if tonumber(month) < 1 or tonumber(month) > 12 then
| |
| return year
| |
| end
| |
| nmonth = os.date("%B", os.time{year=2000, month=month, day=1} ) -- Month in name form
| |
| if not nmonth then
| |
| return year
| |
| end
| |
| nmonth = p.monthen2no(nmonth)
| |
|
| |
| zday = day
| |
| day = day:match("0*(%d+)")
| |
| if tonumber(day) < 1 or tonumber(day) > 31 then
| |
| return nmonth .. " " .. year
| |
| end
| |
|
| |
| if df == "yes" then
| |
| return day .. ". " .. nmonth .. " " .. year
| |
| elseif df == "iso" then
| |
| return year .. "-" .. zmonth .. "-" .. zday
| |
| else
| |
| return nmonth .. " " .. day .. ", " .. year
| |
| end
| |
|
| |
|
| |
| end
| |
|
| |
|
| |
| --[[--------------------------< wayback >-----------------------
| |
|
| |
| Main function for Template:wayback
| |
|
| |
| ]]
| |
|
| |
| function p.wayback(frame)
| |
|
| |
| local pframe = frame:getParent()
| |
| local args = pframe.args
| |
|
| |
| local tname = "Wayback" -- name of calling template. Change if template rename.
| |
|
| |
| local url = nil -- source url (not archive.org url)
| |
| local title = nil -- title argument
| |
| local df = nil -- df argument
| |
| local comma = nil -- "," for mdy or "" for dmy
| |
| local snapdate = nil -- eg. "20160520000000"
| |
| local snapdatelong = nil -- 14-digit 0-padded version of snapdate if it is truncated
| |
| local fulldate = nil -- eg. "May 20, 2016"
| |
| local currdate = nil -- today's date
| |
| local urlhead = "https://web.archive.org/web/"
| |
| local tail = nil
| |
| local nolink = nil
| |
|
| |
| -- URL argument (positional #1)
| |
|
| |
| url = p.trimArg(args[1]) or p.trimArg(args.url) or p.trimArg(args.site) -- "site" for {{waybackdate}}
| |
| if not url then
| |
| return p.inline_error("url", "Empty.")
| |
| end
| |
| local safe = url
| |
| local l, count = string.gsub(safe, "archive.org/?w?e?b?/[0-9]+/http", "") -- Count number of "archive.org"
| |
| if count > 0 then
| |
| return p.inline_error("url", "Should be the original URL not an archive.org URL.")
| |
| end
| |
| local l, count = string.gsub(safe, "archive.org/?w?e?b?/http", "") -- Count number of "archive.org"
| |
| if count > 0 then
| |
| return p.inline_error("url", "Should be the original URL not an archive.org URL.")
| |
| end
| |
|
| |
| -- Title argument (positional #2)
| |
|
| |
| title = p.trimArg(args[2]) or p.trimArg(args.title)
| |
|
| |
| -- Date argument (positional #3)
| |
|
| |
| snapdate = p.trimArg(args[3]) or p.trimArg(args.date)
| |
| if not snapdate or snapdate == "*" then
| |
| snapdate = "*"
| |
| else
| |
| local safe = snapdate
| |
| local starcount = 0
| |
| snapdate = string.gsub(safe, "[a-z][a-z]_[0-9]?$", "") -- Remove any trailing "re_" from date
| |
| safe = snapdate
| |
| snapdate = string.gsub(safe, "[-]", "") -- Remove dashes from date eg. 2015-01-01
| |
| safe = snapdate
| |
| snapdate, starcount = string.gsub(safe, "[*]$", "") -- Remove trailing "*" and re-add below after processing
| |
| if not tonumber(snapdate) then
| |
| return p.inline_error("date", "Should be 14-digit snapshot ID in form YYYYMMDDhhmmss (error code 1)")
| |
| end
| |
| local dlen = string.len(snapdate)
| |
| if dlen < 4 then
| |
| return p.inline_error("date", "Should be 14-digit snapshot ID in form YYYYMMDDhhmmss (error code 2)")
| |
| end
| |
| if dlen < 14 then
| |
| snapdatelong = snapdate .. string.rep("0", 14 - dlen)
| |
| else
| |
| snapdatelong = snapdate
| |
| end
| |
| local year = string.sub(snapdatelong, 1, 4)
| |
| local month = string.sub(snapdatelong, 5, 6)
| |
| local day = string.sub(snapdatelong, 7, 8)
| |
| if not tonumber(year) or not tonumber(month) or not tonumber(day) then
| |
| return p.inline_error("date", "Should be 14-digit snapshot ID in form YYYYMMDDhhmmss (error code 3)")
| |
| end
| |
| if tonumber(month) > 12 or tonumber(day) > 31 or tonumber(month) < 1 then
| |
| return p.inline_error("date", "Date has invalid day or month. (error code 4)")
| |
| end
| |
| currdate = os.date("%Y")
| |
| if tonumber(year) > tonumber(currdate) or tonumber(year) < 1900 then
| |
| return p.inline_error("date", "Date has invalid year. (error code 5)")
| |
| end
| |
|
| |
| if starcount == 1 then
| |
| snapdate = snapdate .. "*"
| |
| end
| |
|
| |
| df = isdf( p.trimArg(args.df) )
| |
| if df == "yes" then
| |
| comma = ""
| |
| else
| |
| comma = ","
| |
| end
| |
|
| |
| fulldate = p.makedate(year, month, day, df)
| |
|
| |
| if not fulldate then
| |
| return p.inline_error("date", "(error code 6)")
| |
| end
| |
|
| |
| end
| |
| -- Nolink argument
| |
|
| |
| nolink = p.trimArg2(args.nolink)
| |
| if not nolink then
| |
| tail = " hos [[Wayback Machine]]"
| |
| else
| |
| tail = " hos Wayback Machine"
| |
| end
| |
| -- Render
| |
|
| |
| if not title and not fulldate then -- No title. No date
| |
| return "[" .. urlhead .. snapdate .. "/" .. url .. " Arkivkopi]" .. tail .. "."
| |
| elseif not title and fulldate then -- No title. Date.
| |
| return "[" .. urlhead .. snapdate .. "/" .. url .. " Arkivert] " .. fulldate .. comma .. tail .. "."
| |
| elseif title and not fulldate then -- Title. No date.
| |
| return "[" .. urlhead .. snapdate .. "/" .. url .. " " .. title .. "]" .. tail .. "."
| |
| elseif title and fulldate then -- Title. Date.
| |
| return "[" .. urlhead .. snapdate .. "/" .. url .. " " .. title .. "]" .. tail .. " (''arkivert " .. fulldate .. "'')."
| |
| end
| |
|
| |
| error("Error in [[:Template:"..tname.."]]: Unknown problem. Please report on template talk page (code 7)")
| |
|
| |
| end
| |
|
| |
| return p
| |