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.

Scheme by onurdongel
Artykuł
13 lutego 2023

O projekcie schema.org

Jakość przede wszystkim. Wysokiej jakości kod i wysokiej jakości treść to dwa bardzo ważne przepisy na sukces strony internetowej. Sam kod się nie obroni, tak jak sama treść - na szczęście istnieje projekt, który może nam w tym pomóc. Panie i Panowie poznajcie Schema.org.

Czytaj więcej
beard gentleman by Ales Munt
Artykuł
08 września 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.

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.