Strict Standards: Declaration of action_plugin_searchtext::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /lib/plugins/searchtext/action.php on line 14

Warning: Cannot modify header information - headers already sent by (output started at /lib/plugins/searchtext/action.php:14) in /inc/auth.php on line 313

Warning: Cannot modify header information - headers already sent by (output started at /lib/plugins/searchtext/action.php:14) in /inc/actions.php on line 544

Warning: Cannot modify header information - headers already sent by (output started at /lib/plugins/searchtext/action.php:14) in /inc/actions.php on line 544
style-graficzne:js-shop
Spis treści

Shop

Zmienna globalna Shop zawiera klasę MooTools rozszerzoną o (implementującą) obsługę zdarzeń.

Klasa zawiera minimalną ilość sztywno określonych selektorów, klas, tagów, etc. Jej funkcjonalność jest w większości abstrakcyjna i musi zostać dookreślona przez skrypt stylu graficznego.

W ramach klasy Shop zamknięte są również pod-klasy do określonej funkcjonalności (np. głosowania na produkt, lub obsługi wariantów), dlatego pełni on także funkcję namespace.

Atrybuty, metody

W deklaracji klasy Shop została umieszczona minimalna ilość niezbędnych atrybutów i funkcji. Pozostałe są przypisane do samej zmiennej (funkcji).

Metody i atrybuty klasy

Pozostałe funkcje są do użycia wewnętrznego. W celu dodania/modyfikacji powyższych należy użyć funkcji implement().

Shop.implement({
    perBrowserFix : {
        chrome : function() {
            ....
        }
    }
});

Metody i atrybuty zmiennej (funkcji)

Dla większej przejrzystości deklaracji klasy, większość funkcjonalności została wyciągnięcia poza nią - do osobnych funkcji.

Funkcje:

Atrybuty:

Deklaracja klasy vs funkcji

Do wszystkich atrybutów i funkcji instancja klasy Shop dostaje się poprzez funkcję pomocniczą

    get(name)

Najpierw przeszukiwana jest instancja klasy, następnie funkcji. Dzięki temu możliwe jest szybkie przesłonięcie poprzez implement(). Na przykładzie mapy fraz:

    Shop.implement({
        lang : {
            basket : {
                address_request_error : "Błąd podczas pobierania adresu."
            }
        }
    });

Jeżeli argument get() zawiera kropki, jest on rozbijany na części i każda poszukiwana jest oddzielnie.

    var s = new Shop();
    s.get('lang.basket.address_request_error');

Dzięki temu, poprzez implement() można przesłaniać tylko część atrybutów, a pozostałe zostaną odszukane w atrybutach funkcji, np.

    var s = new Shop();
    s.get('lang.common.product_select_stock');
    // == Shop.lang.common.product_select_stock

Pod-klasy

Większe funkcjonalności Shop pogrupowane zostały w pod-klasy, deklarowane jako atrybuty funkcji, np.

    Shop.productVoter = new Class({ .... });

Wszystkie inicjalizowane są wraz z instancją Shop za pomocą funkcji

subclass(_class)

Dostęp do ich instancji można uzyskać przez obiekt classes{}

    var s = new Shop();
    s.classes.productVoter

Każda sub-klasa ma tylko jedną aktywną instancję w ramach obiektu Shop.

Warunkowa inicjalizacja pod-klas

Każda pod-klasa, o ile ma zostać zainicjalizowana, musi posiadać jako argument funkcję condition(), która zwraca true. Brak tej funkcji, lub inny zwrot spowoduje pominięcie. Przykładowa deklaracja ze skryptu stylu graficznego:

    Shop.productVoter.condition = function() {
        var span = $$('span.votestars')[0];
        return !!($chk(span) && span.get('id'));
    }

Powyższa funkcja sprawdza, czy istnieje przynajmniej jeden <span> z klasą votestarts i niepustym id, który jest niezbędny do działania dla productVoter.

Lista

Inicjalizacja

Klasa Shop wymaga, aby wszystkie elementy DOM istniały w momencie utworzenia jej instancji, dlatego należy ją wywołać najwcześniej w trakcie zdarzenia /window.domready/. Domyślnie style aplikacji tworzą tylko jedną instancję i przypisują ją do zmiennej globalnej ShopInstance.

window.addEvent('domready', function() {
    window.ShopInstance = new Shop();
});

W trakcie inicjalizacji wywoływane są kolejno:

selectorFunctions

Wewnąŧrz selectorFunctions{} klasy należy umieścić obiekty zawierające selektor DOM oraz funkcję do wykonania na obiektach.

    Shop.implement({
        selectorFunctions : {
            popup : {
                selector : '.popup',
                domready : function(el) {
                    el.removeEvents('click').addEvent('click', function(e) {
                        new Event(e).stop();
                        $(this).blur();
                        window.open(this.href);
                    });
                },
                addelement : 'domready'
                load : false
            }
        }
    });

W powyższym przykładzie dla każdego obiektu zawierającego klasę „popup” zostanie dodane zdarzenie onClick. W trakcie inicjalizacji Shop dla każdego elementu wywoływana jest funkcja domready(). Ponadto można zadeklarować addelement - wywoływane dla zdarzenia /Shop.element.add/ oraz load - dla /window.load/. Jeżeli zamiast funkcji addelement będzie zawierało string 'domready', wywołana zostanie funkcja domready().

perBrowserFix

Wewnąŧrz perBrowserFix{} klasy należy umieścić mapowanie przeglądarka –> funkcja. Wywołane zostaną tylko odpowiednie funkcje.

    Shop.implement({
        perBrowserFix : {
            ie6 : function() {
                document.body.style.behavior = 'url("' + this.urls.base + 'styles/csshover3.htc")';
            },
            chrome : function() {
                $$('.centercol input', '.centercol button').each(function(el) {
                    if(el.get('value').length > 0 && 
                       el.get('name').match(/(mail|pass|login)/)) {
                           el.focus();
                           el.blur();
                    }
                });
            }
        }
    });

Jako atrybutów można używać wszystkich przeglądarek rozpoznawanych przez MooTools oraz ie67 dla IE6 oraz IE7.

Opcje

Obiekt Shop.useroptions{} służy do przechowywania opcji modyfikujących zachowanie Shop. Dostępne opcje:

    Shop.useroptions.milkbox.autoSize = false; //wyłączenie dopasowania dużych zdjęć do okna