Membuat Rich Text Editor dalam Situs Web
Pada dasarnya, tidak ada elemen HTML yang dapat membantu user untuk memasukkan tulisan yang mendukung visual formatting alias kita dapat memformat atau mengatur style dari tulisan secara visual (WYSIWIG). Namun seiring berkembangnya kebutuhan dan berkembangnya browser yang digunakan untuk menampilkan file HTML, sebuah text editor yang WYSIWIG (saya sebut saja rich text editor) dapat kita buat.
Perlu diperhatikan juga, fasilitas pembuatan rich text editor ini menggunakan fasilitas yang disediakan oleh browser dan ternyata tidak semua browser menyediakan fasilitas ini. Contoh browser yang memiliki fasilitas ini adalah Mozilla sekeluarga dan Internet Explorer. Selain itu, javascript ikut berperan serta dalam pembuatannya.
Oh iya, browser yang saya jadikan kelinci percobaan adalah Mozilla Firefox. Sehingga mungkin saja terjadi masalah pada browser lain :D
Mengaktifkan design mode
Design mode adalah sebuah fasilitas yang ditambahkan pada sebuah dokumen HTML sehingga dokumen tersebut dapat menjadi sebuah rich text editor.
Cobalah potongan javascript berikut ini. (demo 1).
document.designMode = 'on';
Maka secara ajaib dokumen HTML yang Anda buka akan menjadi sebuah editor!
Karena kita tidak ingin membuat dokumen yang sedang dibuka menjadi sebuah editor, maka kita perlu untuk membuat dokumen lain yang berada di dalam dokumen yang sedang dibuka. Untuk itu, kita akan menggunakan elemen IFRAME. Dokumen HTML yang berada di dalam IFRAME itulah yang akan dijadikan sebuah editor.
Catatan: Pada referensi yang saya pakai, penggunaan IFRAME tidak disebutkan. Sehingga mungkin sebenarnya elemen HTML lainnya juga dapat dipakai. Namun saya belum berhasil menggunakannya :D
Silakan coba lagi source code di bawah ini. (demo 2).
<iframe id="editor"></iframe>
<script type="text/javascript">
document.getElementById("editor").contentWindow.document.designMode = 'on';
</script>
Menambah fasilitas formatting
Editor yang sudah dibuat sebelumnya mungkin belum cukup disebut sebagai rich text editor karena belum ada fasilitas formatting sehingga style dari tulisan dapat diubah-ubah. Walau sebenarnya Anda bisa saja copy-paste dari dokumen lain karena stylenya akan tetap dibawa.
Dari sekian banyak fasilitas untuk memformat tulisan, saya akan mencoba memasukkan sebagian saja. Sisanya menjadi PR untuk Anda :P Fasilitas-fasilitas tersebut adalah
- Bold
- Underline
- Italic
- Insert hyperlink
Pertama-tama, buatlah elemen HTML lain yang menjadi user interface bagi
pengaktifan fasilitas tadi. Dalam tutorial ini, saya akan menggunakan
tombol biasa. Masing-masing tombol saya masukkan sebuah fungsi javascript
yang akan dipanggil ketika event onclick pada tombol terjadi yaitu saat
tombol diclick.
<input type="button" value="Bold" onclick='format("bold")'/>
<input type="button" value="Underline" onclick='format("underline")'>
<input type="button" value="Italic" onclick='format("italic")'/>
<input type="button" value="Insert hyperlink" onclick='format("createlink")'/>
Berikut ini adalah isi dari fungsi format dalam javascript.
function format(command) {
var editor = document.getElementById('editor');
var doc = editor.contentWindow.document;
var param = null;
//beberapa fungsi membutuhkan penanganan khusus
//contohnya adalah untuk menambah hyperlink
if (name == 'createlink') {
//tanya URL
param = prompt('URL', 'http://');
}
//perintahkan dokumen pada editor untuk memasang format yang diminta
doc.execCommand(command, false, param);
}
Source code lengkap dapat dilihat dalam (demo 3).
Ada beberapa perintah yang mungkin akan ditolak oleh browser, seperti copy, cut, dan paste. Sampai sekarang saya belum tahu bagaimana cara agar perintah-perintah ini dapat dijalankan :D Tapi kombinasi tombol Ctrl+C, Ctrl+X, dan Ctrl+V masih tetap bisa digunakan kok.
Menghubungkan dengan form
Sampai saat ini kita sudah berhasil membuat sebuah editor. Namun agar editor ini dapat dipergunakan selayaknya form biasa, maka tulisan yang berada dalam editor juga harus dapat dikirim saat form disubmit.
Salah satu cara yang dapat dilakukan adalah dengan menggunakan sebuah textarea yang akan digunakan untuk menampung source code dari tulisan dalam editor. Disebut source code karena memang sebenarnya yang ditulis dalam editor adalah sebuah dokumen HTML biasa.
Proses pemindahan ini akan dilakukan saat form akan disubmit. Sehingga
perlu menangkap event onsubmit pada form.
Untuk memindahkannya sendiri, cukup salin nilai dari properti innerHTML
pada elemen body dalam dokumen milik editor ke dalam textarea.
function salin() {
var doc = document.getElementById('editor').contentWindow.document;
var body = doc.body;
var textarea = document.getElementById('textarea');
textarea.value = body.innerHTML;
}
Untuk menangkap event onsubmit dan membajak proses submit, perhatikan
source code di bawah ini.
<form ... onsubmit="return cekform()">
Pada fungsi cekform(), proses submit akan ditentukan kelanjutannya
apakah diteruskan atau dibatalkan. Jika fungsi tadi mengembalikan nilai
true, maka proses submit akan diteruskan. Begitu pula sebaliknya.
Pada fungsi cekform() ini, fungsi salin() yang sebelumnya dibuat akan
dipanggil. (Sebenarnya bisa saja langsung panggil fungsi salin() pada
event onsubmit itu).
function cekform() {
salin();
return true;
}
Untuk hasil akhir, dapat dilihat pada (demo 4). Form yang ada dalam demo 4 tersebut saya hubungkan dengan sebuah script php yang akan menampilkan nilai yang disubmit.
Kalau Anda perhatikan, setiap bagian tulisan yang diberi format, maka akan
diformat dengan menggunakan CSS. Misalnya setiap tulisan yang ditebalkan
akan diapit oleh <span style="font-weight: bold;"> dan </span>. Jika
Anda lebih menyukai untuk menggunakan elemen HTML yang ada (misalnya B),
maka Anda dapat mematikan penggunaan CSS dengan menambahkan perintah
berikut setelah mengaktifkan design mode.
document.getElementById("editor").contentWindow.document.execCommand('useCSS', false, null);
Hasilnya dapat dilihat pada (demo 5).
Catatan: Pada dokumentasi terbaru, perintah useCSS ternyata sudah
ditinggalkan dan diganti dengan styleWithCSS. Tapi pada browser Mozilla
Firefox 1.0.4 yang saya gunakan sekarang, jika styleWithCSS yang dipakai
maka akan terjadi error pada javascriptnya.
Referensi
- Midas Specification
- Mozilla Editor
- Rich text editor lainnya *lupa*
iang ... kalau yang bisa nge seterip hasil copy paste dari ms word ... ada ngga? buatin tutorial nya ya ...hehehehe
mas, java scriptnya mana?
matur suwun.
#1: Ngestrip tu maksudnya ngebersihin code2 yg aneh2 gtu? Coba pake kses aja
Wow, menarik sekali. Aku gk tau ternayta bisa dijadikan builtin editor ya. Menarik unutk dicoba .. great post!
iang sempet2nya nulis tutorial sepanjang ini :D
hebat oi... he2x..
hebat :D
sempat bikin artikel teknis kayak ginian
gimana mbagi waktunya, oom ?
kewl!!!, ampe saat ini gw masih pake RTE yang simpel, ini bagus juga kalo pake native editornya.......,
thanx
#4, #5: Hahaha.. kemaren tiba2 kepikiran tuk nulis. Daripada ilang, ya lgs aja nulis :))
#6: Lha? RTE juga pake yang beginian kali? Yg gw tulis kan dasar2 pembuatannya aja :D
gw masih pake bawaannya si wp... *ngintip*
rencana mo ganti...
tapi rencana tinggal rencana... =))
postingan kurang kerjaan... hahaha... tapi keren iang... ;)
wehehhhe... postingan yang bagus :) sip sip :D kereeennn...
Hi, I've written an article you might want to check out!
The Future of Software
Ngga sengaja nulis, lagi baca-baca blog, lho, kok nyambung... Hehe...
mantap iang :)
untuk menampilkann hasilnya bagai mana tuh om ...
maksudnya di form.phpnya
bisa minta sekalian codingnya gak?
terima kasih.
#13: coba aja ambil nilai $_POST['value']
Wah .... baru tau
keren ....
tengkyu boss, kebetulan lagi butuh yg kayak gini
om..aku coba ambil nilai dari "value" yang di form.php ko ga bisa yah..
boleh tau script lengkapnya ga...masalahnya masih belajar2x.
hehehehe...
source code php nya? sorry belum saya tulis link nya ya? hehe.. bisa dilihat di http://fajran.net/arsip/tutorial/membuat-rich-text-editor/form.phps kalo yg html kan tinggal view source aja tuk ngeliat isinya
Tengkyu berat. Gw udah seminggu pusing mikirin web-based-editor
Keren, pas banget aq lagi nyari.
Tapi blh nanya ga mas klo tulisan bold nya dganti icon gmn ya? maaf ne aq newbie hehehe :)
Mas, klo text itu mo saya simpan ke database gmn caranya ya? maklum saya baru belajar programming. Tolong ya mas bantuaanya.
regards
@puspa: ya ganti aja
<input type="button" ...>menjadi<img src=" ... ">. Pastikan atributonclick= ...nya ada di dalam tagimgtadi.@allo: pertama, baca cara ngakses (create, read, update, delete) database. soalnya bagian ini tidak akan saya bahas di sini. Lalu untuk mendapatkan text yang ditulis, dapatkan dari variabel
$_POST['value']kayaknya kekurangannya web based editor tidak bisa membatasi halaman secara otomatis ya ?
@dendy: IMO, itu mah tinggal pinter2 bikin script2 pendukung. misalnya tuk selalu memantau apa yg ditulis sehingga setelah mencapai suatu batas tertentu, script tsb dapat menghentikan proses penulisan
aku ada problem nih, tentang iframe.knp ya script html khususnya dicampur dengan syntax php, jadi tidak muncul.tman2 bisa tolong bantuin ga?thanks b4 ya
Makasih banyak mas iang ... jadi nambah ilmu deh nih ...
Benar2 informasi yang sangat berguna :)
tapi ada yg mo saya tanya nich.
saya coba di IE dan Opera, semua lancar dan normal,
tetapi di firefox sendiri gak jalan.
kenapa yach?
wah mas, bisa tolong di upload lagi gak code nya di tempat lain soalnya kyknya linknya demonya dah expired nih :) trims alot ya :)
@sandymc: wah iya.. thx.. saya lupa (baca: males) beberes link.. hehehe.. fajran.net udah gak dipake dan semua diganti jadi fajran.web.id.. links di page ini udah saya benerin..
bisa minta tolong gmana dapetin variabel teks yang ditulis,, menyimpan variabel di database ,, lalu nampilin variabel di database ke halaman web supaya tampil kayak waktu ditulis bukan sorce kodenya???
bi tulisin gmana script di form.php??
tlonga bgt y.. q bener2 bth,, dah pusing nyari gmana nampilin hasil d php...
makasih,,,,
@sanji: ngambil nilai dari php pakai $_POST['value']. Urusan disimpan ke database dan nampilin lagi ya seperti biasa aja. Banyak tutorial yg membahas ttg hal itu.
Lalu itu maksudnya source code apa? HTML? bedakan antara apa yang disimpan dengan apa yang ditampilkan. Yang disimpan bisa saja memang html dengan tag-tag nya yang mengganggu mata. Tapi setelah ditampilkan, tag-tag html kan akan dirender oleh browser sehingga dapat menjadikan dokumen yang indah.
Mantep Om....
Kebeneran nih gw lagi nyariin kayak ginian....
Pas diulik2 ternyata nggak ribet2 amat nih....!!!
Thank's nih... Sukses selalu Om...
kalo mau ambil data dari database ato testfile kemudian kita tampilakna dengan mengguakan form yg dibuat om aing, gimana syntaxnya ?
Bro, ada yang punya source code form.php ga? yang di link udah expire! kalau ada kirim ke e-mail gw ya er_grezz@yahoo.co.id
buaguss.. lagi nyari-nyari editor yang simple2 aja eh ada cara bikin sendiri
beuhh.
kagak mudeng nii..
:((
kalo untuk menambahkan gambar gimana ya?? biar gambar masuk di database dan secara otomatis ditampilkan di teks editornya.
Trimakasih
mas....
tanyak nih....
kan saya udah bisa bikin rte nya....
yang saya bingung...
bagaimana upload gambar dari komputer karena saya upload gambarnya dari web lain.
kemudian bagaimana kita mengupdate data yang sudah masuk ke dalam database kemudian di edit kembali di rte ini....?