Repository navigation
Releases: pablop76/mod_pposmap
Release list
mod_pposmap 1.4.0
Leaflet jedzie razem z modułem
Do tej pory Leaflet i biblioteka klastrowania ładowały się z unpkg. Wystarczyło,
że ten serwer nie odpowie albo że witryna ma ostrzejszą politykę bezpieczeństwa
treści (CSP), a mapa nie rysowała się w ogóle. Teraz obie biblioteki są
w paczce — Leaflet 1.9.4 i leaflet.markercluster 1.5.3 — i moduł domyślnie
bierze je z własnego serwera.
Poza odpornością na awarie zmienia to jeszcze dwie rzeczy: adres odwiedzającego
nie trafia już do zewnętrznego dostawcy przy każdym wejściu na stronę, a paczka
działa bez wyjścia w świat. Dawny argument, że CDN jest szybszy, bo przeglądarka
ma bibliotekę w pamięci z innej witryny, przestał obowiązywać — od 2020 roku
przeglądarki dzielą tę pamięć osobno dla każdej witryny.
Wybór źródła: własny serwer albo CDN pod wskazanym adresem
W ustawieniach modułu (tryb Leaflet) doszło pole Źródło bibliotek. Domyślnie
jest „lokalnie". Po przełączeniu na CDN pokazuje się drugie pole z adresem
bazowym — domyślnie unpkg, ale układ ścieżek jest taki jak w npm, więc równie
dobrze wpisać można jsDelivr albo własne lustro.
Sumy kontrolne (SRI) zostają także przy własnym adresie. Pliki tych wersji są
bajt w bajt takie same na każdym lustrze, więc jeśli serwer poda co innego,
przeglądarka odmówi wykonania skryptu. Lepsza głośna odmowa niż cicho podmieniony
skrypt na cudzej stronie.
Żeby to działało, biblioteki w repozytorium są wyłączone z normalizacji końców
wierszy. Bez tego git przy zapisie zmieniał im bajty, plik przestawał być
identyczny z tym, co wydał autor, i suma kontrolna przestawała się zgadzać.
Mapbox bez zmian
Mapbox GL JS nadal idzie z api.mapbox.com. Tam zależności od cudzej usługi
i tak nie da się zerwać, bo biblioteka wymaga tokenu dostępowego.
Aktualizacja
Zgodna wstecz: żadne pole nie zostało usunięte ani przemianowane, ustawienia
i dodane punkty zostają nietknięte. Po aktualizacji moduł przestaje sam z siebie
odpytywać unpkg — domyślnym źródłem jest własny serwer.
mod_pposmap 1.3.0
Obsługa GeoJSON
Moduł wczytuje dane z pliku GeoJSON: wklejonego w panelu albo leżącego na serwerze. Obsługiwane są wszystkie typy geometrii wraz z GeometryCollection.
- Punkty (
Point,MultiPoint) zachowują się dokładnie jak dodane ręcznie: dostają pinezkę i dymek, trafiają na listę obok mapy i mogą wejść do danych strukturalnych. - Linie i obszary rysują się na mapie z konfigurowalnym kolorem, grubością i kryciem. Pokazują to, czego pinezka nie pokaże: obszar dojazdu, przebieg trasy, granicę gminy, strefę dostawy.
- Działa u obu dostawców: Leaflet przez
L.geoJSON, Mapbox przez źródłogeojsonz warstwamifilliline. Ten sam plik działa w obu trybach, nic nie trzeba konwertować. - Nazwy właściwości, z których czytany jest tytuł, opis, telefon, godziny, zdjęcie i pola adresowe, ustawia się w panelu. Domyślne pasują do eksportu z OpenStreetMap, a Moje Mapy Google używają
nameidescription. - Właściwości standardu simplestyle-spec zapisane w samym pliku mają pierwszeństwo przed ustawieniami modułu.
- Opcja dopasowania widoku do danych ustawia środek i przybliżenie tak, żeby zmieściły się wszystkie punkty i obszary.
Bezpieczeństwo i jakość danych: treść z pliku jest filtrowana po stronie PHP (tytuł przez strip_tags, opis w trybie safehtml), wczytywanie z pliku ogranicza się do katalogu witryny i rozszerzeń .geojson/.json, obiekt bez nazwy nie trafia do danych strukturalnych, a współrzędne poza zakresem są pomijane zamiast lądować w losowym miejscu świata.
Usuwanie wszystkich punktów naraz
Przycisk czyszczący całą listę punktów jednym kliknięciem, zamiast kasowania wiersz po wierszu. Zabezpieczenie przed przypadkowym usunięciem jest trzywarstwowe:
- pytanie potwierdzające podające liczbę punktów,
- przycisk Cofnij wstawiający wiersze z powrotem na ich pierwotne miejsca,
- nic nie trafia do bazy przed kliknięciem Zapisz, więc wyjście z modułu bez zapisywania przywraca stan.
Pozostałe
Obrazki i pinezki obsługują teraz adresy bezwzględne, bo właściwość ze zdjęciem w GeoJSON bywa pełnym adresem obcego serwera. Punkt bez tytułu i bez opisu nie tworzy już pustego wiersza na liście.
Aktualizacja jest zgodna wstecz: żadne pole nie zostało usunięte ani przemianowane, ustawienia i dodane punkty zostają nietknięte.
mod_pposmap 1.2.0
Wydanie funkcjonalne. Doszło 27 nowych ustawień, żadne nie zostało usunięte, więc aktualizacja jest zgodna wstecz: dotychczasowa konfiguracja i dodane punkty zostają nietknięte.
Nowe funkcje
Serwer kafelków (tryb Leaflet). Można podmienić dostawcę kafelków na dowolnego, z kluczem API dopisanym jako parametr adresu, i ustawić własną atrybucję w rogu mapy. Doszły też limity przybliżenia obsługiwane przez dostawcę. Gotowe adresy siedmiu stylów wraz z pasującymi atrybucjami są w README.
Pinezki. Każdy punkt może mieć własną ikonę, niezależną od domyślnej. Do tego konfigurowalna szerokość, wysokość i punkt zaczepienia, czyli miejsce obrazka, które faktycznie wskazuje współrzędne.
Lista punktów. Własny napis na przycisku, własne klasy CSS przycisku i ustawiana szerokość kolumny.
Formatowanie opisu. W dymku na mapie działa proste formatowanie HTML: pogrubienie, kursywa, odnośnik, lista.
Zakładka „O module". Opis modułu, instrukcja startowa, wykaz zachowań wymagających wyjaśnienia oraz informacja o aktualizacjach.
Dane strukturalne (Schema.org)
Znacznik JSON-LD został przebudowany z ItemList na @graph z identyfikatorami @id.
- Dane lokalne każdego punktu: ulica, kod pocztowy, miejscowość, kraj, telefon, adres podstrony i profile zewnętrzne (
sameAs). - Godziny otwarcia jako
openingHoursSpecification. WłaściwośćopeningHoursma dziedzinę ograniczoną doLocalBusinessiCivicStructure, więc dla typów opisujących samo miejsce była nieprawidłowa. - Dziewięć typów punktów do wyboru, od
PlacepoLodgingBusiness. - Powiązanie z organizacją prowadzącą stronę tylko po świadomym włączeniu opcji. Przy mapie cudzych firm takie powiązanie wprowadzałoby wyszukiwarkę w błąd.
- Możliwość wypisywania znacznika tylko na wskazanych pozycjach menu, zamiast na każdej stronie, na której moduł jest widoczny.
Poprawki
Bezpieczeństwo. Pola tytułu, opisu i godzin otwarcia miały filter="raw", a ich zawartość trafiała do HTML bez escapowania. Opis przeszedł na safehtml, tytuł i godziny na string, a wartości wstawiane do znaczników są escapowane po stronie JavaScriptu.
Rozjazd listy z markerami. Punkt z pustymi współrzędnymi lądował na 0,0 zamiast zostać pominięty, przez co numeracja listy przestawała zgadzać się z pinezkami. Teraz taki wiersz jest odrzucany w jednym miejscu i nie trafia ani na mapę, ani na listę, ani do danych strukturalnych.
Rozpychanie strony. Mapa jako element flex bez min-width była rozpychana przez pasek atrybucji Leafletu, co dawało poziomy pasek przewijania całej strony.
Pamięć podręczna przeglądarki. joomla.asset.json tkwił na wersji 1.0.0 od pierwszego wydania, więc po każdej aktualizacji przeglądarki dalej serwowały stary custom.js i style.css. Numer jest teraz synchronizowany z wersją modułu.
Pozostałe. Poprawiony start modułu przy odroczonym ładowaniu JavaScriptu, uporządkowany układ listy punktów oraz usunięta zależność od UIkita: moduł ma własny, neutralny styl i nie wymaga żadnego frameworku CSS.
Uwagi do aktualizacji
Po aktualizacji odśwież stronę z pominięciem pamięci podręcznej (Ctrl+Shift+R).
Moduł przestał być spersonalizowany pod konkretne wdrożenie i nadaje się do ogólnego zastosowania.
v1.1.4
v1.1.3
v1.1.2
v1.1.1
v1.1.0
Nowe funkcje: wsparcie wielu instancji modułu na stronie, dane strukturalne Schema.org (przełącznik), klastrowanie markerów (Leaflet.markercluster / Mapbox GL cluster), walidacja zakresów lat/lng, poprawki dostępności (przycisk listy punktów).