Updated Branches:
  refs/heads/master 5a316d37b -> 958730846

WICKET-5154 Positioning of autocomplete popup does not take into account borders


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/95873084
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/95873084
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/95873084

Branch: refs/heads/master
Commit: 95873084637d96908a5df08343b37846d3e38174
Parents: 5a316d3
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Fri Apr 26 17:24:33 2013 +0200
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Committed: Fri Apr 26 17:24:33 2013 +0200

----------------------------------------------------------------------
 .../autocomplete/AbstractAutoCompleteBehavior.java |    1 +
 .../html/autocomplete/AutoCompleteSettings.java    |   28 +++++++++++++++
 .../html/autocomplete/wicket-autocomplete.js       |   11 ++++++
 3 files changed, 40 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/95873084/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
index 1d754dc..9105f73 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
@@ -152,6 +152,7 @@ public abstract class AbstractAutoCompleteBehavior extends 
AbstractDefaultAjaxBe
                sb.append(",useSmartPositioning: 
").append(settings.getUseSmartPositioning());
                sb.append(",useHideShowCoveredIEFix: 
").append(settings.getUseHideShowCoveredIEFix());
                sb.append(",showListOnEmptyInput: 
").append(settings.getShowListOnEmptyInput());
+               sb.append(",ignoreBordersWhenPositioning: 
").append(settings.getIgnoreBordersWhenPositioning());
                sb.append(",showListOnFocusGain: 
").append(settings.getShowListOnFocusGain());
                sb.append(",throttleDelay: 
").append(settings.getThrottleDelay());
                sb.append(",parameterName: 
'").append(settings.getParameterName()).append('\'');

http://git-wip-us.apache.org/repos/asf/wicket/blob/95873084/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
index 4709ee7..8f784ad 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
@@ -57,6 +57,8 @@ public final class AutoCompleteSettings implements 
IClusterable
 
        private boolean useSmartPositioning = false;
 
+       private boolean ignoreBordersWhenPositioning = true;
+
        private boolean useHideShowCoveredIEFix = true;
 
        private String cssClassName = null;
@@ -156,6 +158,32 @@ public final class AutoCompleteSettings implements 
IClusterable
        }
 
        /**
+        * Indicates whether the popup positioning will take into account the 
borders of the input
+        * element and its ancestors.
+        *
+        * @return true if borders are ignored, false otherwise.
+        */
+       public boolean getIgnoreBordersWhenPositioning()
+       {
+               return ignoreBordersWhenPositioning;
+       }
+
+       /**
+        * Sets whether the popup positioning will take into account the 
borders of the input element
+        * and its ancestors (by including the <code>clientLeft</code> and 
<code>clientTop</code> DOM
+        * properties in the computation).
+        *
+        * @param ignoreBordersWhenPositioning
+        *            the flag
+        * @return this {@link AutoCompleteSettings}.
+        */
+       public AutoCompleteSettings setIgnoreBordersWhenPositioning(final 
boolean ignoreBordersWhenPositioning)
+       {
+               this.ignoreBordersWhenPositioning = 
ignoreBordersWhenPositioning;
+               return this;
+       }
+
+       /**
         * Indicates whether the popup positioning will take into account 
browser window visible area or
         * not. (so always show popup bottom-right or not)
         * 

http://git-wip-us.apache.org/repos/asf/wicket/blob/95873084/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
index 5678e39..3301a19 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
@@ -570,12 +570,23 @@
                function getPosition(obj) {
                        var leftPosition = obj.offsetLeft || 0;
                        var topPosition = obj.offsetTop || 0;
+                       if (!cfg.ignoreBordersWhenPositioning) {
+                               topPosition += obj.clientTop || 0;
+                               leftPosition += obj.clientLeft || 0;
+                       }
+
                        obj = obj.offsetParent;
                        while (obj && obj !== document.documentElement && obj 
!== document.body) {
                                topPosition += obj.offsetTop || 0;
                                topPosition -= obj.scrollTop || 0;
+                               if (!cfg.ignoreBordersWhenPositioning) {
+                                       topPosition += obj.clientTop || 0;
+                               }
                                leftPosition += obj.offsetLeft || 0;
                                leftPosition -= obj.scrollLeft || 0;
+                               if (!cfg.ignoreBordersWhenPositioning) {
+                                       leftPosition += obj.clientLeft || 0;
+                               }
                                obj = obj.offsetParent;
                        }
 

Reply via email to