FANDOM


InfoboxBuilder to narzędzie, które znacznie ułatwia tworzenie infoboksów. Do tego powoduje przyspieszenie renderowania stron w porównaniu do infoboksów stworzonych za pomocą tradycyjnej wikiskładni. Przyspieszenie jest najbardziej widoczne w przypadku bardzo skomplikowanych infoboksów.

Ponieważ używa Lua, pełnoprawnego języka programowania, InfoboxBuilder pozwala na tworzenie dowolnie skomplikowanych infoboksów zbudowanych na podstawie uproszczonego i ustandaryzowanego rdzenia. Nie ważne gdzie jesteś na FANDOMIE, bez problemu rozpoznasz trzewia infoboksa Lua, ale nie będziesz ograniczony/a jego prostotą. InfoboxBuilder udostępnia prosty sposób tworzenia infoboksów bez utraty możliwości go dostosowania.

Co potrzeba?

Jedynym wymogiem jest dostępność Lua na Twojej wiki, które jest włączone domyślnie. InfoboxBuilder zostaje udostępniony jako osobna funkcja parsera.

Tworzenie prostego infoboksa

To jest prosty infoboks
Moon
Pytania
Czy to proste?Jak najbardziej!
Będziesz go używać?Za każdym razem!

Jeśli chcesz stworzyć prosty infoboks – nie ma nic łatwiejszego. Kod źródłowy tego po prawej znajduje się tutaj:

{{#infoboxbuilder:
|  1:Type  = Title
 | 1:Value = To jest prosty infoboks

|  2:Type  = MainImage
 | 2:Value = [[File:Moon.jpg]]

|  3:Type  = Header
 | 3:Value = Pytania

|  4:Type  = Line
 | 4:Label = Czy to proste?
 | 4:Value = Jak najbardziej!

|  5:Type  = Line
 | 5:Label = Będziesz go używać?
 | 5:Value = Za każdym razem!
}}

Domyślny motyw InfoboxBuildera jest stworzony tak, aby wyglądał dobrze na każdym tle.

Składnia

InfoboxBuilder używa składni, która jest prosta oraz jednocześnie obrazowa. Ogólna składnia każdego parametru to:

| [Indeks]:[Klucz] = [Wartość]

Każdy wiersz musi mieć ten sam numeryczny indeks, który określa pozycję w infoboksie oraz grupuje argumenty. Podstawowe to Type (typ) oraz Value (wartość). Możesz użyć jednego z dostępnych typów:

  • Title – Tytuł infoboksa
  • Header – Nagłówek sekcji
  • Line – Zwykły wiersz
  • Image – Obraz
  • MainImage – Główny obraz infoboxa
  • Footer – Stopka
  • Custom – Własny

Typy Line oraz Custom dodatkowo wymagają argumentu Label. Dla typu Line określa on etykietę pola, a dla Custom służy do zdefiniowana tagu HTML, w którym ma być zawarta wartość. Możesz również użyć atrybutu Label dla pól Image oraz MainImage, aby dodać podpis pod obrazem.

Dostosowywanie

Zmienne

Istnieje kilka sposobów na zmianę wyglądu lub zachowania Twojego infoboksa przez użycie argumentów zmiennych. Wszystkie mają indeks 0. Poniżej są podane wartości domyślne:

| 0:Theme                   = default -- Dodaje prefiks do klas CSS
                                      -- (taki który chcesz użyć)
| 0:CustomModule            =         -- Definiuje moduł Lua zawierający własne funkcje, które możesz użyć
                                      -- (nazwa modułu z prefiksem Moduł:)
| 0:MainImageCaption        = Off     -- Przełącza wyświetlanie podpisu w polu MainImage
                                      -- (Off/On)
| 0:ToggleContentLongerThan = 1000    -- Powoduje, że pola z długimi wartościami zostają zwinięte
                                      -- (liczba znaków)

Aby zmienić wartość domyślną wystarczy dodać

{{#infoboxbuilder:
|  0:MainImageCaption = On
|  0:Theme            = moj-motyw

|  1:Type  = Title
 | 1:Value = To jest prosty infoboks

|  2:Type  = MainImage
 | 2:Label = Podpis pod obrazem
 | 2:Value = [[File:Moon.jpg]]

|  3:Type  = Header
 | 3:Value = Pytania

|  4:Type  = Line
 | 4:Label = Czy to proste?
 | 4:Value = Jak najbardziej!

|  5:Type  = Line
 | 5:Label = Będziesz go używać?
 | 5:Value = Za każdym razem!
}}

Możesz również dodać własne zmienne, które będą dostępne do użycia we własnych modułach

| 0:NazwaStrony = {{PAGENAME}}

Wygląd

To wszystko było by na marne gdyby nie można było zmienić wyglądu swojego nowego infoboksa. Każdy element infoboksa ma konkretną klasę CSS poprzedzoną prefiksem ustawionym w zmiennej Theme (np. przy domyślnym prefiksie „default” główny kontener infoboksa będzie miał klasę „default-infobox-container”).

Tworzenie infoboksów

Podawanie danych

Infoboks najlepiej utworzyć w postaci osobnego szablonu, który jest wywoływany na docelowych stronach poprzez podanie odpowiednich informacji w formie parametrów.

Należy pamiętać, że przerobienie istniejących infoboksów używających wikiskładni na Lua nie spowoduje utraty całej pracy na wszystkich stronach, które go używają. Powiedzmy, że masz wypełniony infoboks o Batmanie, który wygląda tak:

{{Bohater
| Nazwa     = Batman
| Zdjęcie   = [[Plik:Batman.jpg]]
| Tożsamość = Bruce Wayne
| Siedziba  = Batcave
| Arcywróg  = Joker
}}

Gdy przerobisz szablon {{Bohater}} na Lua nie stracisz tych informacji. Zostaną one automatyczne przekazane do nowej wersji szablonu.

Szablon infoboksu

Batman
Batman_0683.jpg
Podstawowe informacje
TożsamośćBruce Wayne
SiedzibaBatcave
ArcywrógJoker

Na początek musimy stworzyć szablon, który będzie bazą naszego infoboksu. Dla zgodności z przykładem wyżej niech będzie to Szablon:Bohater. Wywołanie takiego szablonu z parametrami z przykładu z powyższej sekcji da efekt podobny do tego po prawej.

{{#infoboxbuilder:
|  1:Type  = Title
 | 1:Value = {{{Nazwa|}}}

|  2:Type  = MainImage
 | 2:Value = {{{Zdjęcie|}}}

|  3:Type  = Header
 | 3:Value = Podstawowe informacje

|  4:Type  = Line
 | 4:Label = Tożsamość
 | 4:Value = {{{Tożsamość|}}}

|  5:Type  = Line
 | 5:Label = Siedziba
 | 5:Value = {{{Siedziba|}}}

|  6:Type  = Line
 | 6:Label = Arcywróg
 | 6:Value = {{{Arcywróg|}}}
}}

Własne moduły

Do takiego infoboksu można dodać własne moduły Lua, które moga przeprowadzić dodatkowe operacje na parametrach podanych do infoboksu. Dla przykładu weźmiemy szablon {{LuaInfobox}} używający modułu LuaInfobox z FANDOM Open Source Library.

Rdzeń modułu

local HF = require('Module:HF') 
 
local LuaInfobox = {}
 
function LuaInfobox.Dependencies( field, vars )
  local output = ""
 
  local dependencies = HF.explode( ";", field.Value )
 
  for i, dependency in ipairs( dependencies ) do
    output = output .. "[[Module:" .. dependency .. "|" .. dependency .. "]]" .. "; "
  end
 
  if string.sub( output, -2, -1 ) == "; " then
    output = string.sub( output, 1, -3 ) -- Remove last semi-colon and space
  end
 
  return output
end
 
return LuaInfobox

Każda metoda otrzymuje dwa argumenty: tabelę danego pola razem z kluczam pasującymi do tych w szablonie (Type, Label, Value) oraz podobną tabelę ze zmiennymi (Theme, MainImageCaption itp.).

Jak zapewne widać można również dodać inne moduły dzięki czemu nie musisz trzymać wszystkiego w jednym miejscu. Należy jednak uważać, poneważ silnik Lua ma ograniczenie do 100 modułów dodanych w tym samym momencie.

Użycie w szablonie

Aby udostępnić dany moduł w infoboksie trzeba użyć zmiennej CustomModule.

0:CustomModule = Module:LuaInfobox

Teraz możemy poinstruować InfoboxBuildera, aby użył tej metody w polu z zależnościami (Dependencies). Dokonuje się tego przez dodanie argumentu ValueMethod z nazwą funkcji:

    |   5:Type        = Line
      | 5:Label       = Dependencies
      | 5:Value       = {{{Dependencies|}}}
      | 5:ValueMethod = Dependencies

Nie ma wymogów konkretnego nazewnictwa, ale użycie nazwy modułu jako głównej zmiennej oraz nazw pól jako funkcji pozwoli Ci na utrzymanie porządku.

W ten sam sposób można również zastosować funkcję do etykiet (Label). Wystarczy dodać argument LabelMethod z nazwą funkcji.

Kilka wartości

Ponieważ każda metoda ma dostęp do wszystkich argumentów zgrupowanych w jedno pole, możesz podać kilka wartości. Np. jeśli chcemy zaznaczyć, że wszystkie moduły wymienione w zależnościach są wymagane, można dodać dodatkowy argument do tego pola.

  |   5:Type        = Line
    | 5:Label       = Dependencies
    | 5:Value       = {{{Dependencies|}}}
    | 5:ValueDesc   = {{{DependenciesDesc|}}}
    | 5:ValueMethod = Dependencies

Oraz podać go w artykule:

| Dependencies     = InfoboxBuilderView; HF
| DependenciesDesc = (all are required)

Teraz można go użyć, aby dodać uwagi w polu:

function LuaInfobox.Dependencies( field, vars )
  local output = ""
 
  local dependencies = HF.explode( ";", field.Value )
 
  for i, dependency in ipairs( dependencies ) do
    output = output .. "[[Module:" .. dependency .. "|" .. dependency .. "]]" .. "; "
  end
 
  if string.sub( output, -2, -1 ) == "; " then
    output = string.sub( output, 1, -3 ) -- Remove last semi-colon and space
  end
 
  if not HF.isempty( field.ValueDesc ) then
    output = output .. " " .. field.ValueDesc
  end
 
  return output
end