Sekedar memperbaharui Generator Tombol CSS3 Saya. Sekarang Saya buat menjadi lebih sederhana namun dengan sistem otomatisasi yang lebih baik. Fitur hold hover session sudah digantikan dengan otomatisasi berdasarkan posisi pointer terhadap editor warna pada kolom :hover. Memperbaiki beberapa kesalahan, dan mencoba untuk menangani bug Opera dan IE9 yang tidak bisa menjalankan widget JQuery UI Slider pada versi JQuery UI lama. Kabar baiknya, alat ini bukan hanya bisa digunakan sebagai alat perancang tombol CSS3, tapi juga bisa digunakan sebagai generator CSS3 Gradient yang kompatibel.
Karena beberapa proses revisi yang Saya lakukan, alat ini sudah tidak bisa diunduh lagi. Tapi jika Anda tetap ingin mengunduh, Anda bisa melakukan itu dengan mudah, yaitu dengan cara mengeklik kanan pada halaman demo, kemudian pilih perintah Save as... ⇒ Web Page Complete
Saya sudah mengetes alat ini pada peramban versi terakhir dari Opera, Firefox and Chrome. Termasuk IE9 dan Safari.
JQuery UI Dialog digunakan untuk menangani hal-hal yang berhubungan dengan komunikasi antarmuka antara aplikasi dengan pengguna. Karena tidak mungkin jika sebuah aplikasi bisa berbicara dan menyarankan sesuatu untuk dilakukan oleh pengguna, kotak dialog menjadi salah satu cara yang bisa digunakan untuk berkomunikasi.
Dasar Penggunaan
Buat sebuah elemen divisi sembarang, kemudian isi elemen tersebut dengan sesuatu. Seleksi elemen tersebut dengan JQuery, kemudian terapkan metode .dialog():
Jika bernilai true, maka kotak dialog akan tampil pada saat halaman pertama kali diakses. Jika bernilai false, kotak dialog tidak akan tampil saat halaman diakses sampai sebuah pemicu memerintahkan kotak dialog tersebut untuk tampil. Pemicu biasanya berupa tombol atau suatu aksi (default: true)
Menentukan efek khusus saat kotak dialog ditutup (default: null)
closeText
"close", "tutup", ...
Menentukan teks pada tombol penutup kotak dialog di sebelah kanan atas. Secara umum tidak terlihat karena opsi ini memang tidak terlalu penting. Bahkan, dalam tema JQuery UI, teks ini juga tidak akan ditampilkan:
.ui-dialog-titlebar-close span {display:none}
(default: "close")
modal
true
Pilihan untuk menampilkan tabir transparan saat kotak dialog muncul. (default: false)
false
draggable
true
Pilihan untuk menentukan apakah kotak dialog dapat diseret (drag) atau tidak. (default: true)
false
resizable
true
Pilihan untuk menentukan apakah kotak dialog dapat diubah ukurannya atau tidak. (default: true)
Menambahkan tombol di dalam kotak dialog. Bagian ini biasanya yang sedikit rumit, karena selain menampilkan tombol, Anda juga harus bisa membuat tombol tersebut berfungsi sehingga kotak dialog bisa hidup.
Contoh Penerapan
autoOpen:false
Menentukan opsi autoOpen:false akan membuat kotak dialog tidak muncul pada saat pertama kali halaman diakses dan hanya akan muncul jika diperintah.
Kita buat sebuah elemen divisi sebagai kotak dialog dan sebuah tombol sebagai pemicunya:
HTML
<div id="dialog"> Konten di sini... </div> <button id="open">Buka Dialog</button>
.dialog("open") dan .dialog("close") adalah metode yang digunakan untuk menampilkan dan menyembunyikan kotak dialog. Selain menggunakan opsi autoOpen:false, menghilangkan kotak dialog juga bisa dilakukan dengan cara yang lebih sederhana yaitu dengan CSS atau dengan fungsi .hide():
#dialog {display:none}
$('#dialog').hide();
title:"Kotak Dialog", width:250, height:200
Menambahkan judul “Kotak Dialog” dan menentukan lebar kotak dialog sebesar 250 piksel dan tinggi kotak dialog sebesar 200 piksel:
Tombol dalam kotak dialog dengan kemampuan untuk menjalankan perintah akan menghidupkan kotak dialog dan tidak hanya sekedar berakhir sebagai kotak peringatan. Anda bisa menciptakan kotak dialog yang dapat memerintahkan elemen lain untuk melakukan sesuatu.
Pada dasarnya, opsi buttons dapat dituliskan seperti ini:
buttons: { "OK": function() { // Fungsi yang akan bekerja jika // tombol `OK` diklik dibuat di sini... }, "Cancel": function() { // Fungsi yang akan bekerja jika // tombol `Cancel` diklik dibuat di sini... } }
Sebagai contoh, kita akan membuat dua buah tombol dalam kotak dialog untuk mengendalikan elemen yang berada di luar kotak dialog:
Sebenarnya cara kerjanya sangat sederhana. Saat sebuah tombol diklik, itu akan memicu sebuah fungsi untuk menampilkan kotak konfirmasi. Salah satu tombol di dalam kotak konfirmasi merupakan perintah sebenarnya dari tombol yang diklik tadi. Sedangkan tombol yang Anda kira sebagai pemicu utama untuk menjalankan perintah sebenarnya hanyalah tombol untuk menampilkan kotak dialog konfirmasi:
<div id="confirm-box"> <span class="ui-icon ui-icon-alert" style="float:left;margin:0 10px 50px 0;"></span>Apakah Anda yakin akan menghapus gambar ini? Hal ini tidak bisa dibatalkan dan gambar ini akan terhapus selamanya. </div>
Lipsum-UI is a light weight Lorem Ipsum generator. This generator wil generate Lorem Ipsum text for use as dummy texts on webpages. Just do what you want in the options panel and you'll see the magic. Say thank's to Mottie who have helped me to complete this project and to resolve my problems about my limited JavaScript capabilities :p
Demo & Download
You can view the demo and download it by clicking the button below:
Because of some revisions that I have done, this tool may not be downloaded anymore. But, if you still want to download, you can still do it easily by right clicking on the demo page, then choose Save as… ⇒ Web Page Complete
.resizable() akan membuat elemen menjadi mudah diubah ukurannya. Saat sebuah elemen dikenai fungsi .resizable(), maka sebuah tanda berbentuk simbol ui-icon-gripsmall-diagonal-se akan disematkan di pojok kanan bawah. Selain itu, kursor pointer juga akan berubah.
Dasar Penggunaan
Buat sebuah elemen dengan lebar dan tinggi tertentu. Elemen dapat diseleksi seperti biasanya mengikuti sintaks JQuery:
Membatasi perubahan lebar terkecil elemen. (default: 10)
minHeight
0, 1, 2, 3, ... (numerik)
Membatasi perubahan tinggi terkecil elemen. (default: 10)
maxWidth
0, 1, 2, 3, ... (numerik)
Membatasi perubahan lebar terbesar elemen. (default: null)
maxHeight
0, 1, 2, 3, ... (numerik)
Membatasi perubahan tinggi terbesar elemen. (default: null)
aspectRatio
2/3, 4/2 ... (perbandingan lebar dan tinggi)
Menjaga agar rasio/perbandingan lebar dan tinggi elemen tetap ideal. (default: false)
grid
0, 1, 2, 3, ... (numerik)
Menentukan jarak langkah perubahan ukuran elemen (default: false)
containment
"#kontainer" ... (selektor)
Membatasi pembesaran ukuran elemen dengan batasan berupa elemen induk (default: false)
helper
"garis-bantu" (kelas)
Menyisipkan pembantu/indikator perubahan ukuran saat elemen sedang diubah ukurannya. Wujud helper tidak mutlak, tergantung dari kode CSS yang Anda buat pada kelas helpernya. (default: false)
ghost
true
Tugasnya sama dengan helper. Hanya saja, ghost berwujud duplikat elemen transparan yang akan menjadi indikator perubahan ukuran elemen. (default: false)
false
animate
true
Berfungsi untuk menganimasikan perubahan ukuran elemen. (default: false)
false
animateDuration
"slow", "normal", "fast"
Mengatur kecepatan animasi. (default: "slow")
1000, 2000, ... (milidetik)
animateEasing
"swing", "easeInBack", ... (nama easing)
Menentukan easing khusus pada animasi perubahan ukuran elemen. (default: "swing") Pelajari tentang easing JQuery di sini
alsoResize
"#saya-juga" ... (selektor)
Opsi ini akan membuat elemen lain ikut berubah jika elemen target diubah ukurannya. (default: false) Dalam hal ini, elemen pengikut yang dimaksud adalah #saya-juga.
delay
100, 200 ... (milidetik)
Menentukan waktu penundaan perubahan elemen. Saat opsi ini diterapkan, maka elemen akan berubah ukuran saat waktu delay telah habis.
distance
20, 30 ... (piksel)
Menentukan penundaan perubahan elemen berdasarkan jarak. Saat opsi ini diterapkan, maka elemen akan berubah ukuran setelah handle elemen digeser pada jarak tertentu.
Dengan menentukan opsi tinggi/lebar minimal dan tinggi/lebar maksimal, Anda bisa membatasi perubahan ukuran terkecil dan ukuran terbesar elemen sesuai kehendak:
Menentukan aspectRatio akan menjaga perbandingan lebar dan tinggi elemen agar tetap konsisten/ideal. Biasanya ini diperlukan untuk objek berupa gambar:
Slider adalah elemen UI berbentuk variabel klasik. Untuk mendapatkan nilai, Anda harus menggeser slider ke kanan atau ke kiri, ke atas dan ke bawah. Meskipun metodenya terlihat klasik, namun sangat menarik untuk ukuran antarmuka berupa objek digital.
Dasar Penggunaan
Mengubah elemen tertentu menjadi Slider dilakukan dengan cara menerapkan fungsi .slider() pada elemen yang diseleksi:
Menentukan letak slider handle saat pertama kali halaman terakses/dikunjungi. (default: 0)
step
0, 1, 2, 3, ... (numerik)
Menentukan nilai step dengan bilangan tertentu akan membuat slider handle bergeser dengan akurat pada loncatan sebesar nilai step. (default: 1)
min
0, 1, 2, 3, ... (numerik)
Menentukan nilai terendah Slider. (default: 0)
max
0, 1, 2, 3, ... (numerik)
Menentukan nilai tertinggi Slider. (default: 100)
range
"min"
Nilai "min" akan memberikan dekorasi berupa warna tertentu (sesuai tema) pada sisa jarak di belakang slider handle, sedangkan "max" akan memberikan dekorasi warna pada sisa jarak di depan slider handle. Ini hanya untuk keperluan antarmuka.
Nilai true agak rumit untuk dijelaskan. Intinya adalah, nilai ini digunakan untuk menyatakan bahwa Anda akan menerapkan dua buah slider handle pada satu bar. Ini adalah syarat pertama untuk membuat slider berganda. (default: false)
"max"
true
values
[1, 20] (Array)
Saat Anda menuliskan opsi ini, maka opsi value sudah tidak diperlukan lagi. Opsi ini hanya digunakan jika Anda akan menciptakan dua buah slider handle dalam satu bar, yaitu setelah Anda menyatakan range:true. Angka pertama menyatakan letak slider handle pertama dan angka ke dua menyatakan letak slider handle ke dua. (default: null)
orientation
"horizontal"
Pilihan untuk menentukan orientasi Slider. "horizontal" akan memposisikan Slider secara horizontal, "vertical" akan memposisikan Slider secara vertikal. (default: "horizontal")
"vertical"
slide
function(event, ui) {}
ini adalah opsi terpenting. Opsi ini digunakan untuk mengambil data dari Slider.
Contoh Penerapan
Secara normal, betapapun lebar dan tinggi jarak/rangeSlider, nilai akan selalu dimulai dari 0 dan berakhir pada 100. Ini adalah sistem persentase. Jadi, Saya rasa Anda tidak akan kesulitan untuk mengimajinasikannya.
value:30
Menentukan nilai value sebesar 30 akan menempatkan slider handle pada jarak 30% dari keseluruhan lebar bar:
Menentukan nilai step sebesar 10 akan membuat langkah slider handle lebih tegas dan terukur. Ini diperlukan jika Anda menginginkan nilai yang akurat sehingga akan mempermudah perhitungan selanjutnya:
ui.value adalah variabel bawaan dari JQuery UI Slider. Nilainya bisa berubah-ubah sesuai dengan pergerakan slider handle. Di sini Saya menggunakan .val() untuk menyisipkan data karena elemen yang akan disisipi adalah elemen <input>. Jika elemen yang akan Anda gunakan berupa elemen biasa dan bukan merupakan elemen-elemen formulir, Anda bisa menggunakan alternatif .text() atau .html() (pelajari di sini).
Kita buat dua buah elemen. Elemen pertama akan menjadi Slider UI dan elemen ke dua akan menjadi pencatat nilai:
Menentukan nilai min:30 akan mengubah nilai minimal Slider yang secara normal adalah 0 menjadi 30. Menentukan nilai max:1000 akan mengubah nilai maksimal Slider yang secara normal adalah 100 menjadi 1000.
orientation:"vertical" digunakan jika Anda menginginkan Slider dengan orientasi vertikal. Slider horizontal memiliki kemampuan melebarkan diri karena memang itulah sifat dasar elemen blok. Namun Slider vertikal tidak bisa begitu. Anda harus menentukan tinggi Slider vertikal sendiri dengan perantara .height() atau cukup mendeklarasikan tinggi dengan nilai tertentu pada selektor CSS elemen yang dimaksud:
Dalam satu Slider dapat diterapkan lebih dari satu slider handle. Hal ini biasanya digunakan untuk keperluan menentukan nilai minimal dan maksimal. Syarat pertama untuk menciptakan slider berganda adalah dengan menentukan opsi range:true, setelah itu tentukan nilai values berupa dua buah range dalam array.
Opsi value sudah tidak diperlukan lagi di sini karena telah digantikan oleh values. Variabel Slider tidak lagi berupa ui.value namun berubah menjadi ui.values[0] untuk handle pertama dan ui.values[1] untuk handle ke dua.
Salah satu kemampuan JQuery UI yang cukup mengesankan adalah tentang begitu mudahnya kita membangun objek hanya dengan menerapkan fungsi pada elemen yang diinginkan. Di sini Saya akan menjelaskan sedikit (atau lumayan banyak?) mengenai JQuery UI Accordion.
Dasar Penggunaan
Sebelum menerapkan fungsi .accordion() pada elemen, pertama-tama Anda buat dulu kerangka objeknya yang secara umum diciptakan dari elemen-elemen berupa header, link dan divisi:
Menentukan panel urutan ke berapa yang akan terbuka saat pertama kali. Urutan pertama dimulai dari 0. (default: 0)
header
"h3"
Tentukan header akordion. Nilainya berupa selektor. (default: otomatis ditentukan oleh script. Elemen pertama akan menjadi header/pemicu dan elemen ke dua akan menjadi panel. Selebihnya akan disusun mengikuti pola tadi secara otomatis)
"div.header"
fillSpace
true
Pilihan untuk mengatur tinggi akordion agar memenuhi ruangan secara vertikal. (default: false)
Mengubah ikon default dari widget akordion. header digunakan untuk mengubah ikon pada pemicu dalam keadaan normal, headerSelected digunakan untuk megubah ikon pada pemicu yang sedang aktif. (default: header:"ui-icon-triangle-1-e", headerSelected:"ui-icon-triangle-1-s") Lihat semua nama ikon JQuery UI 1.8.16 »
autoHeight
true
Pilihan untuk menentukan apakah panel-panel akordion akan mengatur tinggi mereka sesuai dengan rata-rata ukuran tinggi terkecil dan ukuran tinggi terbesar atau membiarkan panel mengikuti ukuran konten yang ada di dalamnya. (default: true)
Opsi ini sebenarnya tidak begitu penting dituliskan, karena script widget accordion sudah bisa menemukan sendiri elemen mana yang akan menjadi header/pemicu dan elemen mana yang akan menjadi panel.
fillSpace:true
Menentukan fillSpace:true akan membuat tinggi akordion menyesuaikan diri dengan tinggi elemen induk. Lebar akordion tidak disertakan ke dalam opsi karena tanpa JavaScript-pun semua elemen blok secara default akan melebarkan diri sesuai dengan lebar elemen induk:
Menentukan autoHeight:false akan membuat tinggi panel akordion menyesuaikan diri dengan konten yang ada di dalamnya. autoHeight:true akan membuat tinggi panel akordion menyesuaikan diri dengan tinggi rata-rata tiap panel akordion:
Sedikit informasi bahwa di dalam framework JQuery UI sudah terdapat plugin Easing 1.3 dan plugin JQuery animate color. Jadi, jika selama ini Anda telah memasang plugin easing JQuery dan animasi warna dan hendak menerapkan JQuery UI (dikhususkan untuk paket lengkap, bukan pecahan-pecahan efek), Anda bisa membuang script Easing dan animasi warna dari lembar kerja:
JQuery UI Sudah Dilengkapi dengan Plugin Easing 1.3
JQuery UI Button digunakan untuk memanipulasi elemen menjadi tombol. Target bisa berupa <button>, <a>, <input>, <span> dan <div>. Namun elemen-elemen yang umum dimanipulasi adalah <button>, <a> dan <input>:
Pilihan untuk menonaktifkan tombol. (default: false)
false
text
true
Pilihan untuk menghilangkan teks jika hanya ingin menampilkan ikon. (default: true)
false
icons
{primary:"nama-ikon-1", secondary:"nama-ikon-2"}
Menambahkan ikon di samping teks/label tombol. primary digunakan untuk menambahkan ikon sebelum label, secondary digunakan untuk menambahkan ikon setelah label. Lihat semua nama ikon JQuery UI 1.8.16 »
label
"nama label baru"
Memanipulasi nama tombol/label dengan JQuery. Ini akan membuat teks yang tadinya tertulis sebagai nama tombol menjadi berganti dengan teks yang telah ditentukan dalam opsi label
Mengingat bahwa JQuery UI adalah plugin, maka sintaks JQuery UI tidak sama dengan sintaks efek dalam JQuery. Bisa dibilang, JQuery UI hanya menyisipkan dirinya di dalam efek JQuery yang umum digunakan.
.show(), .hide() dan .toggle() adalah tiga bagian pokok yang akan selalu Anda pakai saat menjalankan efek JQuery UI. Selain itu ada satu lagi fungsi khusus untuk JQuery UI yaitu .effect()
Berbeda dengan .show(), .hide() dan .toggle() yang dapat mengubah visibilitas elemen, .effect() hanya berfungsi untuk membantu JQuery UI menjalankan animasi tanpa mengubah visibilitas elemen. (Biasanya digunakan untuk efek-efek emosional yang tidak memerlukan penghilangan/pemunculan elemen).
Dasar Penggunaan
Saat Anda menyembunyikan elemen dengan fungsi .hide(), maka Anda akan menuliskannya seperti ini:
$('div').hide(1000);
Sekarang Anda ingin menambahkan efek blind pada elemen yang akan Anda sembunyikan, maka Anda bisa menambahkan efek JQuery UI dengan cara seperti ini:
$('div').hide("blind", 1000);
Setiap efek memiliki beberapa opsi di dalamnya. Misalnya, secara default efek blind akan menutup elemen secara horizontal. Jika Anda ingin menciptakan efek penutupan secara vertikal, Anda tinggal menentukan opsi direction: "vertical" pada parameter opsi. Bagian opsi dibuat setelah nama efek dan dikelompokkan di dalam braket objek:
Hal yang sama juga bisa dilakukan untuk .show(), .toggle() dan .effect(). .effect() hanya berguna jika diterapkan pada efek-efek emosional yang tidak memerlukan perubahan visibilitas elemen.
Efek JQuery UI ini tidak jauh berbeda dengan .slideDown() dan .slideUp(). Keistimewaannya adalah dapat diarahkan secara horizontal. Sesuatu yang selama ini tidak bisa dilakukan oleh .slideDown() dan .slideUp()
Efek ini akan menampilkan/menyembunyikan elemen dengan efek memudar bersamaan dengan perubahan letak sesuai dengan direksinya.
Opsi
Nilai
Deskripsi
direction
"up"
Perubahan tingkat transparasi dan perpindahan posisi elemen menuju ke atas
"down"
Perubahan tingkat transparasi dan perpindahan posisi elemen menuju ke bawah
"left"
Perubahan tingkat transparasi dan perpindahan posisi elemen menuju ke kiri
"right"
Perubahan tingkat transparasi dan perpindahan posisi elemen menuju ke kanan
$('div').hide("drop", { direction: "up" }, 1000);
explode
Ini adalah efek favorit Saya. Efek ini akan meledakkan elemen!
Opsi
Nilai
Deskripsi
pieces
1, 2, 3, …
Menentukan jumlah potongan (default: 9)
$('div').hide("explode", { pieces: 36 }, 1000);
fold
Elemen akan dikenai efek melipat. Batas akhir lipatan bisa ditentukan dalam opsi. Default arah lipatan adalah vertikal kemudian horizontal.
Opsi
Nilai
Deskripsi
size
1, 2, 3, …
Menentukan batas terkecil lipatan (default: 15)
"10%", "50%" …
horizFirst
true
Menentukan apakah efek akan dimulai dari horizontal terlebih dahulu atau vertikal terlebih dahulu
false
$('div').hide("fold", { size: 10 }, 1000);
highlight
Elemen akan dikenai efek sorotan. Warna sorotan bisa ditentukan dalam opsi. Efek bisa berupa sorotan saja atau berupa sorotan kemudian menghilangkannya.
Opsi
Nilai
Deskripsi
color
"#990000", "#ffa500", …
Menentukan warna sorotan (default: #ffff99)
"red", "green", …
"rgb(0, 0, 0)", "rgb(255, 255, 255)" …
mode
"show"
Menentukan apakah setelah elemen dikenai sorotan akan menghilang atau tetap seperti apa adanya (default: show)
Elemen akan dikenai efek goncangan. Jumlah goncangan dan arah goncangan dapat ditentukan dalam opsi.
Opsi
Nilai
Deskripsi
times
1, 2, 3, …
Menentukan jumlah goncangan
direction
"up"
Goncangan cenderung mengarah ke atas
"down"
Goncangan cenderung mengarah ke bawah
"left"
Goncangan cenderung mengarah ke kiri
"right"
Goncangan cenderung mengarah ke kanan
$('div').effect("shake", { times: 7 }, 1000);
slide
Sepintas efeknya tampak sama dengan blind, tetapi sebenarnya ada sebuah perbedaan jika Anda memperhatikannya dengan teliti. blind akan menghilangkan elemen dimulai dari tempat awal gerakan, sedangkan slide akan menghilangkan elemen dimulai dari tempat terakhir gerakan:
Efek ini hanya digunakan untuk menunjukkan bahwa sesuatu saling berkaitan. Saat sebuah aksi dilakukan, maka elemen seolah-olah akan menuju ke suatu tempat yang telah ditentukan. Target bisa berupa objek elemen (kelas/ID) dalam selektor JQuery.
Opsi
Nilai
Deskripsi
to
"#foo"
Elemen akan ditransfer menuju elemen dengan ID foo
".bar"
Elemen akan ditransfer menuju elemen dengan kelas bar
$('div').effect("transfer", { to: "#foo" }, 1000);
JQuery UI merupakan plugin komponen user interface (hal-hal yang berhubungan dengan antarmuka pengguna) berupa interaksi, widget berfitur lengkap dan efek animasi yang berada di bawah framework JQuery. Setiap komponen dibangun sesuai dengan arsitektur kerja JQuery (menemukan sesuatu, kemudian memanipulasinya) dan memiliki kemampuan untuk menerima tema yang bermacam-macam sesuai dengan keperluan desain — JQuery UI
Sejauh yang Saya pelajari selama ini, dibandingkan dengan kemampuannya sebagai pendukung efek-efek animasi baru yang tidak ada di dalam JQuery, peran JQuery UI lebih mendominasi ke dalam hal-hal yang berhubungan dengan penciptaan aplikasi online dengan standar yang sangat baik:
Slider, button, dialog box, accordion, tooltip, tabs, date picker, progressbar dan masih banyak lagi. Bahkan juga autocomplete seperti dalam fitur HTML5.
Semuanya begitu lengkap hingga sangat mudah sebenarnya ketika seorang pengembang menemukan konsep aplikasi online, JQuery UI bisa mengatasi beberapa masalah yang tersisa seperti tema, objek, variabel dan termasuk dukungan peramban penuh (setidaknya selalu diusahakan begitu sampai sekarang).
CSS3 Button Generator merupakan salah satu aplikasi yang dibuat dengan JQuery UI.
Perpustakaan ini bergantung kepada JQuery. Anda juga harus memuat JQuery sebelum memuat modul ini. Versi 1.8.3 tidak didokumentasikan karena jangka waktu revisi yang pendek:
Saat Anda mencoba mengakses JQuery UI1.8.3, yang keluar adalah JQuery UI1.8.4