(function($) {
$.widget('oc.ocdialog', {
options: {
closeButton: true,
closeOnEscape: true,
modal: false
},
_create: function() {
var self = this;
this.originalTitle = this.element.attr('title');
this.options.title = this.options.title || this.originalTitle;
this.$dialog = $('
')
.attr({
// Setting tabIndex makes the div focusable
tabIndex: -1,
role: 'dialog'
})
.insertBefore(this.element);
this.$dialog.append(this.element.detach());
this.element.removeAttr('title').addClass('oc-dialog-content').appendTo(this.$dialog);
$(document).on('keydown keyup', function(event) {
if (
event.target !== self.$dialog.get(0) &&
self.$dialog.find($(event.target)).length === 0
) {
return;
}
// Escape
if (
event.keyCode === 27 &&
event.type === 'keydown' &&
self.options.closeOnEscape
) {
event.stopImmediatePropagation();
self.close();
return false;
}
// Enter
if (event.keyCode === 13) {
event.stopImmediatePropagation();
if (event.type === 'keyup') {
event.preventDefault();
return false;
}
// If no button is selected we trigger the primary
if (
self.$buttonrow &&
self.$buttonrow.find($(event.target)).length === 0
) {
var $button = self.$buttonrow.find('button.primary');
if ($button) {
$button.trigger('click');
}
} else if (self.$buttonrow) {
$(event.target).trigger('click');
}
return false;
}
});
this._setOptions(this.options);
this._createOverlay();
},
_init: function() {
this.$dialog.focus();
this._trigger('open');
},
_setOption: function(key, value) {
var self = this;
switch (key) {
case 'title':
if (this.$title) {
this.$title.text(value);
} else {
var $title = $('' +
value +
'
');
this.$title = $title.prependTo(this.$dialog);
}
break;
case 'buttons':
if (this.$buttonrow) {
this.$buttonrow.empty();
} else {
var $buttonrow = $('');
this.$buttonrow = $buttonrow.appendTo(this.$dialog);
}
if (value.length === 1) {
this.$buttonrow.addClass('onebutton');
} else if (value.length === 2) {
this.$buttonrow.addClass('twobuttons');
} else if (value.length === 3) {
this.$buttonrow.addClass('threebuttons');
}
$.each(value, function(idx, val) {
var $button = $('