Merge pull request #3578 from owncloud/ocdialog
Replacement for jquery.dialog to fit better with ownCloud design.
This commit is contained in:
commit
2572c9a6b7
|
@ -0,0 +1,48 @@
|
||||||
|
.oc-dialog {
|
||||||
|
background: white;
|
||||||
|
color: #333333;
|
||||||
|
border-radius: 3px; box-shadow: 0 0 7px #888888;
|
||||||
|
padding: 15px;
|
||||||
|
z-index: 1000;
|
||||||
|
font-size: 100%;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
min-width: 200px;
|
||||||
|
}
|
||||||
|
.oc-dialog-title {
|
||||||
|
background: white;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 110%;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.oc-dialog-content {
|
||||||
|
z-index: 1000;
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
.oc-dialog-separator {
|
||||||
|
}
|
||||||
|
.oc-dialog-buttonrow {
|
||||||
|
background: white;
|
||||||
|
float: right;
|
||||||
|
position: relative;
|
||||||
|
bottom: 0;
|
||||||
|
display: block;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.oc-dialog-close {
|
||||||
|
position:absolute;
|
||||||
|
top:7px; right:7px;
|
||||||
|
height:20px; width:20px;
|
||||||
|
background:url('../img/actions/delete.svg') no-repeat center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.oc-dialog-dim {
|
||||||
|
background-color: #000;
|
||||||
|
opacity: .20;filter:Alpha(Opacity=20);
|
||||||
|
z-index: 999;
|
||||||
|
position: absolute;
|
||||||
|
top: 0; left: 0;
|
||||||
|
width: 100%; height: 100%;
|
||||||
|
}
|
|
@ -391,7 +391,12 @@ a.bookmarklet { background-color:#ddd; border:1px solid #ccc; padding:5px;paddin
|
||||||
#oc-dialog-filepicker-content .dirtree span:not(:last-child) { cursor: pointer; }
|
#oc-dialog-filepicker-content .dirtree span:not(:last-child) { cursor: pointer; }
|
||||||
#oc-dialog-filepicker-content .dirtree span:last-child { font-weight: bold; }
|
#oc-dialog-filepicker-content .dirtree span:last-child { font-weight: bold; }
|
||||||
#oc-dialog-filepicker-content .dirtree span:not(:last-child)::after { content: '>'; padding: 3px;}
|
#oc-dialog-filepicker-content .dirtree span:not(:last-child)::after { content: '>'; padding: 3px;}
|
||||||
#oc-dialog-filepicker-content .filelist {height:270px; overflow-y:auto; background-color:white; width:100%;}
|
#oc-dialog-filepicker-content .filelist {
|
||||||
|
overflow-y:auto;
|
||||||
|
max-height: 300px;
|
||||||
|
background-color:white;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
#oc-dialog-filepicker-content .filelist img { margin: 2px 1em 0 4px; }
|
#oc-dialog-filepicker-content .filelist img { margin: 2px 1em 0 4px; }
|
||||||
#oc-dialog-filepicker-content .filelist .date { float:right;margin-right:1em; }
|
#oc-dialog-filepicker-content .filelist .date { float:right;margin-right:1em; }
|
||||||
#oc-dialog-filepicker-content .filepicker_element_selected { background-color:lightblue;}
|
#oc-dialog-filepicker-content .filepicker_element_selected { background-color:lightblue;}
|
||||||
|
|
|
@ -0,0 +1,217 @@
|
||||||
|
(function($) {
|
||||||
|
$.widget('oc.ocdialog', {
|
||||||
|
options: {
|
||||||
|
width: 'auto',
|
||||||
|
height: 'auto',
|
||||||
|
closeButton: true,
|
||||||
|
closeOnEscape: true,
|
||||||
|
modal: false
|
||||||
|
},
|
||||||
|
_create: function() {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
this.originalCss = {
|
||||||
|
display: this.element[0].style.display,
|
||||||
|
width: this.element[0].style.width,
|
||||||
|
height: this.element[0].style.height,
|
||||||
|
};
|
||||||
|
|
||||||
|
this.originalTitle = this.element.attr('title');
|
||||||
|
this.options.title = this.options.title || this.originalTitle;
|
||||||
|
|
||||||
|
this.$dialog = $('<div class="oc-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);
|
||||||
|
|
||||||
|
this.$dialog.css({
|
||||||
|
display: 'inline-block',
|
||||||
|
position: 'fixed'
|
||||||
|
});
|
||||||
|
|
||||||
|
$(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 && self.options.closeOnEscape) {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$(window).resize(function() {
|
||||||
|
self.parent = self.$dialog.parent().length > 0 ? self.$dialog.parent() : $('body');
|
||||||
|
var pos = self.parent.position();
|
||||||
|
self.$dialog.css({
|
||||||
|
left: pos.left + (self.parent.width() - self.$dialog.outerWidth())/2,
|
||||||
|
top: pos.top + (self.parent.height() - self.$dialog.outerHeight())/2
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this._setOptions(this.options);
|
||||||
|
$(window).trigger('resize');
|
||||||
|
this._createOverlay();
|
||||||
|
},
|
||||||
|
_init: function() {
|
||||||
|
this.$dialog.focus();
|
||||||
|
this._trigger('open');
|
||||||
|
},
|
||||||
|
_setOption: function(key, value) {
|
||||||
|
var self = this;
|
||||||
|
switch(key) {
|
||||||
|
case 'title':
|
||||||
|
var $title = $('<h3 class="oc-dialog-title">' + this.options.title
|
||||||
|
+ '</h3>'); //<hr class="oc-dialog-separator" />');
|
||||||
|
if(this.$title) {
|
||||||
|
this.$title.replaceWith($title);
|
||||||
|
} else {
|
||||||
|
this.$title = $title.prependTo(this.$dialog);
|
||||||
|
}
|
||||||
|
this._setSizes();
|
||||||
|
break;
|
||||||
|
case 'buttons':
|
||||||
|
var $buttonrow = $('<div class="oc-dialog-buttonrow" />');
|
||||||
|
if(this.$buttonrow) {
|
||||||
|
this.$buttonrow.replaceWith($buttonrow);
|
||||||
|
} else {
|
||||||
|
this.$buttonrow = $buttonrow.appendTo(this.$dialog);
|
||||||
|
}
|
||||||
|
$.each(value, function(idx, val) {
|
||||||
|
var $button = $('<button>').text(val.text);
|
||||||
|
if(val.defaultButton) {
|
||||||
|
$button.addClass('primary');
|
||||||
|
self.$defaultButton = $button;
|
||||||
|
}
|
||||||
|
self.$buttonrow.append($button);
|
||||||
|
$button.click(function() {
|
||||||
|
val.click.apply(self.element[0], arguments);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
this.$buttonrow.find('button')
|
||||||
|
.on('focus', function(event) {
|
||||||
|
self.$buttonrow.find('button').removeClass('primary');
|
||||||
|
$(this).addClass('primary');
|
||||||
|
});
|
||||||
|
this._setSizes();
|
||||||
|
break;
|
||||||
|
case 'closeButton':
|
||||||
|
if(value) {
|
||||||
|
var $closeButton = $('<a class="oc-dialog-close svg"></a>');
|
||||||
|
this.$dialog.prepend($closeButton);
|
||||||
|
$closeButton.on('click', function() {
|
||||||
|
self.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'width':
|
||||||
|
this.$dialog.css('width', value);
|
||||||
|
break;
|
||||||
|
case 'height':
|
||||||
|
this.$dialog.css('height', value);
|
||||||
|
break;
|
||||||
|
case 'close':
|
||||||
|
this.closeCB = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//this._super(key, value);
|
||||||
|
$.Widget.prototype._setOption.apply(this, arguments );
|
||||||
|
},
|
||||||
|
_setOptions: function(options) {
|
||||||
|
//this._super(options);
|
||||||
|
$.Widget.prototype._setOptions.apply(this, arguments);
|
||||||
|
},
|
||||||
|
_setSizes: function() {
|
||||||
|
var content_height = this.$dialog.height();
|
||||||
|
if(this.$title) {
|
||||||
|
content_height -= this.$title.outerHeight(true);
|
||||||
|
}
|
||||||
|
if(this.$buttonrow) {
|
||||||
|
content_height -= this.$buttonrow.outerHeight(true);
|
||||||
|
}
|
||||||
|
this.parent = this.$dialog.parent().length > 0 ? this.$dialog.parent() : $('body');
|
||||||
|
content_height = Math.min(content_height, this.parent.height()-20)
|
||||||
|
this.element.css({
|
||||||
|
height: content_height + 'px',
|
||||||
|
width: this.$dialog.innerWidth()-20 + 'px'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
_createOverlay: function() {
|
||||||
|
if(!this.options.modal) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
this.overlay = $('<div>')
|
||||||
|
.addClass('oc-dialog-dim')
|
||||||
|
.appendTo($('#content'));
|
||||||
|
this.overlay.on('click keydown keyup', function(event) {
|
||||||
|
if(event.target !== self.$dialog.get(0) && self.$dialog.find($(event.target)).length === 0) {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
_destroyOverlay: function() {
|
||||||
|
if (!this.options.modal) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.overlay) {
|
||||||
|
this.overlay.off('click keydown keyup');
|
||||||
|
this.overlay.remove();
|
||||||
|
this.overlay = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
widget: function() {
|
||||||
|
return this.$dialog
|
||||||
|
},
|
||||||
|
close: function() {
|
||||||
|
this._destroyOverlay();
|
||||||
|
var self = this;
|
||||||
|
// Ugly hack to catch remaining keyup events.
|
||||||
|
setTimeout(function() {
|
||||||
|
self._trigger('close', self);
|
||||||
|
self.$dialog.hide();
|
||||||
|
}, 200);
|
||||||
|
},
|
||||||
|
destroy: function() {
|
||||||
|
if(this.$title) {
|
||||||
|
this.$title.remove()
|
||||||
|
}
|
||||||
|
if(this.$buttonrow) {
|
||||||
|
this.$buttonrow.remove()
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.originalTitle) {
|
||||||
|
this.element.attr('title', this.originalTitle);
|
||||||
|
}
|
||||||
|
this.element.removeClass('oc-dialog-content')
|
||||||
|
.css(this.originalCss).detach().insertBefore(this.$dialog);
|
||||||
|
this.$dialog.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}(jQuery));
|
|
@ -72,7 +72,7 @@ var OCdialogs = {
|
||||||
var dialog_name = 'oc-dialog-filepicker-content';
|
var dialog_name = 'oc-dialog-filepicker-content';
|
||||||
var dialog_id = '#' + dialog_name;
|
var dialog_id = '#' + dialog_name;
|
||||||
if(self.$filePicker) {
|
if(self.$filePicker) {
|
||||||
self.$filePicker.dialog('close');
|
self.$filePicker.ocdialog('close');
|
||||||
}
|
}
|
||||||
self.$filePicker = $tmpl.octemplate({
|
self.$filePicker = $tmpl.octemplate({
|
||||||
dialog_name: dialog_name,
|
dialog_name: dialog_name,
|
||||||
|
@ -110,26 +110,29 @@ var OCdialogs = {
|
||||||
datapath += '/' + self.$filelist.find('.filepicker_element_selected .filename').text();
|
datapath += '/' + self.$filelist.find('.filepicker_element_selected .filename').text();
|
||||||
}
|
}
|
||||||
callback(datapath);
|
callback(datapath);
|
||||||
self.$filePicker.dialog('close');
|
self.$filePicker.ocdialog('close');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var buttonlist = [{
|
var buttonlist = [{
|
||||||
text: t('core', 'Choose'),
|
text: t('core', 'Choose'),
|
||||||
click: functionToCall
|
click: functionToCall,
|
||||||
|
defaultButton: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: t('core', 'Cancel'),
|
text: t('core', 'Cancel'),
|
||||||
click: function(){self.$filePicker.dialog('close'); }
|
click: function(){self.$filePicker.ocdialog('close'); }
|
||||||
}];
|
}];
|
||||||
|
|
||||||
self.$filePicker.dialog({
|
self.$filePicker.ocdialog({
|
||||||
closeOnEscape: true,
|
closeOnEscape: true,
|
||||||
width: (4/9)*$(document).width(),
|
width: (4/9)*$(document).width(),
|
||||||
height: 420,
|
height: 420,
|
||||||
modal: modal,
|
modal: modal,
|
||||||
buttons: buttonlist,
|
buttons: buttonlist,
|
||||||
close: function(event, ui) {
|
close: function(event, ui) {
|
||||||
self.$filePicker.dialog('destroy').remove();
|
try {
|
||||||
|
$(this).ocdialog('destroy').remove();
|
||||||
|
} catch(e) {}
|
||||||
self.$filePicker = null;
|
self.$filePicker = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -161,30 +164,32 @@ var OCdialogs = {
|
||||||
text: t('core', 'Yes'),
|
text: t('core', 'Yes'),
|
||||||
click: function(){
|
click: function(){
|
||||||
if (callback !== undefined) { callback(true) };
|
if (callback !== undefined) { callback(true) };
|
||||||
$(dialog_id).dialog('close');
|
$(dialog_id).ocdialog('close');
|
||||||
}
|
},
|
||||||
|
defaultButton: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: t('core', 'No'),
|
text: t('core', 'No'),
|
||||||
click: function(){
|
click: function(){
|
||||||
if (callback !== undefined) { callback(false) };
|
if (callback !== undefined) { callback(false) };
|
||||||
$(dialog_id).dialog('close');
|
$(dialog_id).ocdialog('close');
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
break;
|
break;
|
||||||
case OCdialogs.OK_BUTTON:
|
case OCdialogs.OK_BUTTON:
|
||||||
var functionToCall = function() {
|
var functionToCall = function() {
|
||||||
$(dialog_id).dialog('close');
|
$(dialog_id).ocdialog('close');
|
||||||
if(callback !== undefined) { callback() };
|
if(callback !== undefined) { callback() };
|
||||||
};
|
};
|
||||||
buttonlist[0] = {
|
buttonlist[0] = {
|
||||||
text: t('core', 'Ok'),
|
text: t('core', 'Ok'),
|
||||||
click: functionToCall
|
click: functionToCall,
|
||||||
|
defaultButton: true
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
$(dialog_id).dialog({
|
$(dialog_id).ocdialog({
|
||||||
closeOnEscape: true,
|
closeOnEscape: true,
|
||||||
modal: modal,
|
modal: modal,
|
||||||
buttons: buttonlist
|
buttons: buttonlist
|
||||||
|
|
|
@ -265,6 +265,7 @@ class OC {
|
||||||
OC_Util::addScript("jquery.infieldlabel");
|
OC_Util::addScript("jquery.infieldlabel");
|
||||||
OC_Util::addScript("jquery-tipsy");
|
OC_Util::addScript("jquery-tipsy");
|
||||||
OC_Util::addScript("compatibility");
|
OC_Util::addScript("compatibility");
|
||||||
|
OC_Util::addScript("jquery.ocdialog");
|
||||||
OC_Util::addScript("oc-dialogs");
|
OC_Util::addScript("oc-dialogs");
|
||||||
OC_Util::addScript("octemplate");
|
OC_Util::addScript("octemplate");
|
||||||
OC_Util::addScript("js");
|
OC_Util::addScript("js");
|
||||||
|
@ -278,6 +279,7 @@ class OC {
|
||||||
OC_Util::addStyle("multiselect");
|
OC_Util::addStyle("multiselect");
|
||||||
OC_Util::addStyle("jquery-ui-1.10.0.custom");
|
OC_Util::addStyle("jquery-ui-1.10.0.custom");
|
||||||
OC_Util::addStyle("jquery-tipsy");
|
OC_Util::addStyle("jquery-tipsy");
|
||||||
|
OC_Util::addStyle("jquery.ocdialog");
|
||||||
OC_Util::addScript("oc-requesttoken");
|
OC_Util::addScript("oc-requesttoken");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue