Wikipedia:Narzędzia/Wyszukiwanie i zamiana
![](https://upload.wikimedia.org/wikipedia/commons/5/58/Search_%26_change_pl_gadget_04.png)
![](https://upload.wikimedia.org/wikipedia/commons/c/c0/Toolbar_with_Search_and_Replace_window.jpg)
![](https://upload.wikimedia.org/wikipedia/commons/f/f6/Search_%26_change_pl_gadget_02.png)
Skrypt (searchbox) dodaje dwa przyciski do paska narzędziowego nad oknem edycji, które umożliwiają skorzystanie z nowych funkcji.
- Wyszukiwanie i zamiana — naciśnięcie pierwszego (
) ukazuje menu wyszukiwania i zamiany tekstu w edytowanym artykule (rys. 1). Oprócz prostej zamiany jednego tekstu na drugi umożliwia skorzystanie z wyrażeń regularnych (RegEx) zgodnych ze składnią używaną przez JavaScript.
- Zmiana wielkości liter — zmiana ta następuje w sekwencji:
- aaa – małe litery
- Aaa – pierwsza litera duża
- AAA – wszystkie litery duże
- Począwszy od wersji 1.1.0 opcja "zamień wszystkie" działa w tle, dzięki czemu zamiana jest znacznie szybsza, a nawet drastycznie szybsza dla długich tekstów.
W skrócie
edytuj- Licencja: GNU General Public License
- Autorzy: en:User:Zocky, Maciej "Nux" Jaros
- Skrypt: MediaWiki:Gadget-searchbox.js, wersja robocza: Wikipedysta:Nux/SearchBox.dev.js (SearchBox na github).
- Szybka instalacja: Preferencje → Gadżety → Edycja stron → Wyszukiwanie i zamiana (wystarczy zaznaczyć i zapisać zmiany).
Funkcja RegEx i modyfikacje wikikodu tabel
edytujAby dodać do tabeli nową kolumnę i nie musieć ręcznie wstawiać jej w każdym wierszu (zob. Pomoc:Tabele), można użyć funkcji RegEx. Jako znaku nowej linii możesz użyć „\n”. Przy czym musisz sobie włączyć właśnie ten RegExp, a tu troszkę się sprawa komplikuje. Wyrażenia regularne (ang. REGular EXpression), to coś w rodzaju języka wyszukiwania. Pewne znaki mają specjalne znaczenie. Tak się składa, że „|” jest znakiem specjalnym. Jeśli chcesz znaleźć znak „|”, to musisz dodać przed nim „\”
Jak to działa?
Jeśli chcesz dodać nową kolumnę (działa, jeśli chcesz dodać ją jako ostatnią), wpisujesz w odpowiednie pola
znajdź: \|- zamień na: |\n|-
Załóżmy, że w tabeli w kolejnych wierszach z treścią
|ala ma kota
chcesz dodać kolejną kolumnę z wierszami:
|Ala nie ma kota
czyli uzyskać po dwie kolumny z treściami
|ala ma kota
|Ala nie ma kota
Robisz to tak:
Szukasz „\|ala ma kota”. To na co zamieniasz nie jest już wyrażeniem regularnym jako takim, ale można tam używać znaków specjalnych typu „\n” (nowy wiersz), „\t” (tabulacja) itp.
Czyli ostatecznie szukasz:
znajdź: „\|ala ma kota” zamień na: „|ala ma kota\n| Ala nie ma kota”
Inny przykład - bardziej konkretny (np. dla tabeli zabytków w Jedlinie-Zdroju). Chcemy dodać do wywołań szablonów kolumnę umożliwiającą dodanie zdjęcia.
znajdź: "\| współrzędne= " zamień na "| zdjęcie = \n| współrzędne= "
Ale wyrażenia regularne są jeszcze fajniejsze dlatego, że możesz użyć tego, co znalazłeś. Oznacza się taki fragment nawiasami czyli np. szukasz „\|a(la) (ma kota)” i teraz aby tego użyć przy zmianie piszesz „$” i numer nawiasu (tutaj 1 lub 2). I teraz możesz zamienić na „| A$1 $2\n| A$1 nie $2” i otrzymasz dokładnie to samo (chociaż nie wygląda prawda ;-)).
Idąc dalej tym tropem chciałbyś móc zmienić więcej na raz np. „adam ma krokodyla”. Tu wracamy do znaku „|”, który znaczy ni mniej ni więcej tylko „lub” np. „(ma kota|ma krokodyla)” należy czytać „ma kota lub ma krokodyla”. Zwróć uwagę na nawiasy. Teraz zrobimy Alo-Adama: „a(la|dam)” i razem:
znajdź: „\|a(la|dam) (ma kota|ma krokodyla)” zamień na: „| A$1 $2\n| A$1 nie $2”
Dla Ali wynik będzie jak chciałeś, ale dla Adam „$1”, to „dam”, a „$2”, to „ma krokodyla”, czyli „|adam ma krokodyla” zmieni się na:
| Adam ma krokodyla
| Adam nie ma krokodyla
I to wszystko przy jednym podejściu.
Uwagi odnośnie do działania skryptu
edytujWspierane przeglądarki
edytujSkrypt był testowany i działa prawidłowo pod następującymi przeglądarkami: Firefox (100+) i Chrome (100+).
Znane problemy
edytujProgram nie jest testowany w starych przeglądarkach (IE, Chrome i Firefox z Windows XP). Powinien jednak mieć podstawową funkcjonalność.
Problemy proszę zgłaszać na mojej stronie dyskusji, albo w kawiarence technicznej (ale z pingiem @Nux).
Instrukcja instalacji
edytujSkrypt jest dostępny jako tzw. Gadżet i instaluje się go następująco:
- Otwórz stronę „Preferencje”.
- Tam przejdź na zakładkę „Gadżety”.
- Odszukaj sekcję „Edycja stron”.
- Zaznacz: „Wyszukiwanie i zamiana”.
- Zapisz zmiany.
Jeśli chcesz zainstalować wersję roboczą, to zajrzyj do ogólnej instrukcji instalacji narzędzi.
Ustawienia
edytujOd wersji 1.0 dostępne jest przypominanie zapisanych reguł. Reguły te należy wpisać do własnego skryptu w następującej formie:
mw.hook('userjs.SearchBox.init').add(function (sr) {
sr.mem.s = [''
,'do wyszukania'
,'cośik'
]
sr.mem.r = [''
,'do wstawienia'
,'cosik'
]
});
Rozszerzenia (hooks)
edytujOd wersji 2.6 dostępne są hooki, które umożliwiają stworzenie rozszerzeń funkcjonalnych do SearchBox.
Dostępne są trzy główne hooki:
// hook executed after creation of the form (1st time form is shown)
// `sr` is the main object.
mw.hook('userjs.SearchBox.create').add(function (sr) {
});
// each time when form is shown
mw.hook('userjs.SearchBox.show').add(function (sr) {
});
// each time when form is shown or hidden
mw.hook('userjs.SearchBox.showHide').add(function (sr, hidding) {
});
Dodatkowo jest też hook `init`, który może być użyty to zmiany ustawień bądź zmianami przed utworzeniem formularza. Należy pamiętać, żeby unikać zmiany funkcji. Inaczej jedno rozszerzenie zmieni zachowanie i funkcja będzie się zachowywać niezgodnie z oczekiwaniami. W razie potrzeby lepiej poproś o dodanie nowego hook zamiast zmieniać całą funkcje.
Pamiętaj, że hooki zostają wykonane również wstecznie przy dodawaniu. Np. jeśli funkcja `nuxsr.init()` została już wykonana, to poniższego funkcja obsługi hooka zostanie wykonana od razu. Czyli wpis w JS console pojawi się od razu po wykonaniu poniższego kodu.
mw.hook('userjs.SearchBox.init').add(function (sr) {
console.log('[nuxsr]', 'init', {sr});
});