This page is available only in polish

I am working on the translation!

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

From this article you will learn:

  • 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.

Share this article:

Comments (0)

    No one has posted anything yet, but that means.... you may be the first.

You may be interested in

lorem

beard gentleman by Ales Munt
Article
08 September 2022

Jestem Agent, User Agent

User Agent z założenia ma pozwalać na identyfikację narzędzia, które wykorzystuje technologie internetowe. Gdy go projektowano miał być wsparciem dla bezpieczeństwa i tożsamości np. przeglądarek. Czym jest i jak działa dzisiaj? O tym w poniższym artykule.

Read more
React portals by Thomas Piekunka
Article
14 October 2022

Poprzez portale w React

Podróże międzyplanetarne nie są jak narazie ani dostępne, ani popularne. Technicznie rzecz ujmując podobne trudności podróżowania pomiędzy różnymi sktrukturami DOM możemy spotkać w aplikacjach SPA. Dziś o rozwiązaniu tego problemu w React.

Read more
Matematyka by dra_schwartz
Article
01 July 2022

O liczbie NaN

O liczbach w programowaniu nie można nie rozmawiać. W szczególności o tak ważnej liczbie jaką jest NaN. W ramach tego artykułu postaram się przyjrzeć matematyce, liczbom, koncepcji NaN i jej działaniu w świecie kodu.

Read more

Zapisz się do newslettera

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