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

Formă: fus orar

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

Modul care implementează șablonul {{ Determinați fusul orar }} (deocamdată utilizat doar de t: diviziune administrativă ).

Are o subpagină de configurare: Modul: Fus orar / Configurare .


 - [[
* Modul care implementează șablonul Fus orar.
]] -

require ( „Formular: fără globali” )

local getArgs = require ( 'Modul: Argumente' ). getArgs
local mWikidata = require ( 'Modul: Wikidata' )

- Configurare
local cfg = mw . loadData ( „Modul: Fus orar / Configurare” )

local p = {}

funcția locală titlu Exista ( nume )
local title = mw . titlu . nou ( nume )
returnează titlul și titlul . există
Sfârșit

funcție locală makeSequence ( tbl )
local ret = {}
pentru articol , _ în perechi ( tbl ) do
table.insert ( ret , item )
Sfârșit
retur ret
Sfârșit

funcție locală compValues ( val1 , val2 )
val1 = val1 : match ( 'UTC (. *)%]%]' ): gsub ( ':' , '.' )
val2 = val2 : match ( 'UTC (. *)%]%]' ): gsub ( ':' , '.' )
return tonumber ( val1 ) < tonumber ( val2 )
Sfârșit

funcția locală FormatList ( valori )
table.sort ( valori , compValues )
returnează string.format ( „<ul> <li>% s </li> </ul>” , text . mw . listToText ( valori , „</li> <li>” , „</li> <li> ' ))
Sfârșit

formatul funcției locale Timezones ( elemente )
elemente locale formatate = {}
pentru _ , item in ipairs ( items ) do
table.insert ( formattedItems , string.format ( '[[% s]]' , mw . wikibase . getSitelink ( item )))
Sfârșit
returnează # formattedItems > 1 și formatList ( formattedItems ) sau formattedItems [ 1 ]
Sfârșit

- pentru compatibilitate inversă cu intrarea Diviziei administrative
format funcție locală UserInput ( valoare )
return titleExists ( 'UTC' .. valoare ) și string.format ( '[[UTC% s]]' , valoare ) sau zero
Sfârșit

verificare funcție locală Timezone ( element )
local ret = cfg . validTimezones [ item ] și item sau zero
	
- dacă nu se află printre Timpurile valide, verificați proprietatea „considerată a fi egală cu (P460)”
dacă nu ret atunci
ret = mWikidata . _getProperty ( { 'P460' , de la = element , formatare = 'brut' , n = 1 } )
dacă ret atunci
ret = cfg . alias [ ret ] sau ret
ret = cfg . validTimezones [ ret ] și ret sau zero
Sfârșit
Sfârșit
	
- în loc de P460 în unele cazuri s-a folosit P421
dacă nu ret atunci
ret = mWikidata . _getProperty ( { 'P421' , from = element , formatare = 'raw' , n = 1 } )
dacă ret atunci
ret = cfg . alias [ ret ] sau ret
ret = cfg . validTimezones [ ret ] și ret sau zero
Sfârșit
Sfârșit

retur ret
Sfârșit

- Dacă revendicările au un calificativ P518 (partea implicată), returnați-le
- a căror valoare este între P131 a elementului, altfel cele fără P518.
filterByP518 funcția locală (revendicari, args)
local inP518 , noP518 = {}, {}
pentru _ , revendicare în ipairs ( revendicări ) do
itemi locali = mWikidata . _formatQualifiers ( revendicare , 'P518' , { formatting = 'raw' }, adevărat )
dacă # elemente > 0 atunci
pentru _ , item in ipairs ( items ) do
dacă mWikidata . _indexOf ({ 'P131' , item , from = args . from }) atunci
table.insert ( inP518 , revendicare )
Sfârșit
Sfârșit
altceva
table.insert ( nrP518 , revendicare )
Sfârșit
Sfârșit
returnează # inP518 > 0 și inP518 sau noP518
Sfârșit

funcție locală getTimezones ( args )
local ret = {}
local country = mWikidata . _getProperty ( { 'P17' , from = args . from , formatare = 'raw' , n = 1 } )
- entități administrative suprimate cu P17 în novalue (în viitor modulul: Wikidata va reveni la zero)
dacă țara == "'' fără valoare ''" atunci
country = zero
Sfârșit

- căutați proprietatea fusului orar (P421)
revendicări locale = mWikidata . _getClaims ( 'P421' , { from = args . from } ) sau {}
- rezultatul intermediar pentru Q142
dacă # pretinde == 0 și ( args . iso3166 == 'FRA' sau țară == 'Q142' ) atunci
returnează { 'Q6655' }
Sfârșit
- dacă căutarea nu este prezentă în elementul obținut din iso3166
dacă # pretinde == 0 și argumentează . iso3166 atunci
revendicări = mWikidata . _getClaims ( 'P421' , { noqualifier = 'P518' , de la = cfg . iso3166 [ args . iso3166 ] } ) sau {}
Sfârșit
- dacă căutarea în articolul din țară nu este prezentă (P17)
dacă # pretinde == 0 atunci
revendicări = mWikidata . _getClaims ( 'P421' , { noqualifier = 'P518' , from = country } ) sau {}
Sfârșit
- dacă nu este o stare, filtrează fusurile orare pe baza P518 (partea implicată), dacă este prezentă
dacă nu mWikidata . _instanceOf ({ 'Q6256' , from = args . from }) atunci
- deocamdată limitat la Spania, pentru o introducere treptată
dacă țara == 'Q29' atunci
revendicări = filterByP518 ( revendicări , argumente )
Sfârșit
Sfârșit

pentru _ , revendicare în ipairs ( revendicări ) do
item local = mWikidata . _formatStatement ( revendicare , { formatting = 'raw' })
- dacă are „perioadă de valabilitate (P1264)” trebuie să fie „ora standard (Q1777301)”
perioadă locală = mWikidata . _formatQualifiers ( revendicare , 'P1264' , { formatting = 'raw' })
dacă nu perioada sau perioada == 'Q1777301' atunci
item = cfg . alias [ item ] sau item
item = checkTimezone ( element )
dacă element atunci
- cheie = booleană, pentru a nu avea duplicate
ret [ item ] = adevărat
Sfârșit
Sfârșit
Sfârșit

- transforma într-o secvență mai simplă
return makeSequence ( ret )
Sfârșit

funcție locală getWikidataCategory ( userval , wdval )
pisică locală
dacă utilizează atunci
dacă nu wdval atunci
cat = 'P421 absent pe Wikidata'
elseif wdval == userval atunci
cat = 'P421 la fel pe Wikidata'
altceva
cat = 'P421 diferit pe Wikidata'
Sfârșit
elseif wdval atunci
cat = 'P421 citit de Wikidata'
Sfârșit
returnează string.format ( '[[Categorie:% s]]' , pisică )
Sfârșit

- Pentru utilizare de către alte module
funcția p . _principal ( argumente )
userval local , wdval , cat

- valoarea utilizatorului
dacă args [ 1 ] atunci
userval = formatUserInput ( args [ 1 ])
dacă nu userval și args . errmsg atunci
local msg = mw . ustring . gsub ( args . errmsg , ' \\ {' , '{' )
msg = mw . ustring . gsub ( msg , ' \\ }' , '}' )
întoarce-te mw . getCurrentFrame (): preproces ( msg )
Sfârșit
Sfârșit

- valoarea citită din Wikidata
fusuri orare locale = getTimezones ( args )
if # timezones == 1 or ( # timezones > 1 and args . multiple ~ = 'no' ) atunci
wdval = formatTimezones ( fusuri orare )
Sfârșit

- categorii de servicii
dacă mw . titlu . getCurrentTitle (). spațiu de nume == 0 atunci
dacă nu userval și nu wdval și args . pisica atunci
cat = string.format ( '[[Categorie:% s]]' , arg . cat )
elseif userval sau ( wdval și # fusuri orare <= 1 ) atunci
cat = getWikidataCategory ( userval , wdval )
Sfârșit
Sfârșit

return ( userval sau wdval sau '' ) .. ( cat sau '' )
Sfârșit

- Punct de intrare pentru șablonul {{Fus orar}}
funcția p . principal ( cadru )
retur p . _main ( getArgs ( cadru , { parentOnly = true }))
Sfârșit

retur p