Ana içeriğe atla

The Native-First, High-Performance Markdown Plugin for JavaScript

Markdown text editor plugin that transforms a native textarea into a full editing suite. WYSIWYG and plain Markdown modes, live preview, RTL support, dark mode. Works with Django, HTMX, Laravel, React, and any stack.

Felsefe: "Önce Yerli"

Çoğu editör standart web iş akışını bozar. MarkdownEditor bunu benimsiyor. Doğrudan bir <textarea>'ın üzerinde yer aldığından, verileri işlemenin yeni bir yolunu öğrenmenize gerek yoktur.

  • Veri Bağlamaya Gerek Yok: Kutudan çıktığı haliyle <form method="POST"> ile çalışır
  • Standart Erişim: document.getElementById('editor').value'u normal bir giriş gibi kullanın.
  • Arka Uç Agnostik: Normal bir form alanı gibi herhangi bir arka uçla (Python, Node.js, PHP vb.) çalışır

Temel Özellikler

🖼️ Gelişmiş Resim Yükleme (SEO Optimize Edilmiş)

Veritabanınızı ağır Base64 dizeleriyle şişirmeyin. Görüntüleri doğrudan sunucunuza veya S3 klasörünüze yüklemek için API'mizi yapılandırın. Düzenleyici URL'yi alarak Markdown dosyalarınızı hafif ve sitenizin SEO sıralamasını yüksek tutar.

🔀 Hibrit ve Sade Modlar

Kullanıcılarınıza her iki dünyanın da en iyisini sunun. Kolay biçimlendirme için Görsel (WYSIWYG) Karma mod ile dikkat dağıtmayan, ham sözdizimi düzenleme için Düz İşaretleme modu arasında geçiş yapın.

🌍 RTL Desteğiyle Global Kullanıma Hazır

Sağdan Sola (RTL) diller için tam yerel destek. Otomatik metin yönü hizalamayla Arapça, Urduca veya Farsça desteği gerektiren projeler için mükemmeldir.

⚡ Geniş Ölçekte Performans

  • Hafif: Sayfa yüklemenizi yavaşlatmayacak, yaklaşık 116 KB'lik küçük bir alan
  • Büyük Belge Desteği: Giriş gecikmesi veya tarayıcının donması olmadan binlerce satırlık metni işleyecek şekilde optimize edildi
  • Akıllı İşleme: Geri dönen önizleme güncellemeleri, önbelleğe alınmış stil hesaplamaları ve liste devamı ile girinti arasında çakışmayan klavye kullanımı; böylece Sekme ve Enter her zaman tam olarak tek bir şey yapar

♿ Varsayılan Olarak Erişilebilir

Tam ARIA desteği yerleşiktir ve ekstra yapılandırma gerektirmez. Araç çubuğu uygun bir role="toolbar" yer işaretidir, önizleme bölmesi role="region" etiketlidir, tüm SVG simgeleri ekran okuyuculardan gizlenmiştir, önizleme geçişi açık/kapalı durumunu aria-pressed aracılığıyla gösterir ve devre dışı bırakılan araç çubuğu düğmeleri hem disabled hem de aria-disabled kullanır, böylece yardımcı teknoloji asla yanıltılmaz. Modlar kapatıldığında odağı tetikleme düğmesine döndürür.

🛡️ Sıfır CSS Çatışması

Tüm düzenleyici stilleri tamamen .markdown-editor-wrapper öğesinin kapsamına alınmıştır. Tailwind'in genel ön kontrolü (h1h6, a, button vb. için öğe sıfırlamaları) hariç tutulur, böylece düzenleyici tek bir stili bozmadan aynı sayfada Bootstrap, Tailwind veya başka herhangi bir CSS çerçevesiyle birlikte yaşayabilir.

🔒 XSS Güvenli Önizleme

Oluşturulan önizleme, DOM'a yazılmadan önce DOMPurify aracılığıyla temizlenir. Hazırlanan etiketleme girişindeki komut dosyası etiketleri, satır içi olay işleyicileri ve kötü amaçlı URL'ler otomatik olarak çıkarılır; hiçbir yapılandırma gerekmez.

Markdown Düzenleyici Demosu

Hızlı Uygulama

1. Kurulum

NPM'yi kullanarak yükleyebilir, JavaScript dosyasını doğrudan içe aktarabilir veya hızlı dağıtım için bir CDN kullanabilirsiniz.

NPM aracılığıyla yükleme

bash
npm install markdown-text-editor
VEYA

CDN kullanma

Alternatif olarak HTML'nize aşağıdaki CDN bağlantılarını ekleyin

html
<script src="https://cdn.jsdelivr.net/npm/markdown-text-editor"></script>

2. HTML Yapısı

Standart formunuzun içine bir <textarea> yerleştirmeniz yeterlidir. Özel ambalajlara gerek yoktur.

html
1
2
3
4
<form action="/api/save" method="POST">
  <textarea id="markdown-editor" name="content"># Hello World</textarea>
  <button type="submit">Save Content</button>
</form>

3. JS ve CSS'yi içe aktarın ve eklentiyi textarea öğenizde başlatın

javascript
1
2
3
4
5
6
import MarkdownEditor from "markdown-text-editor";

const editor = new MarkdownEditor('#markdown-editor', {
  placeholder: 'Write your markdown...',
  toolbar: ['heading', 'bold', 'italic', 'strikethrough', 'ul', 'ol', 'checklist', 'blockquote', 'link', 'preview'],
});

4. Yapılandırma ve Özelleştirme

Bir options nesnesi ileterek düzenleyicinin davranışını ve arayüzünü tamamen özelleştirebilirsiniz. Bir seçeneği atlarsanız varsayılan değer kullanılır.

Mülk Tip Varsayılan Amaç
mode string 'plain' Başlangıç ​​görünümünü ayarlar. WYSIWYG deneyimi için 'hybrid' veya ham sözdizimi için 'plain' kullanın.
placeholder string 'Write...' Düzenleyici boş olduğunda gösterilen metin.
toolbar array [...] Hangi araçların hangi sırayla görüneceğini tanımlar.
footer false | object hepsi görünür Düzenleyicinin altında gösterilen durum çubuğunu kontrol eder. Tamamen gizlemek için false olarak ayarlayın veya istatistikleri tek tek değiştirmek için bir nesne iletin.
theme string miras alınan Düzenleyici temasını açıkça ayarlar ('light', 'dark', 'snowberry', 'darkberry'). Atlanırsa, düzenleyici data-theme'i en yakın üst öğeden veya <textarea>'ın kendisinden devralır.
minHeight number 200 İçerik kısa olduğunda düzenleyicinin küçüleceği piksel cinsinden minimum yükseklik. Otomatik büyüme aralığını ayarlamak için maxHeight ile eşleşir.
maxHeight number 500 Düzenleyicinin tam ekran olmayan modda büyüyebileceği maksimum piksel yüksekliği. İçerik bu yüksekliği aştığında düzenleyicinin içinde bir kaydırma çubuğu görünür. Düzenleyicinin ayrıca bir sürükleme kolu vardır, böylece kullanıcılar bu sınırın ötesinde manuel olarak yeniden boyutlandırabilirler.
onChange function undefined Yazma, araç çubuğu eylemleri, geri alma/yineleme ve listenin devamı gibi her içerik değişikliğinde geri arama tetiklendi. Geçerli işaretleme dizesini tek bağımsız değişken olarak alır.

🛠 Araç Çubuğu Özelleştirmesi

Araç çubuğu modülerdir. Diziyi değiştirerek minimal bir deneyim veya tam özellikli bir güç paketi oluşturabilirsiniz.

Mevcut Araçlar
Kategori Araç Tuşları
Tipografi heading, bold, italic, strikethrough, blockquote
Listeler ul (kurşun), ol (sayılı), checklist
Kod code (Çizgide), codeblock (çitle çevrili blok)
Ekler hr (yatay cetvel), table (masa şablonu)
Medya link, image
Düzenleme undo, redo, indent, outdent
Görüş preview
💡 Uygulama İpuçları:
  • Yeniden sıralama: Düğmeler, dizide tam olarak listelediğiniz sırayla görünür
  • Kaldırma: Bu özelliği kullanıcı açısından tamamen devre dışı bırakmak için dizideki herhangi bir anahtarı (image gibi) çıkarmanız yeterlidir.
  • Yerel Geri Dönüş: JS'de bir yer tutucu sağlamazsanız, eklenti otomatik olarak HTML <textarea>'ınızdaki placeholder özelliğini kullanır.

📊 Alt Bilgi (Durum Çubuğu)

Alt bilgi, düzenleyicinin altında bulunur ve imlecin satırını, sütununu, belgenin karakter sayısını ve isteğe bağlı olarak kelime sayısını gösterir; tümü gerçek zamanlı olarak güncellenir. Varsayılan olarak görünür ve her istatistik bağımsız olarak değiştirilebilir.

Anahtar Tip Varsayılan Tanım
line boolean true Geçerli satır numarasını göster.
col boolean true Geçerli sütun numarasını göster.
chars boolean true Toplam karakter sayısını göster.
words boolean false Toplam kelime sayısını göster. Varsayılan olarak kapalı — etkinleştirmek için true olarak ayarlayın.
Kullanım Örnekleri
javascript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
// Default — line, col, and chars visible
new MarkdownEditor('#editor');

// Disable the footer entirely
new MarkdownEditor('#editor', { footer: false });

// Hide only character count
new MarkdownEditor('#editor', { footer: { chars: false } });

// Hide line and column, keep character count
new MarkdownEditor('#editor', { footer: { line: false, col: false } });

// Show only line number
new MarkdownEditor('#editor', { footer: { col: false, chars: false } });

// Enable word count alongside the defaults
new MarkdownEditor('#editor', { footer: { words: true } });

// Show word count only
new MarkdownEditor('#editor', { footer: { line: false, col: false, chars: false, words: true } });

5. İçerik Alma, Ayarlama ve Gönderme

MarkdownEditor'ün temel güçlü yönlerinden biri, temeldeki <textarea>'ı mükemmel şekilde senkronize tutmasıdır. İster modern bir JavaScript çerçevesi ister Django, PHP veya Laravel gibi geleneksel bir arka uç kullanıyor olun, iş akışı basit ve yerel kalır.

1. Yerli Yol (Önerilir)

Düzenleyici standart bir metin alanını geliştirdiğinden, tanıdık DOM yöntemlerini kullanabilirsiniz. Bu, yeni bir API öğrenmeden verilerinizle etkileşim kurmanın en hızlı yoludur.

javascript
1
2
3
4
5
// Retrieve content via ID
const markdown = document.getElementById('markdown-editor').value;

// Set content via ID (The editor UI updates automatically)
document.getElementById('markdown-editor').value = "# New Heading Content";

2. Değişken Referans Kullanma

Textarea öğesine bir referansınız varsa onu doğrudan kullanabilirsiniz; kitaplığa özgü API gerekmez.

javascript
1
2
3
4
5
6
7
const textarea = document.getElementById('markdown-editor');

// Retrieve content
const markdown = textarea.value;

// Set content (the editor UI reflects this immediately)
textarea.value = "## Updated via JS";

3. İçeriği ayarlama ve okuma

Başlangıç ​​içeriğini ayarlamanın önerilen yolu doğrudan <textarea> HTML'sindedir; bu, her arka uç çerçevesinde (Django, Laravel, Rails, PHP, vb.) doğal olarak çalışır ve düzenleyici bunu init'te otomatik olarak oluşturur.

html
1
2
<!-- Recommended: set content server-side -->
<textarea id="markdown-editor"># Hello World</textarea>

İçeriği çalışma zamanında okumak veya güncellemek için yerel textarea değerini kullanın. Önizleme ve hibrit katmanı yenilemek için güncellemeden sonra editor.render()'ı çağırın.

javascript
1
2
3
4
5
6
7
8
const textarea = document.getElementById('markdown-editor');

// Read
const markdown = textarea.value;

// Update at runtime
textarea.value = '# New content';
editor.render();

4. Düzenleyiciyi yıkmak — destroy()

Düzenleyici DOM sarmalayıcısını kaldırmak ve orijinal <textarea> dosyasını belgedeki konumuna geri yüklemek için editor.destroy()'u çağırın. Bir görünümün bağlantısını keserken tek sayfalı uygulamalarda kullanışlıdır.

javascript
1
2
3
4
const editor = new MarkdownEditor('#markdown-editor');

// Remove the editor and restore the plain textarea
editor.destroy();
onChange ile değişikliklere tepki verme

Her içerik değişikliğinde bilgilendirilmek için bir onChange geri çağrısı iletin. Geçerli işaretleme dizesini alır.

javascript
1
2
3
4
5
const editor = new MarkdownEditor('#markdown-editor', {
    onChange(value) {
        console.log('Content changed:', value.length, 'characters');
    }
});
localStorage ile taslak otomatik kaydetme

Her tuş vuruşunda bir taslak kaydetmek için onChange'i kullanın. Düzenleyiciyi başlatmadan önce metin alanını önceden doldurarak geri yükleyin.

javascript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const DRAFT_KEY = 'my-page-draft';

// Restore saved draft before init (only if textarea starts empty)
const textarea = document.getElementById('markdown-editor');
const saved = localStorage.getItem(DRAFT_KEY);
if (saved && !textarea.value) textarea.value = saved;

// Save on every change
const editor = new MarkdownEditor('#markdown-editor', {
    onChange(value) {
        localStorage.setItem(DRAFT_KEY, value);
    }
});

// Clear draft after successful form submission
document.querySelector('form').addEventListener('submit', () => {
    localStorage.removeItem(DRAFT_KEY);
});

4. Zahmetsiz Otomatik Form Gönderimi

MarkdownEditor doğrudan yerel <textarea> üzerinde oluşturulduğundan, kutudan çıktığı anda her arka uç çerçevesiyle (Django, Laravel, PHP, Ruby on Rails, vb.) uyumludur.

Burası "Önce Yerli" felsefesinin parladığı yerdir. Formu göndermeden önce verileri manuel olarak senkronize etmeniz gerekmez. Tarayıcı, düzenleyiciye tam olarak standart bir giriş alanı gibi davranır.

html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<form method="POST" action="/api/submit">
  <textarea id="markdown-editor" name="content" class="h-48" rows="5">
    # Initial Content
  </textarea>

  <button type="submit">Submit to Server</button>
</form>

<script>
  // Just initialize it. That's it.
  new MarkdownEditor('#markdown-editor');
</script>

Not: MarkdownEditor eklentisinin başlatılması zorunludur

Sadece standart bir HTML <form> kullanın. Textarea'daki name özelliği, sunucunuzun içeriği tanımlamak için kullanacağı özelliktir.

🚀 Neden Arka Uçlar İçin Oyunun Kurallarını Değiştiriyor?

Düzenleyici yerel <textarea> davranışını koruduğu için, sunucunuz verileri standart bir dize olarak işler. Hiçbir ekstra mantık gerekmez; preventDefault() yok ve manüel FormData yapısı yok.

💡 Bu neden bir "Öldürücü Özellik":

Çoğu düzenleyici (Quill, Editor.js, simpleMDE, easyMDE gibi) verileri karmaşık JSON yapılarında kaydeder. Bir geliştirici bunları kullanıyorsa, veritabanı şemasını ve oluşturma mantığını yeniden yazması gerekir.

MarkdownEditor ile bir geliştirici eski bir web sitesini alıp düz bir <textarea> dosyasını editörünüzle değiştirebilir ve arka uç bunun değiştiğini bile bilmez. Her zaman aldığı ham metni alır ancak kullanıcı 10 kat daha iyi bir deneyim yaşar.

Çerçeve / Dil Markdown içeriğine nasıl erişilir?
PHP $_POST['content']
Django request.POST.get('content')
Node.js (Express) req.body.content
Laravel $request->input('content')
Ruby on Rails params[:content]

Yapılandırma Seçenekleri

🖼️ Gelişmiş resim yükleme

Yavaş, bellek ağırlıklı Base64 dizelerine güvenmek yerine, görüntü yüklemelerini yerel olarak yönetmek, hem performans hem de SEO açısından önemli bir kazançtır.

Yapılandırma Seçenekleri

Resim aracı, doğrudan sunucuya yüklemeleri gerçekleştirmek için bir fileInput yapılandırmasını destekler.

  • kabul et: İzin verilen resim formatlarının bir dizisini tanımlayın (ör. 'webp', 'avif')
  • uploadUrl: File nesnesinin POST yoluyla gönderileceği arka uç uç noktasını belirtin
  • params: Görüntü dosyasının yanında ek veriler (CSRF belirteçleri, kullanıcı kimlikleri veya klasör adları gibi) göndermek için isteğe bağlı nesne

Kullanım örneği (Tam Yapılandırma)

javascript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
const options = {
  placeholder: 'Start writing...',
  toolbar: [
    'link',
    {
      image: {
        fileInput: {
            accept: ['webp', 'avif'], // restrict the image upload format
            uploadUrl: '/api/upload', // Your upload endpoint
            params: {
                _token: 'your_csrf_token_here', // Essential for Laravel/Django
                folder: 'blog_posts'
            }
        },
        // Supports boolean: true/false OR object: { required: true }
        altInput: { required: true }
      }
    },
    'preview'
  ],
}
const editor = new MarkdownEditor('#markdown-editor', options);

📡 Sunucu Entegrasyon Detayları

1. Talep

Düzenleyici, multipart/form-data olarak bir POST isteği gönderir. Varsayılan olarak şunları içerir:

  • resim_dosyası: Gerçek dosya nesnesi
  • image_alt: Kullanıcının girdiği alternatif metin
  • ...artı params nesnesinde tanımlanan tüm özel veriler
2. Gerekli Yanıt

Başarılı bir yüklemeyi onaylamak ve resmi düzenleyiciye eklemek için sunucunuzun aşağıdaki JSON yapısını döndürmesi gerekir:

json
1
2
3
4
{
  "success": true,
  "image_path": "https://cdn.yourdomain.com/uploads/image.webp"
}

Not: Yüklenen resmin URL'si için resim_yolu anahtarını kullandığınızdan emin olun.

Resim Alternatif Metin Doğrulaması (altInput)

İçeriğinizin erişilebilir ve SEO dostu kalmasını sağlamak için MarkdownEditor, varsayılan olarak alternatif metin doğrulamasını zorunlu kılar. Bu davranışı bir boole kısayolu veya ayrıntılı bir nesne kullanarak yapılandırabilirsiniz.

  • Varsayılan Davranış: altInput tanımlanmamışsa, varsayılan olarak { gerekli: true olur
  • Erişilebilirliği Zorunlu Hale Getirin: Bir alternatif açıklama sağlanana kadar kullanıcıların resim eklemesi engellenir
Yapılandırma Örnekleri:
1. Varsayılan (Yapılandırma gerekmez)
javascript
1
2
3
4
// Alt text is REQUIRED by default
image: {
  fileInput: { uploadUrl: '/api/upload' }
}
2. Kısa Yol (Doğrulamayı Devre Dışı Bırak)

Açıklamaları olmayan görsellere izin vermek istiyorsanız boole değerini false olarak ayarlamanız yeterlidir.

javascript
1
2
3
image: {
  altInput: false // Users can now skip the alt text field
}
3. Nesne tabanlı (Açık)
javascript
1
2
3
4
5
image: {
    altInput: {
        required: false // Disables alt text validation — users can skip the alt field
    }
}

Standart Görüntü Kullanımı (fileInput Yok):

fileInput yapılandırılmamışsa, düzenleyici varsayılan olarak basit bir URL tabanlı modal kullanır. Kullanıcılarınız çoğunlukla harici resim barındırıcılarına bağlantı veriyorsa bu idealdir.

javascript
1
2
3
4
5
6
7
8
const options = {
  toolbar: [
    'link',
    'image',
    'preview'
  ],
}
const editor = new MarkdownEditor('#markdown-editor', options);
💡 Param'ları neden kullanmalıyım?

Laravel veya Django gibi çerçevelerde CSRF belirteci olmadan dosya yükleyemezsiniz. params nesnesine _token eklendiğinde, isteğiniz arka ucun güvenlik ara yazılımından sorunsuz bir şekilde geçecek ve sunucu tarafı denetleyicileriniz için "Sıfır Mantık" felsefesini koruyacaktır.

🔀 Düzenleme Modları

MarkdownEditor içeriğinizi yazmanız ve biçimlendirmeniz için iki farklı yol sunar. Geleneksel sözdizimi odaklı görünüm veya modern, görsel öncelikli deneyim arasında geçiş yapabilirsiniz.

Yapılandırma

Başlatma sırasında mode özelliğini kullanarak başlatma modunu tanımlayabilirsiniz.

  • plain (Varsayılan): Sözdiziminin (**kalın** veya # başlık gibi) görünür olduğu temiz, yüksek performanslı bir Markdown ortamı. Geliştiriciler ve Markdown'a sadık olanlar için ideal
  • karma: Siz yazarken biçimlendirmeyi (Kalın, İtalik, Başlıklar) gerçek zamanlı olarak oluşturan ve aynı zamanda temeldeki Markdown yapısını koruyan, WYSIWYG'den ilham alan bir deneyim.
Uygulama:
javascript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// Default initialization (Plain Mode)
new MarkdownEditor('#markdown-editor');

// Explicit Plain Mode
new MarkdownEditor('#markdown-editor', {
    mode: 'plain'
});

// Hybrid (Visual) Mode
new MarkdownEditor('#markdown-editor', {
    mode: 'hybrid'
});
Hibrit ve Düz Mod Önizlemesi:
Hibrit Mod

Siz yazarken görsel biçimlendirme gerçek zamanlı olarak oluşturulur.

Düz Mod (Varsayılan)

Hafif bir deneyim için ham Markdown sözdizimine odaklanır.

Yapılandırma Özellik / Araç Tanım
Seçenekler nesnesi placeholder Textarea için yer tutucu metni ayarlar (standart HTML textarea niteliğini de kullanabildiğiniz için isteğe bağlıdır)
mode: 'hybrid' Siz yazarken biçimlendirmeyi (kalın, italik, başlıklar) gerçek zamanlı olarak işleyen, WYSIWYG'den ilham alan bir deneyim sağlar
araç çubuğu: Araç çubuğunda hangi araçların
görüneceğini ve bunların sırasını belirler.
heading H1–H6 başlık düzeyini seçmek için bir açılır menü açar
bold Kalın metin biçimlendirmesini etkinleştirir.
italic İtalik metin biçimlendirmesini etkinleştirir.
strikethrough Metnin üstü çizili olmasına izin verir.
ol (Sıralı Liste): Metni numaralı liste biçimine dönüştürür.
ul (Sırasız Liste): Metni madde işareti listesine dönüştürür.
checklist Metninize onay kutuları ekleyerek onu görevler, yapılacaklar listeleri veya tamamlanma durumunu izlemek için mükemmel hale getirir.
blockquote Alıntılanan veya vurgulanan metni vurgulayın.
code Satır içi kod için seçilen metni tek geri tırnaklara sarar. Tekrar tıklamak geri tıklamaları kaldırır.
codeblock Seçili metni üçlü geri tırnaklı çitli kod bloğuna sarar. Tekrar tıklamak çitleri kaldırır.
hr Kendi satırındaki imleç konumuna bir --- yatay kuralı ekler.
table İmleç konumuna bir başlangıç ​​2x3 işaretleme tablosu şablonu ekler.
image İşaretleme sözdizimi yoluyla resim eklemenizi sağlar.
link Metninize köprüler eklemenizi sağlar.
undo Son değişiklikleri geri almak için.
redo Geri alınan son değişiklikleri yeniden uygulamak için.
indent Girinti düzeyini artırmak için.
outdent Girinti seviyesini azaltmak için.
preview Tam ekran yan yana önizlemeyi değiştirir. Önizleme bölmesindeki onay kutuları tıklanabilir ve işaretleme kaynağını anında günceller. Tam ekrandan çıkmak için Escape tuşuna basın.
Gelişmiş resim yükleme özelliği:
Kendi sunucunuza
resim yüklemelerini yapılandırmanıza ve bir API aracılığıyla resim
yolunu ayarlamanıza olanak tanır. Bu, performansı ve SEO'yu artırır.
fileInput accept: İzin verilen resim dosyası türleri dizisi (ör. 'webp', 'avif').
uploadUrl: Dosyanın POST aracılığıyla gönderildiği arka uç uç noktası.
params: Ekstra veriler için isteğe bağlı nesne (CSRF belirteçleri, kullanıcı kimlikleri, klasör adları)
altInput gerekli: false: Alternatif metin girişi doğrulamasını devre dışı bırakır (varsayılan true'dur)

⌨️ Klavye Kısayolları

Yaygın biçimlendirme eylemleri, araç çubuğuna dokunmadan doğrudan klavyeden tetiklenebilir. Her kısayol aynı zamanda karşılık gelen araç çubuğu düğmesinin araç ipucunda da gösterilir.

Kısayol Aksiyon
Ctrl + B  /  ⌘ B Kalın'a geçiş yapın
Ctrl + I  /  ⌘ I İtalik'e geçiş yap
Ctrl + K  /  ⌘ K Bağlantı Ekle
Ctrl + `  /  ⌘ ` Satır içi Kod'u değiştir
Ctrl + Shift + S  /  ⌘ ⇧ S Üzeri çizili'yi aç/kapat
Ctrl + Z  /  ⌘ Z Geri al
Ctrl + Shift + Z  /  ⌘ ⇧ Z Yinele
Tab Seçilen satırları girintile
Shift + Tab Seçili satırların girintisini artır
Ctrl + F  /  ⌘ F Bul panelini aç
Ctrl + H  /  ⌘ H Bul ve Değiştir panelini aç
Escape Bul panelini kapat / Tam ekran önizlemeden çık

🔍 Bul ve bul Yer değiştirmek

Düzenleyicinin içinde yerleşik bir bul ve değiştir paneli mevcuttur; tarayıcı uzantısına veya ayrı bir araca gerek yoktur.

  • Bul panelini açmak için Ctrl + F (veya ⌘ F) tuşlarına basın
  • Bul ve Bul'u açmak için Ctrl + H (veya ⌘ H) tuşlarına basın. Paneli değiştirin
  • Arama büyük/küçük harfe duyarlı değildir ve canlı bir eşleşme sayacı gösterir (ör. 3/12)
  • ▲ / ▼ düğmelerini veya Enter / Shift + Enter tuşlarını kullanarak eşleşmelerde gezinin
  • Değiştir, vurgulanan mevcut eşleşmenin yerini alır; Tümünü Değiştir her tekrarı aynı anda değiştirir
  • Paneli kapatmak ve odağı düzenleyiciye geri döndürmek için Escape tuşuna basın

Panel, düzenleyici içerik alanının sağ üst köşesinde kayar ve yazmayı kesintiye uğratmaz.

🌙 Temalama

MarkdownEditor, temasını çevredeki sayfadan otomatik olarak devralır; herhangi bir yapılandırma gerekmez. Düzenleyici, başlatma sırasında en yakın atadan data-theme'i okur, böylece kutudan çıktığı haliyle sitenizin temasıyla senkronize kalır.

Tema nasıl çözümlenir (öncelik sırası)

  1. tema seçeneği — seçenekler nesnesinde iletilen açık geçersiz kılma
  2. <textarea>'da data-theme — doğrudan öğenin üzerinde ayarlanır
  3. Herhangi bir atadaki veri teması - ör. <html>, <body> veya sarmalayıcı <div>

Mevcut temalar

'açık' (varsayılan), 'dark', 'snowberry', 'darkberry'

Seçenek 1 — <html>'dan veya herhangi bir atadan devralın (sıfır yapılandırma)
html
1
2
3
4
5
6
<html data-theme="dark">
  ...
  <textarea id="markdown-editor"></textarea>
  <script>
    new MarkdownEditor('#markdown-editor'); // picks up dark automatically
  </script>
2. Seçenek — data-theme'i doğrudan <textarea> üzerinde ayarlayın
html
1
2
3
4
<textarea id="markdown-editor" data-theme="dark"></textarea>
<script>
  new MarkdownEditor('#markdown-editor');
</script>
Seçenek 3 — açık tema seçeneği (her şeyi geçersiz kılar)
javascript
1
2
3
new MarkdownEditor('#markdown-editor', {
    theme: 'dark'
});

🎨 CSS Değişkenleri aracılığıyla Özel Tema

.markdown-editor-wrapper öğesinde veya herhangi bir [data-theme] seçicide CSS değişkenlerini geçersiz kılarak düzenleyicinin görünümünü tamamen özelleştirebilirsiniz. Tüm renkler, algısal olarak tekdüze sonuçlar için OKLCH renk alanını kullanır.

Değişken Amaç Işık varsayılanı Koyu varsayılan
--color-base Düzenleyici arka planı oklch(100% 0 0) oklch(10.9% 0 0)
--color-on-base Birincil metin rengi oklch(22% 0 0) oklch(98% 0 0)
--color-primary Birincil vurgu (araç çubuğu etkin, bağlantılar) oklch(51.1% .262 277) oklch(66.4% .184 286)
--color-on-primary Ana renkli yüzeylerdeki metin oklch(96.2% .018 272) oklch(10% .01 270)
--color-secondary İkincil vurgu oklch(59.1% .293 323) oklch(65% .18 220)
--color-accent Vurguyu vurgulayın (satır içi kod, italik) oklch(54.1% .281 293) oklch(75% .18 50)
--color-neutral Nötr yüzeyler (kenarlıklar, bölücüler) oklch(15% 0 0) oklch(85% 0 0)
--color-error Hata durumu rengi oklch(57.7% .245 27) oklch(60% .22 30)
--border-radius Editör çerçevesinin köşelerinin yuvarlatılması 0.25rem
Özel tema örneği

Düzenleyici başlatıldıktan sonra .markdown-editor-wrapper'daki herhangi bir değişkeni geçersiz kılın veya stil sayfanızda özel bir [data-theme] bloğu tanımlayın:

css
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
/* Override individual variables */
.markdown-editor-wrapper {
    --color-primary: oklch(60% 0.2 30);   /* orange accent */
    --border-radius: 0.5rem;
}

/* Or define a full custom theme */
[data-theme="brand"] .markdown-editor-wrapper,
.markdown-editor-wrapper[data-theme="brand"] {
    --color-base:       oklch(15% 0.01 250);
    --color-on-base:    oklch(95% 0 0);
    --color-primary:    oklch(65% 0.22 145);   /* green */
    --color-on-primary: oklch(10% 0 0);
    --color-accent:     oklch(75% 0.18 60);
    --color-neutral:    oklch(80% 0 0);
    --border-radius:    0.75rem;
}
javascript
new MarkdownEditor('#markdown-editor', { theme: 'brand' });
  • Gerçek Zamanlı Önizleme: Siz yazarken işaretlemenizin anında oluşturulduğunu görün.
  • Sözdizimi Vurgulama: Anlaşılır kod ve işaretleme biçimlendirmesiyle gelişmiş okunabilirlik.
  • Kolay Entegrasyon: Minimum kurulumla herhangi bir web projesine sorunsuz bir şekilde entegre olun.
  • Özelleştirilebilir Araç Çubuğu: Kalın, italik ve daha fazlası gibi araç çubuğu seçeneklerini dinamik olarak yapılandırın ve yeniden sıralayın.

Özellikler

🔌 Yerel Form Entegrasyonu

Tam olarak standart bir <textarea> gibi çalışır. Karmaşık API'ler yok; yalnızca value veya name özelliğini kullanın. PHP, Django veya Node.js'deki standart HTML form gönderimleriyle "sadece çalışır".

🖼️ Gelişmiş Resim Yükleme

Yerel sunucu yüklemelerini API aracılığıyla yapılandırın. Resimleri kendi CDN'nizde barındırarak sayfaların daha hızlı yüklenmesini ve üstün SEO'yu sağlamak için ağır Base64 dizelerinden kaçının.

🔀 Hibrit ve Sade Modlar

Görsel düzenleme için Karma (WYSIWYG) deneyimi veya geleneksel kodlama hissi için Düz İşaretleme modu arasında geçiş yapın.

🚀 Yüksek Performans

"Ağır İçerik" için optimize edilmiş küçük bir ~116 KB paket. Çok büyük belgeleri ve büyük dosyaları herhangi bir giriş gecikmesi veya performans düşüşü olmadan yönetir.

🌍 Dahili RTL Desteği

Arapça, Urduca ve Farsça gibi Sağdan Sola diller için yerel destek. Küresel olarak erişilebilir uygulamalar oluşturmak için mükemmeldir.

🌙 Uyarlanabilir Tema

Otomatik Karanlık Mod desteğini içerir. Sorunsuz bir görsel deneyim için sistem ayarlarınızla veya Frutjam UI kitaplığıyla senkronize edilir.

📝 Akıllı Düzenleme

Sıralı listeler, sırasız listeler ve kontrol listeleri için GitHub tarzı otomatik liste devamı — Enter tuşuna bastığınızda düzenleyici deseni sürdürür. Önizleme bölmesindeki onay kutuları tıklanabilir ve işaretleme kaynağına anında senkronize edilir.

📱 Tamamen duyarlı

Hareket halindeyken düzenleme yapmak için masaüstü bilgisayarlara, tabletlere ve akıllı telefonlara mükemmel şekilde uyum sağlayan akıcı, mobil odaklı bir kullanıcı arayüzü.

📦 Evrensel Destek

ESM, UMD, CommonJS ve IIFE ile uyumludur. CDN (<script src>), npm veya herhangi bir paketleyici (Vite, webpack, Rollup) aracılığıyla kutudan çıktığı gibi çalışır; ekstra yapılandırmaya gerek yoktur.

♿ Varsayılan Olarak Erişilebilir

Yerleşik tam ARIA desteği; araç çubuğu yer işareti, etiketli önizleme bölgesi, ekran okuyucu dostu düğmeler, önizleme geçiş düğmesinde aria-basıldı, etkin olmayan araçlarda disabled ve aria-disabled ve modeller kapatıldığında doğru odak restorasyonu.

🛡️ Sıfır CSS Çatışması

Düzenleyici stilleri tamamen .markdown-editor-wrapper kapsamına alınmıştır. Tailwind'in genel ön kontrolü hariç tutulur, böylece editör Bootstrap, Tailwind veya diğer çerçevelerin stillerini bozmadan güvenli bir şekilde birlikte yaşar.

⌨️ Klavye Kısayolları

Ctrl+B, Ctrl+I, Ctrl+K, Ctrl+`, Ctrl+Shift+S — fareye dokunmadan yapılan yaygın biçimlendirme eylemleri. Her kısayol, araç çubuğu düğmesinin araç ipucunda gösterilir.

🔍 Bul ve bul Yer değiştirmek

Bulmak için Ctrl+F tuşlarına veya bul ve bul'u açmak için Ctrl+H tuşlarına basın. yer değiştirmek. Düzenleyiciden ayrılmadan canlı maç sayacı, sonraki/önceki gezinme, tek değiştirme ve tümünü değiştirme ile büyük/küçük harfe duyarlı olmayan arama.

Tam Yapılandırma Örneği

MarkdownEditor'ü özel araç çubuğu sıralaması ve gelişmiş resim yükleme işlemleri de dahil olmak üzere tüm temel özelliklerle başlatmak için bu kapsamlı örneği kullanın.

javascript
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const editor = new MarkdownEditor('#markdown-editor', {
    mode: 'hybrid',
    placeholder: 'Start writing...',
    footer: {
        line: true,
        col: true,
        chars: true,
        words: true,
    },
    onChange(value) {
        console.log('Content updated:', value.length, 'characters');
    },
    toolbar: [
        'heading', 'bold', 'italic', 'strikethrough', 'blockquote',
        'ul', 'ol', 'checklist',
        'code', 'codeblock', 'hr', 'table',
        {
            image: {
                fileInput: {
                    accept: ['webp', 'avif', 'png'],
                    uploadUrl: '/api/upload'
                }
            }
        },
        'link', 'undo', 'redo', 'indent', 'outdent', 'preview'
    ],
});

// Read content natively
const markdown = document.getElementById('markdown-editor').value;

// Update content programmatically (dispatch input to keep preview in sync)
// const ta = document.getElementById('markdown-editor');
// ta.value = '# New content';
// ta.dispatchEvent(new Event('input', { bubbles: true }));

// destroy() when the view unmounts (SPAs)
// editor.destroy();