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

Modul: Navbox

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

Modulul Navbox implementează funcționalitatea șabloanelor {{ Navbox }} și {{ Navbox subgrup }}.

Are două subpagini CSS: Module: Navbox / styles.css și Module: Navbox / mobile-styles.css .


 - [[
* Modul care implementează șabloanele Navbox și Navbox_subgroup.
]] -

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

local getArgs = require ( 'Modul: Argumente' ). getArgs
- Numărul maxim de liste și grupuri pentru șabloanele Navbox și Navbox_subgroup
local MAX_LIST_NAVBOX = 30
local MAX_LIST_NAVBOX_SUBGROUP = 20

- ================================================== ============================
- Funcții utilitare
- ================================================== ============================

- Returnează o secvență Lua ordonată care conține ID-urile listN-urilor prezente.
- Dacă withGroup este adevărat, verificați și groupNs.
-
- @param {table} args
- @param {boolean} withGroup
- @return {tabel}
funcție locală getIds ( args , withGroup )
local ret , ids = {}, {}
pentru cheie , _ în perechi ( args ) do
dacă tastați ( cheie ) == 'șir' atunci
local id = key : match ( '^ list (% d +) $' ) or ( withGroup and key : match ( '^ group (% d +) $' ))
dacă id și tonumber ( id ) <= ( withGroup și MAX_LIST_NAVBOX sau MAX_LIST_NAVBOX_SUBGROUP ) atunci
ids [ tonumber ( id )] = adevărat
Sfârșit
Sfârșit
Sfârșit
pentru cheie, _ în perechi (id - uri) fac
table.insert ( ret , cheie )
Sfârșit
table.sort ( ret )
retur ret
Sfârșit

- Eliminați orice spații / linii noi din jurul {{,}}.
-
- lista @param {string}
- @return {șir}
funcție locală trimSep ( listă )
local sep = mw . getCurrentFrame (): expandTemplate { title = "," }
local sepEsc = mw . ustring . gsub ( sep , '-' , '% -' )
întoarce-te mw . ustring . gsub ( listă , '% s *' .. sepEsc .. '% s *' , sep )
Sfârșit

- Cu depanare redefinește metoda mw.html: css,
- permițându-vă să rulați teste fără a verifica și CSS.
-
- @param {table} tableNode
funcție locală disableCSS ( tableNode )
local mt = getmetatable ( tableNode )
mt . __index . css = funcție ( t , nume , val ) returnează t end
Sfârșit

- Verificați dacă șablonul este procesat pe pagina sa
funcția locală isTemplatePage ( nume )
local title = mw . titlu . getCurrentTitle (). prefixedText
name = 'Șablon:' .. ( nume sau '' )
returnează numele == titlu și adevărat sau fals
Sfârșit

- Încărcați CSS prin TemplateStyles când este cazul
sarcina funcției locale CSS ( nume )
prefix local = isTemplatePage ( nume ) și „mobil-” sau 
local styles = 'Module: Navbox /' .. prefix .. 'styles.css'
întoarce-te mw . getCurrentFrame (): extensionTag {
nume = 'șabloane' ,
args = { src = styles }
}
Sfârșit

- ================================================== ============================
- Clasa Navbox
- ================================================== ============================

Navbox local = {}

- Constructor al clasei Navbox.
-
- @param {table} args - argumentele transmise modulului
- @return {table} un nou obiect Navbox
funcție Navbox : nou ( args )
auto local = {}
local ThNode

setmetatable ( auto , { __index = Navbox })
sinele . args = args
- Construcția tabelului HTML
sinele . tableNode = mw . html . create ( 'tabel' )
dacă eul . argumente . depanare atunci
disableCSS ( self . tableNode )
Sfârșit
self : _setupTableNode ()
- prima linie: conține bara de navigație și titlul
thNode = sine . tableNode : tag ( 'tr' )
: etichetă ( „th” )
: attr ( „colspan” , self . args . image și „3” sau „2” )
: cssText ( self . args . titlestyle )
dacă eul . argumente . navbar ~ = 'simplu' atunci
self : _addTnavbar ( thNode )
Sfârșit
dacă eul . argumente . titlu atunci
self : _addTitle ( thNode )
Sfârșit
- orice linie de mai sus
dacă eul . argumente . mai sus atunci
self : _addAboveOrBelow ( self . args . above , self . args . abovestyle )
Sfârșit
- alte linii
self : _addLists ()
- posibilă linie finală pentru cele de mai jos
dacă eul . argumente . mai jos atunci
self : _addAboveOrBelow ( self . args . below , self . args . belowstyle )
Sfârșit

întoarcere de sine
Sfârșit

- Returnează tabelul HTML.
-
- @return {șir}
funcție Navbox : getHTML ()
return tostring ( self . tableNode )
Sfârșit

- Configurați stilurile CSS ale tabelului
funcție Navbox : _setupTableNode ()
sinele . tableNode
: addClass ( isTemplatePage ( self . args . name ) și 'navbox_mobile' sau 'navbox' )
: addClass ( 'mw-pliabil' )
: addClass ( isTemplatePage ( self . args . name ) și 'autocollapse' sau
sinele . argumente . state == 'colapsat' și 'mw-colapsat' sau
sinele . argumente . state == 'autocollapse' și 'autocollapse' sau
nu de sine . argumente . starea și „autocollapse” sau nul )
: addClass ( 'metadate noprint' )
: attr ( 'id' , 'navbox-' .. ( self . args . name or '' ))
: cssText ( self . args . style )
: cssText ( auto . argumente . bodystyle )
Sfârșit

- Adaugă Tnavbar (linkuri către șablon, pagină de discuții și modificări).
-
- nod @param {table}
funcție Navbox : _addTnavbar ( nod )
local tnavbar = mw . getCurrentFrame (): expandTemplate {
title = 'Tnavbar' ,
args = {
[ 1 ] = sine . argumente . nume ,
[ 'mini' ] = 1
}
}
node : tag ( 'div' ): addClass ( 'navbox_navbar' ): wikitext ( tnavbar )
Sfârșit

- Setați titlul navboxului din parametrul „title”.
-
- nod @param {table}
funcție Navbox : _addTitle ( nod )
node : tag ( 'span' ): addClass ( 'navbox_title' ): wikitext ( self . args . title )
Sfârșit

- Adăugați o linie pentru parametrii „deasupra” și „dedesubt”.
-
- @param {string} arg
- @param {string} argStyle
funcție Navbox : _addAboveOrBelow ( arg , argStyle )
sinele . tableNode
: etichetă ( 'tr' )
: etichetă ( „th” )
: attr ( „colspan” , self . args . image și „3” sau „2” )
: addClass ( 'navbox_abovebelow' )
: cssText ( argStyle )
: wikitext ( arg )
Sfârșit

- Adaugă o coloană pentru imagine.
-
- @param {table} trNode
- @param {number} rowpan
Funcția Navbox: _addImage (trNode, rowspan)
trNode
: etichetă ( 'td' )
: attr ( „rânduri” , rânduri )
: addClass ( 'navbox_image' )
: cssText ( self . args . imagestyle )
: wikitext ( self . args . image )
Sfârșit

- Adaugă o nouă linie pentru fiecare grup N / listN
funcție Navbox : _addLists ()
local rowIds , altStyle , altBackground
- creați un rând pentru fiecare grupN / listN
rowIds = getIds ( self . args , true )
pentru i , id în ipairs ( rowIds ) do
local trNode = self . tableNode : tag ( 'tr' )
- grupN
dacă eul . args [ 'grup' .. id ] atunci
trNode : tag ( 'th' )
: attr ( 'colspan' , self . args [ 'list' .. id ] și '1' sau '2' )
: addClass ( 'navbox_group' )
: cssText ( self . args . groupstyle )
: cssText ( auto . args [ „grup” .. id .. „stil” ])
: wikitext ( auto . args [ „grup” .. id ])
Sfârșit
- listaN
dacă eul . args [ 'list' .. id ] atunci
list local = trimSep ( self . args [ 'list' .. id ])
if ( i % 2 ) == 0 atunci
altStyle = sine . argumente . uniform
altBackground = 'navbox_even'
altceva
altStyle = sine . argumente . ciudat
altBackground = 'navbox_odd'
Sfârșit
trNode : tag ( 'td' )
: attr ( 'colspan' , self . args [ 'group' .. id ] și '1' sau '2' )
: addClass ( 'navbox_list' )
: addClass ( nu auto . args [ 'group' .. id ] și 'navbox_center' sau zero )
: addClass ( altBackground )
: cssText ( self . args . liststyle )
: cssText ( altStyle )
: cssText ( self . args [ 'list' .. id .. 'style' ])
: wikitext ( listă )
Sfârșit
if id == 1 and self . argumente . imagine atunci
self : _addImage ( trNode , # rowIds )
Sfârșit
Sfârșit
Sfârșit

- ================================================== ============================
- Clasa NavboxSubgroup
- ================================================== ============================

local NavboxSubgroup = {}

- Constructor al clasei NavboxSubgroup.
-
- @param {table} args - argumentele transmise modulului
- @return {table} un nou obiect NavboxSubgroup
funcție NavboxSubgroup : nou ( args )
auto local = {}

setmetatable ( auto , { __index = NavboxSubgroup })
sinele . args = args
- Construcția tabelului HTML
sinele . tableNode = mw . html . create ( 'tabel' )
dacă eul . argumente . depanare atunci
disableCSS ( self . tableNode )
Sfârșit
self : _setupTableNode ()
self : _addLists ()

întoarcere de sine
Sfârșit

- Returnează tabelul HTML.
-
- @return {șir}
funcție NavboxSubgroup : getHTML ()
return tostring ( self . tableNode )
Sfârșit

- Configurați stilurile CSS ale tabelului.
funcție NavboxSubgroup : _setupTableNode ()
sinele . tableNode
: addClass ( 'subnavbox' )
: cssText ( auto . argumente . bodystyle )
Sfârșit

- Adaugă o nouă linie pentru fiecare grupN / listN.
funcție NavboxSubgroup : _addLists ()
listIds local , altStyle
- creați un rând pentru fiecare listăN
listIds = getIds ( self . args )
pentru _ , id în ipairs ( listIds ) do
local trNode = self . tableNode : tag ( 'tr' )
list local = trimSep ( self . args [ 'list' .. id ])
- groupN sunt vizibile numai dacă există listaN corespunzătoare
dacă eul . args [ 'grup' .. id ] atunci
trNode : tag ( 'th' )
: addClass ( 'subnavbox_group' )
: cssText ( self . args . groupstyle )
: wikitext ( auto . args [ „grup” .. id ])
Sfârșit
if ( id % 2 ) == 0 atunci
altStyle = sine . argumente . uniform
altceva
altStyle = sine . argumente . ciudat
Sfârșit
trNode : tag ( 'td' )
: attr ( 'colspan' , self . args [ 'group' .. id ] și '1' sau '2' )
: addClass ( nu auto . args [ 'group' .. id ] și 'navbox_center' sau zero )
: cssText ( self . args . liststyle )
: cssText ( altStyle )
: wikitext ( listă )
Sfârșit
Sfârșit

- ================================================== ============================
- Funcții exportate
- ================================================== ============================

local p = {}

- Funcție pentru utilizare de către un alt modul.
funcția p . _navbox ( argumente )
return loadCSS ( args . name ) .. Navbox : new ( args ): getHTML ()
Sfârșit

- Funcție pentru utilizare de către un alt modul.
funcția p . _navbox_subgroup ( args )
return NavboxSubgroup : new ( args ): getHTML ()
Sfârșit

- Funcție pentru șablonul {{Navbox}}.
funcția p . navbox ( cadru )
retur p . _navbox ( getArgs ( cadru , { parentOnly = true }))
Sfârșit

- Funcția pentru șablonul {{Navbox subgrup}}.
funcția p . navbox_subgroup ( cadru )
retur p . _navbox_subgroup ( getArgs ( cadru , { parentOnly = true }))
Sfârșit

retur p