forked from extern/egroupware
Better handling of different hights & open up vs down
This commit is contained in:
parent
f5a4fa694c
commit
2ea64a658b
@ -373,17 +373,21 @@ Copyright (c) 2011 by Harvest
|
|||||||
this.search_results.css('max-height', 'none');
|
this.search_results.css('max-height', 'none');
|
||||||
|
|
||||||
var windowHeight = $(window).height() + $('html').scrollTop(),
|
var windowHeight = $(window).height() + $('html').scrollTop(),
|
||||||
dropdownHeight = this.dropdown.height(),
|
dropdownHeight = egw.getHiddenDimensions ? egw.getHiddenDimensions(this.dropdown,true)['h'] : this.dropdown.height(),
|
||||||
dropdownTop = Math.ceil(this.dropdown.offset().top),
|
dropdownTop = egw.getHiddenDimensions ? egw.getHiddenDimensions(this.dropdown,true)['top'] : Math.ceil(this.dropdown.offset().top),
|
||||||
totalHeight = dropdownHeight + dropdownTop;
|
totalHeight = dropdownHeight + dropdownTop;
|
||||||
|
|
||||||
if (totalHeight > windowHeight) {
|
if (totalHeight > windowHeight) {
|
||||||
var difference = totalHeight - windowHeight,
|
var difference = totalHeight - windowHeight,
|
||||||
height = dropdownHeight - difference;
|
height = dropdownHeight - difference - this.search_container.height();
|
||||||
|
console.log("windowHeight:" + windowHeight + " Total height: " + totalHeight + ' height: ' + height, this.container);
|
||||||
|
|
||||||
if (height > 100) {
|
if (height > 100) {
|
||||||
this.search_results.css('max-height', height);
|
this.search_results.css('max-height', height);
|
||||||
} else {
|
} else {
|
||||||
|
var to_top = egw.getHiddenDimensions ? egw.getHiddenDimensions(this.container,true)['top'] : this.container.offset().top;
|
||||||
|
var to_bottom = windowHeight - to_top;
|
||||||
|
console.log("Distance to top: %d Distance to bottom %d", to_top, to_bottom, this.container.offset());
|
||||||
this.dropdown.addClass('chzn-above');
|
this.dropdown.addClass('chzn-above');
|
||||||
this.search_results.css('max-height', this.search_results.data('initialMaxHeight'));
|
this.search_results.css('max-height', this.search_results.data('initialMaxHeight'));
|
||||||
}
|
}
|
||||||
@ -631,7 +635,31 @@ Copyright (c) 2011 by Harvest
|
|||||||
"top": dd_top + "px",
|
"top": dd_top + "px",
|
||||||
"left": 0
|
"left": 0
|
||||||
});
|
});
|
||||||
|
// Check to see if there's enough space below
|
||||||
|
// Thanks, corryworrell https://github.com/harvesthq/chosen/issues/155
|
||||||
|
this.search_results.css('max-height', 'none');
|
||||||
|
this.dropdown.removeClass('chzn-above');
|
||||||
|
|
||||||
|
var windowHeight = $(window).height() + $('html').scrollTop(),
|
||||||
|
dropdownHeight = this.dropdown.height(),
|
||||||
|
dropdownTop = Math.ceil(this.dropdown.offset().top),
|
||||||
|
totalHeight = dropdownHeight + dropdownTop;
|
||||||
|
|
||||||
|
if (totalHeight > windowHeight) {
|
||||||
|
var difference = totalHeight - windowHeight,
|
||||||
|
height = dropdownHeight - difference - (this.is_multiple ? 0: this.search_container.height());
|
||||||
|
|
||||||
|
if (height > 100) {
|
||||||
|
if(!this.is_multiple) height -= this.search_container.height();
|
||||||
|
height = Math.min(parseInt(this.search_results.data('initialMaxHeight')), height);
|
||||||
|
} else {
|
||||||
|
this.dropdown.addClass('chzn-above');
|
||||||
|
height = Math.min(parseInt(this.search_results.data('initialMaxHeight')), this.container.offset().top+this.search_container.height());
|
||||||
|
}
|
||||||
|
this.search_results.css('max-height', height);
|
||||||
|
} else {
|
||||||
|
this.search_results.css('max-height', this.search_results.data('initialMaxHeight'));
|
||||||
|
}
|
||||||
this.results_showing = true;
|
this.results_showing = true;
|
||||||
this.search_field.focus();
|
this.search_field.focus();
|
||||||
this.search_field.val(this.search_field.val());
|
this.search_field.val(this.search_field.val());
|
||||||
|
@ -221,7 +221,7 @@ egw.extend('utils', egw.MODULE_GLOBAL, function() {
|
|||||||
getHiddenDimensions: function(element, boolOuter) {
|
getHiddenDimensions: function(element, boolOuter) {
|
||||||
var $item = $j(element);
|
var $item = $j(element);
|
||||||
var props = { position: "absolute", visibility: "hidden", display: "block" };
|
var props = { position: "absolute", visibility: "hidden", display: "block" };
|
||||||
var dim = { "w":0, "h":0 };
|
var dim = { "w":0, "h":0 , "left":0, "top":0};
|
||||||
var $hiddenParents = $item.parents().andSelf().not(":visible");
|
var $hiddenParents = $item.parents().andSelf().not(":visible");
|
||||||
|
|
||||||
var oldProps = [];
|
var oldProps = [];
|
||||||
@ -229,13 +229,15 @@ egw.extend('utils', egw.MODULE_GLOBAL, function() {
|
|||||||
var old = {};
|
var old = {};
|
||||||
for ( var name in props ) {
|
for ( var name in props ) {
|
||||||
old[ name ] = this.style[ name ];
|
old[ name ] = this.style[ name ];
|
||||||
this.style[ name ] = props[ name ];
|
|
||||||
}
|
}
|
||||||
|
$j(this).show();
|
||||||
oldProps.push(old);
|
oldProps.push(old);
|
||||||
});
|
});
|
||||||
|
|
||||||
dim.w = (boolOuter === true) ? $item.outerWidth() : $item.width();
|
dim.w = (boolOuter === true) ? $item.outerWidth() : $item.width();
|
||||||
dim.h = (boolOuter === true) ? $item.outerHeight() : $item.height();
|
dim.h = (boolOuter === true) ? $item.outerHeight() : $item.height();
|
||||||
|
dim.top = $item.offset().top;
|
||||||
|
dim.left = $item.offset().left;
|
||||||
|
|
||||||
$hiddenParents.each(function(i) {
|
$hiddenParents.each(function(i) {
|
||||||
var old = oldProps[i];
|
var old = oldProps[i];
|
||||||
|
Loading…
Reference in New Issue
Block a user