To co przedstawię poniżej to jedna z moich koncepcji na umilenie życia czytelnikom mojego bloga w jego najnowszej odsłonie (kiedyś się pojawi :P). Oczywiście chodzi o tematy związane z webmasteringiem, a więc takie gdzie listing kodu jest nieodłączną częścią wpisu. Z reguły takie wpisy zawierają kilkanaście listingów, a wiele z nich prezentuje poszczególne etapy powstawania danego rozwiązania. Postanowiłem tą formę przekazywania informacji urozmaicić.

W tym celu stworzyłem wstępną wersję rozwiązania, które pozwoliłoby sprawnie przeglądać listing kodu. Jako, że wiele osób zwraca uwagę na nadużywanie JavaScript na stronach ja swój skrypt przemyślałem tak by ludzie z wyłączonym JS nie ucierpieli zbytnio (choć sporo stracą ;) ).

Sytuacja wyjściowa

Na początku nasz listing wyglądałby tak - jest to wersja jaką ujrzą wszyscy ci, którzy mają wyłączony JavaScript w swojej przeglądarce. Kolejne etapy zmian w kodzie jak widać stanowią kolejne elementy pre o określonej strukturze:

<pre class="code[grupa]">
        <code>
                /**
                        Komentarz do kodu
                **/
        </code>
        <code>
                Jakiś kod
        </code>
</pre>

Według mnie taka postać jest wystarczająco czytelna, a jak się bardzo komuś nie podoba - niech włączy JS :)

Dodam jeszcze, że zmienna grupa w nazwie klasy pozwala nam stworzyć kilka osobnych listingów kodu poprzez nadanie znacznikom pre tej samej wartości tej zmiennej (jeżeli spojrzycie w kod przykładowej strony to wszystko stanie się jasne, jeżeli jeszcze nie jest).

Co robi skrypt ?

No właśnie - teraz pora na skrypt :) Przy okazji dodam, że wymaga on obecności MooTools 1.1(1). A sam skrypcik wykonuje kilka ciekawych operacji, które dają równie ciekawy efekt - przede wszystkim ukrywa wszystkie znaczniki pre z danej grupy poza pierwszym, następnie tworzy prosty interfejs i pozwala czytelnikowi strony cieszyć się ładnym listingiem kodu. Wszystkie komentarze zawarte wcześniej w kodzie teraz mają swoje osobne miejsce, a czytelnik wie na jakim etapie omawiania kodu się właśnie znajduje, no i może szybko przenieść się do innego miejsca listingu. A przy okazji wpis na stronie staje się o wiele krótszy ;)

Ale to ciągle wersja beta ;)

Skrypt jest niewątpliwie dość krótki, ale oznacza to parę niedogodności:

  • Z przyczyn dość praktycznych działa on poprawnie dla grup składających się z co najmniej trzech pojedynczych listingów kodu. (można to zmienić, ale po co dodawać zbędny kod),
  • Pojedyncze listingi z danej grupy muszą znajdować sie jeden po drugim (tzn. może być pomiędzy nimi wszystko poza innymi listingami z innej grupy),
  • Jesteśmy przywiązani do struktury listingu kodu wymaganej przez skrypt.

A teraz pytanie do Was drodzy Czytelnicy - przyda się ? Czy lepiej zostać przy starej formie prezentowania kodu lub dodać jakieś opcje (na przykład możliwość przełączania się pomiędzy listingiem "tradycyjnym" i moim ;) ) ?

Komentarze do wpisu "Koncept: Listing kodu "krok po kroku"":

1. Adriano napisał(a):
25 listopada 2007, 23:47:06

Wersja druga z js jest bardziej przejrzysta, ponieważ komentarze zostały wydzielone i odpowiednio ostylowane, nie zlewa się wszystko ze sobą – to jest plus.

Jednak stosując taką metodę (z js) zmusza się czytelnika do wykonywania określonych akcji podczas czytania – mi to troszkę przeszkadza, więc zaliczam to na minus.

Ja najbardziej wolałbym rozwiązanie takie: wygląd taki jak w przykładzie drugim (rozdzielenie kodu od komentarzy), jednak z wszystkimi widocznymi krokami (widoczne wszystkie razem kolejno po sobie – czyli normalnie rozwinięte).

Myślę, że dla wielu osób nowa forma prezentacji kodu będzie przydatna. Dla osób wybrednych takich jak ja, proponuje opcję ‘pokazuj kod standardowo’ z zapamiętaniem ustawienia – to powinno załatwić sprawę ;)

2. Dziudek napisał(a):
25 listopada 2007, 23:54:03

@Adriano – dzięki za ten komentarz – już wiem, że opcja przełączania trybów z zapisem w cookies będzie niezbędna ;) Co do wyglądu – rozważałem już możliwość by zamiast elementu code w znaczniku pre wstawić przed nim jakiś element z komentarzem, a skrypt by go w wypadku listingu „krok po kroku” umieszczał w odpowiednim bloku, a w pozostałych wypadkach listing byłby podobny do dawnej postaci – tekst-kod-tekst-kod etc. ;) W każdym razie koncepcja jest do dopracowania, co przewidywałem od razu ;)

3. Jony napisał(a):
26 listopada 2007, 13:40:11

Jak dla mnie wersja JS jest trochę mało wygodna. Nie mogę obejrzeć całego kodu, co mi nieco przeszkadza. Popieram pomysł z opcją – pokaż kod standardowo.

4. coldpeer napisał(a):
26 listopada 2007, 13:49:28

Dodatkowo możesz dodać kolorowanie składni (JS dla joggera).

Kiedyś używałem dpSyntaxHighlighter, ale ostatnio natknąłem się na prettify :)

5. Dziudek napisał(a):
26 listopada 2007, 17:31:48

@Jony – no wersja standard/js już z pewnością będzie w moim ToDo dla tego skryptu ;)

@coldpeer – szczerze mówiąc ten skrypt trochę zajmuje, poza tym wykonuje z pewnością sporo operacji więc nie wiem czy byłoby to korzystne no chyba, że dodałbym opcję kolorowania kodu i wtedy dołączać moduł z kolorowaniem, jeżeli user włączył taką opcję ;)

6. coldpeer napisał(a):
26 listopada 2007, 17:35:21

Tu masz wersję nieco zoptymalizowaną [by night :)] (<pre class=„kod”>...</pre>) – 16K.

7. Dziudek napisał(a):
26 listopada 2007, 17:37:41

@coldpeer – ja bym najpierw zaczął od wywalenia tego co mi się na pewno nie przyda (słowa kluczowe języków innych niż JS ;) IMHO do 8kB się spokojnie z tym da zejść, tylko musiałbym z tym posiedzieć ;] )...

8. coldpeer napisał(a):
26 listopada 2007, 17:38:37

(oczywiście w ostatniej linijce zamień xprettyPrint(); na prettyPrint(); ;)

A rozmiar oryginalnego pliku wynosi 40K…

//edited: jak zejdziesz poniżej tych 16 kB, to daj znać ;) [tylko powiedz, jakie słowa wyciąłeś, ale znając życie te != JS, a ja właśnie chcę == JS ;-P]. Tak czy siak myślę, że góra co do 13-14 zejdziesz ;)

9. Dziudek napisał(a):
26 listopada 2007, 17:40:47

@coldpeer – wiesz plik Core.js w Moo 1.2 z komentarzami zajmuje 17kB, a bez nich ~6kB ;) Ale tak jak mówię do 8kB IMHO spokojnie da radę zejść tylko trzeba wywalić to co zbędne ;) JS to język w którym wiele rzeczy da się niesamowicie skrócić tylko trzeba nieraz pokombinować ;)

10. coldpeer napisał(a):
26 listopada 2007, 17:43:04

No to czekam :) Jeśli jakieś optymalizacje różne od wycinania słów kluczowych, to chętnie skorzystam :)

11. Dziudek napisał(a):
26 listopada 2007, 17:46:55

@coldpeer – wiesz nie wiem czy prędzej nie napiszę własnej klasy do kolorowania kodu JS :D Bo w sumie mi tylko JS potrzebny ;) Póki co skupię się na listingu kodu, żeby działał lepiej niż obecnie i miał więcej opcji :)

Dodaj komentarz:

Textile Lite włączony ( szczegółowy opis znaczników ):
*strong* | # lista numerowana | * lista wypunktowana | _em_ | __italic__ | "link":http:// | bq. cytat.