2012-01-06 3 views
10

Kendi metin editörüm la Google Dokümanlar'ı çevirmek ilginç olurdu, elbette elbette merakla (tekerleği yeniden icat etmekle ilgisi yok). Dokümanlar ve Zoho Writer gibi uygulamaların, farklı sayfalarda metin ayırma veya içeriğiyle birlikte başlıkları koruma gibi gelişmiş düzenleri nasıl alabileceğini merak ettim, bildiğiniz gibi, TinyMCE ya da nicedit gibi editörler hiçbir şey yapmaz. DesignMode ve contenteditable kullanmanın farkındayım ve tuval kullanan insanları duydum, ama daha iyi bir yolu var mı? MS veya LibreOffice gibi masaüstü ofisleri bunu nasıl yönetiyor? Özellikle içeriği düzenlenirken ayrı sayfalara bölüyor musunuz?Javascript word processor/editör (veya Google Dokümanlar mimarisi)

Bir yan notta, yeni Google Dokümanlarının nasıl çalıştığını bilen var mı? Contenteditable (Zoho designMode kullanıyor) veya tuval kullanmıyor gibi görünüyor. Bulduğum kadarıyla, sadece s'nin çok derin bir hiyerarşisi.

+1

(yerine bir içerik düzenlenebilir vücudunun) bir giriş alanı ile ben şaşırmam. Bence, beni destekleyecek hiçbir şeyim yok ve ona bakmak için çok tembelim. –

+2

Google, tüm animasyonlarını ve editörlerini yapmak için etiketleri yerleştirmenin yaratıcı yollarından beni şaşırtmaktan asla vazgeçmez. –

+1

Tikkon, Bunu düşündüm. Her alfanümerik anahtarı ve değiştiricileri yakalamak için böyle büyük bir rahatsızlık gibi görünüyor. Bu, herhangi bir performans cezası gerektirecek mi acaba? Bir yan notta, DOM tarandıktan sonra, Dokümanlar'daki oyuğun aslında bir yanıp sönen DOM öğesi olduğundan şüpheleniyorum. Aklına takılan var mı? – Art

cevap

3

Sizin 'sorusu' biraz geniş, ama biraz size yardım etmeye çalışacaktır:

Google Dokümanlar iframe (değil display:none, kullanıcı aslında göremiyorum gizlenmiş sadece kullanıyor içerik) düzenlenebilir bir gövdeyle (. docs-texteventtarget-iframe); yanıp sönen çarşafı gördüğünüzde, düzenlenebilir gövdenin odaklandığı ve orada yazdığınız her şeyin DOM'a eklendiğini (özel HTML karakterlerini dezenfekte ettikten sonra)

Google Docs, dediğim gibi, DOM modifikasyonunu kullanıyor (tuval veya svg); bile caret biraz div yanıp sönüyor.

TinyMCE benzer bir teknik kullanır ama sadece JavaScript ile klavye/fare girişi yakalamak ve uygun şekilde DOM değiştirirseniz

+0

Alınan nokta - Soruyu açıklığa kavuşturdum. Bu oldukça zarif bir çözüm - Bence tuşa vurulup, sonlu bir durum makinesine dayanarak, biçimleri uygulamak veya karakterleri eklemek gibi eylemler gerçekleştiriliyor mu? – Art

+0

Olay aslında teknik anlamda yakalanmadı, her şey vücutta (veya TinyMCE'de girdi) yazılıyor ve karakter "belge" ye kopyalandıktan hemen sonra ve gövde/giriş temizlendikten hemen sonra. Bunun nedeni, olayın yakalanması anahtar kodlarının yorumlanmasında tutarsızlıklara yol açmasıdır (farklı tarayıcılar/kurulumlar). –

+0

Neden olaylar bu şekilde ele geçirilmiyorsa, bedenin kendisini düzenlemeyi tercih etmemeli? – Art