Napisane: 5.12.2015, 17:29:28 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Stwórz metode publiczną "reset", czyszczącą stan obiektu i wywołuj ją zawsze po wywołaniu zapytania (czyli np w ciele metody "get", albo ręcznie z kodu klienckiego). @Daimos Co ma być raz? Chyba nie wywołanie metod obiektu, co? |
Forum: PHP · Podgląd postu: #1178220 · Odpowiedzi: 3 · Wyświetleń: 480 |
Napisane: 10.05.2015, 10:23:07 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Myślę, że to byłoby bardziej praktyczne, gdyby nie trzeba było się tyle przemieszczać między stronami. Struktura widoków powinna odzwierciedlać dziennik, natomiast tutaj jest takie ciągłe skakanie pomiędzy tabelami. Jedna syntetyczna tabela powinna wystarczyć dla widoku ocen całej klasy ze wszystkich przedmiotów. Z resztą pewnie już sam do tego doszedłeś. |
Forum: Oceny · Podgląd postu: #1157504 · Odpowiedzi: 11 · Wyświetleń: 2 285 |
Napisane: 5.02.2014, 21:26:13 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Zerknij na to (to samo posłałem Ci w paczce na priv, a nie chcę się poprawiać setny raz ): http://jsfiddle.net/aJaDJ/1/ |
Forum: JavaScript · Podgląd postu: #1089746 · Odpowiedzi: 3 · Wyświetleń: 371 |
Napisane: 5.02.2014, 17:28:25 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Musisz zresetować wartości pól select do 1.
|
Forum: JavaScript · Podgląd postu: #1089721 · Odpowiedzi: 3 · Wyświetleń: 371 |
Napisane: 18.01.2014, 22:37:05 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Jednak powinno to być trochę inaczej bo mieszają się znaki cudzysłowia i najprawdopodobniej wyskakuje błąd. Trzeba z tego kodu wyszukiwarki wyciąć to, co znajduje się w znacznikach <script> </script>, rezultat powinien wyglądać niej więcej tak: To co ma być w HTMLu, style, wiadomo, można umieścić w nagłówku:
natomiast to ma być osobno, najlepiej w nagłówku:
Mam nadzieje, że pomoże. |
Forum: Po stronie przeglądarki · Podgląd postu: #1086107 · Odpowiedzi: 7 · Wyświetleń: 590 |
Napisane: 21.01.2014, 15:58:47 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Może zacznę od tego: 3. jak pewnie zauważyłeś, najpierw pobieram kod HTML contentu, wprowadzam do niego wartości, a następnie content wprowadzam do ogólnego zarysu strony - można to zrobić prościej? ale w ten sposób, abym mógł szybko zmieniać kod HTML w jednym miejscu Właśnie widzisz, jest Polega to na tym, że pobierasz najpierw jeden widok z jakimiś tam zmiennymi i zapisujesz go do innej zmiennej:
I przesłaniu jej jako parametr przy ładowaniu innej strony:
EDIT: Zauważ, że możesz w ten sposób zagnieżdżać w sobie fragmenty HTMLa jak tylko chcesz. Po prostu pobierasz szablon do jednej zmiennej i tą zmienną przesyłasz jako parametr przy ładowaniu innego szablonu. Z kolei ten szablon znów możesz wykorzystać przy ładowaniu kolejnego szablonu, i tak w kółko. Zauważ też, że możesz załadować kilka plików HTMLi i potem przy ładowaniu głownego szablonu wykorzystać je jako poszczególne elementy na stronie:
Co do reszty...robisz to trochę naopak. Najpierw ładujesz kontroler i w nim parsujesz zmienne zapytania GET, POST i tam odczytujesz sesje itp. Chodzi o to, żeby to zrobić odwrotnie - na podstawie zmiennych zapytania - określić który kontroler załadować. |
Forum: Object-oriented programming · Podgląd postu: #1086578 · Odpowiedzi: 17 · Wyświetleń: 3 842 |
Napisane: 16.01.2014, 23:51:11 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Natomiast, jeśli chodzi o ładowanie widoków z zewnętrznych plików z HTML'em to sprawa wygląda tak, że mam następującą klasę:
i teraz gdybym miał taki plik HTML "przyklad.html": to mógłbym zrobić w swoim kodzie coś takiego:
.. i uzyskałbym w rezultacie html, w którym odpowiednie zmienne zostały wypełnione danymi z tablicy $zmienne: Oczywiście to jest dość prosty model takiego systemu. Weź pod uwagę, ze te widoki można zagnieżdzać w sobie używając metody "pobierz" klasy Widok, która zwraca sparsowany HTML, który z kolei można włożyć do innej tablicy i znów użyć jako parametru aby wyswietlić inny widok. Na temat metody "pobierz": To co wymaga pewnej uwagi to funkcja "extract" w metodzie "pobierz". Co ona robi? Zamienia klucze tablicy na nazwy zmiennych, przykład: Kolejno widzisz ta linia powoduje uruchomienia buforowania wyjścia - oznacza to, ze cokolwiek, co "zaincludujesz" nie zostanie od razu wypisane na ekranie. A includowane są po prostu pliki html ze wstawkami kodu php (jak w przykładzie z plikiem "przyklad.html". Pod te zmienne w includowanych plikach wstawiane są wartości (kod php jest parsowany) ale zawartość, jak już powiedziałem, nie jest wyświetlana, ale zapisywana w buforze. I tutaj pojawia się funkcja jej zadanie jest dość proste - zwraca wszystko co jest w buforze. Na końcu wyłączam buforowanie wyjścia i czyszczę bufor i zwracam zwartość zapisaną do zmiennej "tresc" Wybacz ale na dzisiaj tyle, jestem już zmęczony. Cieszę sie, że ten temat Ci pomógł |
Forum: Object-oriented programming · Podgląd postu: #1085784 · Odpowiedzi: 17 · Wyświetleń: 3 842 |
Napisane: 16.01.2014, 23:20:03 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
No więc tak... Co do nazw metod - znacznie lepiej. Pozostaje nazwa pliku "view.php", która powinna brzmieć "page.php" albo klasa "Page" powinna otrzymać nazwę "View". Osobiście wolałbym żeby w rezultacie mieć klasę "View" w pliku "view .php" Masz problemy z nadawaniem właściwych, ścisłych i jednoznacznych nazw i to trochę jest gubiące.
Trochę zbędne wydaje mi się tworzenie osobnych klas dla widoku i "theme'u". Osobny widok powinien być osobną formą reprezentacji informacji. |
Forum: Object-oriented programming · Podgląd postu: #1085779 · Odpowiedzi: 17 · Wyświetleń: 3 842 |
Napisane: 16.01.2014, 22:30:23 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Tam jest literówka. Chodzi o to, ze mając klasę "Info" nie trzymał jej w pliku o nazwie "info_functions.php" tylko w pliku o nazwie "Info.php". Natomiast, jeśli będziesz trzymał kod PHP w funkcjach i zwracał tak jak w przypadku klasy "page" i metody "PageStart" to będziesz miał problemy później z edycją kodu HTML w programach do edycji HTML'a. Poza tym trochę nie odpowiada to modelowi MVC bo trzymasz logikę i widok w klasie, zamiast podzielić kod wyświetlający od kodu wyświetlanego. Ja swoim frameworku zrobiłem to tak:
Reszty za bardzo się doczytać nie mogę - tutaj jeszcze uwaga odnośnie nazewnictwa metod - powinny one być czasownikami w trybie rozkazującym, a nie rzeczownikami. Co do wydajności powiedzieć trzeba, że na tym etapie to nie ma większego znaczenia. Zagadnienia cacheowania, które w PHP są głównym tematem optymalizacji stają się istotne w późniejszych etapach rozwoju systemu natomiast pisanie wydajnych algorytmów to w PHP temat prawie nieobecny chyba, że ktoś robi coś naprawdę głupiego. Popraw kod tak, żeby dało się go ogarnąć to spróbuję powiedzieć coś więcej. |
Forum: Object-oriented programming · Podgląd postu: #1085764 · Odpowiedzi: 17 · Wyświetleń: 3 842 |
Napisane: 16.01.2014, 21:52:03 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
ad2. Ciężko się to czyta. Z kilku powodów: - lepiej gdybyś nazywał pliki z klasami tak według nazwy klasy np w "Info.php" klasa "Info" - nie ma potrzeby ponawiać w nazwach metody nazwy klasy - nie "Page->ShowPage", wystarczy "Show" - preferuję Javowy styl nazewnictwa (interCaps) - pierwsze słowa w nazwach metod i zmiennych od małej litery czli "show", a nie "Show" natomiast nazwy klas z dużej (CamelCaps) - nie jest to rzecz jasna obowiązkowe. Nie powinieneś zwracać kodu HTML tak jak to robisz. Lepiej gdybyś ładował szablony z plików HTML i wyświetał używając buforowania wyjścia (output buffering). |
Forum: Object-oriented programming · Podgląd postu: #1085751 · Odpowiedzi: 17 · Wyświetleń: 3 842 |
Napisane: 6.01.2014, 21:01:08 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Pisz nazwy zmiennych z małej litery, a rozwiązanie najprostsze wygląda tak:
|
Forum: JavaScript · Podgląd postu: #1083902 · Odpowiedzi: 2 · Wyświetleń: 272 |
Napisane: 30.12.2013, 22:36:57 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Odpowiedź na Twoje pytanie jest dość prosta. Otóż tworząc z poziomu JavaScript tag "script" i ustawiając jego źródło informujesz tym samym przeglądarkę, że ma wykonać kolejne zapytanie pod podane źródło, a więc robiąc tak:
przeglądarka zacznie wgrywać nowy adres, w tym przypadku plik skryptu znajdującego się pod ścieżką "iframe.js". Tak się składa, że nie dzieje się to natychmiast, a ładowanie następuje asynchronicznie, w tle, tak jak w przypadku XHR (XmlHttpRequest, czy krócej "AJAX"). Oznacza to, że zmienna "user" zdefiniowana w tamtym pliku nie pojawi się natychmiast, a dopiero po wykonaniu całego procesu: pobrania pliku js i wrzucenia go w dokument. Aby wykonać kod po załadowaniu tego dokumentu należy się posłużyć funkcją zwrotną ("callback'iem"):
|
Forum: JavaScript · Podgląd postu: #1082854 · Odpowiedzi: 5 · Wyświetleń: 439 |
Napisane: 30.12.2013, 12:07:02 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Poza tym proponowałbym - zamiast używania anonimowych funkcji do korzystania z "przestrzeni nazw":
Anonimowe funkcje są fajne - dla małych fragmentów kodu - przynajmniej takie moje zdanie po tym jak potrafią one namieszać w kodzie, który w ostateczności staje się jednym wielkim śmietnikiem. Moduły w dużym stopniu elminują konieczność ich używania jeśli chodzi o moduły. W kodzie czysto obiektowym potrzebne jest już zupełnie inne podejście do tematu. |
Forum: JavaScript · Podgląd postu: #1082731 · Odpowiedzi: 5 · Wyświetleń: 439 |
Napisane: 18.12.2013, 09:51:05 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
|
Forum: Po stronie przeglądarki · Podgląd postu: #1081034 · Odpowiedzi: 2 · Wyświetleń: 357 |
Napisane: 11.12.2013, 13:27:11 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Mała sugestia: nie wywołuj HTML'a przez "echo" w PHP bo to wygląda strasznie i jest kompletnie nieprawidłowe dla programów podświetlających składnię. Nie rób tak: tylko tak: Tak samo z pętlami, możesz zrobić:
I o pomoc Ci będzie łatwiej. Cytat
Mogę liczyć na jakieś wskazówki? Znów masz odwołanie tylko do pierwszego elementu o id "potwierdzenie" ($("#potwierdzenie")). Wskazówki: Ja to robiłem w ten sposób, że elementowi, który ma przypisane zdarzenie nadawałem id w formie "nazwa_numer", np "formularz_3", "submit_3" a w JSie dzieliłem string id na dwa substringi: "submit" i "3" poprzez metodę split(); Kod wynikowy wyglądał mniej więcej tak:
|
Forum: JavaScript · Podgląd postu: #1079937 · Odpowiedzi: 6 · Wyświetleń: 471 |
Napisane: 8.12.2013, 22:01:57 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Różni się w jednym zasadniczym aspekcie: renderowanie czcionek. Kiedy jeszcze siedziałem na linuxie, a było to jakieś 2-3 m-ce temu były z tym wielkie problemy, z dwóch względów. Po pierwsze brak tych samych czcionek co w systemach MS. Można je doinstalować ale nie jest to takie proste dla początkującego. Po drugie - antyaliasing i filtrowanie pikseli daje zupełnie inne efekty niż pod Windowsem. Jak na mój gust czcionki renderowane w linuxie są okropne i nic z tym nie da się zrobić. Reszta wygląda właściwie, a przynajmniej ja się niczego nie dopatrzyłem. EDIT: Zapomniałem zaznaczyć, że sposób renderowania wpływa w wielu miejscach na łamanie linii ponieważ wydłuża słowa. Miałem wiele problemów z tym aby tekst nie łamał się na linuxie. |
Forum: Po stronie przeglądarki · Podgląd postu: #1079504 · Odpowiedzi: 6 · Wyświetleń: 953 |
Napisane: 26.11.2013, 20:21:03 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Tak, ręcznie, nie ma innej opcji, chyba, że jesteś specjalistą od sieci neuronowych i rozpoznawania obrazów. |
Forum: Po stronie przeglądarki · Podgląd postu: #1077546 · Odpowiedzi: 4 · Wyświetleń: 417 |
Napisane: 22.09.2013, 13:39:31 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Wygląda na to jednak, że tego nie można zrobić: http://stackoverflow.com/questions/6063522...ry-beforeunload Jedynym rozwiązniem jest użycie tego co już masz z tym, że musiałbyś podać informację (prośbę) o to, żeby użytkownik pozostał na stronie i wypełnił ankietę / dał odpowiedź na powód dla którego opuszcza stronę: W kodzie wyglądałoby by to tak:
|
Forum: Po stronie przeglądarki · Podgląd postu: #1066673 · Odpowiedzi: 6 · Wyświetleń: 2 026 |
Napisane: 20.09.2013, 16:22:45 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
|
Forum: Po stronie przeglądarki · Podgląd postu: #1066407 · Odpowiedzi: 6 · Wyświetleń: 2 026 |
Napisane: 12.09.2013, 16:06:57 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Ja bym nie robił takich rzeczy z definicjami zmiennych jak wymienianie ich po przecinku w sytuacji gdy przypisuje się do nich wartości z funkcji. Coś takiego wygląda tylko wtedy, kiedy wchodzi w rachubę proste przypisanie wartości albo same deklaracje:
Chociaż i tego rzadko używam bo w programowaniu obowiązuje zasada - deklaruje zmienne jak najbliżej miejsca w którym zostaną użyte. Kolejną rzeczą, która mi się rzuca w oczy - w JS zazwyczaj nie używa się nazw obiektów z dużej litery - "SlideMenu" jest źle, powinno być "slideMenu". Duże litery są pozostawione dla klas (a w JS to się nazywa konstruktor). Zauważ też, że "show.parent().hide()" i "show.parent().show()" wygląda idiotycznie Może znalazłyby się lepsze nazwy dla zmiennych "show" i "hide" ? Dla zaawansowanych: Nie chce mi się przepisywać Twojego kodu ale - funkcje anonimowe, które podajesz w $.click są na tyle rozbudowane, że możnaby im nadać osobne nazwy i odwołać sie do nich w innych polach obiektu "slideMenu", a w init zrobić tylko obiekt.click(pokaz.bind(this)); Generalnie to wszystko to są takie igraszki dla efektu. Można dzięki temu, oczywiście zbudować sobie zaplecze elementów do ponownego użytku. Spróbuj jednak wymyślić sobie jakąś większa aplikację, która zmusiłaby Cię do tworzenia modułów i używania wzorców projektowych, jeśli chcesz poznać "smak prawdziwego programowania" (nie taki fajny swoją drogą ). |
Forum: JavaScript · Podgląd postu: #1065037 · Odpowiedzi: 17 · Wyświetleń: 962 |
Napisane: 10.09.2013, 19:45:42 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Funkcja requestAnimationFrame służy do robienia animacji tak jak setInterval i setTimeout, a jej plusem ma być to, że ma mieć lepszą wydajność od pozostałych. Piszę "ma" bo to implementacja(czyli jak ta funkcja rzeczywiście się działa) zależy od przeglądarki jednak postaram Ci się to wyjaśnić jak tej funkcji użyć, zakładając pewną (oczywistą) implementację przez przeglądarkę. Załóżmy, że masz do zrobienia jakąś animację, na przykład masz DIVa, który będzie się rozszerzać. Jest kilka sposobów na to, możesz użyć: - setTimeout - setInterval, albo - requestAnimationFrame W przypadku dwóch pierwszych sprawa wygląda dość prosto, używając setTimeout robisz coś takiego (będę pisał z kilkoma uproszczenami) :
Włączasz okno przeglądarki - okno się ładuje, po załadowaniu wykonuje się poszerz(). Funkcja poszerz() na końcu wyznacza czas po którym znów ma sie wykonać (setTimeout) . Efekt jest taki, że funkcja się zapętla i wykonuje się co 60 ms Używając setInterval wyznaczasz interwał (przerwy) pomiędzy wykonaniami tej samej funkcji:
Program analogiczny do powyższego. No i pora na requestAnimationFrame. Funkcja requestAnimationFrame (będę używał skrótu RAF) przyjmuje za argument tylko inną funkcję, a nie przyjmuje żadnych odstępów czasowych. Ktoś mógłby się zapytać, w jaki sposób w takim razie zrobić przy jej pomocy animację? Otóż RAF nie działa tak jak setTimeout i setInterval. RAF powoduje że funkcja, którą jej prześlemy wywoła się w momencie najlepszym dla przeglądarki. Co oznacza ten najlepszy moment? Ten moment to taki moment w którym synchronizacja animacji z odświeżaniem ekranu jest najlepsza. Powiedzmy, że w powyższych przykładach dałeś 1 milisekunde. Oznacza to, że Twoja funkcja "poszerz()" musiałaby się wykonywać co 1 milisekunde. Co dałoby animację , której częstotliwość wynosi 1000 klatek/sekunde (fps). Teraz pytanie: po co to komu, skoro okno przeglądarki jest rysowane z częstotliwością np. 60 klatek/sekundę? Marnujesz tylko procesor. Problem polega na tym, że Ty nie wiesz z jaką częstotliwością okno przeglądarki jest wyświetlane. To może być 60 fps lub równie dobrze 10 fps, jeśli masz otwarte 20 kart i jakąś mocną grę w tle. To wie sama przeglądarka i tylko ona zna najlepszy moment wykonania Twojej funkcji tak aby została ona wykonana przed kolejnym odświeżeniem okna przeglądarki. W kodzie będzie to wyglądało tak:
Zauważ jednak pewną rzecz.. Twój DIV będzie się poszerzał w takim tempie w jakim okno przeglądarki jest odświeżane. Żeby sobie z tym poradzić najlepiej jest obliczyć czas jaki upłynął od ostatniego odświeżenia:
Tak więc teraz im większa różnica pomiędzy poszczególnymi wywołaniami poszerz() tym więcej poszerzy się DIV. W przypadku 1 klatki na sekundę poszerzy się o (1000 * 0.01 = 10) pikseli/ klatkę, przy 60 klatkach/sekunde to będzie (1000/60 * 0.01 = oblicz sobie pikseli / klatkę. 1 klatka na sekundę daje bardzo niepłynną "animację" to też zobaczysz diva , który będzie się poszerzał skokowo, w przypadku 60 zobaczysz płynną animację. Mam nadzieję, że to nieco wyjaśnia użycie RAF. Jak powiedziałem wiele zależy od tego jak to implementują przeglądarki. W każdym razie - podstawowa zasada - to synchronizacja odświeżania okna z funkcją, która ma animować obiekty. |
Forum: JavaScript · Podgląd postu: #1064701 · Odpowiedzi: 2 · Wyświetleń: 1 160 |
Napisane: 7.09.2013, 20:17:41 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Spróbuj tak.
można też użyć operatora bind, to powinno działać:
Z tym że ten drugi sposób w którejś przeglądarce nie chodzi, ale jest na to sposób: https://developer.mozilla.org/en-US/docs/We...Function%2Fbind |
Forum: JavaScript · Podgląd postu: #1064234 · Odpowiedzi: 2 · Wyświetleń: 371 |
Napisane: 30.08.2013, 11:50:33 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Jeśli to ma wyglądać dobrze, to CSS3 się do tego nie nadaje. Najlepszym rozwiązaniem byłoby użycie elementu "<canvas>". Są teź do tego biblioteki: http://kineticjs.com/ http://www.createjs.com/ http://fabricjs.com/ Potrzebna będzie też jakaś funkcja która tworzy krzywą, po której obiekt może się poruszać, lub ewentualnie możesz stworzyć krzywą ręcznie z wielu punktów. |
Forum: Po stronie przeglądarki · Podgląd postu: #1062994 · Odpowiedzi: 5 · Wyświetleń: 660 |
Napisane: 29.08.2013, 20:12:36 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Przeanalizuj komunikat o błędzie. |
Forum: JavaScript · Podgląd postu: #1062895 · Odpowiedzi: 2 · Wyświetleń: 575 |
Napisane: 26.08.2013, 15:02:04 | |
Grupa: Zarejestrowani Postów: 205 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Da się liniowo jak to jest w pierwszym przykładzie http://jsfiddle.net/AHvJf/ : div1.onclick = div1.onmouseout = alertCos; |
Forum: JavaScript · Podgląd postu: #1062322 · Odpowiedzi: 8 · Wyświetleń: 415 |
Nowe odpowiedzi Brak nowych odpowiedzi Popularny temat (Nowe) Popularny temat (Brak nowych) |
Sonda (Nowe) Sonda (Brak nowych) Zamknięty temat Przeniesiony temat |
Wersja Lo-Fi | Aktualny czas: 29.03.2024 - 09:58 |