Wikiźródła:Narzędzia/gConfig
gConfig to menedżer ustawień dla gadżetów. Koniec z modyfikowaniem common.js!
Dla użytkowników
edytujUstawienia gadżetów wykorzystujących gConfig można zmienić na nowej stronie specjalnej Specjalna:GadgetPrefs, linkowanej także na górze sekcji Gadżetów w zwykłych Preferencjach oraz pod ikonką koła zębatego przy opisach poszczególnych gadżetów. Wyświetlany jest na niej formularz pozwalający zmienić dowolne ustawienia włączonych gadżetów.
gConfig włącza się automatycznie, gdy wybierzesz jeden z wykorzystujących go gadżetów.
Ustawienia są zapisywane w preferencjach użytkownika (przy użyciu tego samego mechanizmu, z którego korzysta Specjalna:Preferencje) oraz w ciasteczkach.
Przykładowe gadżety wykorzystujące gConfig (lista może być niepełna):
Dla deweloperów
edytujAby dodać swój gadżet (lub skrypt niebędący gadżetem) do gConfiga:
- otocz całość skryptu w blok
mw.loader.using('ext.gadget.gConfig', function(){ ... })
(aby upewnić się, że gConfig załaduje się, zanim spróbujemy go użyć) - na początku kodu (wewnątrz tego bloku, ale poza
$(document).ready
/addOnloadHook
itp.) użyj funkcjigConfig.register
, aby zarejestrować listę obsługiwanych ustawień (patrz poniżej) - w kodzie za każdym razem, gdy chcesz odczytać ustawienie, użyj
gConfig.get
(patrz poniżej)
Przykład: zmiany wprowadzone w gadżecie disFixer przystosowujące go do gConfiga.
Poza opisanymi poniżej funkcjami gadżet udostępnia także kilka innych funkcji i zmiennych, które raczej nie będą potrzebne. Są opisane w komentarzach w kodzie gadżetu (po angielsku).
gConfig.register
edytujPozwala zarejestrować listę obsługiwanych przez dany gadżet ustawień. Przyjmuje trzy argumenty:
- gadget: identyfikator gadżetu, wykorzystywany do rozpoznawania powiązanych ciasteczek i preferencji MediaWiki. Dopuszczalne tylko litery ASCII, cyfry i podkreślnik. Zwykle uproszczona nazwa gadżetu.
- gadgetInfo: obiekt zawierający podstawowe informacje o gadżecie:
- name [wymagane]: nazwa gadżetu wyświetlana w nagłówku sekcji w preferencjach gadżetów,
- descriptionPage: nazwa strony z opisem gadżetu (do niej będzie linkować ww. nagłówek).
- settings: lista opcji konfiguracyjnych. Każda z opcji to obiekt o poniższych kluczach:
- name [wymagane]: identyfikator ustawienia, nie pokazywany w interfejsie
- desc [wymagane]: opis ustawienia, wyświetlany na stronie preferencji
- descMode: zawartość opisu:
plain
/wikitext
(domyślnieplain
) - type [wymagane]: typ wartości:
boolean
/integer
/numeric
/string
, każdy typ jest inaczej wyświetlany w pref. i walidowany - deflt [wymagane]: domyślna wartość
- validation: sposób walidacji wprowadzonych danych. Jedno z:
- tablica
[min, max]
: zakres dopuszczalnych wartości dla typówinteger
inumeric
- funkcja
function(value){ ... }
: funkcja sprawdzająca poprawność wartości. Jako jedyny parametr przekazana zostanie wprowadzona przez użytkownika wartość. Jeśli jest nieprawidłowa, funkcja musi użyćthrow
, aby zwrócić informację o błędzie, która zostanie wyświetlona obok opisu danego ustawienia. Funkcja musi zwrócić prawidłową wartość dla danego ustawienia (może modyfikować przekazaną jej zmienną).
- tablica
- legacy: dla ułatwienia migracji obecnych skryptów na gConfig, pozwala "zaimportować" wartość z ustawień wpisywanych do pliku JS. Jeśli odnajdzie takie ustawienie, na stronie preferencji nie będzie ono modyfikowalne, a użytkownik otrzyma informację, jak zrobić, aby było (usunąć z *.js). Jedno z:
- tablica
[object, property]
: wartość zostanie wczytana z wyrażeniaobject[property]
, jeśli jest ono zdefiniowane.object
to najczęście po prostuwindow
(czyli: operujemy na zmiennej globalnych o nazwieproperty
) - obiekt: jak wyżej, wartość dla
property
będzie taka sama, jak identyfikator ustawienia name
- tablica
Przydługi przykład:
gConfig.register(
'lipsum',
{
name: 'Lorem ipsum gadget',
descriptionPage: 'Wikipedia:Lorem ipsum gadget'
},
[
{
name: 'boolean',
desc: 'Boolean value.',
type: 'boolean',
deflt: true
}, {
name: 'integer',
desc: 'Integral number between 0 and 30.',
type: 'integer',
deflt: 20,
validation: [0, 30]
}, {
name: 'float',
desc: '[[Floating-point number]] between -1 and 1.',
descMode: 'wikitext',
type: 'numeric',
deflt: 0.5,
validation: [-1, 1]
}, {
name: 'string',
desc: 'Text value.',
type: 'string',
deflt: 'test'
}, {
name: 'evenonly-passive',
desc: 'Even numbers only. Will be rounded down if an odd number is given.',
type: 'integer',
deflt: 0,
validation: function(n){ return n%2!=0 ? n-1 : n; }
}, {
name: 'evenonly-agressive',
desc: 'Even numbers only. Will prevent saving if an odd number is given.',
type: 'integer',
deflt: 0,
validation: function(n){ if(n%2!=0){ throw 'Requires an even number!' }; return n; }
}
]
);
gConfig.get
edytujZwraca wartość dla danego ustawienia danego gadżetu. Przyjmuje dwa argumenty:
- gadget: identyfikator gadżetu, jak w
gConfig.register
. - setting: nazwa ustawienia, jak name w
gConfig.register
.