CodersCommunity / forum.pasja-informatyki.local

Środowisko deweloperskie forum
https://forum.pasja-informatyki.pl
25 stars 7 forks source link

Dodanie możliwości otwarcia bloczka z kodem w nowym oknie #282

Open ScriptyChris opened 3 years ago

ScriptyChris commented 3 years ago

Padła propozycja, aby do bloczka dodać możliwość otwierania go w nowym oknie.

Teoretycznie taki ficzer wymaga backendu, żeby każdy bloczek miał swój unikalny URL tworzony na podstawie id posta, w którym znajduje się bloczek i numeru bloczka w tymże poście. Natomiast coś takiego da się też zrobić bez udziału backendu. Przetestowałem na szybko takie rozwiązanie (ogólnie działa) i o ile z podpięciem CSS-a nie było by problemu, to już podpięcie skryptu obsługującego ficzery bloczka jest problematyczne, gdyż /qa-plugin/ckeditor4/plugins/syntaxhighlight/init.js sprawdza, czy na stronie jest dostępny SyntaxHighlighter. W tym konkretnym przypadku nie ma jednak potrzeby samego kolorowania składni w bloczku, bo można pokazać jego wyjściową formę na podstawie sparsowanego kodu HTML bloczka wprost z konkretnego posta na forum. Problem natomiast leży w dość monolitycznym charakterze skryptu init.js, który uruchamia się w momencie ładowania strony i jest odpowiedzialny nie tylko za obsługę samego bloczka, ale też uprzednio koloruje składnię i normalizuje nieobsługiwane języki w bloczkach. Zatem, trzeba by najpierw wydzielić ze skryptu init.js część odpowiedzialną za samą obsługę już sparsowanych bloczków do osobnego pliku (optymalnie - modułu) i taki skrypt podpiąć do strony otwartej w nowym oknie oraz - oczywiście - na stronie tematu forum (to była by już refaktoryzacja obecnego kodu).

Nie wiem natomiast czy użycie window.open do tego ficzera jest dobrym pomysłem, ale wydaje mi się, że jest to prostszy sposób niż dodanie na backendzie obsługi generowania kodu HTML dla wybranego bloczka w konkretnym poście na podstawie metadanych i zwracanie URL'a, pod którym taki bloczek można pobrać.

Argeento commented 3 years ago

Stwórz nową podstronę na forum i przyjmuj kod/tytuł_strony jako parametr w urlu

ScriptyChris commented 3 years ago

A w jaki sposób kod/tytuł_strony pomoże odnieść się do konkretnego bloczka z konkretnego posta?

Argeento commented 3 years ago

Kod - w sensie kod z bloczka, tak samo możesz przekazać jego id, jak i id posta

ScriptyChris commented 3 years ago

Czyli na forum ma być sobie serwowana jakaś podstrona z boilerplate'm bloczka i już podpiętym JS-em i CSS-em do jego obsługi, lecz dopiero uruchomienie/odwiedzenie tej podstrony z odpowiednim parametrem w URL-u - którym jest kod (zawartość) bloczka - ma ten boilerplate zapełniać wyświetlając bloczek w pełnej formie? Brzmi ciekawie, tylko obawiam się, że przy bloczkach z dużą ilością kodu, limit znaków w URL-u może zostać przekroczony. Byłbym bardziej za tym, żeby słać treść bloczka w payloadzie POST-a - ale to już raczej szczegóły implementacyjne.

Niemniej, podoba mi się rozwiązanie z window.open( ... ) ze względu na prostotę - brak konieczności dłubania w backendzie. Choć nie wiem, czy byłoby ono poprawne samo w sobie.

Poza tym, pojawiła się też propozycja - którą można potraktować zarówno jako inną formę realizacji tego ficzera, jak i dodatkową - żeby bloczek z kodem był przesuwalny na stronie. Wtedy, można czytać post i obok widzieć załączony do niego bloczek; albo pisać swój post i obok zerkać na bloczek.

Argeento commented 3 years ago

Można zastosować dictionary encoder żeby znacząco zmniejszyć payload (czy to w get czy post)