Jak zbudować własny edytor tekstu w przeglądarce?

Praca programisty polega na rozwiązywania problemów. Języki programowania są naszymi narzędziami. Używając nich możemy tworzyć nowe rozwiązania, ale też nowe narzędzia. Zdecydowanie edytory tekstu są takimi narzędziami. Dziś spróbujemy napisać swój własny.

Editor PAGES.POST.COVER_THUMBNAIL.BY_WHOM Maica

Z tego artykułu dowiesz się:

  • Czy można edytować zawartość znaczników HTML innych niż elementy formularza

  • Jak za pomocą API przeglądarki edytować teksty w divach

  • Jak napisać prosty edytor tekstu

Na pewno każdy z Was chociaż raz w swoim życiu pracował z edytorem tekstu, takim jak MS Word, Open Office czy Google Docs. Ja osobiście na co dzień pracuję z Google Docs i Bear - zdecydowanie najprzyjemniejsze, według mnie, edytory tekstu.

Jakiś czas temu zastanawiałem się nad tym, jak w łatwy sposób przygotować prosty, ale funkcjonalny edytor tekstu. Swoje poszukiwania zacząłem oczywiście od technologii, w której pracuję codziennie, czyli Javascriptu, HTMLa i CSSa.

Okazało się to bardzo proste.

Moc atrybutów HTML

Pomimo, że pracuję już wiele lat z technologiami webowymi, to każdego dnia się uczę. I tak, niedoceniany przez wielu, HTML również skrywa swoje tajemnice. Jedną z nich jest bardzo ciekawy atrybut contenteditable.

Według informacji, które znalazłem, atrybut ten powoduje, że każdy element HTML może być edytowalny. Łącząc potęgę tego atrybutu z javascriptowymi zdarzeniami możemy otrzymać rozbudowany edytor tekstu w naszej przeglądarce lub zbudować aplikację desktopową do pisania treści, wykorzystując Electrona. Wszystko sprowadza się do jednej linijki:

Proste, prawda?

document.execCommand

Mamy już pole tekstowe, na którym możemy operować. Okazuje się, że wraz z dodaniem atrybutu contenteditable w obiekcie dokumentu została odblokowana do naszego użytku metoda execCommand. Dzięki tej funkcji możemy wykonywać różne operacje, które będą odpowiednio modyfikowały zaznaczony tekst , wstawiały dodatkowe elementy lub wpływały na bieżącą linię. Brzmi świetnie! To pozwoli nam sprawić, że nasz edytor tekstu stanie się w pełni funkcjonalny.

document.designMode

Edytowanie całego dokumentu możemy osiągnąć również poprzez zmianę wartości designMode w obiekcie documentdesignModeprzyjmuje dwie wartości on i off. Domyślną wartością jest off.

Opcje i wsparcie

Pytanie zatem, jakie opcje mamy do dyspozycji?

Pełną listę dostępnych poleceń znajdziesz tutaj. Ale żeby nie było za kolorowo spójrzmy na wsparcie przeglądarek. Zanim spojrzałem na stronę caniuse.comzakładałem, że IE nie będzie wspierać zbyt wielu operacji. I ku mojemu ogromnemu zdziwieniu IE, podobnie jak Chrome, Safari czy Firefox, wspiera całkiem dobrze execCommand. IE ma problem tylko z kilkoma poleceniami, takimi jak: insertBrOnReturndefaultParagraphSeparator oraz poniżej wersji 9 z copy i cut. Poza tym, reszta wygląda całkiem dobrze.

Troszkę kodu

Przygotowanie struktury HTML dla naszego edytora nie jest zbyt wymagające. Potrzebujemy zaledwie dwóch rzeczy: miejsca, które będzie edytowalne oraz przycisków, które będą odpalać odpowiednie polecenia.

Zwróć uwagę, że dodałem kilka klas CSS, które odpowiednio ostylują nasz edytor. Dodatkowo wykorzystałem bibliotekę Font Awesome, aby dodać kilka ikonek, a co tam - zrobi się troszkę bardziej pro. :)

Troszkę magii JSa

Po ukończeniu struktury HTML i ostylowaniu projektu czas dodać kilka linijek JSa. Co nasz kod Javascript powinien robić? Przede wszystkim sprawdzać jaka komenda została kliknięta przez użytkownika i wykonać execCommand z odpowiednimi parametrami. A więc - zróbmy to.

Przypiszmy do naszych przycisków odpowiednie komendy. Ja wykorzystałem do tego data- atrybuty HTMLowe:

Następnie w pliku js, pobrałem wszystkie przyciski i utworzyłem z nich tablicę (ponieważ metoda querySelectorAll tak naprawdę nie zwraca nam tablicy, a obiekt tablicopodobny):

Pozostaje nam tylko przypisanie do każdego przycisku odpowiedniej metody, która będzie wywoływana po kliknięciu. Wykorzystajmy do tego jedną z metod tablicowych: forEach

Podsumowanie

I to właściwie koniec. Oczywiście można ten kod jeszcze rozbudować. Poprawić kilka błędów i zoptymalizować. Natomiast nasz cel został osiągnięty. Zachęcam Cię do dalszej pracy nad tym kodem. Spróbuj wykonać poniższe zadanie.

Udostępnij ten artykuł:

Komentarze (0)

    Jeszcze nikt nic nie napisał, ale to znaczy że... możesz być pierwszy/pierwsza.

Powiązane treści

Jeżeli ten artykuł Cię zainteresował sprawdź inne materiały powiązane z nim tematycznie. Poniżej znajdziesz artykuły i odcinki podcastów mojego autorstwa oraz polecane przeze mnie książki, które rozszerzają ten temat.

System binarny - tranzystory by YouraPechkin
Artykuł
28 września 2023

System binarny

Liczby, liczby, liczby - są z nami od tysiącleci - próbujemy je uporządkować, przekształcić, zrozumieć i zapisać. Jednym z wynalezionych systemów liczbowych jest system binarny, który stanowi podstawę dla całego świata IT. Poznaj świat zer i jedynek.

Czytaj więcej
Dostępność by Gemuhlichkeit
Artykuł
30 lipca 2019

O standardach dostępności - WCAG

Accessibility, czyli dostępność - to temat, który pojawił się wraz z powstaniem W3C. Poruszany był już wielokrotnie na poziomie najważniejszych organizacji dbających o rozwój Internetu, a nawet wszedł na arenę polityczną.

Czytaj więcej
Prawdziwa historia JSONa by Aleksandr Korchagin
Artykuł
10 lutego 2022

Prawdziwa historia JSONa

HRejterzy w jednym w swoich filmów obarczyli winą, za problem w projekcie, JSONa. Zakładając, że to on jest winny tak wielu błędów w projektach IT - może warto go lepiej poznać. Poznajcie prawdziwą historię JSONa.

Czytaj więcej

Zapisz się do newslettera

Bądź na bieżąco z nowymi materiałami, ćwiczeniami i ciekawostkami ze świata IT. Dołącz do mnie.