Această pagină este protejată de mișcare
Această pagină este protejată

Forma: Webarchive

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Acest modul implementează funcționalitatea șablonului {{ Webarchive }} și permite altor module Lua să decripteze data unor arhive din URL.

Are o subpagină de configurare: Modul: Webarchive / Configuration .


 - [[----------------------------------
Modul Lua care implementează șablonul {{Webarchive}} și vă permite
decriptați data în adresele URL ale unor arhive și în alte module.
]]

require ( „Modul: fără globali” )
local getArgs = require ( 'Modul: Argumente' ). getArgs
local cfg = mw . loadData ( „Modul: Webarchive / Configuration” )

local p = {}
local track = {} - matrice asociativă pentru a acumula categorii de urmărire
local maxurls = 10 - numărul maxim de adrese URL permise
encoded_date locale

- [[-------------------------- <inlineError> ----------------- - -----
Eroare critica. Formatați complet ieșirea în roșu. Adaugă o categorie de urmărire.
]]
funcție locală inlineError ( arg , msg )
track [ 'Category: Webarchive template compilation errors' ] = 1
return '<span style = "font-size: 100%" class = "error citation-comment"> Eroare compilare șablon webarchive: verificați valoarea <code style = "color: inherit; border: inherit; padding: inherit;" > & # 124; ' .. arg .. '= </code> (' .. msg .. '). </span>'
Sfârșit

- [[-------------------------- <inlineRed> ----------------- - -----
Formatați un fragment de text în roșu, cum ar fi un avertisment pentru a încorpora în rezultatul final.
Adaugă o categorie de urmărire.
]]
funcție locală inlineRed ( msg , trackmsg )
dacă trackmsg == 'avertisment' atunci
track [ 'Category: Erori de compilare a șabloanelor webarchive - Avertismente' ] = 1
elseif trackmsg == „eroare” atunci
track [ 'Category: Webarchive template compilation errors' ] = 1
Sfârșit
return '<span style = "font-size: 100%" class = "error citation-comment">' .. msg .. '</span>'
Sfârșit


- [[-------------------------- <base62> ----------------- - -----
Convertește baza-62 în baza-10
Credite: https://de.wikipedia.org/wiki/Modul:Expr
]]
funcția locală base62 ( valoare )
local r = 1
if value : match ( '^% w + $' ) atunci
local n = # valoare
local k = 1
local c
r = 0
pentru i = n , 1 , - 1 faceți
c = valoare : octet ( i , i )
dacă c > = 48 și c <= 57 atunci
c = c - 48
elseif c > = 65 și c <= 90 atunci
c = c - 55
elseif c > = 97 și c <= 122 atunci
c = c - 61
altfel
r = 1
pauză
Sfârșit
r = r + c * k
k = k * 62
Sfârșit
Sfârșit
întoarce r
Sfârșit

- [[-------------------------- <TableLength> ----------------- - -----
Returnează numărul de elemente dintr-un tabel
]]
tabel de funcții locale Lungime ( t )
număr local = 0
pentru _ în perechi ( t ) do count = count + 1 end
număr de întoarcere
Sfârșit

- [[-------------------------- <formatDate> ----------------- - -----
Verificați formatul unei date (dmy sau iso) și dacă aceasta o recunoaște
îl reformatează în dmy, altfel returnează valoarea așa cum este
]]
format funcție localăDată ( dată )
local y , m , d
local try_year
local split = mw . text . divizat ( data , '-' )
dacă tableLength ( split ) == 3 atunci
try_year = tonumber ( divizat [ 1 ])
dacă try_year și try_year > 1900 și try_year < 2200 atunci - iso
y , m , d = split [ 1 ], cfg . luna_localizată [ tonumber ( split [ 2 ])], split [ 3 ]
Sfârșit
altfel
split = mw . text . divizat ( data , '' )
dacă tableLength ( split ) == 3 atunci
try_year = tonumber ( divizat [ 3 ])
dacă try_year și try_year > 1900 și try_year < 2200 și
( split [ 1 ] == '1º' sau tonumber ( split [ 1 ])) apoi - dmy
d , m , y = împărțit [ 1 ], împărțit [ 2 ], împărțit [ 3 ]
Sfârșit
Sfârșit
Sfârșit
d = numărul de ton ( d ) sau d
dacă d == 1 atunci d = '1º' sfârșit
întoarce m și mw . ustring. format ( '% s% s% s' , d , m , y ) sau dată
Sfârșit

- [[-------------------------- <formatUrlDate> ----------------- - -----
Verificați data preluată automat de pe adresa URL a unei arhive.
Dacă este valid, formatați în dmy, altfel revine la zero.
]]
formatul funcției locale UrlDate ( y , m , d )
local current_year = tonumber ( os.date ( '% Y' ))
y , m , d = tonumber ( y ), tonumber ( m ), tonumber ( d )
dacă nu y sau y ==  sau nu m sau m ==  sau nu d sau d ==  sau d > 31 sau
m < 1 sau m > 12 sau y < 1900 sau y > current_year atunci
întoarceți zero
Sfârșit
m = cfg . luna_localizată [ m ]
dacă d == 1 atunci d = '1º' sfârșit
întoarce-te mw . ustring. format ( '% s% s% s' , d , m , y )
Sfârșit

- [[-------------------------- <decodeWebciteDate> ----------------- - -----
Obțineți data de la o cale URI către Webcite (de exemplu / 67xHmVFWP)
]]
funcție locală decodeWebciteDate ( cale )
local path_elements = mw . text . divizat ( cale , '/' )

- formate URL valide care nu sunt baza62:

- http://www.webcitation.org/query?id=1138911916587475
- http://www.webcitation.org/query?url=http..&date=2012-06-01+21:40:03
- http://www.webcitation.org/1138911916587475
- http://www.webcitation.org/cache/73e53dd1f16cf8c5da298418d2a6e452870cf50e
- http://www.webcitation.org/getfile.php?fileid=1c46e791d68e89e12d0c2532cc3cf629b8bc8c8e

dacă nu path_elements [ 2 ] sau path_elements [ 2 ] == '' atunci
întoarcere
elseif mw . ustring. find ( path_elements [ 2 ], 'interogare' ) sau
mw . ustring. find ( path_elements [ 2 ], 'cache' ) sau
mw . ustring. find ( path_elements [ 2 ], 'getfile' ) sau
tonumber ( path_elements [ 2 ]) atunci
data_codificată = falsă
întoarcere
Sfârșit
local snapdate = os.date ( '% Y% m% d' , string.sub ( string.format ( '% d' , base62 ( path_elements [ 2 ])), 1 , 10 ))
local dt = mw . text . divizat ( snapdate , '' )
fulldate local = formatUrlDate ( dt [ 1 ], dt [ 2 ], dt [ 3 ])
întoarce fulldate
Sfârșit

- [[-------------------------- <snapDateToString> ----------------- - -----
Obțineți data de la o cale URI către Wayback (de exemplu, /web/20160901010101/http://example.com).
De asemenea, gestionează non-cifre precum „re_”, „-” și „*”.
]]
funcție locală decodeWaybackDate ( cale )
local snapdate = string.gsub ( cale , '^ / all /' , '' ) - eliminați secvența principală "/ all /"
snapdate = string.gsub ( snapdate , '^ / w? e? b? /?' , '' ) - eliminați secvența principală "/ web /" sau "/"
local path_elements = mw . text . divizat ( snapdate , '/' )
snapdate = path_elements [ 1 ]
dacă snapdate == '*', apoi reveniți la sfârșit
snapdate = string.gsub ( snapdate , '[az] [az] _ [0-9]? $' , '' )
snapdate = string.gsub ( snapdate , '[-]' , '' )
snapdate = string.gsub ( snapdate , '[*] $' , '' )
fulldat local
dacă tonumber ( snapdate ) și string.len ( snapdate ) > = 8 atunci
local year = string.sub ( snapdate , 1 , 4 )
local month = string.sub ( snapdate , 5 , 6 )
zi locală = string.sub ( snapdate , 7 , 8 )
fulldate = formatUrlDate ( an , lună , zi )
Sfârșit
întoarce fulldate
Sfârșit

- [[-------------------------- <decodeArchiveisDate> ----------------- - -----
Obțineți data din calea URI a unui link extins către Archive.is (de exemplu /2016.08.28-144552/http://example.com).
Mânerele "." și „-” în dată, ceea ce face ca 2016.08.28-144552 să fie egal cu 20160828144552.
]]
funcție locală decodeArchiveisDate ( cale )
local path_elements = mw . text . divizat ( cale , '/' )
local snapdate = path_elements [ 2 ]
dacă nu path_elements [ 2 ] sau path_elements [ 2 ] == '', atunci reveniți la sfârșit
snapdate = string.gsub ( snapdate , '[%.% -]' , '' )
dacă nu tonumber ( snapdate ) atunci encoded_date = false return end - format de link scurt
fulldat local
dacă string.len ( snapdate ) > = 8 atunci
local year = string.sub ( snapdate , 1 , 4 )
local month = string.sub ( snapdate , 5 , 6 )
zi locală = string.sub ( snapdate , 7 , 8 )
fulldate = formatUrlDate ( an , lună , zi )
Sfârșit
întoarce fulldate
Sfârșit

- [[-------------------------- <serviceName> ----------------- - -----
Setați șirul de coadă și ID-ul serviciului după domeniu
extras din mw.uri.new () (de ex. web.archive.org)
]]
Funcția locală NumeServiciu (url_data, nolink, notail)
local tracking = 'Categorie: Șablon Webarchive - linkuri către alte arhive'
local bracketopen , bracketclose = nolink și '' sau '[[' , nolink și '' sau ']]'
data_codificată = nul - resetare
pentru _ , service în ipairs ( cfg . services ) do
if string.gsub ( url_data . host , 'www%.' , '' ) == serviciu . semnatura atunci
url_data . service = service . serviciu sau „alții”
dacă nu notail și service . trapa atunci
url_data . tail = mw . ustring. format ( service . coadă , coadă deschisă , coadă închisă )
elsef nu notail atunci
url_data . coada = service . coadă
Sfârșit
tracking = service . urmărire sau urmărire
data_codificată = serviciu . serviciu și adevărat
pauză
Sfârșit
Sfârșit
dacă url_data . service == zero atunci
tracking = 'Categorie: Șablon Webarchive - linkuri către arhive necunoscute'
url_data . tail = 'su' .. url_data . gazdă .. "" .. inlineRed ( "Adresă URL a serviciului de stocare necunoscut" )
Sfârșit
track [ tracking ] = 1
Sfârșit

- [[-------------------------- <createTracking> ----------------- - -----
Returnează categoriile de urmărire introduse în pista []
]]
funcție locală createTracking ()
- continuă numai în spațiul de nume 0
local current_namespace = mw . titlu . getCurrentTitle (). spațiu de nume
dacă spațiul_numelui curent ~ = 0 atunci reveniți " sfârșit
nisip local = "
dacă tableLength ( track ) > 0 atunci
pentru cheie , _ în perechi ( track ) do
nisip = nisip .. '[[' .. cheie .. ']]'
Sfârșit
Sfârșit
întoarceți nisipul
Sfârșit

- [[-------------------------- <createRendering> ----------------- - -----
Returnează redarea datelor în url_data [] []
]]
funcție locală createRendering ( url_data )
nisip local
local day = url_data [ 1 ]. data și mw . ustring. match ( url_data [ 1 ]. data , '^% d +' )
articol local = ( zi == '8' sau zi == '11' ) și 'l \' ' sau ' il '
dacă nu url_data [ 1 ]. titlu și nu url_data [ 1 ]. data atunci
nisip = mw . ustring. format ( '[% s Arhivat]% s.' , url_data [ 1 ]. url , url_data [ 1 ]. tail )
elseif nu url_data [1]. title și url_data [ 1 ]. data atunci
nisip = mw . ustring. format ( '[% s Arhivat]% s% s% s.' , url_data [ 1 ]. url , articol , url_data [ 1 ]. data , url_data [ 1 ]. tail )
elseif url_data [ 1 ]. titlu și nu url_data [ 1 ]. data atunci
nisip = mw . ustring. format ( '[% s% s]% s.' , url_data [ 1 ]. url , url_data [ 1 ]. title , url_data [ 1 ]. tail )
elseif url_data [ 1 ]. title și url_data [ 1 ]. data atunci
nisip = mw . ustring. format ( '[% s% s]% s & # 32; (arhivat% s% s).' , url_data [ 1 ]. url , url_data [ 1 ]. title , url_data [ 1 ]. tail , article , url_data [ 1 ]. Date )
altfel
întoarceți zero
Sfârșit
if # url_data > 1 atunci - pentru mai multe adrese URL de arhivă
nisip = nisip .. 'Arhive suplimentare:'
archives_output locală = {}
pentru i = 2 , # url_data do
arhive_output [ # arhive_output + 1 ] = mw . ustring. format ( '[% s% s]% s% s' , url_data [ i ]. url , url_data [ i ]. title sau url_data [ i ]. data , url_data [ i ]. title și ( '(' .. url_data [ i ]. data .. ')' ) sau '' , url_data [ i ]. coada sau '' )
Sfârșit
nisip = nisip .. table.concat (archives_output, '') .. ''
Sfârșit
întoarceți nisipul
Sfârșit

- [[---------------------------------------------- - ---------------------
Punct de intrare pentru apel direct de la un modul.
Primește adresa URL a unei arhive și își returnează data dacă o poate decoda.
]]
funcția p. decodeArchiveDate ( url )
local uri = mw . uri . nou ( url )
gazdă locală , cale = uri . gazdă , uri . cale
dacă nu url sau nu gazdă sau cale == ", apoi reveniți la sfârșit
host = string.gsub ( gazdă , 'www%.' , '' )
pentru _ , service în ipairs ( cfg . services ) do
dacă gazdă == serviciu . semnatura atunci
dacă service . service == 'wayback' atunci
returnare decodeWaybackDate ( cale )
altfel dacă serviciul . service == 'webcite' atunci
returnează decodeWebciteDate ( cale )
altfel dacă serviciul . service == 'archiveis' atunci
returnează decodeArchiveisDate ( cale )
Sfârșit
Sfârșit
Sfârșit
întoarcere
Sfârșit

- [[---------------------------------------------- - ---------------------
Funcția de interfață principală pentru implementarea
Șablon: Webarchive
]]
funcția p. arhiva web ( cadru )
- încărcați parametrii args și, dacă sunt nuli, ignorați-i, cu excepția parametrului nolink
argumente locale = getArgs ( cadru , {
valueFunc = funcție ( cheie , valoare )
dacă valoare atunci
if key == 'nolink' atunci
întoarce-te adevărat
altfel
valoare = mw . text . decupare ( valoare )
dacă valoarea ~ = " atunci returnează valoarea sfârșit
Sfârșit
Sfârșit
întoarceți zero
Sfârșit
})
local url_data = {}
local i = 1
în timp ce adevărații
local n = i == 1 și args . url și '' sau i
url local = i == 1 și ( args . url sau args . url1 ) sau args [ 'url' .. i ]

- verificați dacă există erori în parametrul URL
dacă i == 1 și nu url atunci
returnează inlineError ( 'url' , 'goal' ) .. createTracking ()
elsef nu url sau i > maxurls atunci
pauză
elseif mw . ustring. găsiți ( url , 'https: //web.http' ) atunci
track [ 'Category: Webarchive template compilation errors' ] = 1
returnează inlineError ( 'url' .. n , 'https: //web.http' ) .. createTracking ()
elseif url == 'https://web.archive.org/http:/' apoi
track [ 'Category: Webarchive template compilation errors' ] = 1
returnează inlineError ( 'url' .. n , 'URL nevalid' ) .. createTracking ()
Sfârșit
url_data [ i ] = {}
url_data [ i ]. url = url
url_data [ i ]. uri = mw . uri . nou ( url )
url_data [ i ]. gazdă , url_data [ i ]. cale = url_data [ i ]. uri . gazdă , url_data [ i ]. uri . cale
dacă nu url_data [ i ]. gazdă sau url_data [ i ]. cale == " atunci
returnează inlineError ( 'url' .. n , 'URL nevalid' ) .. createTracking ()
Sfârșit
NumeServiciu (url_data [i], args. nolink, i> 1 și adevărat)

- gestionarea datei
local date = i == 1 și ( args . date sau args . date1 sau args . data sau args . data1 ) sau
args [ „dată” .. i ] sau args [ „dată” .. i ]
dacă data atunci
date = formatDate ( data )
local udate = url_data [ i ]. service == ' wayback ' și decodeWaybackDate ( url_data [ i ]. cale ) sau
url_data [ i ]. service == 'webcite' și decodeWebciteDate ( url_data [ i ]. cale ) sau
url_data [ i ]. service == 'archiveis' și decodeArchiveisDate ( url_data [ i ]. cale )
if udate și udate ~ = date then
data = data .. '' .. inlineRed ( 'Data nell \' URL se potrivește: '.. udate,' avertisment ')
elseif nu udate și data_codată == adevărat atunci
data = data .. "" .. inlineRed ( "Data nell \" URL de neînțeles "," eroare ")
Sfârșit
elseif url_data [ i ]. service == 'wayback' atunci
data = decodeWaybackDate ( url_data [ i ]. cale )
elseif url_data [ i ]. service == 'webcite' atunci
data = decodeWebciteDate ( url_data [ i ]. cale )
elseif url_data [ i ]. service == 'archiveis' atunci
data = decodeArchiveisDate ( url_data [ i ]. cale )
altfel
date = inlineRed ( 'Data lipsă' , 'avertisment' )
Sfârșit
dacă nu data atunci
date = data_codificată == false și inlineRed ( „Data lipsă” , „avertisment” ) sau
inlineRed ( 'Data nell \' URL de neînțeles ',' eroare ')
Sfârșit
url_data [ i ]. data = data

- gestionarea titlului
url_data [ i ]. title = i == 1 și ( args . title sau args . title1 sau args . title sau args . title1 ) sau
args [ 'title' .. i ] sau args [ 'title' .. i ]

i = i + 1
Sfârșit
rend locală = createRendering (url_data)
dacă nu se rupe atunci
track [ 'Category: Webarchive template compilation errors' ] = 1
rend = '<span style = "font-size: 100%" class = "error citation-comment"> Erori în [[: Template: Webarchive]]: problemă necunoscută. Vă rugăm să raportați acest lucru în [[Discuții șablon: Webarchive | pagina de discuții]] a șablonului. </span> '
Sfârșit

reveni rend .. createTracking ()
Sfârșit

retur p