michzimny / teamy-diff-deals

Let JFR Teamy use different deals per table
MIT License
0 stars 1 forks source link

Wyróżnianie rozkładów pojedynczego stołu #5

Closed emkael closed 6 years ago

emkael commented 6 years ago

Zmiany sprawiają, że wśród rozkładów wyróżniany jest pojedynczy, bieżący stół, czyli rozwiązują #3.

Po kolei:

Przykład: pierwsza runda tego turnieju: https://emkael.info/brydz/diff-deals/ivld_rr1_runda1.html Wczytałem do niej losowe rozkłady, które nie mają żadnego związku z tym turniejem, zignoruj również fakt, że protokół wyświetla butlera. W pierwszym rozdaniu usunąłem również ręcznie jeden zapis oraz dodałem refresh strony, żeby pokryć więcej scenariuszy. Można podlinkować pojedyncze rozdanie, np. tak: https://emkael.info/brydz/diff-deals/ivld_rr1_1b-7.html#table-3 Można również podlinkować cały protokół: https://emkael.info/brydz/diff-deals/ivld_rr1_1b-7.html (i bez referrera wyświetli wszystkie stoły).

Do tego przyjąłem następujący sposób przełączania kontekstu (poza nawigacją z kontrolki):

Ze zmian, które musiałem wprowadzić, poza wprowadzeniem linków do pojedynczego rozkładu (z nagłówka "Stół X - Rozdanie Y"):

Testowałem pod Chromem, a następnie pobieżnie pod Firefoksem, Operą, IE (11) i Chromem na Androidzie.

Z rzeczy, które jeszcze trochę mi się nie podobają, to że najazdy myszy oraz kliknięcia przewijające stronę są mało płynne. Jest 3 w nocy i nawet nie próbuję myśleć, co można z tym zrobić.

Do tego oryginalna struktura strony z protokołem jest taka, że zdarzenia myszy musiałem przypinać do wierszy tabeli, a czasem kursor z jakichś powodów trafia w martwą przestrzeń między wierszami tabeli i np. stół się nie podświetla. Można to ulepszyć, zamykając każdy stół w jakiś osobny element - czyli rozbijając tabelę protokołu na wiele odrębnych tabel, ale ta używana biblioteka PHP do modyfikacji DOM trochę mnie przestraszyła swoją prostotą (przykład: dobrą godzinę kombinowałem, jak usunąć element, nie uciekając się do str_replace na elemencie nadrzędnym).

Jeśli będziemy testować i poprawiać to rozwiązanie, można by też było jakoś się zabezpieczyć przed cache'owaniem tdd.js w przeglądarce.

No i nie wiem, czy 0.2 to właściwa wartość wyszarzenia.

Wygląda na to, że edytor automatycznie wyciął z pliku PHP spacje na końcach linii, sorry.

michzimny commented 6 years ago

dobrą godzinę kombinowałem, jak usunąć element, nie uciekając się do str_replace na elemencie nadrzędnym

Gdzieś wyczytałem, że autorzy liba, przynajmniej przy tej, przestarzałej wersji, zalecali:

$element->outertext = '';

Czyż nie intuicyjne? :)

Czyli coś takiego: https://github.com/michzimny/teamy-diff-deals/pull/5/commits/8f49020717fb7f33d3fd5d4264c1c419c1e65a5c

emkael commented 6 years ago

Czytałem, próbowałem.

Tobie zadziałało?

michzimny commented 6 years ago

Wrzuciłem na PZBS, na razie grupa N: http://www.pzbs.pl/wyniki/liga/liga2017-18/1liga/n/npo21t1-1.htm

Pokrótce przetestowałem cache i wygląda, że ktoś się postarał, żeby nic nie było keszowane: cache-js-pzbs

Nie wiem, czy kwestia serwera, czy co, ale w każdym razie wygląda, że na PZBS-ie na razie problemu z cache dla css/js nie będzie.

emkael commented 6 years ago

Później były jakieś komentarze o odświeżaniu DOM, w stylu $dom->load($dom->save()), które też niewiele zmieniały.

michzimny commented 6 years ago

Czytałem, próbowałem.

Tobie zadziałało?

Ok, chyba rzeczywiście nie działa :/

Ale ogólnie tak tego używam: https://github.com/michzimny/teamy-diff-deals/blob/64b94f2831022d09f7a5025139c857e0d0517ce7/tdd-bootstrap.php#L62

Może problemem jest, że to head albo że niedomknięty tag. To przywracam Twoje...

michzimny commented 6 years ago

Jak w tym samym katalogu na serwerze mamy turniej bez dif-deals, to niepotrzebnie ingerujemy, np. http://www.pzbs.pl/wyniki/liga/liga2017-18/1liga/n/nrr11t1-1.htm

To chyba jest zastosowanie mojej zmiennej modified. Jeśli nie dokleiliśmy jeszcze żadnego protokołu, to może nie ma sensu doklejać css/js? Czyli przesunąć to do wnętrza "if ($modified)"?

michzimny commented 6 years ago

Uwaga, ciężkie user experience :p

I druga rzecz - jak jest realizowane przescrollowanie do danego stołu? Czy można by scrollować nie do danego h4, ale tak do wysokości ok. 10px przed rozpoczęciem tr-a będącego rodzicem tego h4?

Wyjaśniam. Teraz klikam na rozdanie w lewej ramce (kontrolce meczowej), a w prawej ramce przeładowuje się protokół i ten pożądany jest już pierwszym od góry (dzięki temu PR). Zastanawiam się, czy to nie będzie nieco nieintuicyjne dla użytkowników, którzy mieli już do czynienia z dotychczasowym interfejsem. Skoro przeglądają mecz nr 6, to od razu po przeładowaniu protokołu z przyzwyczajenia scrollują go w dół, bo na pierwszy rzut oka nie widać, że jest już prawidłowo przewinięty. Gdyby auto-scroll zatrzymał się jakieś 40px powyżej h4 (czyli o 30px padding-top'a tr'a i jeszcze kolejne 10px, o których pisałem), to już na pierwszy rzut oka byłoby widać, że coś się samo przescrollowało po prawej, więc pewnie nie trzeba ruszać.

O tak, jak niżej: scroll

emkael commented 6 years ago

Całe przewijanie opiera się o nawigację do #table-N.

Pewnie należałoby wrzucić element, do którego się skacze (id="table-N") gdzieś indziej, niż jest teraz (teraz jest to ten sam nagłówek, który jest linkiem).

michzimny commented 6 years ago

Pewnie należałoby wrzucić element, do którego się skacze (id="table-N") gdzieś indziej, niż jest teraz (teraz jest to ten sam nagłówek, który jest linkiem).

Ok, to zostawmy to na przyszłość (https://github.com/michzimny/teamy-diff-deals/issues/6).

A to gryzienie się z protokołami nieobsługiwanymi przez diff-deals poprawiłbyś?

emkael commented 6 years ago

Jeśli nie dokleiliśmy jeszcze żadnego protokołu, to może nie ma sensu doklejać css/js? Czyli przesunąć to do wnętrza "if ($modified)"?

Optymalnie byłoby chyba, gdyby w przypadku nieznalezienia pliku(ów) z rozkładami, skrypt jak najszybciej robił pass-thru oryginalnego HTMLa.

michzimny commented 6 years ago

Optymalnie byłoby chyba, gdyby w przypadku nieznalezienia pliku(ów) z rozkładami, skrypt jak najszybciej robił pass-thru oryginalnego HTMLa.

Słusznie.

I wtedy też istnienie tej mojej zmiennej $modified nie jest potrzebne, bo to warunkuje tylko usuwanie nagłówka tabeli. Można go usuwać pod tym samym warunkiem, pod którym będziemy doklejać css/js - czyli że znalazł się jakikolwiek plik z rozkładami dla tego protokołu.

emkael commented 6 years ago

Ok, jutro się tym zajmę.

emkael commented 6 years ago

Scaliłem zmiany z drugiego PR (znaki specjalne w prefiksie), do tego w 4e91dd3 dopisałem przesyłanie niezmienionego pliku źródłowego w przypadku braku PBNów.

To się odbywa na poziomie skryptu wejściowego (tdd-protocol.php), a z tdd-bootstrap.php wyrzuciłem w ogóle zmienną $modified.

michzimny commented 6 years ago

Wrzuciłem do wszystkich lig na PZBS.