Modul:Wayback: Forskjell mellom sideversjoner

Fra wikisida.no
Hopp til navigering Hopp til søk
Ingen redigeringsforklaring
m 18 sideversjoner ble importert
 
(15 mellomliggende versjoner av 5 brukere er ikke vist)
Linje 9: Linje 9:


function p.inline_error(arg, msg)
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 .. '[[Kategori:Sidor med wayback-mallfel]]</span>'
   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
end


Linje 37: Linje 37:


Given df argument, return "yes" or "no" confirming what it is
Given df argument, return "yes" or "no" confirming what it is
Default is "no". If df is nil or "", return "no".
Default is "yes". If df is nil or "", return "yes".


  ]]
  ]]
Linje 43: Linje 43:
function isdf(df)
function isdf(df)


   if df == "yes" or df == "Yes" or df == "YES" or df == "y" or df == "Y" or df == "dmy" or df == "DMY" then
   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"
     return "yes"
   elseif df == "iso" or df == "ISO" then
   elseif df == "iso" or df == "ISO" then
     return "iso"
     return "iso"
   end
   end
   return "no"
   return "yes"


end
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 >-----------------------
--[[--------------------------< makedate >-----------------------
Linje 71: Linje 115:
     return year
     return year
   end
   end
   nmonth = os.date("%B", os.time{year=2000, month=month, day=1} )    -- Month in name form      
   nmonth = os.date("%B", os.time{year=2000, month=month, day=1} )    -- Month in name form  
   if not nmonth then
   if not nmonth then
     return year
     return year
   end
   end
  nmonth = p.monthen2no(nmonth)   


   zday = day
   zday = day
Linje 83: Linje 128:


   if df == "yes" then
   if df == "yes" then
     return day .. " " .. nmonth .. " " .. year
     return day .. ". " .. nmonth .. " " .. year
   elseif df == "iso" then
   elseif df == "iso" then
     return year .. "-" .. zmonth .. "-" .. zday
     return year .. "-" .. zmonth .. "-" .. zday
Linje 200: Linje 245:
   nolink = p.trimArg2(args.nolink)
   nolink = p.trimArg2(args.nolink)
   if not nolink then
   if not nolink then
     tail = " hämtat från the [[Wayback Machine]]."
     tail = " hos [[Wayback Machine]]"
   else
   else
     tail = " hämtat från the Wayback Machine."
     tail = " hos Wayback Machine"
   end
   end
                                                           -- Render  
                                                           -- Render  


   if not title and not fulldate then  -- No title. No date
   if not title and not fulldate then  -- No title. No date
     return "[" .. urlhead .. snapdate .. "/" .. url .. " Arkivkopia]" .. tail
     return "[" .. urlhead .. snapdate .. "/" .. url .. " Arkivkopi]" .. tail .. "."
   elseif not title and fulldate then  -- No title. Date.
   elseif not title and fulldate then  -- No title. Date.
     return "[" .. urlhead .. snapdate .. "/" .. url .. " Arkiverad] " .. fulldate .. comma ..  tail .. "."
     return "[" .. urlhead .. snapdate .. "/" .. url .. " Arkivert] " .. fulldate .. comma ..  tail .. "."
   elseif title and not fulldate then  -- Title. No date.
   elseif title and not fulldate then  -- Title. No date.
     return "[" .. urlhead .. snapdate .. "/" .. url .. " " .. title .. "]" .. tail
     return "[" .. urlhead .. snapdate .. "/" .. url .. " " .. title .. "]" .. tail .. "."
   elseif title and fulldate then          -- Title. Date.
   elseif title and fulldate then          -- Title. Date.
     return "[" .. urlhead .. snapdate .. "/" .. url .. " " .. title .. "]" .. tail .. "&#32;(arkiverad " .. fulldate .. ")"
     return "[" .. urlhead .. snapdate .. "/" .. url .. " " .. title .. "]" .. tail .. "&#32;(''arkivert " .. fulldate .. "'')."
   end
   end



Siste sideversjon per 22. apr. 2026 kl. 01:08

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

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