Modul:Wayback: Forskjell mellom sideversjoner

Fra wikisida.no
Hopp til navigering Hopp til søk
Manglende punktum i norske datoer
Tømmer siden
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;">&#124;' .. 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 .. "&#32;(''arkivert " .. fulldate .. "'')."
  end
  error("Error in [[:Template:"..tname.."]]: Unknown problem. Please report on template talk page (code 7)")
end
return p

Sideversjonen fra 17. apr. 2019 kl. 11:40

Dokumentasjon for denne modulen kan opprettes på Modul:Wayback/dok