1. Giriş: Statik Yapıların Dinamikleşmesi
Tabirly, içerik yoğunluğu yüksek ve sık güncellenen bir platformdur. Geleneksel CMS (Blogger) yapılarında içerik üretimi; yönetim paneli ile önizleme sayfası arasında mekik dokuyan, bağlam kopukluğuna ve operasyonel darboğaza neden olan hantal bir döngüye sıkışmıştır.
Daha da önemlisi, Tabirly hazır şablonlar yerine tamamen özel kodlama (hard-coded) üzerine kurulu bir mimariye sahiptir. Sitenin bu teknik yapısı, yazılımcı olmayan editörlerin sistemi bozmadan (HTML yapısını kırmadan) içerik girmesini veya düzenleme yapmasını neredeyse imkânsız ve yüksek riskli bir hale getirmiştir.
Bu case study, Tabirly'nin bu kördüğümü çözmek için geliştirdiği; sunucu yükünü artırmadan tamamen tarayıcı tarafında çalışan, kullanıcının çalışma alanına göre şekil alabilen ve "Inline Editor (IE)" adı verilen modülün teknik analizini içerir.
2. Mimari Yaklaşım: "On-Top" Enjeksiyon Modeli
İncelediğimiz kod (v2025-09-06), Tabirly'nin mevcut tema dosyalarına kalıcı olarak gömülü değildir; ihtiyaç anında çağrılan "On-Top" (Üst Katman) bir mimariye sahiptir.
Tetikleyici Mekanizma
Kod, kendini izole eden bir fonksiyon (IIFE) yapısındadır. Sadece ?ie=1 parametresi veya draft.blogger gibi önizleme ortamlarında aktifleşir. Bu sayede son kullanıcı (okuyucu) hiçbir yük hissetmez.
(function(){
var q=new URLSearchParams(location.search), host=location.hostname;
// Sadece admin parametresi veya önizleme linklerinde çalış
if(!(q.get('ie')==='1'||preview)) return;
// ...
})();
Engel Aşma (Bypass)
Blogger önizlemelerindeki tıklama engelleyici katmanları (clickTrap), dinamik CSS enjeksiyonu (pointer-events: none) ile stratejik bir şekilde bypass edilerek sayfa etkileşime açılır.
if(preview && !document.getElementById('tb-clicktrap-bypass')){
var st=document.createElement('style'); st.id='tb-clicktrap-bypass';
// Tıklama tuzağını etkisiz hale getir
st.textContent='.blogger-clickTrap,[class*="clickTrap"]{pointer-events:none!important;}';
document.head.appendChild(st);
}
3. Kodun Çözdüğü Kritik Problemler ve Teknik Derinlik
Bu script sadece metin düzenlemez; aynı zamanda ergonomik ve akışkan bir çalışma alanı sunan bir mikro-uygulamadır.
A. Uzamsal Özgürlük ve Akışkan Arayüz (Draggable UI)
Standart CMS editörleri genellikle sayfanın tepesine veya yanına sabitlenir. Bu durum, özellikle mobilde veya dar ekranlarda düzenlenmek istenen metnin görünmesini engeller (Visual Obstruction).
- Sorun: Sabit menülerin içeriği kapatması ve odak kaybı yaratması.
- Çözüm: Kodun içerisindeki
mousedown,mousemovevemouseupolay dinleyicileri, araç çubuğunu tamamen hareketli hale getirir.
function move(e){
if(!drag) return;
// Delta hesaplama ile pürüzsüz kaydırma
var dx=e.clientX-drag.x, dy=e.clientY-drag.y;
bar.style.left=(drag.l+dx)+'px';
bar.style.top=(drag.t+dy)+'px';
}
Adaptasyon: Araç çubuğu flex-wrap yapısına sahiptir. Kullanıcı paneli ekranın köşesine sıkıştırdığında butonlar otomatik olarak yeniden hizalanır (reflow). Bu duyarlı (responsive) yapı, editörün kullanıcının odaklandığı paragrafı (Focus Area) asla işgal etmemesini sağlayarak bilişsel yükü minimize eder.
B. Yapısal Bütünlük (Semantic Integrity)
Tabirly gibi metin odaklı sitelerde SEO için HTML etiketlerinin (H2, H3, P) doğru hiyerarşide olması hayatidir.
Kontrol: handleKey fonksiyonu klavye olaylarını dinler.
function handleKey(e){
if(e.key !== 'Enter') return;
if(e.shiftKey){
// Shift+Enter: Satır sonu (
)
document.execCommand('insertLineBreak');
} else {
// Enter: Yeni Paragraf ()
document.execCommand('insertParagraph');
}
e.preventDefault();
}
C. Dinamik Hedefleme (MutationObserver)
Modern web sayfaları dinamiktir. Kodda kullanılan MutationObserver, sayfanın gövdesini sürekli izler. Eğer makale alanı DOM'dan silinip tekrar oluşturulursa (örneğin sayfa yenilenmeden içerik değişirse), editör kendini otomatik olarak yeni elemente tekrar bağlar. Bu, "Self-Healing" (Kendi kendini onaran) bir kod yapısıdır.
var mo=new MutationObserver(function(){
var newT=document.querySelector(targetSel);
// Hedef element değişirse yeniden bağlan
if(newT && newT!==target){
target=newT;
attachKeyHandler();
}
});
mo.observe(document.body,{childList:true,subtree:true});
D. Veri İhracatı (Data Export)
CMS paneline dönmeye gerek kalmadan, downloadHTML fonksiyonu o anki düzenlenmiş içeriği temizler (gereksiz attribute'ları atar) ve temiz bir HTML dosyası (blob) olarak tarayıcı üzerinden indirir.
function downloadHTML(){
var clone=target.cloneNode(true);
// Düzenleme artıklarını temizle
clone.removeAttribute('contenteditable');
var html=clone.innerHTML;
// Blob oluştur ve indir
var blob=new Blob(['...'+html+'...'],{type:'text/html;charset=utf-8'});
// ...
}
E. Mikro-Mühendislik Detayları (Micro-Optimizations)
Kodun kalitesi, ilk bakışta görülmeyen ancak kullanıcı deneyimini pürüzsüzleştiren defansif programlama detaylarında saklıdır:
Script, kullanıcının bir liste (<li>) içinde olduğunu algılarsa (closestTag kontrolü ile) paragraf zorlamasını durdurur. Böylece listeler ve madde işaretleri kırılmaz.
if(closestTag(anchor,'LI')) return;
İndirme esnasında, mobil tasarımları bozan ve "yapışkan boşluk" olarak bilinen \u00a0 karakterleri regex ile temizlenir.
.replace(/\u00a0/g,' ')
Araç çubuğundaki butonlara tabIndex=-1 atanmıştır. Bu sayede kullanıcı "Kalın" butonuna tıkladığında klavye odağı kaybolmaz ve metne tekrar tıklamasına gerek kalmadan yazmaya devam edebilir (Flow State).
Sayfa kapatılırken beforeunload tetikleyicisi ile tüm düzenleme çizgileri temizlenir, böylece tarayıcı önbelleğinde (cache) istenmeyen görsel artıklar kalmaz.
F. Geliştirici Bağımlılığının Ortadan Kalkması (Democratization of Editing)
Tabirly'nin tüm mimarisi, standart temalar yerine "custom-code" (özel yazılım) üzerine kuruludur.
Sorun (The Developer Gap): Sitenin her hücresi kodla oluşturulduğu için, editör paneli kullanmak mayın tarlasında yürümek gibidir. Yazılımcı olmayan bir editörün yapacağı en ufak hata (örneğin bir </div> etiketini yanlışlıkla silmek), tüm site tasarımını (layout) yıkabilir. Editörler geliştirici olmadığı için bu risk sürdürülemez bir durum yaratıyordu.
Çözüm: Inline Editor, kaynak kodları ile editör arasına güvenli bir "Cam Duvar" örer. Editör, karmaşık HTML yapısını asla görmez ve dokunamaz; sadece izin verilen metin alanlarını manipüle eder. Bu sayede teknik bilgiye ihtiyaç duymadan, siteyi bozma riski %0'a indirilerek güvenli içerik üretimi sağlanır.
4. Araç Seti ve Fonksiyonel Yetenekler
Inline Editor, Tabirly editörlerinin ihtiyaç duyduğu en kritik 14 fonksiyonu içeren kompakt bir araç çubuğu (toolbar) sunar. Her bir araç, verimliliği artırmak için optimize edilmiştir:
5. Kullanılan Teknolojiler ve Nedenleri
Bu modülde React veya Vue yerine Vanilla JavaScript (Saf JS) tercih edilmesinin stratejik nedenleri vardır:
-
Hız ve Performans: Kod boyutu çok küçüktür, harici kütüphane yüklenmesini beklemez, milisaniyeler içinde çalışır. Araç çubuğu fontları için
system-uikullanılarak 0-latency (sıfır gecikme) hedeflenmiştir. - Sıfır Bağımlılık (No-Dependency): Platformdan bağımsız (agnostik) mimarisi sayesinde, Tabirly'nin altyapısı değişse bile bu "bağımsız katman" çalışmaya devam eder. Herhangi bir framework'e bağlı olmadığı için teknolojik borç (technical debt) yaratmaz.
- Tarayıcı Yerel Gücü: Sürükle-bırak ve dosya işlemleri için tarayıcının native yetenekleri kullanılarak maksimum uyumluluk sağlanmıştır.
6. İş Akışı (Workflow) İyileştirmesi
Tabirly editörleri için süreç şu hale gelmiştir:
- Taslak Oluştur & Önizle: Ham metni gir ve önizlemeyi aç.
- Konumlandır: Araç çubuğunu metnin üzerinden alıp, o an çalışmadığın boş bir alana sürükle.
- Yerinde Düzenle (WYSIWYG): Yazıyı okurken hata mı gördün? Panele dönme. Tıkla, düzelt, link ver.
- Çıktı Al: Toolbar'dan tek tıkla temiz HTML'i indir ve yayınla.
Sonuç: Editörün içeriği kapatmadan serbestçe yüzebilmesi (Floating UI) ve bağlam kopukluğunu önlemesi sayesinde:
7. Sonuç
Bu kod parçası, Tabirly'nin teknolojiye yaklaşımını özetler: "Kısıtlayıcı arayüzlere değil, kullanıcıya uyum sağlayan esnek çözümler."
Devasa editör yazılımları entegre etmek yerine; sürüklenebilen, kullanıcının çalışma alışkanlığına göre yer değiştiren ve şekil alan bu hafif yapı, Tabirly'nin operasyonel çevikliğinin temel taşlarından biridir.
"Tabirly Inline Editor, kısıtlı bir CMS altyapısını, tarayıcı tabanlı zekice manipülasyonlarla modern, hızlı ve hatasız bir yayıncılık stüdyosuna dönüştüren minimalist bir mühendislik örneğidir."