{"id":41577,"date":"2026-05-04T21:02:13","date_gmt":"2026-05-04T18:02:13","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/"},"modified":"2026-05-04T21:02:13","modified_gmt":"2026-05-04T18:02:13","slug":"tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/","title":{"rendered":"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme"},"content":{"rendered":"<pre><code class=\"language-html\"><body>\n    <h2>Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme<\/h2>\n    <p>G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, h\u0131zl\u0131 not alma, i\u00e7erik olu\u015fturma ve veri d\u00fczenleme ihtiyac\u0131 hi\u00e7 olmad\u0131\u011f\u0131 kadar artm\u0131\u015f durumda. Ancak, bu s\u00fcre\u00e7lerin \u00e7o\u011fu internet ba\u011flant\u0131s\u0131na ba\u011f\u0131ml\u0131 olarak ger\u00e7ekle\u015fiyor. Peki ya internet ba\u011flant\u0131n\u0131z\u0131n olmad\u0131\u011f\u0131 durumlarda da kesintisiz \u00e7al\u0131\u015fabilen, hatta bunu tek bir HTML dosyas\u0131yla yapabilen bir ara\u00e7 geli\u015ftirseydiniz? \u0130\u015fte bu makalede, tam da bu senaryoyu ger\u00e7ekle\u015ftiren, \u00e7evrimd\u0131\u015f\u0131 \u00f6ncelikli (offline-first) bir Markdown edit\u00f6r\u00fcn\u00fcn nas\u0131l in\u015fa edildi\u011fini ad\u0131m ad\u0131m inceleyece\u011fiz. Hem yeni ba\u015flayanlar hem de deneyimli geli\u015ftiriciler i\u00e7in rehber niteli\u011findeki bu yolculukta, temel kavramlardan ileri d\u00fczey tekniklere kadar pek \u00e7ok konuya de\u011finece\u011fiz. \u00dcstelik t\u00fcm bu i\u015flevselli\u011fi, karma\u015f\u0131k kurulumlara veya sunucu gereksinimlerine ihtiya\u00e7 duymadan, sadece tek bir HTML dosyas\u0131yla hayata ge\u00e7irece\u011fiz. Bu, \u00f6zellikle seyahat edenler, internet eri\u015fimi k\u0131s\u0131tl\u0131 ortamlarda \u00e7al\u0131\u015fanlar veya basit, ba\u011f\u0131ms\u0131z bir ara\u00e7 arayanlar i\u00e7in olduk\u00e7a cazip bir \u00e7\u00f6z\u00fcm sunuyor.<\/p>\n\n    <h2>Neden \u00c7evrimd\u0131\u015f\u0131 Markdown Edit\u00f6r\u00fc?<\/h2>\n\n    <h3>\u0130nternet Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131n S\u0131n\u0131rlar\u0131<\/h3>\n    <p>Dijitalle\u015fmenin h\u0131zla ilerledi\u011fi bu \u00e7a\u011fda, \u00e7evrimi\u00e7i ara\u00e7lar hayat\u0131m\u0131z\u0131n vazge\u00e7ilmez bir par\u00e7as\u0131 haline geldi. Not alma uygulamalar\u0131ndan proje y\u00f6netim ara\u00e7lar\u0131na, hatta metin edit\u00f6rlerine kadar pek \u00e7ok \u00e7\u00f6z\u00fcm bulut tabanl\u0131 ve internet ba\u011flant\u0131s\u0131 gerektiriyor. Ancak bu durum, beraberinde baz\u0131 zorluklar\u0131 da getiriyor. Seyahat ederken, toplant\u0131larda veya internet eri\u015fiminin zay\u0131f oldu\u011fu b\u00f6lgelerde \u00e7al\u0131\u015f\u0131rken \u00e7evrimi\u00e7i ara\u00e7lara eri\u015fimimiz k\u0131s\u0131tlanabiliyor. Bu t\u00fcr durumlarda, \u00f6nemli bir fikri kaybetmek veya bir g\u00f6revi tamamlayamamak can s\u0131k\u0131c\u0131 olabilir. \u0130\u015fte tam da bu noktada, internet ba\u011flant\u0131s\u0131ndan ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015fabilen bir Markdown edit\u00f6r\u00fcn\u00fcn \u00f6nemi ortaya \u00e7\u0131k\u0131yor. Markdown, basit s\u00f6zdizimiyle h\u0131zl\u0131 ve etkili metin bi\u00e7imlendirme imkan\u0131 sunmas\u0131yla geli\u015ftiriciler, yazarlar ve i\u00e7erik \u00fcreticileri aras\u0131nda olduk\u00e7a pop\u00fcler. Bu iki ihtiyac\u0131n birle\u015fimi, yani \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fma yetene\u011fi ve Markdown'\u0131n kullan\u0131m kolayl\u0131\u011f\u0131, g\u00fc\u00e7l\u00fc bir ara\u00e7 ortaya \u00e7\u0131kar\u0131yor.<\/p>\n\n    <h3>Tek Bir HTML Dosyas\u0131n\u0131n G\u00fcc\u00fc<\/h3>\n    <p>Geleneksel web uygulamalar\u0131 genellikle birden fazla dosya, k\u00fct\u00fcphane, sunucu taraf\u0131 kod ve veritaban\u0131 gerektirir. Bu durum, kurulumu ve da\u011f\u0131t\u0131m\u0131 karma\u015f\u0131k hale getirebilir. Ancak, modern web teknolojileri sayesinde, t\u00fcm bu i\u015flevselli\u011fi tek bir HTML dosyas\u0131na s\u0131\u011fd\u0131rmak m\u00fcmk\u00fcn. Bu, \u00f6zellikle da\u011f\u0131t\u0131m ve kullan\u0131m kolayl\u0131\u011f\u0131 a\u00e7\u0131s\u0131ndan devrim niteli\u011finde bir yakla\u015f\u0131md\u0131r. Tek bir HTML dosyas\u0131n\u0131 indirmek, taray\u0131c\u0131n\u0131zda a\u00e7mak ve kullanmaya ba\u015flamak kadar basittir. Herhangi bir kurulum, eklenti veya g\u00fcncelleme derdi olmadan do\u011frudan \u00e7al\u0131\u015f\u0131r. Bu yakla\u015f\u0131m\u0131n en b\u00fcy\u00fck avantaj\u0131, ba\u011f\u0131ml\u0131l\u0131klar\u0131n olmamas\u0131d\u0131r. Dosya, her zaman, her yerde \u00e7al\u0131\u015fmaya haz\u0131rd\u0131r. Ayr\u0131ca, g\u00fcvenlik a\u00e7\u0131s\u0131ndan da avantaj sa\u011flayabilir. D\u0131\u015f kaynaklara daha az ba\u011f\u0131ml\u0131 olmak, potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 da azalt\u0131r. Bu makalede, bu yakla\u015f\u0131m\u0131 nas\u0131l hayata ge\u00e7irece\u011fimizi, JavaScript ve HTML'in g\u00fcc\u00fcn\u00fc kullanarak g\u00f6sterece\u011fiz.<\/p>\n\n    <h2>Temel Kavramlar: Markdown ve \u00c7evrimd\u0131\u015f\u0131 Web Uygulamalar\u0131<\/h2>\n\n    <h3>Markdown Nedir ve Neden \u00d6nemlidir?<\/h3>\n    <p>Markdown, John Gruber taraf\u0131ndan 2004 y\u0131l\u0131nda olu\u015fturulmu\u015f hafif bir bi\u00e7imlendirme dilidir. Amac\u0131, d\u00fcz metin belgelerini kolayca okunabilir ve yaz\u0131labilir hale getirmektir. Markdown'\u0131n temel felsefesi, bi\u00e7imlendirme i\u00e7in kullan\u0131lan s\u00f6zdiziminin, belgenin kendisi okunurken de anlaml\u0131 kalmas\u0131d\u0131r. \u00d6rne\u011fin, bir ba\u015fl\u0131k olu\u015fturmak i\u00e7in metnin ba\u015f\u0131na <code>#<\/code> i\u015fareti konulur, kal\u0131n metin i\u00e7in <code><strong>metin<\/strong><\/code>, italik metin i\u00e7in <code>*metin*<\/code> kullan\u0131l\u0131r. Liste olu\u015fturmak i\u00e7in <code>*<\/code> veya <code>-<\/code> karakterleri, ba\u011flant\u0131 eklemek i\u00e7in <code>[ba\u011flant\u0131 metni](url)<\/code> yap\u0131s\u0131 kullan\u0131l\u0131r. Bu basit ve sezgisel s\u00f6zdizimi, teknik olmayan kullan\u0131c\u0131lar\u0131n bile h\u0131zla \u00f6\u011frenmesini ve kullanmas\u0131n\u0131 sa\u011flar. Markdown'\u0131n en b\u00fcy\u00fck avantajlar\u0131ndan biri, \u00e7e\u015fitli platformlar ve uygulamalar taraf\u0131ndan desteklenmesidir. GitHub, Reddit, Stack Overflow gibi pop\u00fcler platformlar Markdown'\u0131 varsay\u0131lan metin bi\u00e7imlendirme dili olarak kullan\u0131r. Bu geni\u015f kabul g\u00f6rm\u00fc\u015fl\u00fck, onu geli\u015ftiriciler, blog yazarlar\u0131, teknik yazarlar ve not tutmay\u0131 seven herkes i\u00e7in standart bir ara\u00e7 haline getirmi\u015ftir. Markdown'\u0131n bu kadar yayg\u0131n olmas\u0131n\u0131n bir di\u011fer sebebi de, kolayca HTML'e d\u00f6n\u00fc\u015ft\u00fcr\u00fclebilmesidir. Bu, web i\u00e7eri\u011fi olu\u015ftururken b\u00fcy\u00fck bir esneklik sa\u011flar.<\/p>\n\n    <h3>\u00c7evrimd\u0131\u015f\u0131 Web Uygulamalar\u0131 (PWAs) ve Service Workers<\/h3>\n    <p>Geleneksel web siteleri, i\u00e7eri\u011fi sunmak i\u00e7in s\u00fcrekli bir internet ba\u011flant\u0131s\u0131na ihtiya\u00e7 duyar. Ancak, Progressive Web Apps (PWA'lar - A\u015famal\u0131 Web Uygulamalar\u0131) bu durumu de\u011fi\u015ftiren bir teknolojidir. PWA'lar, web sitelerine mobil uygulamalar\u0131n \u00f6zelliklerini kazand\u0131ran bir dizi teknoloji ve prensiptir. Bu \u00f6zellikler aras\u0131nda \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fma, ana ekrana eklenme, anl\u0131k bildirimler g\u00f6nderme ve h\u0131zl\u0131 y\u00fcklenme yer al\u0131r. PWA'lar\u0131n \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fma yetene\u011finin temelinde ise Service Workers (Servis \u00c7al\u0131\u015ft\u0131r\u0131c\u0131lar) yatar. Service Workers, taray\u0131c\u0131 arka plan\u0131nda \u00e7al\u0131\u015fan, a\u011f isteklerini yakalayan ve y\u00f6neten bir JavaScript proxy'sidir. Bir Service Worker, bir web uygulamas\u0131n\u0131n \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in \u00f6nbelle\u011fe alma (caching) stratejileri kullanabilir. Yani, bir kullan\u0131c\u0131 uygulaman\u0131z\u0131 ilk kez ziyaret etti\u011finde, Service Worker ilgili kaynaklar\u0131 (HTML, CSS, JavaScript, resimler vb.) \u00f6nbelle\u011fe al\u0131r. Daha sonra kullan\u0131c\u0131 \u00e7evrimd\u0131\u015f\u0131yken uygulamay\u0131 a\u00e7t\u0131\u011f\u0131nda, Service Worker bu \u00f6nbelle\u011fe al\u0131nm\u0131\u015f kaynaklar\u0131 kullanarak uygulamay\u0131 y\u00fckler. Bu, uygulaman\u0131n \u00e7evrimd\u0131\u015f\u0131 bile eri\u015filebilir olmas\u0131n\u0131 sa\u011flar. Tek bir HTML dosyas\u0131yla geli\u015ftirilen edit\u00f6r\u00fcm\u00fczde, Service Worker kullanmasak da, verilerin taray\u0131c\u0131n\u0131n yerel depolama alanlar\u0131nda (\u00f6rne\u011fin, localStorage) saklanmas\u0131yla \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fma mant\u0131\u011f\u0131 benze\u015fmektedir.<\/p>\n\n    <h2>Tek Bir HTML Dosyas\u0131nda Edit\u00f6r Geli\u015ftirme: Ad\u0131m Ad\u0131m<\/h2>\n\n    <h3>HTML Yap\u0131s\u0131n\u0131n Olu\u015fturulmas\u0131<\/h3>\n    <p>Her \u015fey, temel bir HTML yap\u0131s\u0131yla ba\u015flar. Bu yap\u0131da, Markdown metnini yazaca\u011f\u0131m\u0131z bir metin alan\u0131 (textarea) ve Markdown'\u0131 i\u015fleyip \u00f6nizlemesini g\u00f6sterece\u011fimiz bir alan bulunacakt\u0131r. Ayr\u0131ca, edit\u00f6r\u00fcm\u00fcz\u00fcn \u00e7e\u015fitli i\u015flevlerini kontrol edecek butonlar da bu alana yerle\u015ftirilebilir. Kullan\u0131c\u0131 deneyimini iyile\u015ftirmek i\u00e7in, bu alanlar\u0131 yan yana veya alt alta g\u00f6sterecek bir d\u00fczenleme tercih edilebilir. \u00d6rne\u011fin, sol tarafta metin yazma alan\u0131, sa\u011f tarafta ise \u00f6nizleme alan\u0131 bulunabilir. Bu d\u00fczen, kullan\u0131c\u0131lar\u0131n yazd\u0131klar\u0131n\u0131 an\u0131nda g\u00f6rmelerini sa\u011flayarak verimlili\u011fi art\u0131r\u0131r. HTML yap\u0131s\u0131n\u0131 olu\u015ftururken, eri\u015filebilirli\u011fi de g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir. Anlaml\u0131 etiketlerin kullan\u0131lmas\u0131 ve klavye ile navigasyonun desteklenmesi, daha geni\u015f bir kullan\u0131c\u0131 kitlesine ula\u015fmam\u0131z\u0131 sa\u011flar. \u0130lk a\u015famada, temel HTML yap\u0131s\u0131n\u0131 \u015fu \u015fekilde d\u00fc\u015f\u00fcnebiliriz:<\/p>\n    <pre><code>\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>\u00c7evrimd\u0131\u015f\u0131 Markdown Edit\u00f6r\u00fc<\/title>\n    <!-- CSS stilleri buraya eklenebilir, ancak bu makalede stil tan\u0131mlamas\u0131 yapmayaca\u011f\u0131z. -->\n<\/head>\n<body>\n    <div class=\"editor-container\">\n        <div class=\"input-area\">\n            <textarea id=\"markdown-input\" placeholder=\"Buraya Markdown metninizi yaz\u0131n...\"><\/textarea>\n        <\/div>\n        <div class=\"output-area\" id=\"markdown-output\"><\/div>\n    <\/div>\n    <script src=\"script.js\"><\/script> <!-- JavaScript dosyas\u0131 buraya ba\u011flanacak -->\n<\/body>\n<\/html>\n    <\/code><\/pre>\n<p>Yukar\u0131daki kod blo\u011funda, kullan\u0131c\u0131 girdisi i\u00e7in bir <code><textarea><\/code> ve \u00e7\u0131kt\u0131 (\u00f6nizleme) i\u00e7in bir <code><\/p>\n<div><\/code> tan\u0131mlad\u0131k. Bu temel yap\u0131, edit\u00f6r\u00fcm\u00fcz\u00fcn iskeletini olu\u015fturuyor. Kullan\u0131c\u0131 deneyimini daha da geli\u015ftirmek i\u00e7in, bu alanlar\u0131n boyutlar\u0131n\u0131 ayarlamak ve aralar\u0131nda bir ay\u0131r\u0131c\u0131 eklemek gibi stil d\u00fczenlemeleri yap\u0131labilir. Ancak, belirtti\u011fimiz gibi, bu makalede CSS kullan\u0131mdan ka\u00e7\u0131n\u0131yoruz.<\/p>\n<h3>JavaScript ile Markdown \u0130\u015fleme ve \u00d6nizleme<\/h3>\n<p>Tek bir HTML dosyas\u0131nda \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fan bir Markdown edit\u00f6r\u00fc olu\u015fturman\u0131n anahtar\u0131, JavaScript'tir. JavaScript, kullan\u0131c\u0131n\u0131n yazd\u0131\u011f\u0131 Markdown metnini alacak, bunu HTML'e d\u00f6n\u00fc\u015ft\u00fcrecek ve \u00f6nizleme alan\u0131nda g\u00f6sterecektir. Bu d\u00f6n\u00fc\u015f\u00fcm i\u00e7in pop\u00fcler bir JavaScript k\u00fct\u00fcphanesi olan <code>marked.js<\/code> veya <code>Showdown.js<\/code> gibi \u00e7\u00f6z\u00fcmler kullan\u0131labilir. Bu k\u00fct\u00fcphaneler, Markdown s\u00f6zdizimini al\u0131p g\u00fcvenli bir \u015fekilde HTML'e \u00e7evirme i\u015flevini yerine getirir. Kullan\u0131c\u0131 her karakter yazd\u0131\u011f\u0131nda veya metin alan\u0131ndan ayr\u0131ld\u0131\u011f\u0131nda bu d\u00f6n\u00fc\u015f\u00fcm\u00fcn tetiklenmesi, ger\u00e7ek zamanl\u0131 bir \u00f6nizleme deneyimi sunar. Bu, kullan\u0131c\u0131lar\u0131n yazd\u0131klar\u0131n\u0131n nas\u0131l g\u00f6r\u00fcnece\u011fini an\u0131nda g\u00f6rmelerini sa\u011flayarak yazma s\u00fcrecini daha ak\u0131c\u0131 hale getirir.<\/p>\n<p>\u00d6rne\u011fin, <code>marked.js<\/code> k\u00fct\u00fcphanesini kullanarak bu i\u015flevi \u015fu \u015fekilde hayata ge\u00e7irebiliriz:<\/p>\n<pre><code>\n\/\/ JavaScript kodunun bir par\u00e7as\u0131 (script.js dosyas\u0131na veya do\u011frudan HTML i\u00e7ine <script> tag'i ile)\n\n\/\/ K\u00fct\u00fcphaneyi dahil etme (\u00f6rne\u011fin CDN'den)\n\/\/ <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/marked\/marked.min.js\"><\/script>\n\nconst markdownInput = document.getElementById('markdown-input');\nconst markdownOutput = document.getElementById('markdown-output');\n\nfunction updatePreview() {\n    const markdownText = markdownInput.value;\n    \/\/ marked k\u00fct\u00fcphanesini kullanarak Markdown'\u0131 HTML'e \u00e7evir\n    const htmlOutput = marked.parse(markdownText);\n    markdownOutput.innerHTML = htmlOutput;\n}\n\n\/\/ Kullan\u0131c\u0131 yazd\u0131k\u00e7a \u00f6nizlemeyi g\u00fcncelle\nmarkdownInput.addEventListener('input', updatePreview);\n\n\/\/ Sayfa y\u00fcklendi\u011finde ilk \u00f6nizlemeyi yap\nupdatePreview();\n    <\/code><\/pre>\n<p>Bu JavaScript kodu, <code>markdownInput<\/code> adl\u0131 <code><textarea><\/code>'dan gelen girdiyi al\u0131r, <code>marked.parse()<\/code> fonksiyonu ile HTML'e d\u00f6n\u00fc\u015ft\u00fcr\u00fcr ve <code>markdownOutput<\/code> adl\u0131 <code><\/p>\n<div><\/code>'e yazar. <code>input<\/code> olay\u0131, metin alan\u0131ndaki her de\u011fi\u015fiklikte <code>updatePreview<\/code> fonksiyonunu tetikler. Bu, kullan\u0131c\u0131ya an\u0131nda geri bildirim sa\u011flar. Bu i\u015flevi tek bir HTML dosyas\u0131na entegre etmek i\u00e7in, <code>marked.js<\/code> k\u00fct\u00fcphanesini bir CDN (Content Delivery Network) \u00fczerinden dahil edebilir veya k\u00fct\u00fcphanenin i\u00e7eri\u011fini do\u011frudan HTML dosyas\u0131n\u0131n i\u00e7ine bir <code><script><\/code> etiketiyle ekleyebilirsiniz. Bu, harici dosya ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<h3>Veri Kal\u0131c\u0131l\u0131\u011f\u0131: Taray\u0131c\u0131 Depolama<\/h3>\n<p>\u00c7evrimd\u0131\u015f\u0131 bir edit\u00f6r\u00fcn en \u00f6nemli \u00f6zelliklerinden biri, kullan\u0131c\u0131lar\u0131n yazd\u0131\u011f\u0131 verilerin kaybolmamas\u0131n\u0131 sa\u011flamakt\u0131r. \u0130nternet ba\u011flant\u0131s\u0131 olmad\u0131\u011f\u0131nda bile, kullan\u0131c\u0131lar \u00e7al\u0131\u015fmalar\u0131n\u0131 kaydetmek ve daha sonra devam etmek isteyeceklerdir. Bu sorunu \u00e7\u00f6zmek i\u00e7in taray\u0131c\u0131lar\u0131n sundu\u011fu yerel depolama mekanizmalar\u0131n\u0131 kullanabiliriz. En yayg\u0131n kullan\u0131lanlar <code>localStorage<\/code> ve <code>sessionStorage<\/code>'d\u0131r. <code>localStorage<\/code>, taray\u0131c\u0131 kapat\u0131l\u0131p a\u00e7\u0131lsa bile verileri saklarken, <code>sessionStorage<\/code> taray\u0131c\u0131 oturumu sona erdi\u011finde verileri siler. Bizim amac\u0131m\u0131z i\u00e7in <code>localStorage<\/code> daha uygundur \u00e7\u00fcnk\u00fc kullan\u0131c\u0131lar\u0131n \u00e7al\u0131\u015fmalar\u0131n\u0131 kal\u0131c\u0131 olarak saklamas\u0131n\u0131 sa\u011flar. Kullan\u0131c\u0131 her yazd\u0131\u011f\u0131nda, bu metni <code>localStorage<\/code>'a kaydedebiliriz. Daha sonra edit\u00f6r tekrar a\u00e7\u0131ld\u0131\u011f\u0131nda, <code>localStorage<\/code>'dan kaydedilen metni okuyup metin alan\u0131na y\u00fckleyebiliriz. Bu, kullan\u0131c\u0131ya kesintisiz bir deneyim sunar ve veri kayb\u0131n\u0131 \u00f6nler.<\/p>\n<p>Veri kal\u0131c\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak i\u00e7in ekleyebilece\u011fimiz JavaScript kodlar\u0131 \u015fu \u015fekildedir:<\/p>\n<pre><code>\n\/\/ Mevcut updatePreview fonksiyonunuza ek olarak:\n\nconst STORAGE_KEY = 'offline-markdown-editor-content';\n\nfunction saveContent() {\n    localStorage.setItem(STORAGE_KEY, markdownInput.value);\n}\n\nfunction loadContent() {\n    const savedContent = localStorage.getItem(STORAGE_KEY);\n    if (savedContent) {\n        markdownInput.value = savedContent;\n        updatePreview(); \/\/ Y\u00fcklendikten sonra \u00f6nizlemeyi de g\u00fcncelle\n    }\n}\n\n\/\/ Kullan\u0131c\u0131 yazd\u0131k\u00e7a kaydet\nmarkdownInput.addEventListener('input', () => {\n    updatePreview();\n    saveContent();\n});\n\n\/\/ Sayfa y\u00fcklendi\u011finde i\u00e7eri\u011fi y\u00fckle\nwindow.addEventListener('load', loadContent);\n    <\/code><\/pre>\n<p>Bu kod par\u00e7ac\u0131\u011f\u0131, kullan\u0131c\u0131 taraf\u0131ndan yaz\u0131lan Markdown metnini <code>STORAGE_KEY<\/code> anahtar\u0131yla <code>localStorage<\/code>'a kaydeder. <code>loadContent<\/code> fonksiyonu ise, sayfa ilk y\u00fcklendi\u011finde bu anahtarla kaydedilmi\u015f bir i\u00e7erik olup olmad\u0131\u011f\u0131n\u0131 kontrol eder ve varsa metin alan\u0131na y\u00fckler. Bu basit mekanizma ile, kullan\u0131c\u0131lar taray\u0131c\u0131lar\u0131n\u0131 kapatsalar bile yazd\u0131klar\u0131 metinleri kaybetmezler. Bu, \u00e7evrimd\u0131\u015f\u0131 edit\u00f6r\u00fcm\u00fcz\u00fcn temel i\u015flevselli\u011fini tamamlar.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131 ve Uygulama \u00d6rnekleri<\/h2>\n<h3>Vaka Analizi: Seyahat Eden Bir Yaz\u0131l\u0131mc\u0131<\/h3>\n<p>Ali, bir yaz\u0131l\u0131m geli\u015ftiricisi ve s\u0131k s\u0131k farkl\u0131 \u015fehirlere seyahat ediyor. U\u00e7ak yolculuklar\u0131 s\u0131ras\u0131nda veya otel odalar\u0131nda internet ba\u011flant\u0131s\u0131 her zaman stabil olmuyor. Ali, bu zamanlar\u0131 proje dok\u00fcmantasyonu yazmak, blog yaz\u0131lar\u0131 tasla\u011f\u0131 haz\u0131rlamak veya teknik notlar almak i\u00e7in kullanmak istiyor. Geleneksel \u00e7evrimi\u00e7i edit\u00f6rler bu senaryoda yetersiz kal\u0131yor. Ali'nin ihtiyac\u0131, internet ba\u011flant\u0131s\u0131 olmadan da sorunsuz \u00e7al\u0131\u015facak, yazd\u0131klar\u0131n\u0131 otomatik kaydedecek ve basit bir aray\u00fcze sahip bir araca sahip olmak. Tek bir HTML dosyas\u0131ndan olu\u015fan \u00e7evrimd\u0131\u015f\u0131 Markdown edit\u00f6r\u00fcm\u00fcz, Ali i\u00e7in ideal bir \u00e7\u00f6z\u00fcm sunuyor. Ali, edit\u00f6r dosyas\u0131n\u0131 bir kere indirip bilgisayar\u0131na veya USB belle\u011fine kaydediyor. Seyahat ederken, dosyay\u0131 herhangi bir taray\u0131c\u0131da a\u00e7abiliyor. Yazd\u0131\u011f\u0131 notlar, <code>localStorage<\/code> sayesinde otomatik olarak kaydediliyor. Bu sayede, internet ba\u011flant\u0131s\u0131 olmasa bile kesintisiz bir \u015fekilde \u00e7al\u0131\u015fabiliyor ve \u00f6nemli fikirlerini kaybetme endi\u015fesi ta\u015f\u0131m\u0131yor. Bu, hem verimlili\u011fini art\u0131r\u0131yor hem de stresini azalt\u0131yor. Bu senaryo, \u00e7evrimd\u0131\u015f\u0131 \u00f6ncelikli ara\u00e7lar\u0131n ne kadar de\u011ferli olabilece\u011fini net bir \u015fekilde g\u00f6steriyor.<\/p>\n<h3>Vaka Analizi: Akademik Ara\u015ft\u0131rmac\u0131 ve \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fma<\/h3>\n<p>Ay\u015fe, bir \u00fcniversitede doktora \u00f6\u011frencisi ve yo\u011fun bir akademik ara\u015ft\u0131rmac\u0131. K\u00fct\u00fcphanede veya laboratuvarda \u00e7al\u0131\u015f\u0131rken internet eri\u015fimi k\u0131s\u0131tl\u0131 olabiliyor. Makale taslaklar\u0131 haz\u0131rlamak, literat\u00fcr \u00f6zetleri \u00e7\u0131karmak ve ara\u015ft\u0131rma notlar\u0131n\u0131 d\u00fczenlemek i\u00e7in g\u00fcvenilir bir araca ihtiyac\u0131 var. \u00c7evrimi\u00e7i not alma uygulamalar\u0131, s\u0131k s\u0131k ba\u011flant\u0131 kesintileri nedeniyle i\u015f ak\u0131\u015f\u0131n\u0131 bozabiliyor. Ay\u015fe, tek bir HTML dosyas\u0131ndan olu\u015fan Markdown edit\u00f6r\u00fcn\u00fc kullanarak bu sorunu a\u015f\u0131yor. Edit\u00f6r\u00fc bilgisayar\u0131na indiriyor ve internet ba\u011flant\u0131s\u0131 gerektirmeksizin kullanmaya ba\u015fl\u0131yor. Yazd\u0131\u011f\u0131 t\u00fcm notlar ve makale taslaklar\u0131, taray\u0131c\u0131n\u0131n yerel depolama alan\u0131nda g\u00fcvenli bir \u015fekilde saklan\u0131yor. Bu sayede, Ay\u015fe odaklanmas\u0131n\u0131 bozmadan ara\u015ft\u0131rma yapmaya devam edebiliyor. Ayr\u0131ca, Markdown'\u0131n basit yap\u0131s\u0131 sayesinde, karma\u015f\u0131k bi\u00e7imlendirme sorunlar\u0131yla u\u011fra\u015fmak yerine i\u00e7eri\u011fine odaklanabiliyor. Bu ara\u00e7, Ay\u015fe'nin ara\u015ft\u0131rma s\u00fcrecini daha verimli ve stressiz hale getiriyor.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve Optimizasyonlar<\/h2>\n<h3>Dosya \u0130ndirme ve Y\u00fckleme \u00d6zellikleri<\/h3>\n<p>Tek bir HTML dosyas\u0131nda \u00e7al\u0131\u015fan edit\u00f6r\u00fcm\u00fcz\u00fcn i\u015flevselli\u011fini art\u0131rmak i\u00e7in, kullan\u0131c\u0131lar\u0131n yazd\u0131klar\u0131 metni bir dosyaya kaydetme ve daha sonra bu dosyay\u0131 tekrar y\u00fckleme imkan\u0131 sunabiliriz. Bu, <code>localStorage<\/code>'\u0131n s\u0131n\u0131rlamalar\u0131n\u0131n \u00f6tesine ge\u00e7erek, kullan\u0131c\u0131lara daha geleneksel bir dosya y\u00f6netimi deneyimi sunar. Kullan\u0131c\u0131n\u0131n yazd\u0131\u011f\u0131 metni bir <code>.md<\/code> dosyas\u0131 olarak indirmesini sa\u011flamak i\u00e7in, JavaScript'te bir <code>Blob<\/code> nesnesi olu\u015fturup bunu bir <code><a><\/code> etiketi arac\u0131l\u0131\u011f\u0131yla tetikleyebiliriz. Benzer \u015fekilde, bir dosya y\u00fckleme i\u015flevi (<code><input type=\"file\"><\/code> kullanarak) ekleyerek, kullan\u0131c\u0131n\u0131n \u00f6nceden kaydetti\u011fi <code>.md<\/code> dosyalar\u0131n\u0131 okuyup edit\u00f6re y\u00fcklemesini sa\u011flayabiliriz. Bu \u00f6zellikler, edit\u00f6r\u00fcm\u00fcz\u00fc daha g\u00fc\u00e7l\u00fc ve kullan\u0131\u015fl\u0131 hale getirir.<\/p>\n<p>Dosya indirme ve y\u00fckleme i\u015flevleri i\u00e7in \u00f6rnek JavaScript kodlar\u0131:<\/p>\n<pre><code>\n\/\/ Dosya indirme fonksiyonu\nfunction downloadMarkdown() {\n    const markdownText = markdownInput.value;\n    const blob = new Blob([markdownText], { type: 'text\/markdown;charset=utf-8;' });\n    const link = document.createElement('a');\n    link.href = URL.createObjectURL(blob);\n    link.download = 'notlarim.md'; \/\/ \u0130ndirilecek dosya ad\u0131\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n}\n\n\/\/ Dosya y\u00fckleme (input elementi i\u00e7in event listener eklenmeli)\nfunction handleFileUpload(event) {\n    const file = event.target.files[0];\n    if (file) {\n        const reader = new FileReader();\n        reader.onload = function(e) {\n            markdownInput.value = e.target.result;\n            updatePreview();\n            saveContent(); \/\/ Y\u00fcklendikten sonra kaydet\n        };\n        reader.readAsText(file);\n    }\n}\n\n\/\/ Bu fonksiyonlar\u0131 ilgili butonlara ba\u011flaman\u0131z gerekir.\n\/\/ \u00d6rne\u011fin: <button onclick=\"downloadMarkdown()\">\u0130ndir<\/button>\n\/\/ Ve: <input type=\"file\" id=\"file-upload\" accept=\".md\">\n\/\/ document.getElementById('file-upload').addEventListener('change', handleFileUpload);\n    <\/code><\/pre>\n<p>Bu eklemelerle birlikte, kullan\u0131c\u0131lar \u00e7al\u0131\u015fmalar\u0131n\u0131 hem taray\u0131c\u0131da saklayabilir hem de yerel dosyalar olarak y\u00f6netebilirler. Bu, \u00f6zellikle uzun s\u00fcreli projeler veya \u00f6nemli belgeler \u00fczerinde \u00e7al\u0131\u015fanlar i\u00e7in b\u00fcy\u00fck bir esneklik sa\u011flar.<\/p>\n<h3>Markdown K\u00fct\u00fcphanesi Se\u00e7imi ve G\u00fcvenlik<\/h3>\n<p>Markdown'\u0131 HTML'e d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in kullanaca\u011f\u0131n\u0131z k\u00fct\u00fcphanenin se\u00e7imi \u00f6nemlidir. <code>marked.js<\/code> ve <code>Showdown.js<\/code> gibi k\u00fct\u00fcphaneler, Markdown'\u0131 i\u015fleme konusunda olduk\u00e7a yeteneklidir. Ancak, bu k\u00fct\u00fcphanelerin g\u00fcvenlik ayarlar\u0131n\u0131 do\u011fru yap\u0131land\u0131rmak kritik \u00f6nem ta\u015f\u0131r. \u00d6zellikle, kullan\u0131c\u0131dan al\u0131nan girdinin do\u011frudan HTML'e d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi, potansiyel XSS (Cross-Site Scripting) sald\u0131r\u0131lar\u0131na yol a\u00e7abilir. Bu t\u00fcr sald\u0131r\u0131lar\u0131 \u00f6nlemek i\u00e7in, k\u00fct\u00fcphanelerin sundu\u011fu sanitizasyon (temizleme) \u00f6zelliklerini etkinle\u015ftirmek gerekir. \u00d6rne\u011fin, <code>marked.js<\/code> k\u00fct\u00fcphanesinde <code>sanitize: true<\/code> gibi se\u00e7enekler mevcuttur. Bu se\u00e7enekler, zararl\u0131 HTML etiketlerinin veya betiklerin \u00e7\u0131kt\u0131da yer almas\u0131n\u0131 engeller. Tek bir HTML dosyas\u0131 kullanmak, harici ba\u011f\u0131ml\u0131l\u0131klar\u0131n azalmas\u0131yla g\u00fcvenlik riskini bir miktar azaltsa da, kullan\u0131lan JavaScript k\u00fct\u00fcphanelerinin g\u00fcvenli\u011fi her zaman \u00f6ncelikli olmal\u0131d\u0131r. K\u00fct\u00fcphaneleri g\u00fcncel tutmak ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 takip etmek de bu s\u00fcrecin bir par\u00e7as\u0131d\u0131r.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<ul>\n<li><strong>Bu edit\u00f6r internet ba\u011flant\u0131s\u0131 olmadan tam olarak nas\u0131l \u00e7al\u0131\u015f\u0131yor?<\/strong>\n<p>Edit\u00f6r, t\u00fcm kodunu tek bir HTML dosyas\u0131 i\u00e7inde bar\u0131nd\u0131r\u0131r. Metin yazma ve Markdown'\u0131 HTML'e d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemleri tamamen taray\u0131c\u0131n\u0131z\u0131n JavaScript motoru taraf\u0131ndan ger\u00e7ekle\u015ftirilir. Yaz\u0131lan metinler ise taray\u0131c\u0131n\u0131n yerel depolama alan\u0131 olan <code>localStorage<\/code>'a kaydedilir. Bu sayede, internet ba\u011flant\u0131s\u0131 olmasa bile hem yazma hem de veri kal\u0131c\u0131l\u0131\u011f\u0131 sa\u011flan\u0131r.<\/p>\n<\/li>\n<li><strong>Markdown'\u0131 HTML'e d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in hangi k\u00fct\u00fcphane kullan\u0131l\u0131yor ve neden?<\/strong>\n<p>Makalede \u00f6rnek olarak <code>marked.js<\/code> k\u00fct\u00fcphanesi g\u00f6sterilmi\u015ftir. Bu k\u00fct\u00fcphane, pop\u00fcler, h\u0131zl\u0131 ve g\u00fcvenilir bir Markdown ayr\u0131\u015ft\u0131r\u0131c\u0131s\u0131d\u0131r. Alternatif olarak <code>Showdown.js<\/code> gibi ba\u015fka k\u00fct\u00fcphaneler de kullan\u0131labilir. Se\u00e7im, projenin \u00f6zel ihtiya\u00e7lar\u0131na ve performans gereksinimlerine ba\u011fl\u0131d\u0131r.<\/p>\n<\/li>\n<li><strong>Yazd\u0131\u011f\u0131m metinler ne kadar s\u00fcreyle saklan\u0131yor?<\/strong>\n<p><code>localStorage<\/code> kullan\u0131ld\u0131\u011f\u0131 i\u00e7in, taray\u0131c\u0131 verileri temizlenmedi\u011fi s\u00fcrece veya siz manuel olarak silmedi\u011finiz s\u00fcrece verileriniz kal\u0131c\u0131 olarak saklan\u0131r. Bu, taray\u0131c\u0131y\u0131 kapat\u0131p a\u00e7san\u0131z bile yazd\u0131klar\u0131n\u0131z\u0131n kaybolmayaca\u011f\u0131 anlam\u0131na gelir.<\/p>\n<\/li>\n<li><strong>Bu edit\u00f6r\u00fc daha da geli\u015ftirebilir miyim?<\/strong>\n<p>Kesinlikle! Tek bir HTML dosyas\u0131 olmas\u0131, \u00fczerinde oynamay\u0131 ve \u00f6zelle\u015ftirmeyi kolayla\u015ft\u0131r\u0131r. CSS ekleyerek g\u00f6r\u00fcn\u00fcm\u00fc iyile\u015ftirebilir, daha geli\u015fmi\u015f JavaScript \u00f6zellikleri ekleyerek yeni i\u015flevler kazand\u0131rabilirsiniz (\u00f6rne\u011fin, tema se\u00e7enekleri, s\u00f6zdizimi vurgulama, tablo olu\u015fturma ara\u00e7lar\u0131 vb.).<\/p>\n<\/li>\n<\/ul>\n<p>#Teknoloji #WebGeli\u015ftirme #OfflineFirst #MarkdownEditor #JavaScript<\/p>\n<p><\/body><\/code><\/p>\n","protected":false},"excerpt":{"rendered":"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, h\u0131zl\u0131 not alma, i\u00e7erik olu\u015fturma ve veri d\u00fczenleme ihtiyac\u0131 hi\u00e7 olmad\u0131\u011f\u0131 kadar artm\u0131\u015f durumda.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-41577","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme\" \/>\n<meta property=\"og:description\" content=\"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, h\u0131zl\u0131 not alma, i\u00e7erik olu\u015fturma ve veri d\u00fczenleme ihtiyac\u0131 hi\u00e7 olmad\u0131\u011f\u0131 kadar artm\u0131\u015f durumda.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-04T18:02:13+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme\",\"datePublished\":\"2026-05-04T18:02:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/\"},\"wordCount\":1625,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/\",\"name\":\"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-05-04T18:02:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/","og_locale":"tr_TR","og_type":"article","og_title":"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme","og_description":"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, h\u0131zl\u0131 not alma, i\u00e7erik olu\u015fturma ve veri d\u00fczenleme ihtiyac\u0131 hi\u00e7 olmad\u0131\u011f\u0131 kadar artm\u0131\u015f durumda.","og_url":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-05-04T18:02:13+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme","datePublished":"2026-05-04T18:02:13+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/"},"wordCount":1625,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/","url":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/","name":"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-05-04T18:02:13+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/tek-bir-html-dosyasinda-cevrimdisi-calisan-markdown-editoru-gelistirme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tek Bir HTML Dosyas\u0131nda \u00c7evrimd\u0131\u015f\u0131 \u00c7al\u0131\u015fan Markdown Edit\u00f6r\u00fc Geli\u015ftirme"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41577","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=41577"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41577\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41577"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41577"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}