Sunday, March 31, 2013

Plugin JavaScript Kotak Dialog

Screenshoot of JavaScript dialog box plugin.

Plugin kotak dialog ini pada dasarnya hanyalah pengembangan sederhana dari konsep draggable element yang pernah Saya tuliskan sebelumnya. Kotak dialog ini hanya menggunakan JavaScript mentah, jadi tentu saja akan memiliki beberapa keterbatasan, diantaranya adalah:

  1. Tidak ada fitur resizable.
  2. Tidak ada efek animasi.
  3. Tidak bisa membuka beberapa kotak dialog sekaligus, hanya satu kotak dialog dengan isi dan ukuran yang berubah-ubah.

Untuk lebih jelasnya bisa dilihat di halaman demo:

Lihat Demo

Memasang Plugin

Untuk memasang plugin kotak dialog, Anda perlu menambahkan file CSS ini di atas kode </head>:

<link rel="stylesheet" href="../dialog-box.min.css"/>

Kemudian tambahkan juga file JavaScript ini di atas </body>:

<script src="../dialog-box.min.js"></script>

Aktivasi

Konsep dasar aktivasi ada dua, yaitu membuka kotak dialog dan menutup kotak dialog. Untuk membuka kotak dialog berdasarkan aksi klik pada tombol, jalankan fungsi setDialog dengan parameter open. Sedangkan untuk menutup kotak dialog, gunakan parameter close:

<a href='javascript:setDialog("open");'>Buka kotak dialog</a>
<a href='javascript:setDialog("close");'>Tutup kotak dialog</a>

Lihat Demo

Daftar Konfigurasi Lengkap

Setelah Anda mengerti mengenai bagaimana caranya menampilkan dan menyembunyikan kotak dialog, selanjutnya Anda perlu mengetahui cara menyisipkan konten dan juga merekayasa tombol-tombol kotak dialog. Yang mana semua pengaturan itu akan dilakukan pada parameter ke dua, berupa objek seperti ini:

<a href='javascript:setDialog("open", { ... });'>Buka kotak dialog</a>
Opsi Keterangan
title Digunakan untuk menentukan judul kotak dialog.
content Digunakan untuk menentukan konten kotak dialog.
width Digunakan untuk menentukan lebar kotak dialog dalam piksel.
height Digunakan untuk menentukan tinggi kotak dialog dalam piksel.
top Digunakan untuk menentukan jarak atas kotak dialog terhadap layar.
left Digunakan untuk menentukan jarak kiri kotak dialog terhadap layar.
specialClass Digunakan untuk menambahkan kelas CSS khusus pada kotak dialog (untuk keperluan modifikasi penampilan).
fixed Jika bernilai true, posisi kotak dialog akan melayang dan tidak akan terbawa gulungan layar. Jika bernilai false, posisi kotak dialog bisa terbawa gulungan layar.
overlay Pilihan untuk menampilkan atau menyembunyikan tabir kotak dialog.
buttons Adalah deret objek yang nantinya akan berubah menjadi daftar tombol baru (akan Saya jelaskan nanti).

Konfigurasi secara keseluruhan:

setDialog("open", {
    title: 'Judul kotak dialog',
    content: 'Isi kotak dialog',
    width: 300,
    height: 150,
    top: false,
    left: false,
    specialClass: "",
    fixed: true,
    overlay: false,
    buttons: {}
});

Contoh-Contoh Dasar

Kotak dialog dengan judul dan konten berupa kode HTML:

<a href='javascript:setDialog("open", {title: "Judul Dialog", content: "Konten dialog dan &lt;strong&gt;sedikit kode HTML&lt;/strong&gt;"});'>Buka</a>

Lihat Demo

Menyisipkan elemen <iframe>:

<a href='javascript:setDialog("open", {title: "Judul Dialog", content: "&lt;iframe src=&quot;URL-IFRAME.html&quot;&gt;&lt;/iframe&gt;"});'>Buka</a>

Lihat Demo

Catatan Penting: Mohon perhatikan mengenai penulisan tanda petik pada pengeksekusian fungsi secara langsung. Jika tanda petik yang digunakan pada atribut HTML adalah petik ganda, gunakan petik tunggal pada pengaturan fungsi setDialog, sebaliknya, jika tanda petik yang digunakan pada atribut HTML adalah petik tunggal, gunakan petik ganda pada pengaturan fungsi setDialog:

<a href="javascript:setDialog('open');">
        ^                     ^    ^  ^
        A                     B    B  A

<a href='javascript:setDialog("open");'>
        ^                     ^    ^  ^
        B                     A    A  B

Mengingat konten kotak dialog bisa berukuran sangat panjang, dan juga untuk mengatasi masalah penulisan tanda petik yang sangat rawan kesalahan seperti yang Saya jelaskan di atas, sebenarnya akan lebih baik jika eksekusi fungsi setDialog() dilakukan di luar elemen tersebut dengan cara menghubungkannya melalui ID atau kelas elemen HTML seperti ini:

<a id="dialog-link-1" href="#">Buka</a>
<script>
document.getElementById('dialog-link-1').onclick = function() {
    setDialog("open", {
        title: 'Judul Dialog',
        content: 'Konten dialog super panjaaaaaaaaaaaaaaaannnnggggggg...!!!',
        width: 600,
        height: 300
    });
    return false;
};
</script>

Pertama-tama nyatakan kode HTML untuk tombol pemicu kotak dialog dengan ID yang spesifik, setelah itu eksekusi fungsi setDialog dengan cara mengakses elemen melalui document.getElementById()

Lihat Demo

Anda juga bisa menyisipkan konten dari elemen lain:

<div id="foo" style="display:none;">
    <h2>Lorem Ipsum Text</h2>
    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
    sed diam <strong>nonummy</strong> nibh euismod
    magna aliquam erat volutpat. Ut wisi enim ad minim veniam,
    quis nostrud exerci tation ullamcorper suscipit lobortis
    nisl ut aliquip ex ea commodo consequat.
    Duis autem vel eum iriure dolor in hendrerit in vulputate
    velit esse molestie consequat, vel illum dolore eu feugiat
    nulla facilisis at vero eros et accumsan et iusto odio
    dignissim qui blandit praesent luptatum zzril delenit
    augue duis dolore te feugait nulla facilisi.</p>
</div>
<a id="dialog-link-2" href="#">Buka</a>
<script>
document.getElementById('dialog-link-2').onclick = function() {
    setDialog("open", {
        title: 'Judul Dialog',
        content: document.getElementById('foo').innerHTML,
        width: 600,
        height: 300
    });
    return false;
};
</script>

Lihat Demo

Rekayasa Tombol

Masing-masing tombol dapat dibuat melalui konfigurasi buttons dengan nilai berupa objek:

setDialog("open", {
    title: 'Judul Kotak Dialog',
    content: 'Konten kotak dialog.',
    buttons: {
        "Yes": function() {
            alert("Tombol YES ditekan!");
        },
        "No": function() {
            alert("Tombol NO ditekan!");
        }
    }
});

Setiap key dari buttons akan mewakili nama/label tombol, dan fungsi yang mengikutinya akan tereksekusi ketika tombol tersebut ditekan:

Lihat Demo


Kode Sumber

  1. dialog-box.css
  2. dialog-box.js
  3. dialog-box.min.css
  4. dialog-box.min.js

Labels: ,

25 Comments:

At Sunday, March 31, 2013 at 11:40:00 PM GMT+7, Blogger Fajrin said...

boleh juga nih.. keren abis pokoknya :-bd

 
At Monday, April 1, 2013 at 9:56:00 AM GMT+7, Blogger Beben Koben said...

yg gini kok simple :-a !!!

 
At Tuesday, April 2, 2013 at 1:48:00 PM GMT+7, Anonymous Anonymous said...

mungkin maksud dari "simple" itu adalah karena menggunakan java script ga pakek jquery. wkwkwkwkwkw

 
At Monday, April 8, 2013 at 8:22:00 PM GMT+7, Blogger Mr.Randy said...

gila keren abis dahh,. dipikir2 dulu ah bikin apaan ya dengan ini? hehe

 
At Friday, April 12, 2013 at 7:09:00 AM GMT+7, Blogger Unknown said...

Manfaat banget gan,
thanks :-bd

 
At Friday, May 24, 2013 at 10:48:00 AM GMT+7, Blogger Kang Ismet said...

Untuk menempatkan kotak dialog pada tag pre gimana mas? seperti pada postingan ini:
http://www.dte.web.id/2012/11/javascript-popup-copy-code.html
intynya COPY diganti menjadi dialog box...

 
At Saturday, May 25, 2013 at 1:09:00 PM GMT+7, Blogger Taufik Nurrohman said...

Tujuan kita membuat salinan kode ke jendela munculan itu karena untuk mengatasi masalah misalnya, kode tidak bisa disalin karena baris-baris angka ikut tersalin, atau indentasinya rusak saat menyalin kode melalui tag <pre>.

Mengubah jendela munculan menjadi kotak dialog kustom memang bisa, cuma pertanyaannya adalah untuk apa? Bukankah menyalin kode melalui tag <pre> tidak ada masalah? Apakah karena menyalin kode di dalam kotak dialog kustom rasanya lebih enak dibandingkan dengan menyalin kode melalui tag <pre>?

// Fungsi penyalin kode Mindo Gaweni
function copy_code(id) {
var ref = document.getElementById(id),
code = ref.getElementsByTagName('code')[0].innerHTML;
setDialog("open", {
title: 'Kode Sumber',
content: '<pre>' + code + '</pre>',
width: 600,
height: 300
});
}

 
At Saturday, May 25, 2013 at 6:55:00 PM GMT+7, Blogger Kang Ismet said...

masalahnya bukan itu mas.. saya hanya ingin belajar, setelah coba2 gagal terus.. hanya terinspirasi Alex Gorbatchef, ada tombol help....
Ilustrasinya seperti gambar mas, ketika klik tombol help/info muncul kotak dialog informasi yang stylish, bukan salinan kode....
http://3.bp.blogspot.com/-0MwrgL4U5ts/UaClgZnlS2I/AAAAAAAAESM/IxRQFydG1ko/s1600/pre-dialog.png

 
At Saturday, May 25, 2013 at 8:13:00 PM GMT+7, Blogger Taufik Nurrohman said...

$('<a href="#" class="help-text">?</a>').on("click", function() {
setDialog("open", {
title: "Tentang",
content: "Untuk menyalin kode, klik ganda pada area kode",
buttons: {
"Sip masbro!": function() {
setDialog("close");
}
}
});
return false;
}).appendTo($('pre'));


Demo: http://jsfiddle.net/tovic/5mwP7/6/

 
At Saturday, May 25, 2013 at 8:29:00 PM GMT+7, Blogger Kang Ismet said...

emang jagonya masbrow... tengkyu.. tapi sayang blum bisa liat demo, otomatis CSSnya juga belom dapet.. tumben jsfiddle lola

 
At Saturday, May 25, 2013 at 10:50:00 PM GMT+7, Blogger Kang Ismet said...

laporan mas... script sudah bisa diterapkan, tapi masih ada sedikit masalah, tombol ikut kena seleksi

http://1.bp.blogspot.com/-8WU6bU-fV98/UaDdBsZ6R-I/AAAAAAAAESc/ohDOGTWAwHc/s1600/kena-seleksi.png

saya menggunakan script ini untuk seleksi, bisa dibuat pengecualian untuk class help-text?

<script type='text/javascript'>
var pres = document.getElementsByTagName(&quot;pre&quot;);
for (var i = 0; i &lt; pres.length; i++) {
pres[i].addEventListener(&quot;dblclick&quot;, function () {
var selection = getSelection();
var range = document.createRange();
range.selectNodeContents(this);
selection.removeAllRanges();
selection.addRange(range);
}, false);
}
</script>

 
At Saturday, June 22, 2013 at 11:46:00 AM GMT+7, Anonymous Anonymous said...

Lengkap sudah, plus sudah langsung bisa leluasa mengatur tampilan kotak dialog nya! :-bd

 
At Tuesday, June 25, 2013 at 11:12:00 PM GMT+7, Blogger Ivan Mantovani S said...

saya mau tanya, untuk efek animasi apakah pengaturannya tetap pada javascript ?

 
At Friday, July 26, 2013 at 4:43:00 AM GMT+7, Blogger Taufik Nurrohman said...

Targetkan elemen <code>, bukan elemen <pre>:

pres[i].children[0].addEventListener("dblclick", function() { ... }, false);

Alternatif lain: JavaScript Seleksi Teks Otomatis

 
At Sunday, August 11, 2013 at 5:19:00 PM GMT+7, Blogger Akhmad Riduan said...

Mas kenapa klau aku opload ke google code .js dan .css nyx gak bisa berkerjapadahal udah dalam SVN/Trunk :'(
aku mau upload ulng karena wrnya gax sesuai dengan tmplte sya
http://animovsubs.blogspot.com/

 
At Thursday, December 12, 2013 at 12:17:00 PM GMT+7, Blogger Alwan said...

Kalo Kotak Dialognya Sudah Dalam Keadaan Minimize Gimana Mas?

 
At Friday, December 13, 2013 at 9:43:00 PM GMT+7, Blogger Taufik Nurrohman said...

div.className = 'dialog-box minimize';

 
At Sunday, December 15, 2013 at 8:45:00 PM GMT+7, Blogger bagusa4 said...

kang Taufik , mau tanya, :D
kalo mau nambahain code z-index:99999999 di mana ya??
apakah di dalam specialClass: "", ??
mohon di bantu ya :D

 
At Monday, December 16, 2013 at 8:25:00 PM GMT+7, Blogger Taufik Nurrohman said...

⇒ http://dte-project.googlecode.com/svn/trunk/dialog-box/dialog-box.css

 
At Tuesday, December 17, 2013 at 8:43:00 PM GMT+7, Blogger Alwan said...

Maaf Mas, Bisa Dijelaskan Lagi Tempat Peletakannya

 
At Tuesday, December 17, 2013 at 9:23:00 PM GMT+7, Blogger bagusa4 said...

waduh jadi saya harus ngehosting ulang ya mas?? hee :D

 
At Tuesday, December 17, 2013 at 9:58:00 PM GMT+7, Blogger Taufik Nurrohman said...

Bisa. Baca saja lagi!

 
At Wednesday, April 29, 2015 at 4:59:00 AM GMT+7, Blogger viandwi said...

mas , kalau kode yang untuk URL cara memunculkannya mengisinya gimana :
<a href='javascript:setDialog("open", {title: "Judul Dialog", content: "Konten dialog dan &lt;strong&gt;sedikit kode HTML&lt;/strong&gt;"});'>Buka</a>

 
At Monday, May 18, 2015 at 9:29:00 PM GMT+7, Blogger Taufik Nurrohman said...

Maksudnya URL halaman masuk sebagai konten dialog?

 
At Friday, July 1, 2016 at 6:38:00 PM GMT+7, Blogger BKE said...

Mas, untuk menampilkan kotak dialog dengan onclik gimana y :(

 

Post a Comment

<< Home