basketHandler
Pod-klasa Shop. Obsługa koszyka w kroku pierwszym (strona główna) i drugim (uzupełnianie danych adresowych).
Parametry w HTML
Krok 1
Parametry te potrzebne są w do dynamicznych zmian kraju, płatności i dostawy, wraz z przeliczaniem kosztów.
- Shop.values.CurrencyMap (string) - wartość 1234.56 sformatowana za pomocą {currency}
- Shop.values.ShippingValue (obiekt) - mapa dostaw do ich kosztów „s” + ID dostawy : koszt
- Shop.values.SumNoShipping (float) - wartość koszyka bez kosztów dostawy
- Shop.values.Shipping2Payment (obiekt) - mapa dostaw do płatności, które są przez nie obsługiwane „s” + ID dostawy : [ tablica z ID płatności ]
- Shop.values.Country2Shipping (obiekt) - mapa krajów do dostaw, które są dostępne na ich terenie dwuliterowy kod kraju : [ tablica z ID dostaw ]
Krok 2
- Shop.values.Country2Shipping (tablica) - tablica dwuliterowych kodów krajów przypisanych do wybranej wcześniej formy dostawy
Parametry w JS
Ponieważ klasa jest inicjalizowana razem z Shop, wszystkie parametry należy nadać przed zdarzeniem domready lub najpóźniej w funkcji warunkowej Shop.basketHandler.condition()
Parametry Shop.basketHandler.options :
- Dla kroku pierwszego
- step : (int) 1 - informacja o kroku
- containers (obiekt)
- step1 : element DOM, kontener zawierający wszystkie kraje, dostawy i płatności
- ordersumfield : element DOM z końcowym kosztem zamówienia (koszyk + dostawa)
- selectors (obiekt)
- deliveryrow : wiersze zawierające dostawy
- paymentrow : wiersze zawierające płatności
- deliverychangelink : link odsłaniający listę dostaw do wyboru
- paymentchangelink : jw. dla płatności
- paymentheadlabel : pole z nazwą wybranej płatności
- paymentrlabel : pod-selector dla każdego paymentrow, nazwa płatności
- paymentradios : input radio dla każdej płatności
- deliveryheadlabel : pole z nazwą wybranej formy dostawy
- deliveryheadvalue : pole z kosztem wybranej formy dostawy
- deliverytrlabel : pod-selector dla każdego deliveryrow, nazwa formy dostawy
- deliverytrvalue : pod-selector dla każdego deliveryrow, koszt formy dostawy
- deliveryradios : input radio dla każdej dostawy
- trradio : pod-selector dla deliveryrow i paymentrow, input radio
- countrytr : wiersz z wyborem kraju dostawy
- trcountryselect : pod-selector dla countrytr, pole select z krajami
- Dla kroku drugiego
- step : (int) 2 - informacja o kroku
- containers (obiekt)
- step2 : element DOM, kontener zawierający formularz z polami adresowymi
- selectors (obiekt)
- trdifferentaddress - wiersze zawierające pola input od adresu dostawy (drugiego)
- differentaddress - input checkbox od wyboru adresu dostawy
- personaladdress - input radio, adres osoby prywatnej
- companyaddress - input radio, adres firmowy
- formcompanyname - input text, nazwa firmy w drugiego adresie
- formtaxid - input text, NIP w pierwszym adresie
- formcompanyname2 - input text, nazwa firmy w drugiego adresie
- formtaxid2 - input text, NIP w pierwszym adresie
- countryselect - select od wyboru kraju w pierwszym adresie
- addresstyperadios - pola radio (personaladdress i companyaddress)
- addressselectsubmit - input submit (lub button) od pobierania adresu z książki adresowej (powiązany z polem <select>, ukrywany kiedy JavaScript jest włączony)
- addressselect - pole <select> z adresami użytkownika do szybkiego załadowania
- addressinput - uniwersalny selector z ciągiem znaków ”{name}”, który jest wykorzystywany do pobrania elementu DOM z konkretnym name
- getaddressurl (string) - adres URL skąd można pobrać dane adresowe klienta, wymagany wewnątrz ciąg znaków {id}, który zostanie podmieniony na ID żądanego adresu
- Shop.lang.basket.address_request_error - komunikat podczas nieudanego pobrania adresu
- Shop.lang.basket.shipping_different_country - komunikat przy próbie odznaczenia pola „inny adres dostawy”
Działanie
Wszystkie podane selectory wywoływane są wewnątrz kontenera danego kroku.
Krok 1
- deliverychangelink - link „zmień »” do wyboru dostawy, usunięcie klasy none
- jeżeli pomimo usunięcia klasy none, link jest niewidoczny (odpowiednie ustawienia CSS), listy dostaw i płatności zostają permanentnie widoczne
- w przeciwnym wypadku „zmień »” dla dostaw deliverychangelink oraz „zmień»” dla płatności paymentchangelink otrzymują zdarzenia onClick do rozwinięcia wierszy
- paymentradios] otrzymują zdarzenia onChange
- nadają klasę selected swojemu <tr>, pozostałym paymentrow usuwają
- nadają paymentheadlabel treść równą paymentrlabel ze swojego wiersza
- ukrywają wiersze płatności
- deliveryradios otrzymują zdarzenia onChange
- nadają klasę selected swojemu <tr>, pozostałym deliveryrow usuwają
- nadają deliveryheadlabel treść równą deliverytrlabel ze swojego wiersza
- nadają deliveryheadvalue treść równą deliverytrvalue ze swojego wiersza
- sprawdzają które płatności są dostępne dla danej dostawy i uwidaczniają (klasa none) tylko te dostępne, reszta zostaje ukryta
- przesuwają klasę first do wiersza pierwszej widocznej płatności
- jeżeli podano tablicę Shop.values.Country2Shipping i krajów jest więcej niż jeden, countrytr –> trcountryselect otrzymuje zdarzenie onChange
- zmiana wartości uwidacznia tylko dostawy deliveryrow dostępne na terenie danego, reszta zostaje ukryta (klasa none)
- klasa first zostaje przesunięta do pierwszej widocznej dostawy
Krok 2
- w zależności od zaznaczenia radio companyaddress, wiersze zawierające formcompanyname, formtaxid są ukrywane lub pokazywane
- w zależności od zaznaczenia checkbox differentaddress (inny adres dostawy), wiersze trdifferentaddress są ukrywane lub pokazywane (klasa none)
- countryselect otrzymuje zdarzenie onChange, które sprawdza czy wybrany kraj znajduje się w tablicy Shop.values.Country2Shipping; jeżeli nie zaznacza differentaddress i blokuje jego odznaczenie
- przycisk addressselectsubmit jest ukrywany (klasa none), jest on zbędny kiedy JavaScript działa, pobranie adresu odbywa się onChange
- addressselect otrzymuje zdarzenie onChange, które pobiera adres użytkownika o wybranym value (ID) i wypełnia pola <input> według otrzymanej treści