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

Forma: Interprogetto

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

Modul Lua pentru a îndeplini funcțiile {{ Interproject }}.

Are o subpagină de configurare: Modul: Interproiect / Configurare .


 - Modul pentru implementarea funcțiilor șablon: Interproiect
require ( „Modul: fără globali” )
local p = {} - pentru exportul funcțiilor modulului

local cfg = {}
local root = mw . html . create ( '' ) - rădăcină de marcare html
local debug = {} - pentru depanare
categorii locale = {} - categorii de erori de adăugat
errors_msg locală = {} - mesaje de eroare pentru a adăuga

- să nu utilizați numere „magice” în cod
local category_namespace_number = 14

- ================================================== ==================================================== =======
- Returnează șirul dacă este definit și diferit de un șir gol, altfel nul
- ================================================== ==================================================== =======
funcția locală este_definită ( e )
dacă s și s ~ = " atunci
retur s
altceva
întoarceți zero
Sfârșit
Sfârșit

- ================================================== ==================================================== =======
- Adăugați un spațiu în șir dacă nu se termină cu „'” (apostrof)
- ================================================== ==================================================== =======
funcție locală add_space ( s )
dacă nu este_definit ( e ) atunci
intoarce ''
elseif mw . ustring . sub ( s , - 1 ) == "'" atunci
retur s
altceva
întoarce s .. "
Sfârșit
Sfârșit

- ================================================== ==================================================== =======
- Adaugă categoria "categorie" la lista categoriilor de adăugat la intrare
- ================================================== ==================================================== =======
funcție locală add_category ( categorie )
dacă categoria atunci
categories [ categorie ] = adevărat
Sfârșit
Sfârșit

- ================================================== ==================================================== =======
- Adaugă mesajul de eroare „error_msg” la lista de mesaje de eroare de afișat.
- Dacă este specificată o categorie de eroare, aceasta o adaugă la categoriile în care se introduce elementul,
- în caz contrar, introduce categoria de erori standard
- ================================================== ==================================================== =======
funcție locală add_error ( error_msg , categorie )
dacă error_msg atunci
errors_msg [ # errors_msg + 1 ] = error_msg
dacă categoria atunci
add_category ( categorie )
altceva
add_category ( 'Erori de compilare a șablonului de proiect ' )
Sfârșit
Sfârșit
Sfârșit

- ================================================== ==================================================== =======
- Returnează un link implicit, având numele unui proiect, nul în caz de erori
- ================================================== ==================================================== =======
funcție locală get_default_connection ( key_project , fullpagename )
dacă cfg . parametrii [ cheie_proiect ] atunci
dacă cfg . parametrii [ project_key ] [ ' link_ does_exist ' ] atunci
add_error ( cfg . parametri [ project_key ] [ ' link_not_exist ' ])
întoarceți zero
elseif cfg . parametri [ key_project ]. apoi collegamento_default_minuscolo
întoarce-te mw . ustring . gsub ( fullpagename , '^% u' , string.lower )
altceva
returnează fullpagename
Sfârșit
altceva
întoarceți zero
Sfârșit
Sfârșit

- ================================================== ==================================================== =======
- Sortează un tabel în funcție de tasta „ordine” a elementelor tabelului
- ================================================== ==================================================== =======
funcție locală sort_by_order ( t1 , t2 )
dacă t1 . comanda < t2 . comanda sau t1 . comanda == t2 . ordinea și t1 . limbaj < t2 . apoi limba
întoarce-te adevărat
Sfârșit
Sfârșit

- ================================================== ==================================================== =======
- Clasa pentru a gestiona colectarea informațiilor din Wikidata
- ================================================== ==================================================== =======
local Wikidata_entity = {}

funcție Wikidata_entity : nou ( ignore_wikidata )
- Încărcați date din Wikidata dacă există
auto local = {}
dacă nu ignore_wikidata atunci
sinele . entitate = mw. wikibase . getEntityObject ()
Sfârșit
setmetatable ( self , { __index = Wikidata_entity ,
__tostring = function ( t ) return self : __tostring () end })
sinele . link-uri = {}
sinele . insignă = {}
sinele . from_property_category = {}
sinele . article_link = {}
sinele . limba = {}
dacă eul. entitate atunci
sinele . eticheta = self . entitate : getLabel ( 'it' )
- Setați cursivele dacă pagina de pe Wikidata are proprietatea P31 ("Istance of", [[wikidata: Property: P31]])
- cu o valoare corespunzătoare unei lucrări, definită în cfg.check_opera
sinele . italice = self : hasPropertyValue ( 'P31' , cfg . check_opera )
- Luați în considerare dezambiguizarea dacă pagina de pe Wikidata are proprietatea P31 ("Istance of", [[wikidata: Property: P31]])
- cu valoarea 4167410 ("Pagina de dezambiguizare Wikimedia", [[wikidata: Q4167410]])
sinele . dezambiguizare = self : hasPropertyValue ( 'P31' , '4167410' )
- Verificați dacă intrarea este legată de o categorie
sinele . is_category = self : hasPropertyValue ( 'P31' , '4167836' )
self : load Links ()
Sfârșit
întoarcere de sine
Sfârșit

funcție Wikidata_entity : getClaim ( property_id )
dacă eul. entitate . pretenții și
sinele . entitate . revendicări [ property_id ] și
sinele . entitate . revendicări [ property_id ] [ 1 ]. mainsnak . valoare de date și
sinele . entitate . revendicări [ property_id ] [ 1 ]. mainsnak . valoare de date . tastați == „șir” atunci
întoarce-te . entitate . revendicări [ property_id ] [ 1 ]. mainsnak . valoare de date . valoare
altceva
întoarceți zero
Sfârșit
Sfârșit

Funcția Wikidata_entity: getInterwiki (proiect, property_language)
local interwiki = { project }
dacă proprietate_limba și auto . entitate . pretenții și sine . entitate . pretinde [ limba_proprietate ] atunci
proiect = proiect : sub ( 3 )
pentru _, în revendicarea ipairs (auto. entitate. revendicări [property_language]) fac
dacă pretinde . mainsnak . valoare de date . tastați == 'wikibase-entityid' atunci
local entityId = 'Q' .. revendicare . mainsnak . valoare de date . valoare [ 'numeric-id' ]
dacă entityId ~ = 'Q652' atunci
revendicări locale = mw . wikibase . getBestStatements ( entityId , 'P424' )
dacă revendicările [ 1 ] și revendicările [ 1 ]. mainsnak . datavalue atunci
local language_code = revendicări [ 1 ]. mainsnak . valoare de date . valoare
dacă language_code atunci
dacă proiect == 'sursă wikis' și language_code == 'grc' atunci
language_code = 'el'
Sfârșit
table.insert ( interwiki , language_code .. proiect )
sinele . language [ language_code .. project ] = language_code
Sfârșit
Sfârșit
Sfârșit
Sfârșit
Sfârșit
Sfârșit
returnează interwiki
Sfârșit

- ================================================== ==================================================== =======
- Încărcați linkuri și ecusoane din Wikidata verificând proiectele enumerate în cfg.automatic_link
- ================================================== ==================================================== =======
funcție Wikidata_entity : loadLinks ()
pentru key_project , proiectați în perechi ( cfg . link automat ) faceți
- Încărcați legăturile unui proiect numai dacă nu este dezambiguizare sau tipul de proiect activat în dezambiguizare
dacă nu de sine . dezambiguizare sau cfg . parametri [ key_project ]. enable_in_disambiguation atunci
pentru i , interwiki în ipairs ( self : getInterwiki ( project . interwiki , project . property_language )) do
sitelink local = self . entitate : getSitelink ( interwiki )
- Acordați întotdeauna prioritate sitelinkului dacă este o categorie
dacă sitelink și mw . ustring . găsiți ( sitelink , '^ Category:' ) atunci
- „fals” dezactivează consultarea proprietății
sinele . from_property_category [ project_key ] = false
Sfârșit
revendicare locală
dacă proiect . property_category și self . from_property_category [ project_key ] ~ = false atunci
claim = self : getClaim ( project . property_category )
dacă pretinde atunci
sinele . links [ key_progetto ] = 'Categorie:' .. revendicare
sinele . from_property_category [ project_key ] = true
Sfârșit
Sfârșit
dacă sitelink atunci
dacă eul. from_property_category [ project_key ] atunci
sinele . article_link [ key_progetto ] = sitelink
elseif i > 1 atunci
limba locala = self . limba [ interwiki ]
key_project = string.format ( '% s_% s' , key_project , language )
sinele . language [ key_progetto ] = limba
sinele . links [ key_project ] = string.format ( '% s:% s' , limba , sitelink )
altceva
sinele . links [ key_progetto ] = sitelink
Sfârșit
dacă i == 1 și eu . entitate . sitelinkuri [ interwiki ]. insigne atunci
local badge_class = {}
local badge_title = {}
pentru _ , badge_quality in ipairs ( self . entity . sitelinks [ interwiki ]. badges ) do
dacă cfg . insignele [ badge_quality ] atunci
badge_class [ # badge_class + 1 ] = cfg . insigne [ badge_quality ]. clasă
badge_title [ # badge_title + 1 ] = cfg . insigne [ badge_quality ]. titlu
Sfârșit
Sfârșit
sinele . insignă [ key_progetto ] = {}
sinele . insignă [ key_progetto ]. class = table.concat ( badge_class , '' )
sinele . insignă [ key_progetto ]. title = table.concat ( badge_title , ',' )
Sfârșit
elseif nu de sine. este_categorie și proiect . property_gallery și nu self . from_property_category [ project_key ] atunci
claim = self : getClaim ( project . property_gallery )
sinele . links [ key_progetto ] = revendicare
Sfârșit
Sfârșit
Sfârșit
Sfârșit
Sfârșit

- ================================================== ==================================================== =======
- Verifică dacă o anumită proprietate are una dintre valorile specificate în lista „valori”.
- Adaptat de la „hasPropertyValue” pe [[wikiquote: it: Module: Interprogetto]] la rândul său
- adaptat din „instanceof (arg)” pe [[wikisource: it: Module: Author]]
- ================================================== ==================================================== =======
funcție Wikidata_entity : hasPropertyValue ( propertyId , valori )
dacă eul. entitate . pretenții și sine . entitate . pretinde [ propertyId ] atunci
pentru _ , revendicare în ipairs ( auto . entitate . revendicări [ propertyId ]) do
dacă pretinde . mainsnak . valoare de date și revendicare . mainsnak . valoare de date . valoare atunci
local datavalue = revendicare . mainsnak . valoare de date
dacă valoarea datelor . tastați == 'wikibase-entityid' și
valoare de date . value [ 'entity-type' ] == 'element' și
(Tastați (valori) == 'tabel' și valorile [tostring (datavalue. Value [ 'numeric-id'])]) sau
valori == tostring (datavalue. value [ 'numeric-id']) apoi
întoarce-te adevărat
Sfârșit
Sfârșit
Sfârșit
Sfârșit
returnează fals
Sfârșit
- ================================================== ==================================================== =======
- Definiția finală a clasei Wikidata_entity
- ================================================== ==================================================== =======

- ================================================== ==================================================== =======
- Clasa pentru gestionarea conexiunilor interproiect
- ================================================== ==================================================== =======
Link local = {}

funcție Link : nou ( key_project , args , entity , default )
- Creează un link către un proiect, primește numele proiectului, argumente de utilizat pentru a determina
- valorile diferiților parametri ai conexiunii. Se bazează pe tabelul extern cfg.parameters pentru i
- valorile implicite ale proiectului și tabelul implicit global pentru valorile implicite generale

auto local = {}
setmetatable ( self , { __index = Link ,
__tostring = function ( t ) return self : __tostring () end })
local project_default = cfg . parametri [ project_key : match ( '^ [^ _] +' )]
dacă project_default == zero atunci
- Proiectul nu este recunoscut
întoarceți zero
Sfârșit
sinele . link = args [ key_project ]
dacă nu este_definit ( auto . link ) atunci
- Conexiunea nu este definită corect
întoarceți zero
altceva
sinele . project_default = proiect_default
sinele . order = project_default . Ordin
sinele . badge_leftbar = {}
sinele . badge_leftbar . class = ( entity . badge [ project_key ] și entity . badge [ project_key ]. class ) sau ''
sinele . badge_leftbar . title = ( entity . badge [ project_key ] și entity . badge [ project_key ]. title ) sau ''
sinele . label = is_defined (args [key_progetto .. '_etichetta']) or (default_progetto. etichetta_lower și default. etichetta_lower) sau default. eticheta
- procesați obiectul pentru texte complete pe wikisource atunci când linkul este preluat din wikidata și parametrul text_preposition este completat
local object_salias = project_key == 's' și args . text_preposition și nu args . orig_s și nu args . s_prepunere și cfg . parametri [ 'text' ]. obiect
sinele . object = args [ key_project .. '_object' ] sau alias_s_object sau implicit . obiect sau proiect_default . obiect
dacă implicit . frase_unificata sau default_progetto. prepoziție atunci
- consultați parametrul text_preposition dacă linkul către wikisource nu este manual
local alias_s_preposition = key_project == 's' și nu args . orig_s și args . text_prepozitie
sinele . prepoziție = args [ key_project .. '_preposition' ] sau alias_s_preposition sau implicit . prepoziție sau proiect_default . prepoziţie
altceva
sinele . prepoziție = "
Sfârșit
dacă implicit . unified_phrase atunci
sinele . first_text = "
sinele . text_after = "
altceva
sinele . testo_prima = default_progetto. text_înainte
sinele . testo_dopo = default_progetto. text_după
Sfârșit
dacă project_key == 'știri' și is_defined (args. date) , apoi
sinele . text_after = '<small>' .. args . data .. „</small>”
Sfârșit
limba locală = project_key == 's_el' și 'limba greacă' sau
entitate . language [ key_project ] and require ( „Modul: Limbi” ). get_voce ( entitate . limbă [ cheie_proiect ]) sau
args [ project_key .. '_language' ] și 'language' .. args [ project_key .. '_language' ]
dacă proiect_implicit . limba și apoi limba
sinele . language = 'in' .. language
altceva
sinele . limba = "
Sfârșit
întoarcere de sine
Sfârșit
Sfârșit

funcție Link : Link ()
local project_default = auto . project_default
dacă proiect_implicit . link == „Link” atunci
return self : Link_text ()
elseif default_project . link == 'LinkWithLanguage' atunci
return self : Link_language ()
elseif default_project . link == „LinkRecipes” atunci
întoarcere de sine: Link_ricette ()
elseif default_project . link == 'LinkIncubator' atunci
întoarcere de sine: Link_incubator ()
Sfârșit
add_error ( 'Eroare internă a modulului de proiectare ' )
intoarce ''
Sfârșit

funcție Link : Link_lb ()
local project_default = auto . project_default
dacă proiect_implicit . link == „Link” atunci
întoarcere de sine: Link_text_lb ()
elseif default_project . link == 'LinkWithLanguage' atunci
întoarcere de sine: Link_language_lb ()
elseif default_project . link == „LinkRecipes” atunci
întoarcere de sine: Link_text_lb ()
elseif default_project . link == 'LinkIncubator' atunci
întoarcere de sine: Link_incubator_lb ()
Sfârșit
add_error ( 'Eroare internă a modulului de proiectare ' )
intoarce ''
Sfârșit

funcție Link : Link_text ()
local project_default = auto . project_default
returnează "* [[Fișier:" , project_default . pictogramă , "| link =" , project_default . prefix , "|" , proiect_default . icon_size , "| Colaborați la" ,
project_default . project_name , "]] [[" , project_default . prefix , "|" , proiect_default . nume_proiect , "]] conține" ,
sinele . obiect , sine . limbaj , "" , add_space ( self . prepoziție ), self . first_text , "'' '[[" , project_default . prefix ,
sinele . link , "|" , sine . etichetă , "]] '' '" , auto . text_după
Sfârșit

funcție Link : Link_text_lb ()
local project_default = auto . project_default
returnează "[[" , project_default . prefix , sine . link , "|" , proiect_default . nome_leftbar sau default_progetto. nume_proiect , "]]"
Sfârșit

funcție Link : Link_ricette ()
local project_default = auto . project_default
returnează "* [[Fișier:" , project_default . pictogramă , "| link =" , project_default . prefix , "|" , proiect_default . icon_size ,
"| Colaborează la" , project_default . nume_proiect , "]] '' [[b: Cookbook | Cookbook]] '' din [[b: | Wikibooks]] conține '' '[[" ,
project_default . prefix , sine . link , "| rețete]] '' 'legat de acest subiect"
Sfârșit

funcție Link : Link_language ()
local project_default = auto . project_default
local main_page_link = tostring (mw. uri. fullUrl (default_progetto. prefix, {uselang = 'en'})))
returnează "* [[Fișier:" , project_default . pictogramă , "| link =" , main_page_link , "|" , proiect_default . icon_size , "| Colaborați la" ,
project_default . project_name , "]] <span class = \" plainlinks \ " > [" , main_page_link , "" , project_default . nume_proiect ,
"] </span> conține" , sine . obiect , "" , add_space ( self . prepoziție ), self . text_înainte ,
"'' '<span class = \" plainlinks \ " > [" , tostring ( mw . uri . fullUrl ( default_project . prefix .. self . link , { uselang = ' it ' }))),
„” , sine . etichetă , "] </span> '' '" , auto . text_după
Sfârșit

funcție Link : Link_language_lb ()
local project_default = auto . project_default
returnează "<span class = \" plainlinks \ " title = \" " , default_project . prefix , self . link , " \ " > [" ,
tostring ( mw . uri . fullUrl ( default_project . prefix .. self . connection , { uselang = 'it' }))), "" ,
project_default . nome_leftbar sau default_progetto. nume_proiect , "] </span>"
Sfârșit

funcție Link : Link_incubator ()
local project_default = auto . project_default
obiect local = sine . obiect
dacă nu cfg . prefix_incubator [ obiect ] atunci
obiect = proiect_default . obiect
Sfârșit
link local = tostring ( mw . uri . fullUrl ( table.concat ({ 'incubator:' , cfg . prefix_incubator [ object ],
'/' , sine . link }), { uselang = 'it' })))
local main_page_incubator = tostring (mw. uri. fullUrl ( 'incubator: Incubator: Main Page / en', {uselang = 'en'}))
local main_page_progetto = "
if object == 'wikipedia' atunci
main_page_progetto = '[[Wikipedia]]'
altceva
main_page_progetto = table.concat ({ '[[' , object , ': it: |' , object : gsub ( '^% l' , string.upper ), ']]' })
Sfârșit
returnează "* [[Fișier:" , project_default . pictogramă , "| link =" , main_page_incubator , "|" , proiect_default . icon_size ,
"| Colaborați la Incubator]] <span class = \" plainlinks \ " > [" , main_page_incubator , "Incubator] </span> conține un test pe" ,
main_page_project , auto . limba , "" , add_space ( self . prepoziție ), "'' '<span class = \" plainlinks \ " > [" , link , "" , self . etichetă , "] </span> '' '"
Sfârșit

funcție Link : Link_incubator_lb ()
local project_default = cfg . parametrii [ auto . key_progetto ]
obiect local = sine . obiect
dacă nu cfg . prefix_incubator [ obiect ] atunci
obiect = proiect_default . obiect
Sfârșit
link local = tostring ( mw . uri . fullUrl ( table.concat ({ 'incubator:' , cfg . prefix_incubator [ object ],
'/' , sine . link }), { uselang = 'it' })))
întoarce-te mw . mesaj . newRawMessage ( "<span class = \" plainlinks \ " title = \" $ 1 \ " > [$ 2 Incubator] </span>" , { self . label , link }): plain ()
Sfârșit
- ================================================== ==================================================== =======
- Definiția finală a clasei Link
- ================================================== ==================================================== =======

- ================================================== ==================================================== =======
- Scanează tabelul de proiecte și produce codul html pentru lista de linkuri din bara din stânga
- Setați eticheta div id = "interProject" (consultați [[MediaWiki: InterProject.js]] inclus de [[Mediawiki: Common.js]])
- ================================================== ==================================================== =======
funcție locală RenderLeftBar ( proiecte )

local leftbar = mw . html . create ( 'ul' ): attr ( 'title' , 'Link-uri către alte proiecte Wikimedia' )
pentru _ , proiect în ipairs ( proiecte ) do
bara stângă : newline ()
leftbar : wikitext ( '<li class = \ " ' , project . badge_leftbar . class , ' \" title = \ " ' , project . badge_leftbar . title , ' \" >' )
stânga : wikitext ( proiect : Link_lb ())
dacă proiect . project_default . leftbar_name atunci
stânga : wikitext ( '<br /> (' , project . project_default . project_name , ')' )
Sfârșit
bara stângă : wikitext ( '</li>' )
Sfârșit
root : tag ( 'div' )
: attr ( 'id' , 'interProject' )
: addClass ( „atingeți culorile” )
: cssText ( 'display: none; clear: both; margin-top: 2em' )
: etichetă ( „p” )
: attr ( 'id' , 'sisterProjects' )
: cssText ( 'background-color: #efefef; font-weight: bold; margin: 0' )
: tag ( „span” )
: wikitext ( „Alte proiecte” )
: Gata ()
: Gata ()
: nod ( bara stângă )
Sfârșit

- ================================================== ==================================================== =======
- Scanează tabelul de proiecte și produce codul html pentru lista cu marcatori de link-uri interproiect
- ================================================== ==================================================== =======
funcție locală RenderLinksInText ( proiecte )
pentru _ , proiect în ipairs ( proiecte ) do
rădăcină : newline ()
root : wikitext ( proiect : Link ())
Sfârșit
Sfârșit

- ================================================== ==================================================== =======
- Comparați legăturile manuale cu cele automate și generați categorii de clasificare în cazuri de:
- - Prezența linkului manual și absența linkului pe wikidata
- - Diferența dintre linkul manual și linkul pe wikidata
- - Diferența dintre linkul manual către categorie și categorie pe wikidata
- - Prezența linkului manual către categorie și categorie pe wikidta
- ================================================== ==================================================== =======
funcție locală check_with_wikidata ( key_project , entity , link )
if link == nil then return end - dacă nu există niciun link manual, acesta revine imediat
local entity_link = entitate . linkuri [ key_progetto ]
- asigurați-vă că linkul manual începe cu un „C” majuscul dacă este o categorie
local collegamento_normalizzato = mw. ustring . gsub ( link , '^ category:' , 'Category:' )
local collegamento_is_category = mw. ustring . găsi ( link_ normalizat , '^ Categorie:' )
- Verificați dacă linkul manual este o categorie, dacă tipul de proiect are o proprietate separată
- pentru categorii și dacă consultarea acesteia nu a fost dezactivată
dacă collegamento_is_category și cfg. automatic_link [ key_project ]. property_category și entitate . from_property_category [ project_key ] ~ = false atunci
- dacă există un link pe wikidata din proprietate pentru categorie, comparați-l cu cel manual
dacă entitate . from_property_category [ project_key ] atunci
dacă entity_collegamento ~ = collegamento_normalizzato atunci
add_category ( cfg . automatic_link [ project_key ]. category_wikidata_category_diff )
Sfârșit
- dacă nu există un link manual pe wikidata, marcați-l ca absent
altceva
add_category ( cfg . automatic_link [ project_key ]. category_wikidata_category_missing )
Sfârșit
altceva
link_articol local
- recuperează linkul automat către articol (poate fi în entity.article_link [key_progetto] sau
- în entity.collegamento [key_progetto] în funcție de sitelink și proprietate pentru categorii)
dacă entitate . from_property_category [ project_key ] atunci
link_articol = entitate . article_link [key_progetto]
altceva
article_link = entity_link
Sfârșit
- Dacă a recuperat o valoare pentru articolul_link, o compară cu cea normalizată
- altfel adăugați urmărirea lipsei link-ului în wikidata
dacă articol_link atunci
dacă article_link ~ = collegamento_normalizzato atunci
add_category ( cfg . automatic_link [ project_key ]. category_wikidata_diff )
Sfârșit
altceva
add_category ( cfg . automatic_link [ project_key ]. category_wikidata_missing )
Sfârșit
Sfârșit
Sfârșit

- ================================================== ==================================================== =======
- Funcția principală numită de șablonul Interprogetto
- ================================================== ==================================================== =======
funcția p . interproiect ( cadru )


- dacă este apelat dintr-un sandbox, acesta încarcă configurația sandbox
if nil ~ = string.find ( frame : getTitle (), 'sandbox' , 1 , true ) atunci   
cfg = mw . loadData ( „Modul: Interproiect / Configurare / sandbox” )	   
altceva																
cfg = mw . loadData ( „Modul: Interproiect / Configurare” )
Sfârșit
origArg-uri locale
- ================================================== ==================================================== ===
- Dacă sunteți apelat prin #invoke, utilizați argumentele transmise șablonului de invocare.
- În caz contrar, în scopuri de testare, presupuneți că argumentele sunt transmise direct
- ================================================== ==================================================== ===
if frame == mw . getCurrentFrame () atunci
origArgs = cadru : getParent (). argumente
altceva
origArgs = cadru
Sfârșit
- Tabel cu parametrii impliciți evaluați
implicit local = {}
- ================================================== ==================================================== ===
- Încărcați numele paginii curente
- ================================================== ==================================================== ===
local current_page = mw . titlu . getCurrentTitle ()
local current_namespace = current_page . spațiu de nume
local current_pagename = current_page . text
- Pentru spațiile de nume utilizați numele canonic (engleză) pentru a nu avea diferențe între proiecte:
- exemplu: Utilizator / Utilizator, Categorie / Categorie, dar și Wikiquote / Wikipedia (Proiect) etc.
dacă current_namespace ~ = 0 atunci
implicit . current_fullpagename = mw . site . namespaces [ current_namespace ]. canonicalName .. ':' .. current_pagename
altceva
implicit . current_fullpagename = current_pagename
Sfârșit
- ================================================== ==================================================== ===
- Încărcați date din Wikidata în obiectul „entitate”
- ================================================== ==================================================== ===
local ignore_wikidata = false
local nowikidata = origArgs . nowikidata și origArgs . nowikidata : lower ()
dacă nowikidata == 's' sau nowikidata == 'da' sau nowikidata == 'da' atunci
ignore_wikidata = true
Sfârșit
entitate locală = Wikidata_entity : nou ( ignore_wikidata )
- ================================================== ==================================================== ===
- Calculați eticheta implicită pentru linkuri, în ordinea priorității:
- 1) Dacă eticheta în italiană este definită pe Wikidata, utilizați acest lucru (eliminând orice
- „Categorie:” în fața articolului)
- 2) În caz contrar, utilizați numele paginii curente, eliminând orice dezambiguizare la sfârșitul intrării,
- și definește lower_label ca numele intrării cu inițială mică.
- Dacă intrarea este raportată ca o lucrare pe Wikidata, atunci eticheta este în italice (fără inițială mică)
- ================================================== ==================================================== ===
if is_defined ( origArgs . label ) atunci
implicit . etichetă = origArgs . eticheta
altceva
dacă entitate . apoi etichetați
- Ștergeți orice „Categorie:” din fața numelui
implicit . eticheta = mw . ustring . gsub (entitate. etichetă, '^ Categorie:', '')
altceva
- Elimină orice dezambiguizare din nume
implicit . eticheta = mw . ustring . gsub ( current_pagename , '% (. *%) $' , '' )
dacă current_namespace == 0 atunci
implicit . etichetta_lower = mw. ustring . gsub (implicit. etichetă, '^% u', string.lower)
Sfârșit
Sfârșit
dacă entitate . cursiv atunci
implicit . label = '<span style = \ " font-style: italic; \" >' .. implicit . eticheta .. „</span>”
implicit . lower_label = implicit . eticheta
Sfârșit
Sfârșit
- ================================================== ==================================================== ===
- Calculați prepoziția și obiectul implicit, modificându-le dacă spațiul de nume este cel al categoriilor
- ================================================== ==================================================== ===
dacă current_namespace ~ = category_namespace_number atunci
implicit . prepoziție = origArgs . prepoziţie
implicit . obiect = origArgs . obiect
altceva
implicit . prepoziție = origArgs . prepoziție sau „pe subiect”
implicit . obiect = origArgs . obiect sau „o categorie”
implicit . unified_phrase = adevărat
Sfârșit
- ================================================== ==================================================== ===
- Copiați parametrii într-un nou tabel, creând perechi proiect / link pentru parametrii de poziție
- și verificarea parametrilor duplicat și a numelor de proiect necunoscute
- ================================================== ==================================================== ===
local newArgs = {}
local nolink = false
newArgs . orig_s = origArgs . s
pentru cheie , valoarea în perechi ( origArgs ) do
dacă tonumber ( cheie ) atunci
local project_key = mw . text . decupare ( valoare )
dacă cfg . parametrii [ cheie_proiect ] atunci
dacă origArgs [ project_key ] atunci
add_error ( 'Link către \ " ' .. valoare .. ' \" introdus atât ca parametru pozițional, cât și ca parametru nominal' )
altceva
dacă project_key == 's', atunci newArgs . orig_s = key_project final
newArgs [ key_progetto ] = get_default_connection ( key_progetto , implicit . current_fullpagename )
Sfârșit
altceva
if key == 1 și project_key == 'nolink' atunci
nolink = adevărat
altceva
add_error ( 'Parametrul \ " ' .. valoare .. ' \" nu corespunde niciunui proiect recunoscut de șablon' )
Sfârșit
Sfârșit
altceva
newArgs [ cheie ] = valoare
Sfârșit
Sfârșit
- ================================================== ==================================================== ===
- Verificați linkurile introduse manual, integrându-le, dacă este necesar, cu cele prezente în Wikidata.
- Omiteți acest pas dacă există un link către „știri”, deoarece în acest caz trebuie să fie unic și, prin urmare
- nu trebuie să adăugați linkuri de la Wikidata. De asemenea, în caz de „dezambiguizare”, omiteți proiectele nu
- activat în dezambiguizare care în orice caz nu trebuie adăugat
- ================================================== ==================================================== ===
dacă nu newArgs . vești atunci
- ================================================== ===================================================
- Verificați linkul compilat manual și cel încărcat de Wikidata
- ================================================== ===================================================
pentru key_project , legarea în perechi ( newArgs ) face
dacă cfg . parameters [ key_progetto ] and cfg . automatic_link [ key_progetto ] and entity . entity then
if not entity . disambigua or cfg . parameters [ key_progetto ]. abilita_in_disambigua then
check_with_wikidata ( key_progetto , entity , collegamento )
end
end
end
-- ====================================================================================================
-- Aggiunge il collegamento da Wikidata se non è presente quello compilato manualmente o se rinvia a
-- un progetto in lingua non italiana che non è registrato nella configurazione e non va sovrascritto
-- ====================================================================================================
for key_progetto , collegamento in pairs ( entity . collegamenti ) do
if not cfg . automatic_link [ key_progetto ] or not ( newArgs [ key_progetto ] or newArgs [ cfg . automatic_link [ key_progetto ]. alias ]) then
newArgs [ key_progetto ] = collegamento
-- Segnala che il collegamento è stato aggiunto da Wikidata
add_category ( cfg . automatic_link [ key_progetto : match ( '^[^_]+' )]. category_wikidata )
end
end
end
-- ========================================================================================================
-- Sulla base della lista di argomenti ripulita costruisce la lista dei collegamenti da inserire
-- ========================================================================================================
local progetti = {}
local collegamento_found = false
for key_progetto , collegamento in pairs ( newArgs ) do
if cfg . parameters [ key_progetto ] or entity . collegamenti [ key_progetto ] then
-- Salta i collegamenti a Wikidata per le voci nel namespace principale eccetto che per la Pagina principale
if key_progetto ~= 'wikidata' or current_namespace ~= 0 or current_pagename == 'Pagina principale' then
local progetto = Collegamento : new ( key_progetto , newArgs , entity , default )
if progetto then
collegamento_found = true
-- Se è disambigua registra solo i valori per i progetti abilitati in disambigua
if not entity . disambigua or cfg . parameters [ key_progetto ] and cfg . parameters [ key_progetto ]. abilita_in_disambigua then
progetti [ # progetti + 1 ] = progetto
end
end
end
end
end
table.sort ( progetti , sort_by_ordine )
-- ========================================================================================================
-- Genera il codice html
-- ========================================================================================================
if entity . disambigua and # progetti == 0 and collegamento_found then
add_error ( 'Collegamenti non visualizzabili perché la voce è una disambigua su Wikidata' ,
'Errori di compilazione del template Interprogetto - collegamenti in disambigua' )
elseif # progetti == 0 then
--add_error('Template interprogetto vuoto e senza dati da recuperare da Wikidata', 'Errori di compilazione del template Interprogetto - template vuoto')
add_error ( '' , 'Errori di compilazione del template Interprogetto - template vuoto' )
else
local nobarra = origArgs . nobarra and origArgs . nobarra : lower ()
if nobarra ~= 's' and nobarra ~= 'sì' and nobarra ~= 'si' then
RenderLeftBar ( progetti )
end
if not nolink then
RenderLinksInText ( progetti )
end
end
-- =================================================================================================================================
-- Nei namespace ammessi inserisce le categorie di segnalazione di errori/avvisi
-- =================================================================================================================================
if cfg . whitelist_category [ current_namespace ] then
for category , _ in pairs ( categories ) do
root : wikitext ( '[[Categoria:' .. category .. ']]' )
end
end
-- =================================================================================================================================
-- Aggiunge i messaggi di errore
-- =================================================================================================================================
if # errors_msg > 0 then
if # progetti > 0 then
root : wikitext ( ' \n ' )
end
root : wikitext ( '<strong class= \" error \" >' .. table.concat ( errors_msg , '; ' ) .. '</strong>' )
end
return tostring ( root )
end

return p