Stefan Gabos web developer extraordinaire
Zebra_Dialog, a lightweight dialog box jQuery plugin
-
Latest version1.3released onMay 06, 2013
- 1. Overview
- 2. Requirements
- 3. How to use
- 4. Configuration
- 5. Download
- 6. Changelog
- 7. Comments
A modal window is a child window that requires users to interact with it before they can continue using the parent application. Modal windows are one of the most commonly used user interface elements, and are used to command user awareness in order to communicate important information, or to alert of errors or warnings.
Zebra_Dialog is a small, compact (one Java Script file, no dependencies other than jQuery 1.4.1+) and highly configurable jQuery plugin for creating modal dialog boxes, meant to replace native Java Script “alert” and “confirmation” dialog boxes, and built using the jQuery Plugin Boilerplate.
Can also be used as a notification widget (when configured to show no buttons and to close automatically) for updates or errors, without distracting users from their browser experience by displaying obtrusive alerts.
Features:
- great looking dialog boxes, out of the box: CSS3, drop-shadows, rounded corners
- 5 types of dialog boxes available: confirmation, information, warning, error and question
- content can also be added through AJAX calls, iFrames, or from inline elements (together with attached events)
- easily customizable appearance by editing the CSS (cascading style sheet) file
- create modal dialog boxes or non-modal dialog boxes
- easily add custom buttons
- position the dialog box wherever you want – not just in the middle of the screen
- use callback functions to handle user’s choice
- works in all major browsers (Firefox, Opera, Safari, Chrome, Internet Explorer 6+)
Icons for confirmation, information, error and question dialog boxes are made by DryIcon while the warning icon is made by Function Design & Development Studio.
Requirements
Zebra_Dialog has no dependencies other than jQuery 1.4.1+
How to use
First, load the latest version of jQuery either from a local source or from a CDN.
Load the Zebra_Dialog plugin
<script type="text/javascript" src="path/to/zebra_dialog.js"></script>
Load the plugin’s CSS file
<link rel="stylesheet" href="path/to/zebra_dialog.css" type="text/css">
Now, within the DOM-ready event do
$(document).ready(function() {
// show a dialog box when clicking on a link
$(anchor).bind('click', function(e) {
e.preventDefault();
$.Zebra_Dialog('The link was clicked!');
});
});
Demos
1. Default dialog box, no custom settings. Click here to open.
$.Zebra_Dialog('<strong>Zebra_Dialog</strong>, a small, compact and highly' +
'configurable dialog box plugin for jQuery');
2. The five dialog box types, with titles: error, warning, question, information and confirmation.
// this example is for the "error" box only
// for the other types the "type" property changes to "warning", "question", "information" and "confirmation"
// and the text for the "title" property also changes
$.Zebra_Dialog('<strong>Zebra_Dialog</strong>, a small, compact and highly' +
'configurable dialog box plugin for jQuery', {
'type': 'error',
'title': 'Error'
});
3. Custom buttons and the callback function. Click here to open.
Note that the onClose event is executed *after* the dialog box is closed! see the next example for executing functions *before* the closing of the dialog box
$.Zebra_Dialog('<strong>Zebra_Dialog</strong>, a small, compact and highly' +
'configurable dialog box plugin for jQuery', {
'type': 'question',
'title': 'Custom buttons',
'buttons': ['Yes', 'No', 'Help'],
'onClose': function(caption) {
alert((caption != '' ? '"' + caption + '"' : 'nothing') + ' was clicked');
}
});
3.1 Custom buttons with attached callback functions. Click here to open.
Note that the callback functions attached to custom buttons are executed *before* the dialog box is closed and as soon as a button is clicked! see the previous example for executing functions *after* the closing of the dialog box
$.Zebra_Dialog('<strong>Zebra_Dialog</strong>, a small, compact and highly' +
'configurable dialog box plugin for jQuery', {
'type': 'question',
'title': 'Custom buttons',
'buttons': [
{caption: 'Yes', callback: function() { alert('"Yes" was clicked')}},
{caption: 'No', callback: function() { alert('"No" was clicked')}},
{caption: 'Cancel', callback: function() { alert('"Cancel" was clicked')}}
]
});
4. Position the dialog box in the top-right corner. Click here to open.
$.Zebra_Dialog('<strong>Zebra_Dialog</strong>, a small, compact and highly' +
'configurable dialog box plugin for jQuery', {
'title': 'Custom positioning',
'position': ['right - 20', 'top + 20']
});
5. Use as a notification widget – no buttons and close automatically after 2 seconds.
Note how the plugin needs to be instantiated with the “new” keyword or only the last opened box will close!
Click here to open.
new $.Zebra_Dialog('<strong>Zebra_Dialog</strong>, a small, compact and highly' +
'configurable dialog box plugin for jQuery', {
'buttons': false,
'modal': false,
'position': ['right - 20', 'top + 20'],
'auto_close': 2000
});
6. External content loaded via AJAX.
Click here to open.
new $.Zebra_Dialog('<strong>Some dummy content:</strong><br><br>', {
'source': {'ajax': 'ajax.html'},
width: 600,
'title': 'External content loaded via AJAX'
});
6.1 External content loaded in an iFrame.
Click here to open.
new $.Zebra_Dialog('<strong>Content loaded via AJAX:</strong>', {
source: {'iframe': {
'src': 'http://en.m.wikipedia.org/wiki/Dialog_box',
'height': 500
}},
width: 800,
title: 'External content loaded in an iFrame'
});
7. Customizing the appearance – make the title bar have a dark-blue background
The CSS is
/* Notice how we're targting the dialog box's title bar through the custom class */
.myclass .ZebraDialog_Title { background: #330066 }
.myclass .ZebraDialog_Body { background-image: url('coffee_48.png') }
Click here to open.
$.Zebra_Dialog('<strong>Zebra_Dialog</strong>, a small, compact and highly' +
'configurable dialog box plugin for jQuery', {
'custom_class': 'myclass',
'title': 'Customizing the appearance'
});
Configuration
All parameters are optional.
| animation_speed | integer |
The speed, in milliseconds, by which the overlay and the dialog box will be animated when closing. Default is 250 |
| auto_close | mixed |
The number of milliseconds after which to automatically close the dialog box or FALSE to not automatically close the dialog box. Default is FALSE. |
| buttons | mixed |
Use this for localization and for adding custom buttons. If set to TRUE, the default buttons will be used, depending on the type of the dialog box: ['Yes', 'No'] for “question” type and ['Ok'] for the other dialog box types. For custom buttons, use an array containing the captions of the buttons to display: ['My button 1', 'My button 2']. Set to FALSE if you want no buttons. Note that when the dialog box is closed as a result of clicking a button, the “onClose” event is triggered and the callback function (if any) receives as argument the caption of the clicked button. See the comments for the “onClose” event below for more information. You can also attach callback functions to individual buttons by using objects in the form of: The main difference is that a callback function attached this way is executed as soon as the button is clicked rather than *after* the dialog box is closed, as it is the case with the “onClose” event. Callback functions attached to buttons get as argument the entire dialog box jQuery object. |
| custom_class | mixed |
An extra class to add to the dialog box’s container. Useful for customizing a dialog box elements’ styles at run-time. For example, setting this value to “mycustom” and in the CSS file having something like .mycustom .ZebraDialog_Title { background: red } would set the dialog box title’s background to red. See the CSS file for what can be changed. Default is FALSE |
| keyboard | boolean |
When set to TRUE, pressing the ESC key will close the dialog box. Default is TRUE. |
| max_height | integer |
The maximum height, in pixels, before the content in the dialog box is scrolled. If set to “0″ the dialog box’s height will automatically adjust to fit the entire content. Default is “0″. |
| message | string |
The message in the dialog box – this is passed as argument when the plugin is called. |
| modal | boolean |
When set to TRUE there will be a semitransparent overlay behind the dialog box, preventing users from clicking the page’s content. Default is TRUE. |
| overlay_close | boolean |
Should the dialog box close when the overlay is clicked? Default is TRUE. |
| overlay_opacity | double |
The opacity of the overlay (between 0 and 1) Default is .9 |
| position | mixed |
Position of the dialog box. Can be either “center” (which would center the dialog box) or an array with 2 elements, in the form of ['horizontal_position +/- offset', 'vertical_position +/- offset'] (notice how everything is enclosed in quotes) where “horizontal_position” can be “left”, “right” or “center”, “vertical_position” can be “top”, “bottom” or “middle”, and “offset” represents an optional number of pixels to add/substract from the respective horizontal or vertical position. Positions are relative to the viewport (the area of the browser that is visible to the user)! Examples: ['left + 20', 'top + 20'] would position the dialog box in the top-left corner, shifted 20 pixels inside. ['right - 20', 'bottom - 20'] would position the dialog box in the bottom-right corner, shifted 20 pixels inside. ['center', 'top + 20'] would position the dialog box in center-top, shifted 20 pixels down. Default is ['center', 'middle'] |
| reposition_speed | integer |
The duration (in milliseconds) of the animation used to reposition the dialog box when the browser window is resized. Default is 100. |
| source | mixed |
Add content via AJAX, iFrames or from inline elements (together with the already applied events). This property can be any of the following: - ‘ajax’: object – where “object” can be an object with any of the properties you’d normally use to make an AJAX call in jQuery (see the description for the “settings” argument at http://api.jquery.com/jQuery.ajax/), or it can be a string representing a valid URL whose content to be fetched via AJAX and placed inside the dialog box. Example: source: {‘ajax’: ‘http://myurl.com/’} source: {‘ajax’: { Note that you cannot use the “success” property as it will always be overwritten by the library; use the “complete” property instead, if you have to! - ‘iframe’: object – where “object” can be an object where property names can be valid attributes of the <iframe> tag (see https://developer.mozilla.org/en-US/docs/HTML/Element/iframe), or it can be a string representing a valid URL to be loaded inside an iFrame and placed inside the dialog box. Example: source: {‘iframe’: ‘http://myurl.com/’} source: {‘iframe’: { Note that you should always set the iFrame’s width and height and adjust the dialog box’s “width” property accordingly! - ‘inline’: selector – where “element” is a jQuery element from the page; the element will be copied and placed inside the dialog box together with any attached events! if you just want the element’s inner HTML, use $(‘#element’).html(). Example: source: {‘inline’: $(‘#myelement’)} Default is FALSE |
| title | string |
Title of the dialog box Default is “” (an empty string – no title) |
| type | mixed |
Dialog box type. Can be any of the following: - confirmation If you don’t want an icon, set the “type” property to FALSE. By default, all types except “question” have a single button with the caption “Ok”; type “question” has two buttons, with the captions “Ok” and “Cancel” respectively. Default is “information”. |
| vcenter_short_message | boolean |
Should short messages be vertically centered? Default is TRUE. |
| width | integer |
Width of the dialog box By default, the width of the dialog box is set in the CSS file. Use this property to override the default width at run-time. Must be an integer, greater than 0. Anything else will instruct the script to use the default value, as set in the CSS file. Value should be no less than 200 for optimal output. Default is 0 – use the value from the CSS file. |
Events |
||
| onClose |
Event fired when *after* the dialog box is closed. For executing functions *before* the closing of the dialog box, see the “buttons” attribute. The callback function (if any) receives as argument the caption of the clicked button or boolean FALSE if the dialog box is closed by pressing the ESC key or by clicking on the overlay. |
|
Public methods |
||
| close |
Call this method to manually close the dialog box. | |
Download
Zebra_Dialog is distributed under the LGPL.
In plain English, this means that you have the right to view and to modify the source code of this software, but if you modify and distribute it, you are required to license your copy under a LGPL-compatible license, and to make the entire source code of your derivation available to anybody you distribute the software to.
You also have the right to use this software together with software thas has different licensing terms (including, but not limited to, commercial and closed-source software), and distribute the combined software, as long as state that your software contains portions licensed under the LGPL license, and provide information about where the LGPL licensed software can be downloaded.
If you distribute copies of this software you may not change the copyright or license of this software.
You may also like:
- jQuery Plugin Boilerplate
- Zebra_Accordion, a tiny accordion jQuery plugin
- Zebra_Cookie, an extremely small jQuery plugin for writing, reading and deleting cookies
- Zebra_Datepicker, a lightweight datepicker jQuery plugin
- Zebra_Dialog, a lightweight dialog box jQuery plugin
- Zebra_Tooltips, a lightweight tooltips jQuery plugin
- Zebra_TransForm, a tiny jQuery plugin for replacing checkboxes, radio buttons and selects
Changelog
Click on a version to expand/collapse information.
- version 1.3.1 (May 06, 2013)
-
- fixed a bug where the dialog box was not looking 100% as expected if the page it was used on had the “box-sizing” CSS property set to “border-box”, which is the default for some widely-used CSS frameworks like Twitter Bootstrap and Foundation. Read more about it at http://paulirish.com/2012/box-sizing-border-box-ftw/
- version 1.3 (April 08, 2013)
-
- external content can now easily be loaded into the dialog box via AJAX, or using an iFrame, or an inline element, by using the newly added “source” property; when passing an inline element, it will be copied together with any attached events – useful for passing, for example, a complete form with attached events; thanks to tom;
- the dialog box will use an animation when repositioning due to a browser window resize; the animation’s speed is set by the newly added “reposition_speed” property;
- the plugin is now available on GitHub!
- version 1.2.2 (February 09, 2013)
-
- added a new “max_height” property; when setting it to something to other than “0″, the content in the dialog box will be scrolled if it’s height exceeds the given value;
- new layout;
- version 1.2.1 (January 28, 2013)
-
- fixed an issue due to which the plugin was not working with jQuery 1.9.0;
- version 1.2 (April 07, 2012)
-
- when used as a notification widget, the notification can now be closed before the timer runs out by clicking on it; thanks to Ovidiu Mihalcea for suggesting;
- callback functions can now be attached to custom buttons; credit goes to Matt!
- added an example on how to add custom icons
- version 1.1.1 (September 24, 2011)
-
- fixed a bug where the script would sometimes “forget” to clear the semi-transparent overlay; thanks to Jack Everson for reporting;
- version 1.1 (August 18, 2011)
-
- the last button of the dialog box will now have the focus once the dialog box is open. previously, for any dialog boxes other than notifications, if the user pressed the ENTER key, it re-triggered the event and more dialog boxes were shown one on top of the other; thanks to Yasir for reporting;
- it is now possible to add a custom class to the dialog box; this makes it easy to switch between styles at run-time; thanks to Ed for suggesting;
- fixed a bug where the message’s text color was inherited; now it is set from the CSS file;
- examples are now also available in the downloadable package;
- version 1.0 (June 25, 2011)
-
- initial release





I am a 32 year old web developer working from Bucharest, Romania. I am coding since I was 14 and I am extremely passionate about it. For the server side of things I use PHP/MySQL while on the front-end I write valid HTML 5, nice CSS and lots of JavaScript code using jQuery.
I added a “draggable” option.
It’s pretty simple to implement, maybe you can add these lines to the library:
if (plugin.settings.draggable) {
plugin.dialog.draggable();
}
Additionally, it would be a good idea to change:
jQuery(”).html(plugin.settings.message).appendTo(plugin.message);
and
plugin.message.html(plugin.settings.message);
and use “.append” instead, so you can use a jQuery object directly.
ReplyBy the way, it requires jQueryUI, that’s the bad news…
I would be perfect if you add:
if ($.isPlainObject(value)) { button.html(value.text).click(function() { value.callback(plugin.message); }); } else { button.html(value); }just after you create the button. It's completely backward compatible and let you add buttons with callbacks in that way:
buttons: [{ text: 'button1', callback: function(dialog) { console.log(dialog); } }, 'button2']Nice library, thank you.
Replymatt, that’s a nice idea! I also love the fact that it’s backward compatible
i’ll consider it for the next version, thanks a lot!
Just added this and was pleased with the ease of use. Thanks!
ReplyHey Stefan,
in order to increase compatibility, all the jQuery statements inside (function($){})(jQuery) should be replace by the local $ valiable. Right now, if you are running jQuery using a different namespace (and jQuery variable is undefined), i.e. (function($){})(jCustomQuery), the plugin won’t work.
ReplyCool plugin!! Just a quick comment though…if you launch two zebra displays, you cannot close both of them with the way the code’s currently written. For example, if I write:
$.Zebra_Dialog(‘Display 1′);
$.Zebra_Dialog(‘Display 2′);
I will only be able to close the one that says Display 2. The user then becomes locked out looking at the window that says Display 1.
Replyit has to be
Thanks!
Hey Stefan,
Its a very nice plugin and very useful.
How can i make this compatible for IE6,Since overlay modal will not work over select boxes due to z-index issue of IE6
Regards
ReplyAjai
Thanks, I’ll have a look. You can turn the overlay off until then in IE6
Hey Stefan,
Thanks for your swift reply.
what i mean by overlay is,the dialog box will not render over select boxes,since z-index of select boxes are always higher in IE6 (known issue).Normally we carry the div in an IFrame, which renders properly over select boxes
regards
Ajai
Hi Stefan -
Very nice plugin – thanks very much.
Am using the callback function option (I’m VERY new to javascript/jQuery) and – while this works – am I doing this correctly/efficiently?
Please see below:
$(‘a.tblBtn’).bind(‘click’, function(e) {
//Get the name of the link clicked
var temp = $(this).attr(‘name’).split(‘_’);
//Get the href value of the link clicked
var href = $(this).attr(‘href’);
//Get the guest name in td:0
var name = $(‘table#tbl_’ + temp[1] + ‘ td:eq(0)’).text();
//Get the request id number in td:11
var req = $(‘table#tbl_’ + temp[1] + ‘ td:eq(11)’).text();
//Vary the dialog title, button and message based upon temp[0]
if(temp[0] == ‘con’) {
var type = ‘confirm ‘;
var btn = ‘Confirm’;
var title = ‘Confirm Request’;
} else {
var type = ‘delete ‘;
var btn = ‘Delete’;
var title = ‘Delete Request’;
}
//Build the display message
var msg = ‘Are you sure you want to ‘ + type + name + ‘ (Request ID: ‘ + req + ‘)?’;
//Does this function prevent page from going anywhere before a button is clicked?
e.preventDefault();
//Trigger the dialog
$.Zebra_Dialog(msg, {
‘type’: ‘question’,
‘title’: title,
‘buttons’: [
{caption: btn, callback: function() { location.href = href; }},
{caption: 'Cancel', callback: function() { return false; }}
]
});
});
Any feedback on the above greatly appreciated!
ReplyI’ve only looked strictly at the code related to Zebra_Dialog and yes, that’s how it’s done
Great Stefan – thanks very much!
Stefan -
How do you (if your plugin allows it) fire consecutive dialogs?
For example, the first dialog is a “confirm” type: “are you sure you want to do this?” with Yes or No.
If the user clicks yes, something happens (ajax function or something). When that function is completed, you want another dialog to fire: “Job completed” with OK.
If your plugin can do this, can you please let me (all of us) know of a simple syntax example?
Replyin the callback for the “yes” button simply call
Hi Stefan,
Is it possible to use your plugin as a confirmation of sended form? I mean open dialog after submit it by the button?
Thank You
ReplyAny suggestions on how to use the dialog with cookies so we can show an alert only once?
Thanks in advance for your replies.
ReplyHi Stefan,
I see in your examples you use the strong tag. I figured since it’s creating a div and all I can write some html and have it display in the dialog box. Unfortunately when I try this with an input box it never displays the input.
Anything I’m doing wrong or missing?
ReplyThanks
Just noticed that in the code the input tag isnt showing up because of the comment system.
To clarify, in the string ‘Please choose a file to upload …’ I have the html to show a file input thing.
I’m an idiot. I didn’t enclose the input tag into a form tag.
Great plugin buddy! I just need this dialog for my magento project!
ReplyThanks for the amazing plugin.
ReplyI have a question,which JS compressor tool do you use?yuicompressor or jsmin or which? Thanks.
I use Goggle’s closure-compiler at http://closure-compiler.appspot.com/home
Hi Stefan, Thanks for your great work on this!
One thing that would be useful with the ‘modal’ setting would be to prevent the user from using the tab key to navigate the underlying page when a modal dialog is active. There is the potential for the user to mess things up if they can tab around and manipulate the links and form elements whilst the modal is waiting for a response.
Again, great work. thank you.
ReplyI’ve looked into that once and the only viable solution is to disable the tab key while the dialog box is active. does this sound ok?
Awesome plugin, thanks a lot to you.
Reply