aboutsummaryrefslogtreecommitdiffstats
path: root/resources/src
diff options
context:
space:
mode:
Diffstat (limited to 'resources/src')
-rw-r--r--resources/src/jquery/jquery.suggestions.js16
1 files changed, 14 insertions, 2 deletions
diff --git a/resources/src/jquery/jquery.suggestions.js b/resources/src/jquery/jquery.suggestions.js
index a20a948d8214..7a32076ec3cb 100644
--- a/resources/src/jquery/jquery.suggestions.js
+++ b/resources/src/jquery/jquery.suggestions.js
@@ -267,10 +267,22 @@ $.suggestions = {
}
// Widen results box if needed (new width is only calculated here, applied later).
- // We need this awful hack to calculate the actual pre-ellipsis width.
+
+ // The monstrosity below accomplishes two things:
+ // * Wraps the text contents in a DOM element, so that we can know its width. There is
+ // no way to directly access the width of a text node, and we can't use the parent
+ // node width as it has text-overflow: ellipsis; and overflow: hidden; applied to
+ // it, which trims it to a smaller width.
+ // * Temporarily applies position: absolute; to the wrapper to pull it out of normal
+ // document flow. Otherwise the CSS text-overflow: ellipsis; and overflow: hidden;
+ // rules would cause some browsers (at least all versions of IE from 6 to 11) to
+ // still report the "trimmed" width. This should not be done in regular CSS
+ // stylesheets as we don't want this rule to apply to other <span> elements, like
+ // the ones generated by jquery.highlightText.
$spanForWidth = $result.wrapInner( '<span>' ).children();
- childrenWidth = $spanForWidth.outerWidth();
+ childrenWidth = $spanForWidth.css( 'position', 'absolute' ).outerWidth();
$spanForWidth.contents().unwrap();
+
if ( childrenWidth > $result.width() && childrenWidth > expWidth ) {
// factor in any padding, margin, or border space on the parent
expWidth = childrenWidth + ( context.data.$container.width() - $result.width() );