Browse Source

Remove IE8-IE10 client side code

Change-Id: I2ca0b41c3cc2ed851646ced2e0693a93b1853c95
tags/8.0.0.alpha1
Artur Signell 7 years ago
parent
commit
0081286c8d
84 changed files with 159 additions and 1496 deletions
  1. 4
    0
      client/src/main/java/com/vaadin/client/BrowserInfo.java
  2. 8
    16
      client/src/main/java/com/vaadin/client/LayoutManager.java
  3. 0
    115
      client/src/main/java/com/vaadin/client/LayoutManagerIE8.java
  4. 2
    1
      client/src/main/java/com/vaadin/client/MouseEventDetailsBuilder.java
  5. 1
    16
      client/src/main/java/com/vaadin/client/Util.java
  6. 1
    2
      client/src/main/java/com/vaadin/client/VTooltip.java
  7. 9
    56
      client/src/main/java/com/vaadin/client/WidgetUtil.java
  8. 1
    3
      client/src/main/java/com/vaadin/client/communication/MessageHandler.java
  9. 3
    9
      client/src/main/java/com/vaadin/client/connectors/JavaScriptRendererConnector.java
  10. 4
    9
      client/src/main/java/com/vaadin/client/debug/internal/InfoSection.java
  11. 2
    2
      client/src/main/java/com/vaadin/client/debug/internal/theme/DebugWindowStyles.java
  12. 1
    38
      client/src/main/java/com/vaadin/client/extensions/ResponsiveConnector.java
  13. 1
    6
      client/src/main/java/com/vaadin/client/ui/JsniMousewheelHandler.java
  14. 2
    10
      client/src/main/java/com/vaadin/client/ui/VAbsoluteLayout.java
  15. 3
    16
      client/src/main/java/com/vaadin/client/ui/VButton.java
  16. 1
    1
      client/src/main/java/com/vaadin/client/ui/VContextMenu.java
  17. 2
    61
      client/src/main/java/com/vaadin/client/ui/VFilterSelect.java
  18. 1
    12
      client/src/main/java/com/vaadin/client/ui/VLabel.java
  19. 1
    1
      client/src/main/java/com/vaadin/client/ui/VMenuBar.java
  20. 1
    12
      client/src/main/java/com/vaadin/client/ui/VOverlay.java
  21. 1
    1
      client/src/main/java/com/vaadin/client/ui/VPopupCalendar.java
  22. 1
    1
      client/src/main/java/com/vaadin/client/ui/VPopupView.java
  23. 2
    7
      client/src/main/java/com/vaadin/client/ui/VScrollTable.java
  24. 1
    1
      client/src/main/java/com/vaadin/client/ui/VSlider.java
  25. 2
    1
      client/src/main/java/com/vaadin/client/ui/VTextArea.java
  26. 1
    3
      client/src/main/java/com/vaadin/client/ui/VTree.java
  27. 2
    8
      client/src/main/java/com/vaadin/client/ui/VUI.java
  28. 1
    2
      client/src/main/java/com/vaadin/client/ui/VUpload.java
  29. 2
    52
      client/src/main/java/com/vaadin/client/ui/VWindow.java
  30. 3
    33
      client/src/main/java/com/vaadin/client/ui/orderedlayout/Slot.java
  31. 4
    15
      client/src/main/java/com/vaadin/client/ui/orderedlayout/VAbstractOrderedLayout.java
  32. 0
    18
      client/src/main/java/com/vaadin/client/ui/table/TableConnector.java
  33. 1
    6
      client/src/main/java/com/vaadin/client/ui/tree/TreeConnector.java
  34. 1
    14
      client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java
  35. 1
    6
      client/src/main/java/com/vaadin/client/ui/window/WindowConnector.java
  36. 31
    64
      client/src/main/java/com/vaadin/client/widgets/Escalator.java
  37. 8
    29
      client/src/main/java/com/vaadin/client/widgets/Grid.java
  38. 47
    367
      client/src/main/java/com/vaadin/client/widgets/Overlay.java
  39. 1
    9
      client/src/main/resources/com/vaadin/Vaadin.gwt.xml
  40. 0
    47
      client/src/main/resources/com/vaadin/VaadinBrowserSpecificOverrides.gwt.xml
  41. 1
    111
      client/src/test/java/com/vaadin/client/VBrowserDetailsUserAgentParserTest.java
  42. 0
    2
      themes/src/main/themes/VAADIN/themes/base/base.scss
  43. BIN
      themes/src/main/themes/VAADIN/themes/base/shadow/img/bottom-left.png
  44. BIN
      themes/src/main/themes/VAADIN/themes/base/shadow/img/bottom-right.png
  45. BIN
      themes/src/main/themes/VAADIN/themes/base/shadow/img/bottom.png
  46. BIN
      themes/src/main/themes/VAADIN/themes/base/shadow/img/center.png
  47. BIN
      themes/src/main/themes/VAADIN/themes/base/shadow/img/left.png
  48. BIN
      themes/src/main/themes/VAADIN/themes/base/shadow/img/right.png
  49. BIN
      themes/src/main/themes/VAADIN/themes/base/shadow/img/top-left.png
  50. BIN
      themes/src/main/themes/VAADIN/themes/base/shadow/img/top-right.png
  51. BIN
      themes/src/main/themes/VAADIN/themes/base/shadow/img/top.png
  52. 0
    74
      themes/src/main/themes/VAADIN/themes/base/shadow/shadow.scss
  53. BIN
      themes/src/main/themes/VAADIN/themes/base/window/img/shadow/bottom-left.png
  54. BIN
      themes/src/main/themes/VAADIN/themes/base/window/img/shadow/bottom-right.png
  55. BIN
      themes/src/main/themes/VAADIN/themes/base/window/img/shadow/bottom.png
  56. BIN
      themes/src/main/themes/VAADIN/themes/base/window/img/shadow/center.png
  57. BIN
      themes/src/main/themes/VAADIN/themes/base/window/img/shadow/left.png
  58. BIN
      themes/src/main/themes/VAADIN/themes/base/window/img/shadow/right.png
  59. BIN
      themes/src/main/themes/VAADIN/themes/base/window/img/shadow/top-left.png
  60. BIN
      themes/src/main/themes/VAADIN/themes/base/window/img/shadow/top-right.png
  61. BIN
      themes/src/main/themes/VAADIN/themes/base/window/img/shadow/top.png
  62. 0
    65
      themes/src/main/themes/VAADIN/themes/base/window/window.scss
  63. 0
    2
      themes/src/main/themes/VAADIN/themes/runo/runo.scss
  64. BIN
      themes/src/main/themes/VAADIN/themes/runo/shadow/img/bottom-left.png
  65. BIN
      themes/src/main/themes/VAADIN/themes/runo/shadow/img/bottom-right.png
  66. BIN
      themes/src/main/themes/VAADIN/themes/runo/shadow/img/bottom.png
  67. BIN
      themes/src/main/themes/VAADIN/themes/runo/shadow/img/center.png
  68. BIN
      themes/src/main/themes/VAADIN/themes/runo/shadow/img/left.png
  69. BIN
      themes/src/main/themes/VAADIN/themes/runo/shadow/img/right.png
  70. BIN
      themes/src/main/themes/VAADIN/themes/runo/shadow/img/top-left.png
  71. BIN
      themes/src/main/themes/VAADIN/themes/runo/shadow/img/top-right.png
  72. BIN
      themes/src/main/themes/VAADIN/themes/runo/shadow/img/top.png
  73. 0
    72
      themes/src/main/themes/VAADIN/themes/runo/shadow/shadow.scss
  74. BIN
      themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/bottom-left.png
  75. BIN
      themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/bottom-right.png
  76. BIN
      themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/bottom.png
  77. BIN
      themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/center.png
  78. BIN
      themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/left.png
  79. BIN
      themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/right.png
  80. BIN
      themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/top-left.png
  81. BIN
      themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/top-right.png
  82. BIN
      themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/top.png
  83. 0
    50
      themes/src/main/themes/VAADIN/themes/runo/window/window.scss
  84. 0
    50
      themes/src/main/themes/VAADIN/themes/valo/shared/_overlay.scss

+ 4
- 0
client/src/main/java/com/vaadin/client/BrowserInfo.java View File

@@ -253,14 +253,17 @@ public class BrowserInfo {
return browserDetails.isSafari();
}

@Deprecated
public boolean isIE8() {
return isIE() && getBrowserMajorVersion() == 8;
}

@Deprecated
public boolean isIE9() {
return isIE() && getBrowserMajorVersion() == 9;
}

@Deprecated
public boolean isIE10() {
return isIE() && getBrowserMajorVersion() == 10;
}
@@ -517,3 +520,4 @@ public class BrowserInfo {
return (getBrowserMajorVersion() > majorVersion);
}
}


+ 8
- 16
client/src/main/java/com/vaadin/client/LayoutManager.java View File

@@ -162,8 +162,8 @@ public class LayoutManager {
}

/**
* Assigns a measured size to an element. Method defined as protected to
* allow separate implementation for IE8.
* Assigns a measured size to an element. Method defined as protected for
* legacy reasons.
*
* @param element
* the dom element to attach the measured size to
@@ -182,8 +182,8 @@ public class LayoutManager {
}-*/;

/**
* Gets the measured size for an element. Method defined as protected to
* allow separate implementation for IE8.
* Gets the measured size for an element. Method defined as protected for
* legacy reasons.
*
* @param element
* The element to get measured size for
@@ -281,8 +281,8 @@ public class LayoutManager {

/**
* Called once per iteration in the layout loop before size calculations so
* different browsers quirks can be handled. Mainly this is currently for
* the IE8 permutation.
* different browsers quirks can be handled. Mainly this exists for legacy
* reasons.
*/
protected void performBrowserLayoutHacks() {
// Permutations implement this
@@ -600,8 +600,6 @@ public class LayoutManager {
}
Profiler.leave("layout PostLayoutListener");

cleanMeasuredSizes();

getLogger().info("Total layout phase time: "
+ totalDuration.elapsedMillis() + "ms");
}
@@ -800,8 +798,7 @@ public class LayoutManager {

private void setNeedsOverflowFix(ComponentConnector connector) {
// IE9 doesn't need the original fix, but for some reason it needs this
if (BrowserInfo.get().requiresOverflowAutoFix()
|| BrowserInfo.get().isIE9()) {
if (BrowserInfo.get().requiresOverflowAutoFix()) {
ComponentConnector scrollingBoundary = currentDependencyTree
.getScrollingBoundary(connector);
if (scrollingBoundary != null) {
@@ -1822,12 +1819,6 @@ public class LayoutManager {
everythingNeedsMeasure = true;
}

/**
* Clean measured sizes which are no longer needed. Only for IE8.
*/
public void cleanMeasuredSizes() {
}

private static Logger getLogger() {
return Logger.getLogger(LayoutManager.class.getName());
}
@@ -1855,3 +1846,4 @@ public class LayoutManager {
return false;
}
}


+ 0
- 115
client/src/main/java/com/vaadin/client/LayoutManagerIE8.java View File

@@ -1,115 +0,0 @@
/*
* Copyright 2000-2016 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.client;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;
import com.google.gwt.user.client.ui.RootPanel;

/**
* Alternative MeasuredSize storage for IE8. Storing any information in a DOM
* element in IE8 seems to make the browser think the element has changed in a
* way that requires a reflow. To work around that, the MeasureData is instead
* stored in Map for IE8.
*
* This implementation is injected for IE8 by a replace-with definition in the
* GWT module.
*
* @author Vaadin Ltd
* @since 7.0.0
*/
public class LayoutManagerIE8 extends LayoutManager {

private Map<Element, MeasuredSize> measuredSizes = new HashMap<Element, MeasuredSize>();

// this method is needed to test for memory leaks (see
// LayoutMemoryUsageIE8ExtensionConnector) but can be private
private int getMeasuredSizesMapSize() {
return measuredSizes.size();
}

@Override
protected void setMeasuredSize(Element element, MeasuredSize measuredSize) {
if (measuredSize != null) {
measuredSizes.put(element, measuredSize);
} else {
measuredSizes.remove(element);
}
// clear any values that are saved to the element
if (super.getMeasuredSize(element, null) != null) {
super.setMeasuredSize(element, null);
}
}

@Override
protected MeasuredSize getMeasuredSize(Element element,
MeasuredSize defaultSize) {
MeasuredSize measured = measuredSizes.get(element);
if (measured != null) {
return measured;
} else {
// check if saved to the element instead
MeasuredSize measuredSize = super.getMeasuredSize(element, null);
if (measuredSize != null) {
// move the value back to the map
setMeasuredSize(element, measuredSize);
return measuredSize;
}
return defaultSize;
}
}

@Override
public void cleanMeasuredSizes() {
Profiler.enter("LayoutManager.cleanMeasuredSizes");

// #12688: IE8 was leaking memory when adding&removing components.
// Uses IE specific logic to figure if an element has been removed from
// DOM or not. For removed elements the measured size is stored within
// the element in case the element gets re-attached.
Node rootNode = Document.get().getBody();

Iterator<Element> i = measuredSizes.keySet().iterator();
while (i.hasNext()) {
Element e = i.next();
if (!rootNode.isOrHasChild(e)) {
// Store in element in case is still needed.
// Not attached, so reflow isn't a problem.
super.setMeasuredSize(e, measuredSizes.get(e));
i.remove();
}
}

Profiler.leave("LayoutManager.cleanMeasuredSizes");
}

@Override
protected void performBrowserLayoutHacks() {
Profiler.enter("LayoutManagerIE8.performBrowserLayoutHacks");
/*
* Fixes IE8 issues where IE8 sometimes forgets to update the size of
* the containing element. To force a reflow by modifying the magical
* zoom property.
*/
WidgetUtil.forceIE8Redraw(RootPanel.get().getElement());
Profiler.leave("LayoutManagerIE8.performBrowserLayoutHacks");
}
}

+ 2
- 1
client/src/main/java/com/vaadin/client/MouseEventDetailsBuilder.java View File

@@ -66,7 +66,7 @@ public class MouseEventDetailsBuilder {
} else if (evt.getButton() == NativeEvent.BUTTON_MIDDLE) {
mouseEventDetails.setButton(MouseButton.MIDDLE);
} else {
// IE8 does not always report a button. Assume left.
// No button reported? Assume left.
mouseEventDetails.setButton(MouseButton.LEFT);
}
mouseEventDetails.setAltKey(evt.getAltKey());
@@ -94,3 +94,4 @@ public class MouseEventDetailsBuilder {
}

}


+ 1
- 16
client/src/main/java/com/vaadin/client/Util.java View File

@@ -669,22 +669,6 @@ public class Util {
WidgetUtil.forceWebkitRedraw(element);
}

/**
* Performs a hack to trigger a re-layout in the IE8. This is usually
* necessary in cases where IE8 "forgets" to update child elements when they
* resize.
*
* @deprecated As of 7.4.0, use {@link WidgetUtil#forceIE8Redraw(Element)}
* instead.
*
* @param e
* The element to perform the hack on
*/
@Deprecated
public static final void forceIE8Redraw(Element e) {
WidgetUtil.forceIE8Redraw(e);
}

/**
* Performs a hack to trigger a re-layout in the IE browser. This is usually
* necessary in cases where IE "forgets" to update child elements when they
@@ -1276,3 +1260,4 @@ public class Util {
return Logger.getLogger(Util.class.getName());
}
}


+ 1
- 2
client/src/main/java/com/vaadin/client/VTooltip.java View File

@@ -83,14 +83,13 @@ public class VTooltip extends VOverlay {
* @see ApplicationConnection#getVTooltip()
*/
public VTooltip() {
super(false, false, true);
super(false, false); // no autohide, not modal
setStyleName(CLASSNAME);
FlowPanel layout = new FlowPanel();
setWidget(layout);
layout.add(em);
DOM.setElementProperty(description, "className", CLASSNAME + "-text");
DOM.appendChild(layout.getElement(), description);
setSinkShadowEvents(true);

// When a tooltip is shown, the content of the tooltip changes. With a
// tooltip being a live-area, this change is notified to a assistive

+ 9
- 56
client/src/main/java/com/vaadin/client/WidgetUtil.java View File

@@ -32,7 +32,6 @@ import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Node;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.dom.client.Touch;
import com.google.gwt.event.dom.client.KeyEvent;
@@ -112,8 +111,6 @@ public class WidgetUtil {
public static native Element getElementFromPoint(int clientX, int clientY)
/*-{
var el = $wnd.document.elementFromPoint(clientX, clientY);
// Call elementFromPoint two times to make sure IE8 also returns something sensible if the application is running in an iframe
el = $wnd.document.elementFromPoint(clientX, clientY);
if(el != null && el.nodeType == 3) {
el = el.parentNode;
}
@@ -144,12 +141,6 @@ public class WidgetUtil {
public static String escapeHTML(String html) {
DOM.setInnerText(escapeHtmlHelper, html);
String escapedText = DOM.getInnerHTML(escapeHtmlHelper);
if (BrowserInfo.get().isIE8()) {
// #7478 IE8 "incorrectly" returns "<br>" for newlines set using
// setInnerText. The same for " " which is converted to "&nbsp;"
escapedText = escapedText.replaceAll("<(BR|br)>", "\n");
escapedText = escapedText.replaceAll("&nbsp;", " ");
}
return escapedText;
}

@@ -545,7 +536,7 @@ public class WidgetUtil {
public static int getRequiredWidth(
com.google.gwt.dom.client.Element element) {
int reqWidth = getRequiredWidthBoundingClientRect(element);
if (BrowserInfo.get().isIE() && !BrowserInfo.get().isIE8()) {
if (BrowserInfo.get().isIE()) {
int csSize = getRequiredWidthComputedStyle(element);
if (csSize == reqWidth + 1) {
// If computed style reports one pixel larger than requiredWidth
@@ -572,7 +563,7 @@ public class WidgetUtil {
public static double getRequiredWidthDouble(
com.google.gwt.dom.client.Element element) {
double reqWidth = getRequiredWidthBoundingClientRectDouble(element);
if (BrowserInfo.get().isIE() && !BrowserInfo.get().isIE8()) {
if (BrowserInfo.get().isIE()) {
double csWidth = getRequiredWidthComputedStyleDouble(element);
if (csWidth > reqWidth && csWidth <= (reqWidth + 1)) {
// IE9 rounds reqHeight to integers BUT sometimes reports wrong
@@ -596,7 +587,7 @@ public class WidgetUtil {
public static int getRequiredHeight(
com.google.gwt.dom.client.Element element) {
int reqHeight = getRequiredHeightBoundingClientRect(element);
if (BrowserInfo.get().isIE() && !BrowserInfo.get().isIE8()) {
if (BrowserInfo.get().isIE()) {
int csSize = getRequiredHeightComputedStyle(element);
if (csSize == reqHeight + 1) {
// If computed style reports one pixel larger than
@@ -623,7 +614,7 @@ public class WidgetUtil {
public static double getRequiredHeightDouble(
com.google.gwt.dom.client.Element element) {
double reqHeight = getRequiredHeightBoundingClientRectDouble(element);
if (BrowserInfo.get().isIE() && !BrowserInfo.get().isIE8()) {
if (BrowserInfo.get().isIE()) {
double csHeight = getRequiredHeightComputedStyleDouble(element);
if (csHeight > reqHeight && csHeight <= (reqHeight + 1)) {
// IE9 rounds reqHeight to integers BUT sometimes reports wrong
@@ -693,7 +684,7 @@ public class WidgetUtil {
return @com.vaadin.client.WidgetUtil::getRequiredHeightBoundingClientRectDouble(Lcom/google/gwt/dom/client/Element;)(element);
}
var height = parseFloat(heightPx); // Will automatically skip "px" suffix
var border = parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth); // Will automatically skip "px" suffix
var border = parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth); // Will automatically skip "px" suffix
var padding = parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom); // Will automatically skip "px" suffix
return height+border+padding;
}-*/;
@@ -897,20 +888,6 @@ public class WidgetUtil {
}
}

/**
* Performs a hack to trigger a re-layout in the IE8. This is usually
* necessary in cases where IE8 "forgets" to update child elements when they
* resize.
*
* @param e
* The element to perform the hack on
*/
public static final void forceIE8Redraw(Element e) {
if (BrowserInfo.get().isIE8()) {
forceIERedraw(e);
}
}

/**
* Performs a hack to trigger a re-layout in the IE browser. This is usually
* necessary in cases where IE "forgets" to update child elements when they
@@ -1259,25 +1236,9 @@ public class WidgetUtil {
* @return the corresponding absolute URL as a string
*/
public static String getAbsoluteUrl(String url) {
if (BrowserInfo.get().isIE8()) {
// The hard way - must use innerHTML and attach to DOM in IE8
DivElement divElement = Document.get().createDivElement();
divElement.getStyle().setDisplay(Display.NONE);

RootPanel.getBodyElement().appendChild(divElement);
divElement.setInnerHTML(
"<a href='" + escapeAttribute(url) + "' ></a>");

AnchorElement a = divElement.getChild(0).cast();
String href = a.getHref();

RootPanel.getBodyElement().removeChild(divElement);
return href;
} else {
AnchorElement a = Document.get().createAnchorElement();
a.setHref(url);
return a.getHref();
}
AnchorElement a = Document.get().createAnchorElement();
a.setHref(url);
return a.getHref();
}

/**
@@ -1681,7 +1642,6 @@ public class WidgetUtil {
var cloneElement = element.cloneNode(false);
cloneElement.style.boxSizing ="content-box";
parentElement.appendChild(cloneElement);
cloneElement.style.height = "10px"; // IE8 wants the height to be set to something...
var heightWithBorder = cloneElement.offsetHeight;
for (i=0; i< borderNames.length; i++) {
cloneElement.style[borderNames[i]] = "0";
@@ -1732,14 +1692,6 @@ public class WidgetUtil {
}

private static double roundSize(double size, boolean roundUp) {
if (BrowserInfo.get().isIE8()) {
if (roundUp) {
return Math.ceil(size);
} else {
return (int) size;
}
}

double factor = getSubPixelRoundingFactor();
if (factor < 0 || size < 0) {
return size;
@@ -1823,3 +1775,4 @@ public class WidgetUtil {
return integerPart + ((int) nrFractions) / divisor;
}
}


+ 1
- 3
client/src/main/java/com/vaadin/client/communication/MessageHandler.java View File

@@ -614,8 +614,6 @@ public class MessageHandler {
// Unregister all the old connectors that have now been removed
unregisterRemovedConnectors(
connectorHierarchyUpdateResult.detachedConnectorIds);

getLayoutManager().cleanMeasuredSizes();
}

private void updateCaptions(
@@ -1374,7 +1372,7 @@ public class MessageHandler {

if (connector instanceof AbstractConnector) {
// optimization as the loop setting properties is very
// slow, especially on IE8
// slow
replaceState((AbstractConnector) connector,
defaultState);
} else {

+ 3
- 9
client/src/main/java/com/vaadin/client/connectors/JavaScriptRendererConnector.java View File

@@ -21,7 +21,6 @@ import java.util.Collection;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArrayString;
import com.google.gwt.dom.client.NativeEvent;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.JavaScriptConnectorHelper;
import com.vaadin.client.Util;
import com.vaadin.client.communication.HasJavaScriptConnectorHelper;
@@ -51,8 +50,7 @@ public class JavaScriptRendererConnector
private final JavaScriptConnectorHelper helper = new JavaScriptConnectorHelper(
this);

private final JavaScriptObject cellReferenceWrapper = createCellReferenceWrapper(
BrowserInfo.get().isIE8());
private final JavaScriptObject cellReferenceWrapper = createCellReferenceWrapper();

@Override
protected void init() {
@@ -62,14 +60,9 @@ public class JavaScriptRendererConnector
addGetRowKey(helper.getConnectorWrapper());
}

private static native JavaScriptObject createCellReferenceWrapper(
boolean isIE8)
private static native JavaScriptObject createCellReferenceWrapper()
/*-{
var reference = {};
if (isIE8) {
// IE8 only supports defineProperty for DOM objects
reference = $doc.createElement('div');
}

var setProperty = function(name, getter, setter) {
var descriptor = {
@@ -282,3 +275,4 @@ public class JavaScriptRendererConnector
return helper;
}
}


+ 4
- 9
client/src/main/java/com/vaadin/client/debug/internal/InfoSection.java View File

@@ -197,15 +197,9 @@ public class InfoSection implements Section {
.getAtmosphereVersion();
String jsVersion = applicationConfiguration.getAtmosphereJSVersion();

String themeVersion;
boolean themeOk;
if (com.vaadin.client.BrowserInfo.get().isIE8()) {
themeVersion = "<IE8 can't detect this>";
themeOk = true;
} else {
themeVersion = getThemeVersion();
themeOk = equalsEither(themeVersion, clientVersion, servletVersion);
}
String themeVersion = getThemeVersion();
boolean themeOk = equalsEither(themeVersion, clientVersion,
servletVersion);

boolean clientOk = equalsEither(clientVersion, servletVersion,
themeVersion);
@@ -318,3 +312,4 @@ public class InfoSection implements Section {
}

}


+ 2
- 2
client/src/main/java/com/vaadin/client/debug/internal/theme/DebugWindowStyles.java View File

@@ -27,7 +27,7 @@ public interface DebugWindowStyles extends ClientBundle {
@NotStrict
public CssResource css();

// Can't embed because IE8 doesn't support datauri for fonts (images only)
// Could embed
@Source("font.eot")
@DoNotEmbed
DataResource iconFontEot();
@@ -46,4 +46,4 @@ public interface DebugWindowStyles extends ClientBundle {
@DoNotEmbed
DataResource iconFontSvg();

}
}

+ 1
- 38
client/src/main/java/com/vaadin/client/extensions/ResponsiveConnector.java View File

@@ -20,8 +20,6 @@ import java.util.logging.Level;
import java.util.logging.Logger;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Element;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.LayoutManager;
import com.vaadin.client.ServerConnector;
import com.vaadin.client.communication.StateChangeEvent;
@@ -206,7 +204,6 @@ public class ResponsiveConnector extends AbstractExtensionConnector
// Get all the rulesets from the stylesheet
var theRules = new Array();
var IEOrEdge = @com.vaadin.client.BrowserInfo::get()().@com.vaadin.client.BrowserInfo::isIE()() || @com.vaadin.client.BrowserInfo::get()().@com.vaadin.client.BrowserInfo::isEdge()();
var IE8 = @com.vaadin.client.BrowserInfo::get()().@com.vaadin.client.BrowserInfo::isIE8()();

try {
if (sheet.cssRules) {
@@ -221,18 +218,6 @@ public class ResponsiveConnector extends AbstractExtensionConnector
return;
}

// Special import handling for IE8
if (IE8) {
try {
for(var i = 0, len = sheet.imports.length; i < len; i++) {
@com.vaadin.client.extensions.ResponsiveConnector::searchStylesheetForBreakPoints(Lcom/google/gwt/core/client/JavaScriptObject;)(sheet.imports[i]);
}
} catch(e) {
// This is added due to IE8 failing to handle imports of some sheets for unknown reason (throws a permission denied exception)
@com.vaadin.client.extensions.ResponsiveConnector::error(Ljava/lang/String;)("Failed to handle imports of CSS style sheet: " + sheet.href);
}
}

// Loop through the rulesets
for(var i = 0, len = theRules.length; i < len; i++) {
var rule = theRules[i];
@@ -353,8 +338,6 @@ public class ResponsiveConnector extends AbstractExtensionConnector
int width = layoutManager.getOuterWidth(element);
int height = layoutManager.getOuterHeight(element);

boolean forceRedraw = false;

String oldWidthRanges = currentWidthRanges;
String oldHeightRanges = currentHeightRanges;

@@ -363,7 +346,6 @@ public class ResponsiveConnector extends AbstractExtensionConnector

if (!"".equals(currentWidthRanges)) {
element.setAttribute("width-range", currentWidthRanges);
forceRedraw = true;
} else {
element.removeAttribute("width-range");
}
@@ -373,15 +355,10 @@ public class ResponsiveConnector extends AbstractExtensionConnector

if (!"".equals(currentHeightRanges)) {
element.setAttribute("height-range", currentHeightRanges);
forceRedraw = true;
} else {
element.removeAttribute("height-range");
}

if (forceRedraw) {
forceRedrawIfIE8(element);
}

// If a new breakpoint is triggered, ensure all sizes are updated in
// case some new styles are applied
if (!currentWidthRanges.equals(oldWidthRanges)
@@ -391,21 +368,6 @@ public class ResponsiveConnector extends AbstractExtensionConnector
}
}

/**
* Forces IE8 to reinterpret CSS rules.
* {@link com.vaadin.client.WidgetUtil#forceIE8Redraw(com.google.gwt.dom.client.Element)}
* doesn't work in this case.
*
* @param element
* the element to redraw
*/
private void forceRedrawIfIE8(Element element) {
if (BrowserInfo.get().isIE8()) {
element.addClassName("foo");
element.removeClassName("foo");
}
}

private native String resolveBreakpoint(String which, int size)
/*-{

@@ -447,3 +409,4 @@ public class ResponsiveConnector extends AbstractExtensionConnector
}-*/;

}


+ 1
- 6
client/src/main/java/com/vaadin/client/ui/JsniMousewheelHandler.java View File

@@ -59,9 +59,6 @@ abstract class JsniMousewheelHandler {
// FireFox likes "wheel", while others use "mousewheel"
var eventName = 'onmousewheel' in element ? 'mousewheel' : 'wheel';
element.addEventListener(eventName, this.@com.vaadin.client.ui.JsniMousewheelHandler::mousewheelListenerFunction);
} else {
// IE8
element.attachEvent("onmousewheel", this.@com.vaadin.client.ui.JsniMousewheelHandler::mousewheelListenerFunction);
}
}-*/;

@@ -71,10 +68,8 @@ abstract class JsniMousewheelHandler {
// FireFox likes "wheel", while others use "mousewheel"
var eventName = element.onwheel===undefined?"mousewheel":"wheel";
element.removeEventListener(eventName, this.@com.vaadin.client.ui.JsniMousewheelHandler::mousewheelListenerFunction);
} else {
// IE8
element.detachEvent("onmousewheel", this.@com.vaadin.client.ui.JsniMousewheelHandler::mousewheelListenerFunction);
}
}-*/;

}


+ 2
- 10
client/src/main/java/com/vaadin/client/ui/VAbsoluteLayout.java View File

@@ -448,16 +448,7 @@ public class VAbsoluteLayout extends ComplexPanel {
}
// ensure ne values
Style style = getElement().getStyle();
/*
* IE8 dies when nulling zIndex, even in IE7 mode. All other css
* properties (and even in older IE's) accept null values just
* fine. Assign empty string instead of null.
*/
if (zIndex != null) {
style.setProperty("zIndex", zIndex);
} else {
style.setProperty("zIndex", "");
}
style.setProperty("zIndex", zIndex);
style.setProperty("top", top);
style.setProperty("left", left);
style.setProperty("right", right);
@@ -506,3 +497,4 @@ public class VAbsoluteLayout extends ComplexPanel {
}
}
}


+ 3
- 16
client/src/main/java/com/vaadin/client/ui/VButton.java View File

@@ -205,14 +205,6 @@ public class VButton extends FocusWidget implements ClickHandler {
DOM.setCapture(getElement());
isCapturing = true;
addStyleName(CLASSNAME_PRESSED);

if (BrowserInfo.get().isIE8() || BrowserInfo.get().isIE9()) {
/*
* We need to prevent the default behavior on these browsers
* since user-select is not available.
*/
event.preventDefault();
}
}
break;
case Event.ONMOUSEUP:
@@ -225,12 +217,6 @@ public class VButton extends FocusWidget implements ClickHandler {
}

removeStyleName(CLASSNAME_PRESSED);

// Explicitly prevent IE 8 from propagating mouseup events
// upward (fixes #6753)
if (BrowserInfo.get().isIE8()) {
event.stopPropagation();
}
}
break;
case Event.ONMOUSEMOVE:
@@ -433,7 +419,7 @@ public class VButton extends FocusWidget implements ClickHandler {
private static native int getHorizontalBorderAndPaddingWidth(Element elem)
/*-{
// THIS METHOD IS ONLY USED FOR INTERNET EXPLORER, IT DOESN'T WORK WITH OTHERS
var convertToPixel = function(elem, value) {
// From the awesome hack by Dean Edwards
// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
@@ -452,7 +438,7 @@ public class VButton extends FocusWidget implements ClickHandler {

return ret;
}
var ret = 0;

var sides = ["Right","Left"];
@@ -482,3 +468,4 @@ public class VButton extends FocusWidget implements ClickHandler {
}-*/;

}


+ 1
- 1
client/src/main/java/com/vaadin/client/ui/VContextMenu.java View File

@@ -81,7 +81,7 @@ public class VContextMenu extends VOverlay implements SubPartAware {
* to be set as an owner of menu
*/
public VContextMenu() {
super(true, false, true);
super(true, false);
setWidget(menu);
setStyleName("v-contextmenu");
getElement().setId(DOM.createUniqueId());

+ 2
- 61
client/src/main/java/com/vaadin/client/ui/VFilterSelect.java View File

@@ -31,7 +31,6 @@ import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Node;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.dom.client.Style.Unit;
@@ -348,7 +347,7 @@ public class VFilterSelect extends Composite
* Default constructor
*/
SuggestionPopup() {
super(true, false, true);
super(true, false);
debug("VFS.SP: constructor()");
setOwner(VFilterSelect.this);
menu = new SuggestionMenu();
@@ -469,15 +468,6 @@ public class VFilterSelect extends Composite
.clearWidth();

setPopupPositionAndShow(popup);
// Fix for #14173
// IE9 and IE10 have a bug, when resize an a element with
// box-shadow.
// IE9 and IE10 need explicit update to remove extra
// box-shadows
if (BrowserInfo.get().isIE9()
|| BrowserInfo.get().isIE10()) {
forceReflow();
}
}
});
}
@@ -857,10 +847,6 @@ public class VFilterSelect extends Composite
menu.setWidth(Window.getClientWidth() + "px");

}
if (BrowserInfo.get().isIE()
&& BrowserInfo.get().getBrowserMajorVersion() < 10) {
setTdWidth(menu.getElement(), Window.getClientWidth() - 8);
}
}

setPopupPosition(left, top);
@@ -904,44 +890,6 @@ public class VFilterSelect extends Composite
width = WidgetUtil.escapeAttribute(suggestionPopupWidth);
}
menu.setWidth(width);

// IE8 or 9?
if (BrowserInfo.get().isIE()
&& BrowserInfo.get().getBrowserMajorVersion() < 10) {
// using legacy mode?
if (suggestionPopupWidth == null) {
// set the TD widths manually as these browsers do not
// respect display: block; width:100% rules
setTdWidth(menu.getElement(), naturalMenuWidth);
} else {
int compensation = WidgetUtil
.measureHorizontalPaddingAndBorder(
menu.getElement(), 4);
setTdWidth(menu.getElement(),
menu.getOffsetWidth() - compensation);
}

}
}

/**
* Descends to child elements until finds TD elements and sets their
* width in pixels. Can be used to workaround IE8 & 9 TD element
* display: block issues
*
* @param parent
* @param width
*/
private void setTdWidth(Node parent, int width) {
for (int i = 0; i < parent.getChildCount(); i++) {
Node child = parent.getChild(i);
if ("td".equals(child.getNodeName().toLowerCase())) {
((Element) child).getStyle().setWidth(width, Unit.PX);
} else {
setTdWidth(child, width);
}

}
}

/**
@@ -1119,13 +1067,6 @@ public class VFilterSelect extends Composite

isFirstIteration = false;
}
if (suggestionPopupWidth != null && BrowserInfo.get().isIE()
&& BrowserInfo.get().getBrowserMajorVersion() < 10) {
// set TD width to a low value so that they won't mandate the
// suggestion pop-up width
suggestionPopup.setTdWidth(suggestionPopup.menu.getElement(),
1);
}
}

/**
@@ -2058,7 +1999,7 @@ public class VFilterSelect extends Composite
}

private void afterSelectedItemIconChange() {
if (BrowserInfo.get().isWebkit() || BrowserInfo.get().isIE8()) {
if (BrowserInfo.get().isWebkit()) {
// Some browsers need a nudge to reposition the text field
forceReflow();
}

+ 1
- 12
client/src/main/java/com/vaadin/client/ui/VLabel.java View File

@@ -18,10 +18,8 @@ package com.vaadin.client.ui;

import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.HTML;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.Util;
import com.vaadin.client.VTooltip;
import com.vaadin.client.WidgetUtil;

public class VLabel extends HTML {

@@ -59,14 +57,5 @@ public class VLabel extends HTML {
}
}

@Override
public void setText(String text) {
if (BrowserInfo.get().isIE8()) {
// #3983 - IE8 incorrectly replaces \n with <br> so we do the
// escaping manually and set as HTML
super.setHTML(WidgetUtil.escapeHTML(text));
} else {
super.setText(text);
}
}
}


+ 1
- 1
client/src/main/java/com/vaadin/client/ui/VMenuBar.java View File

@@ -646,7 +646,7 @@ public class VMenuBar extends SimpleFocusablePanel
* @return overlay to use
*/
protected VOverlay createOverlay() {
return new VOverlay(true, false, true);
return new VOverlay(true, false);
}

private int adjustPopupHeight(int top, final int shadowSpace) {

+ 1
- 12
client/src/main/java/com/vaadin/client/ui/VOverlay.java View File

@@ -21,9 +21,7 @@ import java.util.logging.Logger;
import com.google.gwt.aria.client.Roles;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.ComponentConnector;
@@ -44,7 +42,7 @@ import com.vaadin.client.widgets.Overlay;
* directly.
*/
@Deprecated
public class VOverlay extends Overlay implements CloseHandler<PopupPanel> {
public class VOverlay extends Overlay {

/*
* ApplicationConnection that this overlay belongs to, which is needed to
@@ -67,15 +65,6 @@ public class VOverlay extends Overlay implements CloseHandler<PopupPanel> {
super(autoHide, modal);
}

/**
* @deprecated See main JavaDoc for VOverlay. Use the other constructors
* without the <code>showShadow</code> parameter.
*/
@Deprecated
public VOverlay(boolean autoHide, boolean modal, boolean showShadow) {
super(autoHide, modal, showShadow);
}

/*
* A "thread local" of sorts, set temporarily so that VOverlayImpl knows
* which VOverlay is using it, so that it can be attached to the correct

+ 1
- 1
client/src/main/java/com/vaadin/client/ui/VPopupCalendar.java View File

@@ -174,7 +174,7 @@ public class VPopupCalendar extends VTextualDate
}
});

popup = new VOverlay(true, false, true);
popup = new VOverlay(true, false);
popup.setOwner(this);

FlowPanel wrapper = new FlowPanel();

+ 1
- 1
client/src/main/java/com/vaadin/client/ui/VPopupView.java View File

@@ -245,7 +245,7 @@ public class VPopupView extends HTML
private ShortcutActionHandler shortcutActionHandler;

public CustomPopup() {
super(true, false, true); // autoHide, not modal, dropshadow
super(true, false); // autoHide, not modal
setOwner(VPopupView.this);
// Delegate popup keyboard events to the relevant handler. The
// events do not propagate automatically because the popup is

+ 2
- 7
client/src/main/java/com/vaadin/client/ui/VScrollTable.java View File

@@ -85,7 +85,6 @@ import com.vaadin.client.ConnectorMap;
import com.vaadin.client.DeferredWorker;
import com.vaadin.client.Focusable;
import com.vaadin.client.HasChildMeasurementHintConnector.ChildMeasurementHint;
import com.vaadin.client.legacy.ui.VLegacyTextField;
import com.vaadin.client.MouseEventDetailsBuilder;
import com.vaadin.client.StyleConstants;
import com.vaadin.client.TooltipInfo;
@@ -94,6 +93,7 @@ import com.vaadin.client.Util;
import com.vaadin.client.VConsole;
import com.vaadin.client.VTooltip;
import com.vaadin.client.WidgetUtil;
import com.vaadin.client.legacy.ui.VLegacyTextField;
import com.vaadin.client.ui.VScrollTable.VScrollTableBody.VScrollTableRow;
import com.vaadin.client.ui.dd.DDUtil;
import com.vaadin.client.ui.dd.VAbstractDropHandler;
@@ -3656,12 +3656,6 @@ public class VScrollTable extends FlowPanel
}
} else {
c.setText(caption);
if (BrowserInfo.get().isIE10()) {
// IE10 can some times define min-height to include
// padding when setting the text...
// See https://dev.vaadin.com/ticket/15169
WidgetUtil.forceIERedraw(c.getElement());
}
}

c.setSorted(false);
@@ -8416,3 +8410,4 @@ public class VScrollTable extends FlowPanel
}

}


+ 1
- 1
client/src/main/java/com/vaadin/client/ui/VSlider.java View File

@@ -64,7 +64,7 @@ public class VSlider extends SimpleFocusablePanel
protected SliderOrientation orientation = SliderOrientation.HORIZONTAL;

private final HTML feedback = new HTML("", false);
private final VOverlay feedbackPopup = new VOverlay(true, false, true) {
private final VOverlay feedbackPopup = new VOverlay(true, false) {
{
setOwner(VSlider.this);
}

+ 2
- 1
client/src/main/java/com/vaadin/client/ui/VTextArea.java View File

@@ -231,7 +231,7 @@ public class VTextArea extends VLegacyTextField implements DragImageModifier {
if (info.isSafari()) {
return true;
}
if (info.isIE10() || info.isIE11() || info.isEdge()) {
if (info.isIE11() || info.isEdge()) {
return true;
}
if (info.isAndroid()) {
@@ -335,3 +335,4 @@ public class VTextArea extends VLegacyTextField implements DragImageModifier {
}
}
}


+ 1
- 3
client/src/main/java/com/vaadin/client/ui/VTree.java View File

@@ -2260,10 +2260,8 @@ public class VTree extends FocusElementPanel
* Tell LayoutManager that a layout is needed later for this VTree
*/
private void doLayout() {
// IE8 needs a hack to measure the tree again after update
WidgetUtil.forceIE8Redraw(getElement());

// This calls LayoutManager setNeedsMeasure and layoutNow
Util.notifyParentOfSizeChange(this, false);
}
}


+ 2
- 8
client/src/main/java/com/vaadin/client/ui/VUI.java View File

@@ -35,7 +35,6 @@ import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.SimplePanel;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ConnectorMap;
import com.vaadin.client.Focusable;
@@ -369,16 +368,11 @@ public class VUI extends SimplePanel implements ResizeHandler,
*/
private void triggerSizeChangeCheck() {
/*
* IE (pre IE9 at least) will give us some false resize events due to
* problems with scrollbars. Firefox 3 might also produce some extra
* events. We postpone both the re-layouting and the server side event
* for a while to deal with these issues.
*
* We may also postpone these events to avoid slowness when resizing the
* We may postpone these events to avoid slowness when resizing the
* browser window. Constantly recalculating the layout causes the resize
* operation to be really slow with complex layouts.
*/
boolean lazy = resizeLazy || BrowserInfo.get().isIE8();
boolean lazy = resizeLazy;

if (lazy) {
delayedResizeExecutor.trigger();

+ 1
- 2
client/src/main/java/com/vaadin/client/ui/VUpload.java View File

@@ -160,8 +160,6 @@ public class VUpload extends SimplePanel {
private static native void setEncoding(Element form, String encoding)
/*-{
form.enctype = encoding;
// For IE8
form.encoding = encoding;
}-*/;

/** For internal use only. May be removed or replaced in the future. */
@@ -393,3 +391,4 @@ public class VUpload extends SimplePanel {
}

}


+ 2
- 52
client/src/main/java/com/vaadin/client/ui/VWindow.java View File

@@ -32,8 +32,6 @@ import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.dom.client.Style.Visibility;
@@ -211,9 +209,7 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
});

public VWindow() {
super(false, false, true); // no autohide, not modal, shadow
// Different style of shadow for windows
setShadowStyle("window");
super(false, false); // no autohide, not modal

Roles.getDialogRole().set(getElement());
Roles.getDialogRole().setAriaRelevantProperty(getElement(),
@@ -224,9 +220,7 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
contentPanel.addKeyDownHandler(this);
contentPanel.addFocusHandler(this);
contentPanel.addBlurHandler(this);
if (!BrowserInfo.get().isIE8() && !BrowserInfo.get().isIE9()) {
addTransitionEndLayoutListener(getElement());
}
addTransitionEndLayoutListener(getElement());

}

@@ -249,20 +243,6 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
* state.
*/
setTabStopEnabled(doTabStop);

// Fix for #14413. Any pseudo elements inside these elements are not
// visible on initial render unless we shake the DOM.
if (BrowserInfo.get().isIE8()) {
closeBox.getStyle().setDisplay(Display.NONE);
maximizeRestoreBox.getStyle().setDisplay(Display.NONE);
Scheduler.get().scheduleFinally(new Command() {
@Override
public void execute() {
closeBox.getStyle().clearDisplay();
maximizeRestoreBox.getStyle().clearDisplay();
}
});
}
}

@Override
@@ -673,23 +653,6 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,

@Override
public void hide() {

/*
* If the window has a RichTextArea and the RTA is focused at the time
* of hiding in IE8 only the window will have some problems returning
* the focus to the correct place. Curiously the focus will be returned
* correctly if clicking on the "close" button in the window header but
* closing the window from a button for example in the window will fail.
* Symptom described in #10776
*
* The problematic part is that for the focus to be returned correctly
* an input element needs to be focused in the root panel. Focusing some
* other element apparently won't work.
*/
if (BrowserInfo.get().isIE8()) {
fixIE8FocusCaptureIssue();
}

if (vaadinModality) {
hideModalityCurtain();
}
@@ -706,19 +669,6 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
focusTopmostModalWindow();
}

private void fixIE8FocusCaptureIssue() {
Element e = DOM.createInputText();
Style elemStyle = e.getStyle();
elemStyle.setPosition(Position.ABSOLUTE);
elemStyle.setTop(-10, Unit.PX);
elemStyle.setWidth(0, Unit.PX);
elemStyle.setHeight(0, Unit.PX);

contentPanel.getElement().appendChild(e);
e.focus();
contentPanel.getElement().removeChild(e);
}

/** For internal use only. May be removed or replaced in the future. */
public void setVaadinModality(boolean modality) {
vaadinModality = modality;

+ 3
- 33
client/src/main/java/com/vaadin/client/ui/orderedlayout/Slot.java View File

@@ -27,14 +27,12 @@ import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.LayoutManager;
import com.vaadin.client.StyleConstants;
import com.vaadin.client.WidgetUtil;
import com.vaadin.client.ui.FontIcon;
import com.vaadin.client.ui.Icon;
import com.vaadin.client.ui.ImageIcon;
import com.vaadin.client.ui.layout.ElementResizeEvent;
import com.vaadin.client.ui.layout.ElementResizeListener;
import com.vaadin.shared.ui.AlignmentInfo;

@@ -64,22 +62,6 @@ public class Slot extends SimplePanel {

private ElementResizeListener spacingResizeListener;

/*
* This listener is applied only in IE8 to workaround browser issue where
* IE8 forgets to update the error indicator position when the slot gets
* resized by widget resizing itself. #11693
*/
private ElementResizeListener ie8CaptionElementResizeUpdateListener = new ElementResizeListener() {

@Override
public void onElementResize(ElementResizeEvent e) {
Element caption = getCaptionElement();
if (caption != null) {
WidgetUtil.forceIE8Redraw(caption);
}
}
};

// Caption is placed after component unless there is some part which
// moves it above.
private CaptionPosition captionPosition = CaptionPosition.RIGHT;
@@ -176,10 +158,6 @@ public class Slot extends SimplePanel {
spacingResizeListener);
}

if (BrowserInfo.get().isIE8()) {
lm.addElementResizeListener(getWidget().getElement(),
ie8CaptionElementResizeUpdateListener);
}
}
}

@@ -204,10 +182,6 @@ public class Slot extends SimplePanel {
spacingResizeListener);
}

if (BrowserInfo.get().isIE8()) {
lm.removeElementResizeListener(getWidget().getElement(),
ie8CaptionElementResizeUpdateListener);
}
}
}

@@ -672,13 +646,8 @@ public class Slot extends SimplePanel {
}
}
};
if (BrowserInfo.get().isIE8()) {
// IE8 can't fix the focus immediately. It will fail.
focusTimer.schedule(25);
} else {
// Newer IE versions can handle things immediately.
focusTimer.run();
}
// Newer IE versions can handle things immediately.
focusTimer.run();
}
}
}
@@ -831,3 +800,4 @@ public class Slot extends SimplePanel {
}
}
}


+ 4
- 15
client/src/main/java/com/vaadin/client/ui/orderedlayout/VAbstractOrderedLayout.java View File

@@ -30,11 +30,9 @@ import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.RequiresResize;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.LayoutManager;
import com.vaadin.client.Profiler;
import com.vaadin.client.Util;
import com.vaadin.client.WidgetUtil;
import com.vaadin.shared.ui.MarginInfo;

/**
@@ -561,19 +559,10 @@ public class VAbstractOrderedLayout extends FlowPanel {

} else {
// Non-relative child without expansion should be unconstrained
if (BrowserInfo.get().isIE8()) {
// unconstrained in IE8 is auto
if (vertical) {
slot.setHeight("auto");
} else {
slot.setWidth("auto");
}
if (vertical) {
slotStyle.clearHeight();
} else {
if (vertical) {
slotStyle.clearHeight();
} else {
slotStyle.clearWidth();
}
slotStyle.clearWidth();
}
}
}
@@ -718,7 +707,6 @@ public class VAbstractOrderedLayout extends FlowPanel {
}
}
}
WidgetUtil.forceIE8Redraw(getElement());
}

/**
@@ -747,3 +735,4 @@ public class VAbstractOrderedLayout extends FlowPanel {
}

}


+ 0
- 18
client/src/main/java/com/vaadin/client/ui/table/TableConnector.java View File

@@ -23,11 +23,9 @@ import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.EventTarget;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ConnectorHierarchyChangeEvent;
import com.vaadin.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler;
@@ -388,19 +386,6 @@ public class TableConnector extends AbstractFieldConnector
public void updateEnabledState(boolean enabledState) {
super.updateEnabledState(enabledState);
getWidget().enabled = isEnabled();

if (BrowserInfo.get().isIE8() && !getWidget().enabled) {
/*
* The disabled shim will not cover the table body if it is relative
* in IE8. See #7324
*/
getWidget().scrollBodyPanel.getElement().getStyle()
.setPosition(Position.STATIC);
} else if (BrowserInfo.get().isIE8()) {
getWidget().scrollBodyPanel.getElement().getStyle()
.setPosition(Position.RELATIVE);
}

}

@Override
@@ -431,9 +416,6 @@ public class TableConnector extends AbstractFieldConnector
Scheduler.get().scheduleFinally(new ScheduledCommand() {
@Override
public void execute() {
// IE8 needs some hacks to measure sizes correctly
WidgetUtil.forceIE8Redraw(getWidget().getElement());

getLayoutManager().setNeedsMeasure(TableConnector.this);
ServerConnector parent = getParent();
if (parent instanceof ComponentConnector) {

+ 1
- 6
client/src/main/java/com/vaadin/client/ui/tree/TreeConnector.java View File

@@ -66,9 +66,6 @@ public class TreeConnector extends AbstractComponentConnector
if (uidl.hasAttribute("partialUpdate")) {
handleUpdate(uidl);

// IE8 needs a hack to measure the tree again after update
WidgetUtil.forceIE8Redraw(getWidget().getElement());

getWidget().rendering = false;
return;
}
@@ -178,9 +175,6 @@ public class TreeConnector extends AbstractComponentConnector
getWidget().focusedNode.setFocused(false);
}

// IE8 needs a hack to measure the tree again after update
WidgetUtil.forceIE8Redraw(getWidget().getElement());

getWidget().rendering = false;

}
@@ -395,3 +389,4 @@ public class TreeConnector extends AbstractComponentConnector
WidgetUtil.clearTextSelection();
}
}


+ 1
- 14
client/src/main/java/com/vaadin/client/ui/ui/UIConnector.java View File

@@ -30,7 +30,6 @@ import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.dom.client.StyleElement;
import com.google.gwt.dom.client.StyleInjector;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
@@ -51,7 +50,6 @@ import com.google.gwt.user.client.ui.Widget;
import com.google.web.bindery.event.shared.HandlerRegistration;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.ApplicationConnection.ApplicationStoppedEvent;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ConnectorHierarchyChangeEvent;
import com.vaadin.client.Focusable;
@@ -486,17 +484,6 @@ public class UIConnector extends AbstractSingleComponentContainerConnector

public void init(String rootPanelId,
ApplicationConnection applicationConnection) {
// Create a style tag for style injections so they don't end up in
// the theme tag in IE8-IE10 (we don't want to wipe them out if we
// change theme).
// StyleInjectorImplIE always injects to the last style tag on the page.
if (BrowserInfo.get().isIE()
&& BrowserInfo.get().getBrowserMajorVersion() < 11) {
StyleElement style = Document.get().createStyleElement();
style.setType("text/css");
getHead().appendChild(style);
}

Widget shortcutContextWidget = getWidget();
if (applicationConnection.getConfiguration().isStandalone()) {
// Listen to body for standalone apps (#19392)
@@ -611,7 +598,7 @@ public class UIConnector extends AbstractSingleComponentContainerConnector
* height. Assuming v-ui does not have an undefined width for now, see
* #8460.
*/
if (child.isRelativeHeight() && !BrowserInfo.get().isIE9()) {
if (child.isRelativeHeight()) {
childStyle.setPosition(Position.ABSOLUTE);
} else {
childStyle.clearPosition();

+ 1
- 6
client/src/main/java/com/vaadin/client/ui/window/WindowConnector.java View File

@@ -33,13 +33,11 @@ import com.google.gwt.event.dom.client.DoubleClickHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Window;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ConnectorHierarchyChangeEvent;
import com.vaadin.client.LayoutManager;
import com.vaadin.client.Paintable;
import com.vaadin.client.UIDL;
import com.vaadin.client.WidgetUtil;
import com.vaadin.client.communication.RpcProxy;
import com.vaadin.client.communication.StateChangeEvent;
import com.vaadin.client.ui.AbstractSingleComponentContainerConnector;
@@ -251,10 +249,7 @@ public class WindowConnector extends AbstractSingleComponentContainerConnector
Element layoutElement = content.getWidget().getElement();
Style childStyle = layoutElement.getStyle();

// IE8 needs some hackery to measure its content correctly
WidgetUtil.forceIE8Redraw(layoutElement);

if (content.isRelativeHeight() && !BrowserInfo.get().isIE9()) {
if (content.isRelativeHeight()) {
childStyle.setPosition(Position.ABSOLUTE);

Style wrapperStyle = contentElement.getStyle();

+ 31
- 64
client/src/main/java/com/vaadin/client/widgets/Escalator.java View File

@@ -132,7 +132,7 @@ import com.vaadin.shared.util.SharedUtil;

Each RowContainer can be thought to have three levels of
indices for any given displayed row (but the distinction
matters primarily for the BodyRowContainerImpl, because of
matters primarily for the BodyRowContainerImpl, because of
the way it scrolls through data):

- Logical index
@@ -151,8 +151,8 @@ import com.vaadin.shared.util.SharedUtil;
(because of 0-based indices). In Header and
FooterRowContainers, you are safe to assume that the logical
index is the same as the physical index. But because the
BodyRowContainerImpl never displays large data sources
entirely in the DOM, a physical index usually has no
BodyRowContainerImpl never displays large data sources
entirely in the DOM, a physical index usually has no
apparent direct relationship with its logical index.

VISUAL INDEX is the index relating to the order that you
@@ -678,7 +678,7 @@ public class Escalator extends Widget
var hScrollElem = hScroll.@com.vaadin.client.widget.escalator.ScrollbarBundle::getElement()();

return $entry(function(e) {
var target = e.target || e.srcElement; // IE8 uses e.scrElement
var target = e.target;

// in case the scroll event was native (i.e. scrollbars were dragged, or
// the scrollTop/Left was manually modified), the bundles have old cache
@@ -926,14 +926,9 @@ public class Escalator extends Widget
* class.
*/
/*-{
if (element.addEventListener) {
// firefox likes "wheel", while others use "mousewheel"
var eventName = 'onmousewheel' in element ? 'mousewheel' : 'wheel';
element.addEventListener(eventName, this.@com.vaadin.client.widgets.JsniWorkaround::mousewheelListenerFunction);
} else {
// IE8
element.attachEvent("onmousewheel", this.@com.vaadin.client.widgets.JsniWorkaround::mousewheelListenerFunction);
}
// firefox likes "wheel", while others use "mousewheel"
var eventName = 'onmousewheel' in element ? 'mousewheel' : 'wheel';
element.addEventListener(eventName, this.@com.vaadin.client.widgets.JsniWorkaround::mousewheelListenerFunction);
}-*/;

public native void detachMousewheelListener(Element element)
@@ -946,14 +941,9 @@ public class Escalator extends Widget
* class.
*/
/*-{
if (element.addEventListener) {
// firefox likes "wheel", while others use "mousewheel"
var eventName = element.onwheel===undefined?"mousewheel":"wheel";
element.removeEventListener(eventName, this.@com.vaadin.client.widgets.JsniWorkaround::mousewheelListenerFunction);
} else {
// IE8
element.detachEvent("onmousewheel", this.@com.vaadin.client.widgets.JsniWorkaround::mousewheelListenerFunction);
}
// firefox likes "wheel", while others use "mousewheel"
var eventName = element.onwheel===undefined?"mousewheel":"wheel";
element.removeEventListener(eventName, this.@com.vaadin.client.widgets.JsniWorkaround::mousewheelListenerFunction);
}-*/;

public native void attachTouchListeners(Element element)
@@ -966,14 +956,10 @@ public class Escalator extends Widget
* class.
*/
/*-{
if (element.addEventListener) {
element.addEventListener("touchstart", this.@com.vaadin.client.widgets.JsniWorkaround::touchStartFunction);
element.addEventListener("touchmove", this.@com.vaadin.client.widgets.JsniWorkaround::touchMoveFunction);
element.addEventListener("touchend", this.@com.vaadin.client.widgets.JsniWorkaround::touchEndFunction);
element.addEventListener("touchcancel", this.@com.vaadin.client.widgets.JsniWorkaround::touchEndFunction);
} else {
// this would be IE8, but we don't support it with touch
}
element.addEventListener("touchstart", this.@com.vaadin.client.widgets.JsniWorkaround::touchStartFunction);
element.addEventListener("touchmove", this.@com.vaadin.client.widgets.JsniWorkaround::touchMoveFunction);
element.addEventListener("touchend", this.@com.vaadin.client.widgets.JsniWorkaround::touchEndFunction);
element.addEventListener("touchcancel", this.@com.vaadin.client.widgets.JsniWorkaround::touchEndFunction);
}-*/;

public native void detachTouchListeners(Element element)
@@ -986,14 +972,10 @@ public class Escalator extends Widget
* class.
*/
/*-{
if (element.removeEventListener) {
element.removeEventListener("touchstart", this.@com.vaadin.client.widgets.JsniWorkaround::touchStartFunction);
element.removeEventListener("touchmove", this.@com.vaadin.client.widgets.JsniWorkaround::touchMoveFunction);
element.removeEventListener("touchend", this.@com.vaadin.client.widgets.JsniWorkaround::touchEndFunction);
element.removeEventListener("touchcancel", this.@com.vaadin.client.widgets.JsniWorkaround::touchEndFunction);
} else {
// this would be IE8, but we don't support it with touch
}
element.removeEventListener("touchstart", this.@com.vaadin.client.widgets.JsniWorkaround::touchStartFunction);
element.removeEventListener("touchmove", this.@com.vaadin.client.widgets.JsniWorkaround::touchMoveFunction);
element.removeEventListener("touchend", this.@com.vaadin.client.widgets.JsniWorkaround::touchEndFunction);
element.removeEventListener("touchcancel", this.@com.vaadin.client.widgets.JsniWorkaround::touchEndFunction);
}-*/;

public void scrollToColumn(final int columnIndex,
@@ -1069,8 +1051,9 @@ public class Escalator extends Widget

/**
* The table section element ({@code <thead>}, {@code <tbody>} or
* {@code <tfoot>}) the rows (i.e. {@code
* <tr>
* {@code <tfoot>}) the rows (i.e. {@code
*
<tr>
* } tags) are contained in.
*/
protected final TableSectionElement root;
@@ -1760,8 +1743,9 @@ public class Escalator extends Widget
* Applies the total length of the columns to each row element.
* <p>
* <em>Note:</em> In contrast to {@link #reapplyColumnWidths()}, this
* method only modifies the width of the {@code
* <tr>
* method only modifies the width of the {@code
*
<tr>
* } element, not the cells within.
*/
protected void reapplyRowWidths() {
@@ -3218,7 +3202,7 @@ public class Escalator extends Widget
* |3| ==> |*| ==> |5| <- newly rendered
* |4| |*|
* 5 5
*
*
* 1 1 |1| <- newly rendered
* |2| |*| |4|
* |3| ==> |*| ==> |5| <- newly rendered
@@ -3265,7 +3249,7 @@ public class Escalator extends Widget
* 1 |1| <-- newly rendered (by scrolling)
* |4| |4|
* |*| ==> |*|
* |*|
* |*|
* 5 5
*/
final double newScrollTop = contentBottom
@@ -3297,7 +3281,7 @@ public class Escalator extends Widget
* |1| |1|
* |4| ==> |4|
* |*| |5| <-- newly rendered
*
*
* 5
*/

@@ -3370,7 +3354,7 @@ public class Escalator extends Widget
* : : |4| <- newly rendered
* |5| |5| |5|
* |6| ==> |*| ==> |7|
* |7| |7|
* |7| |7|
*/

final int logicalTargetIndex = getLogicalRowIndex(
@@ -5616,32 +5600,15 @@ public class Escalator extends Widget
if (BrowserInfo.get().isIE()) {
/*
* IE refuses to scroll properly if the DIV isn't at least one pixel
* larger than the scrollbar controls themselves. But, probably
* because of subpixel rendering, in Grid, one pixel isn't enough,
* so we'll add two instead.
* larger than the scrollbar controls themselves.
*/
if (BrowserInfo.get().isIE9()) {
scrollbarThickness += 2;
} else {
scrollbarThickness += 1;
}
scrollbarThickness += 1;
}

root.appendChild(verticalScrollbar.getElement());
verticalScrollbar.addScrollHandler(scrollHandler);
verticalScrollbar.setScrollbarThickness(scrollbarThickness);

if (BrowserInfo.get().isIE8()) {
/*
* IE8 will have to compensate for a misalignment where it pops the
* scrollbar outside of its box. See Bug 3 in
* http://edskes.net/ie/ie8overflowandexpandingboxbugs.htm
*/
Style vScrollStyle = verticalScrollbar.getElement().getStyle();
vScrollStyle.setRight(verticalScrollbar.getScrollbarThickness() - 1,
Unit.PX);
}

root.appendChild(horizontalScrollbar.getElement());
horizontalScrollbar.addScrollHandler(scrollHandler);
horizontalScrollbar.setScrollbarThickness(scrollbarThickness);
@@ -6815,4 +6782,4 @@ public class Escalator extends Widget
double getMinCellWidth(int colIndex) {
return columnConfiguration.getMinCellWidth(colIndex);
}
}
}

+ 8
- 29
client/src/main/java/com/vaadin/client/widgets/Grid.java View File

@@ -36,7 +36,6 @@ import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.BrowserEvents;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.EventTarget;
import com.google.gwt.dom.client.NativeEvent;
@@ -1291,23 +1290,6 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
private static final String ERROR_CLASS_NAME = "error";
private static final String NOT_EDITABLE_CLASS_NAME = "not-editable";

ScheduledCommand fieldFocusCommand = new ScheduledCommand() {
private int count = 0;

@Override
public void execute() {
Element focusedElement = WidgetUtil.getFocusedElement();
if (focusedElement == grid.getElement()
|| focusedElement == Document.get().getBody()
|| count > 2) {
focusColumn(focusedColumnIndex);
} else {
++count;
Scheduler.get().scheduleDeferred(this);
}
}
};

/**
* A handler for events related to the Grid editor. Responsible for
* opening, moving or closing the editor based on the received event.
@@ -1865,11 +1847,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
}

if (i == focusedColumnIndex) {
if (BrowserInfo.get().isIE8()) {
Scheduler.get().scheduleDeferred(fieldFocusCommand);
} else {
focusColumn(focusedColumnIndex);
}
focusColumn(focusedColumnIndex);
}
} else {
cell.addClassName(NOT_EDITABLE_CLASS_NAME);
@@ -3405,8 +3383,7 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
*/
final double widthPerRatio;
int leftOver = 0;
if (BrowserInfo.get().isIE8() || BrowserInfo.get().isIE9()
|| BrowserInfo.getBrowserString().contains("PhantomJS")) {
if (BrowserInfo.getBrowserString().contains("PhantomJS")) {
// These browsers report subpixels as integers. this usually
// results into issues..
widthPerRatio = (int) (pixelsToDistribute / totalRatios);
@@ -4092,10 +4069,12 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>,
* This is a workaround to make Chrome work like Firefox. In Chrome,
* normally if you start a drag on one cell and release on:
* <ul>
* <li>that same cell, the click event is that {@code
* <td>}.
* <li>a cell on that same row, the click event is the parent {@code
* <tr>
* <li>that same cell, the click event is that {@code
*
<td>}.
* <li>a cell on that same row, the click event is the parent {@code
*
<tr>
* }.
* <li>a cell on another row, the click event is the table section ancestor
* ({@code <thead>}, {@code <tbody>} or {@code <tfoot>}).

+ 47
- 367
client/src/main/java/com/vaadin/client/widgets/Overlay.java View File

@@ -33,7 +33,6 @@ import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.RootPanel;
@@ -42,7 +41,6 @@ import com.vaadin.client.AnimationUtil;
import com.vaadin.client.AnimationUtil.AnimationEndListener;
import com.vaadin.client.BrowserInfo;
import com.vaadin.client.ComputedStyle;
import com.vaadin.client.WidgetUtil;

/**
* Overlay widget extending the PopupPanel. Overlay is used to float elements on
@@ -51,34 +49,9 @@ import com.vaadin.client.WidgetUtil;
* <b>Note:</b> This class should always be constructed with
* {@link GWT#create(Class)}.
*
* <h3>Shadow</h3>
* <p>
* The separate shadow element underneath the main overlay element is <strong>
* <em>deprecated</em></strong>, and should not be used for new overlay
* components. CSS box-shadow should be used instead of a separate shadow
* element. Remember to include any vendor-prefixed versions to support all
* browsers that you need to. To cover all possible browsers that Vaadin 7
* supports, add <code>-webkit-box-shadow</code> and the standard
* <code>box-shadow</code> properties.
* </p>
*
* <p>
* For IE8, which doesn't support CSS box-shadow, you can use the proprietary
* DropShadow filter. It doesn't provide the exact same features as box-shadow,
* but it is suitable for graceful degradation. Other options are to use a
* border or a pseudo-element underneath the overlay which mimics a shadow, or
* any combination of these.
* </p>
*
* <p>
* Read more about the DropShadow filter from
* <a href="http://msdn.microsoft.com/en-us/library/ms532985(v=vs.85).aspx"
* >Microsoft Developer Network</a>
* </p>
*
* @since 7.6.1
*/
public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
public class Overlay extends PopupPanel {

@Override
protected void onAttach() {
@@ -186,15 +159,6 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
*/
public static final String ADDITIONAL_CLASSNAME_ANIMATE_OUT = "animate-out";

/**
* The shadow element for this overlay.
*
* @deprecated See main JavaDoc for Overlay
*
*/
@Deprecated
private Element shadow;

/*
* The creator of this Overlay (the widget that made the instance, not the
* layout parent)
@@ -207,41 +171,11 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
*/
private IFrameElement shimElement;

/**
* The HTML snippet that is used to render the actual shadow. In consists of
* nine different DIV-elements with the following class names:
*
* <pre>
* .v-shadow[-stylename]
* ----------------------------------------------
* | .top-left | .top | .top-right |
* |---------------|-----------|----------------|
* | | | |
* | .left | .center | .right |
* | | | |
* |---------------|-----------|----------------|
* | .bottom-left | .bottom | .bottom-right |
* ----------------------------------------------
* </pre>
*
* See default theme 'shadow.css' for implementation example.
*
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
private static final String SHADOW_HTML = "<div aria-hidden=\"true\" class=\"top-left\"></div><div class=\"top\"></div><div class=\"top-right\"></div><div class=\"left\"></div><div class=\"center\"></div><div class=\"right\"></div><div class=\"bottom-left\"></div><div class=\"bottom\"></div><div class=\"bottom-right\"></div>";

/**
* Matches {@link PopupPanel}.ANIMATION_DURATION
*/
private static final int POPUP_PANEL_ANIMATION_DURATION = 200;

/**
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
private boolean sinkShadowEvents = false;

private List<Command> runOnClose = new ArrayList<Command>();

public Overlay() {
@@ -259,65 +193,6 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
adjustZIndex();
}

/**
* @deprecated See main JavaDoc for Overlay. Use the other constructors
* without the <code>showShadow</code> parameter.
*/
@Deprecated
public Overlay(boolean autoHide, boolean modal, boolean showShadow) {
super(autoHide, modal);
setShadowEnabled(showShadow && useShadowDiv());
adjustZIndex();
}

/**
* Return true if a separate shadow div should be used. Since Vaadin 7.3,
* shadows are implemented with CSS box-shadow. Thus, a shadow div is only
* used for IE8 by default.
*
* @deprecated See main JavaDoc for Overlay
* @since 7.3
* @return true to use a shadow div
*/
@Deprecated
protected boolean useShadowDiv() {
return BrowserInfo.get().isIE8();
}

/**
* Method to control whether DOM elements for shadow are added. With this
* method subclasses can control displaying of shadow also after the
* constructor.
*
* @param enabled
* true if shadow should be displayed
*
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
protected void setShadowEnabled(boolean enabled) {
if (enabled != isShadowEnabled()) {
if (enabled) {
shadow = DOM.createDiv();
shadow.setClassName(CLASSNAME_SHADOW);
shadow.setInnerHTML(SHADOW_HTML);
shadow.getStyle().setPosition(Position.ABSOLUTE);
addCloseHandler(this);
} else {
removeShadowIfPresent();
shadow = null;
}
}
}

/**
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
protected boolean isShadowEnabled() {
return shadow != null;
}

protected boolean isShimElementEnabled() {
return shimElement != null;
}
@@ -328,27 +203,6 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
}
}

/**
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
private void removeShadowIfPresent() {
if (isShadowAttached()) {
// Remove event listener from the shadow
unsinkShadowEvents();

shadow.removeFromParent();
}
}

/**
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
private boolean isShadowAttached() {
return isShadowEnabled() && shadow.getParentElement() != null;
}

private void adjustZIndex() {
setZIndex(Z_INDEX);
}
@@ -361,9 +215,6 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
*/
protected void setZIndex(int zIndex) {
getElement().getStyle().setZIndex(zIndex);
if (isShadowEnabled()) {
shadow.getStyle().setZIndex(zIndex);
}
}

@Override
@@ -553,19 +404,13 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
boolean isAttached = isAttached() && isShowing();
super.show();

// Don't animate if already visible or browser is IE8 or IE9 (no CSS
// animation support)
if (isAttached || BrowserInfo.get().isIE8()
|| BrowserInfo.get().isIE9()) {
// Don't animate if already visible
if (isAttached) {
return false;
} else {
// Check if animations are used
setVisible(false);
addStyleDependentName(ADDITIONAL_CLASSNAME_ANIMATE_IN);
if (isShadowEnabled()) {
shadow.addClassName(CLASSNAME_SHADOW + "-"
+ ADDITIONAL_CLASSNAME_ANIMATE_IN);
}

ComputedStyle cs = new ComputedStyle(getElement());
String animationName = AnimationUtil.getAnimationName(cs);
@@ -589,21 +434,12 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
getElement(), animateInListener);
removeStyleDependentName(
ADDITIONAL_CLASSNAME_ANIMATE_IN);
if (isShadowEnabled()) {
shadow.removeClassName(CLASSNAME_SHADOW
+ "-"
+ ADDITIONAL_CLASSNAME_ANIMATE_IN);
}
}
}
});
return true;
} else {
removeStyleDependentName(ADDITIONAL_CLASSNAME_ANIMATE_IN);
if (isShadowEnabled()) {
shadow.removeClassName(CLASSNAME_SHADOW + "-"
+ ADDITIONAL_CLASSNAME_ANIMATE_IN);
}
return false;
}
}
@@ -614,17 +450,12 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
super.onDetach();

// Always ensure shadow is removed when the overlay is removed.
removeShadowIfPresent();
removeShimElement();
}

@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
if (isShadowEnabled()) {
shadow.getStyle().setProperty("visibility",
visible ? "visible" : "hidden");
}
if (isShimElementEnabled()) {
shimElement.getStyle().setProperty("visibility",
visible ? "visible" : "hidden");
@@ -643,25 +474,6 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
positionOrSizeUpdated(1.0);
}

/**
* Sets the shadow style for this overlay. Will override any previous style
* for the shadow. The default style name is defined by CLASSNAME_SHADOW.
* The given style will be prefixed with CLASSNAME_SHADOW.
*
* @param style
* The new style name for the shadow element. Will be prefixed by
* CLASSNAME_SHADOW, e.g. style=='foobar' -> actual style
* name=='v-shadow-foobar'.
*
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
protected void setShadowStyle(String style) {
if (isShadowEnabled()) {
shadow.setClassName(CLASSNAME_SHADOW + "-" + style);
}
}

/**
* Extending classes should always call this method after they change the
* size of overlay without using normal 'setWidth(String)' and
@@ -715,7 +527,7 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
getOffsetWidth();
}

if (isShadowEnabled() || needsShimElement()) {
if (needsShimElement()) {

PositionAndSize positionAndSize = new PositionAndSize(
getActualLeft(), getActualTop(), getOffsetWidth(),
@@ -726,14 +538,6 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {

Element container = getElement().getParentElement();

if (isShadowEnabled()) {
updateShadowPosition(progress, zIndex, positionAndSize);
if (shadow.getParentElement() == null) {
container.insertBefore(shadow, getElement());
sinkShadowEvents();
}
}

if (needsShimElement()) {
updateShimPosition(positionAndSize);
if (shimElement.getParentElement() == null) {
@@ -741,43 +545,6 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
}
}
}
// Fix for #14173
// IE9 and IE10 have a bug, when resize an a element with box-shadow.
// IE9 and IE10 need explicit update to remove extra box-shadows
if (BrowserInfo.get().isIE9() || BrowserInfo.get().isIE10()) {
WidgetUtil.forceIERedraw(getElement());
}
}

/**
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
private void updateShadowPosition(final double progress, int zIndex,
PositionAndSize positionAndSize) {
// Opera needs some shaking to get parts of the shadow showing
// properly (ticket #2704)
if (BrowserInfo.get().isOpera()) {
// Clear the height of all middle elements
DOM.getChild(shadow, 3).getStyle().setProperty("height", "auto");
DOM.getChild(shadow, 4).getStyle().setProperty("height", "auto");
DOM.getChild(shadow, 5).getStyle().setProperty("height", "auto");
}

updatePositionAndSize(shadow, positionAndSize);
shadow.getStyle().setZIndex(zIndex);
shadow.getStyle().setProperty("display", progress < 0.9 ? "none" : "");

// Opera fix, part 2 (ticket #2704)
if (BrowserInfo.get().isOpera()) {
// We'll fix the height of all the middle elements
DOM.getChild(shadow, 3).getStyle().setPropertyPx("height",
DOM.getChild(shadow, 3).getOffsetHeight());
DOM.getChild(shadow, 4).getStyle().setPropertyPx("height",
DOM.getChild(shadow, 4).getOffsetHeight());
DOM.getChild(shadow, 5).getStyle().setPropertyPx("height",
DOM.getChild(shadow, 5).getOffsetHeight());
}
}

private void updateShimPosition(PositionAndSize positionAndSize) {
@@ -811,72 +578,6 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
}
}

@Override
public void onClose(CloseEvent<PopupPanel> event) {
removeShadowIfPresent();
}

@Override
public void sinkEvents(int eventBitsToAdd) {
super.sinkEvents(eventBitsToAdd);
// Also sink events on the shadow if present
sinkShadowEvents();
}

/**
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
private void sinkShadowEvents() {
if (isSinkShadowEvents() && isShadowAttached()) {
// Sink the same events as the actual overlay has sunk
DOM.sinkEvents(shadow, DOM.getEventsSunk(getElement()));
// Send events to Overlay.onBrowserEvent
DOM.setEventListener(shadow, this);
}
}

/**
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
private void unsinkShadowEvents() {
if (isShadowAttached()) {
DOM.setEventListener(shadow, null);
DOM.sinkEvents(shadow, 0);
}
}

/**
* Enables or disables sinking the events of the shadow to the same
* onBrowserEvent as events to the actual overlay goes.
*
* Please note, that if you enable this, you can't assume that e.g.
* event.getEventTarget returns an element inside the DOM structure of the
* overlay
*
* @param sinkShadowEvents
*
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
protected void setSinkShadowEvents(boolean sinkShadowEvents) {
this.sinkShadowEvents = sinkShadowEvents;
if (sinkShadowEvents) {
sinkShadowEvents();
} else {
unsinkShadowEvents();
}
}

/**
* @deprecated See main JavaDoc for Overlay
*/
@Deprecated
protected boolean isSinkShadowEvents() {
return sinkShadowEvents;
}

/**
* Get owner (Widget that made this Overlay, not the layout parent) of
* Overlay
@@ -1011,80 +712,59 @@ public class Overlay extends PopupPanel implements CloseHandler<PopupPanel> {
*/
public void hide(final boolean autoClosed, final boolean animateIn,
final boolean animateOut) {
if (BrowserInfo.get().isIE8() || BrowserInfo.get().isIE9()) {
reallyHide(autoClosed);
if (animateIn
&& getStyleName().contains(ADDITIONAL_CLASSNAME_ANIMATE_IN)) {
AnimationUtil.addAnimationEndListener(getElement(),
new AnimationEndListener() {
@Override
public void onAnimationEnd(NativeEvent event) {
if (AnimationUtil.getAnimationName(event).contains(
ADDITIONAL_CLASSNAME_ANIMATE_IN)) {
reallyHide(autoClosed);
}
}
});
} else {
if (animateIn && getStyleName()
.contains(ADDITIONAL_CLASSNAME_ANIMATE_IN)) {
// Check if animations are used
addStyleDependentName(ADDITIONAL_CLASSNAME_ANIMATE_OUT);
ComputedStyle cs = new ComputedStyle(getElement());
String animationName = AnimationUtil.getAnimationName(cs);
if (animationName == null) {
animationName = "";
}

if (animateOut && animationName
.contains(ADDITIONAL_CLASSNAME_ANIMATE_OUT)) {
// Disable GWT PopupPanel closing animation if used
setAnimationEnabled(false);

AnimationUtil.addAnimationEndListener(getElement(),
new AnimationEndListener() {
@Override
public void onAnimationEnd(NativeEvent event) {
if (AnimationUtil.getAnimationName(event)
.contains(
ADDITIONAL_CLASSNAME_ANIMATE_IN)) {
String animationName = AnimationUtil
.getAnimationName(event);
if (animationName.contains(
ADDITIONAL_CLASSNAME_ANIMATE_OUT)) {
AnimationUtil
.removeAllAnimationEndListeners(
getElement());
// Remove both animation styles just in
// case
removeStyleDependentName(
ADDITIONAL_CLASSNAME_ANIMATE_IN);
removeStyleDependentName(
ADDITIONAL_CLASSNAME_ANIMATE_OUT);
reallyHide(autoClosed);
}
}
});
// No event previews should happen after the animation has
// started
Overlay.this.setPreviewingAllNativeEvents(false);
} else {
// Check if animations are used
addStyleDependentName(ADDITIONAL_CLASSNAME_ANIMATE_OUT);
if (isShadowEnabled()) {
shadow.addClassName(CLASSNAME_SHADOW + "-"
+ ADDITIONAL_CLASSNAME_ANIMATE_OUT);
}
ComputedStyle cs = new ComputedStyle(getElement());
String animationName = AnimationUtil.getAnimationName(cs);
if (animationName == null) {
animationName = "";
}

if (animateOut && animationName
.contains(ADDITIONAL_CLASSNAME_ANIMATE_OUT)) {
// Disable GWT PopupPanel closing animation if used
setAnimationEnabled(false);

AnimationUtil.addAnimationEndListener(getElement(),
new AnimationEndListener() {
@Override
public void onAnimationEnd(NativeEvent event) {
String animationName = AnimationUtil
.getAnimationName(event);
if (animationName.contains(
ADDITIONAL_CLASSNAME_ANIMATE_OUT)) {
AnimationUtil
.removeAllAnimationEndListeners(
getElement());
// Remove both animation styles just in
// case
removeStyleDependentName(
ADDITIONAL_CLASSNAME_ANIMATE_IN);
removeStyleDependentName(
ADDITIONAL_CLASSNAME_ANIMATE_OUT);
if (isShadowEnabled()) {
shadow.removeClassName(
CLASSNAME_SHADOW + "-"
+ ADDITIONAL_CLASSNAME_ANIMATE_IN);
shadow.removeClassName(
CLASSNAME_SHADOW + "-"
+ ADDITIONAL_CLASSNAME_ANIMATE_OUT);
}
reallyHide(autoClosed);
}
}
});
// No event previews should happen after the animation has
// started
Overlay.this.setPreviewingAllNativeEvents(false);
} else {
removeStyleDependentName(ADDITIONAL_CLASSNAME_ANIMATE_OUT);
if (isShadowEnabled()) {
shadow.removeClassName(CLASSNAME_SHADOW + "-"
+ ADDITIONAL_CLASSNAME_ANIMATE_OUT);
}
reallyHide(autoClosed);
}
removeStyleDependentName(ADDITIONAL_CLASSNAME_ANIMATE_OUT);
reallyHide(autoClosed);
}
}
}

+ 1
- 9
client/src/main/resources/com/vaadin/Vaadin.gwt.xml View File

@@ -13,8 +13,6 @@
<inherits name="com.google.gwt.logging.Logging" />
<set-property name="gwt.logging.enabled" value="TRUE" />

<inherits name="com.vaadin.VaadinBrowserSpecificOverrides" />

<source path="client" />
<source path="shared" />

@@ -42,8 +40,7 @@
<!-- Use the new cross site linker to get a nocache.js without document.write -->
<add-linker name="xsiframe" />

<!-- Remove IE6/IE7 permutation as they are not supported -->
<set-property name="user.agent" value="ie8,ie9,ie10,gecko1_8,safari" />
<set-property name="user.agent" value="gecko1_8,safari" />

<!-- Pointer event support -->
<define-property name="modernie" values="none,yes" />
@@ -75,11 +72,6 @@
</none>
</replace-with>

<replace-with class="com.vaadin.client.event.PointerEventSupportImplIE10">
<when-type-is class="com.vaadin.client.event.PointerEventSupportImpl" />
<when-property-is value="ie10" name="user.agent" />
</replace-with>

<replace-with
class="com.vaadin.client.communication.DefaultConnectionStateHandler">
<when-type-is

+ 0
- 47
client/src/main/resources/com/vaadin/VaadinBrowserSpecificOverrides.gwt.xml View File

@@ -1,47 +0,0 @@
<module>
<!-- This GWT module defines the browser specific overrides used by Vaadin -->

<!-- Hint for WidgetSetBuilder not to automatically update the file -->
<!-- WS Compiler: manually edited -->

<!-- Fall through to this rule for everything but IE -->
<replace-with
class="com.vaadin.client.ui.upload.UploadIFrameOnloadStrategy">
<when-type-is
class="com.vaadin.client.ui.upload.UploadIFrameOnloadStrategy" />
</replace-with>

<replace-with
class="com.vaadin.client.ui.upload.UploadIFrameOnloadStrategyIE">
<when-type-is
class="com.vaadin.client.ui.upload.UploadIFrameOnloadStrategy" />
<any>
<when-property-is name="user.agent" value="ie8" />
</any>
</replace-with>

<!-- Fall through to this rule for everything but IE -->
<replace-with class="com.vaadin.client.ui.VDragAndDropWrapper">
<when-type-is class="com.vaadin.client.ui.VDragAndDropWrapper" />
</replace-with>

<replace-with class="com.vaadin.client.ui.VDragAndDropWrapperIE">
<when-type-is class="com.vaadin.client.ui.VDragAndDropWrapper" />
<any>
<when-property-is name="user.agent" value="ie8" />
</any>
</replace-with>

<!-- Fall through to this rule for everything but IE -->
<replace-with class="com.vaadin.client.LayoutManager">
<when-type-is class="com.vaadin.client.LayoutManager" />
</replace-with>

<replace-with class="com.vaadin.client.LayoutManagerIE8">
<when-type-is class="com.vaadin.client.LayoutManager" />
<any>
<when-property-is name="user.agent" value="ie8" />
</any>
</replace-with>

</module>

+ 1
- 111
client/src/test/java/com/vaadin/client/VBrowserDetailsUserAgentParserTest.java View File

@@ -22,17 +22,6 @@ public class VBrowserDetailsUserAgentParserTest {
private static final String FIREFOX_40B11_WIN = "Mozilla/5.0 (Windows NT 5.1; rv:2.0b11) Gecko/20100101 Firefox/4.0b11";
private static final String KONQUEROR_LINUX = "Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Exabot-Thumbnails)";

private static final String IE6_WINDOWS = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
private static final String IE7_WINDOWS = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";

private static final String IE8_WINDOWS = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)";
private static final String IE8_IN_IE7_MODE_WINDOWS = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)";

private static final String IE9_IN_IE7_MODE_WINDOWS_7 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)";
private static final String IE9_BETA_IN_IE8_MODE_WINDOWS_7 = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)";
private static final String IE9_BETA_WINDOWS_7 = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";

private static final String IE10_WINDOWS_8 = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
private static final String IE11_WINDOWS_7 = "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko";
private static final String IE11_WINDOWS_PHONE_8_1_UPDATE = "Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920) Like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537";

@@ -343,106 +332,6 @@ public class VBrowserDetailsUserAgentParserTest {
assertWindows(bd);
}

@Test
public void testIE6() {
VBrowserDetails bd = new VBrowserDetails(IE6_WINDOWS);
assertEngineVersion(bd, -1);
assertIE(bd);
assertBrowserMajorVersion(bd, 6);
assertBrowserMinorVersion(bd, 0);
assertWindows(bd);
}

@Test
public void testIE7() {
VBrowserDetails bd = new VBrowserDetails(IE7_WINDOWS);
assertEngineVersion(bd, -1);
assertIE(bd);
assertBrowserMajorVersion(bd, 7);
assertBrowserMinorVersion(bd, 0);
assertWindows(bd);
}

@Test
public void testIE8() {
VBrowserDetails bd = new VBrowserDetails(IE8_WINDOWS);
assertTrident(bd);
assertEngineVersion(bd, 4);
assertIE(bd);
assertBrowserMajorVersion(bd, 8);
assertBrowserMinorVersion(bd, 0);
assertWindows(bd);
}

@Test
public void testIE8CompatibilityMode() {
VBrowserDetails bd = new VBrowserDetails(IE8_IN_IE7_MODE_WINDOWS);
bd.setIEMode(7);

assertTrident(bd);
assertEngineVersion(bd, 4);
assertIE(bd);
assertBrowserMajorVersion(bd, 7);
assertBrowserMinorVersion(bd, 0);

assertWindows(bd);
}

@Test
public void testIE9() {
VBrowserDetails bd = new VBrowserDetails(IE9_BETA_WINDOWS_7);
assertTrident(bd);
assertEngineVersion(bd, 5);
assertIE(bd);
assertBrowserMajorVersion(bd, 9);
assertBrowserMinorVersion(bd, 0);
assertWindows(bd);
}

@Test
public void testIE9InIE7CompatibilityMode() {
VBrowserDetails bd = new VBrowserDetails(IE9_IN_IE7_MODE_WINDOWS_7);
// bd.setIE8InCompatibilityMode();

assertTrident(bd);
assertEngineVersion(bd, 5);
assertIE(bd);
assertBrowserMajorVersion(bd, 7);
assertBrowserMinorVersion(bd, 0);

assertWindows(bd);
}

@Test
public void testIE9InIE8CompatibilityMode() {
VBrowserDetails bd = new VBrowserDetails(
IE9_BETA_IN_IE8_MODE_WINDOWS_7);
// bd.setIE8InCompatibilityMode();

/*
* Trident/4.0 in example user agent string based on beta even though it
* should be Trident/5.0 in real (non-beta) user agent strings
*/
assertTrident(bd);
assertEngineVersion(bd, 4);
assertIE(bd);
assertBrowserMajorVersion(bd, 8);
assertBrowserMinorVersion(bd, 0);

assertWindows(bd);
}

@Test
public void testIE10() {
VBrowserDetails bd = new VBrowserDetails(IE10_WINDOWS_8);
assertTrident(bd);
assertEngineVersion(bd, 6);
assertIE(bd);
assertBrowserMajorVersion(bd, 10);
assertBrowserMinorVersion(bd, 0);
assertWindows(bd);
}

@Test
public void testIE11() {
VBrowserDetails bd = new VBrowserDetails(IE11_WINDOWS_7);
@@ -679,3 +568,4 @@ public class VBrowserDetailsUserAgentParserTest {
}

}


+ 0
- 2
themes/src/main/themes/VAADIN/themes/base/base.scss View File

@@ -40,7 +40,6 @@ $v-line-height: $line-height !default;
@import "popupview/popupview.scss";
@import "progressindicator/progressindicator.scss";
@import "select/select.scss";
@import "shadow/shadow.scss";
@import "slider/slider.scss";
@import "splitpanel/splitpanel.scss";
@import "table/table.scss";
@@ -117,7 +116,6 @@ $v-line-height: $line-height !default;
@include base-progressindicator(v-progressindicator);

@include base-select;
@include base-shadow;
@include base-slider;
@include base-splitpanel;
@include base-table;

BIN
themes/src/main/themes/VAADIN/themes/base/shadow/img/bottom-left.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/shadow/img/bottom-right.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/shadow/img/bottom.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/shadow/img/center.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/shadow/img/left.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/shadow/img/right.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/shadow/img/top-left.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/shadow/img/top-right.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/shadow/img/top.png View File


+ 0
- 74
themes/src/main/themes/VAADIN/themes/base/shadow/shadow.scss View File

@@ -1,74 +0,0 @@
@mixin base-shadow($primaryStyleName : v-shadow) {

.#{$primaryStyleName} {
position: absolute;
display: none;
pointer-events: none;
}

.#{$primaryStyleName} .top-left {
position: absolute; overflow: hidden;
top: -3px; left: -5px;
width: 10px; height: 10px;
background: transparent url(img/top-left.png);
}

.#{$primaryStyleName} .top {
position: absolute; overflow: hidden;
top: -3px; left: 5px;
height: 10px; right: 5px;
background: transparent url(img/top.png);
}

.#{$primaryStyleName} .top-right {
position: absolute; overflow: hidden;
top: -3px; right: -5px;
width: 10px; height: 10px;
background: transparent url(img/top-right.png);
}

.#{$primaryStyleName} .left {
position: absolute; overflow: hidden;
top: 7px; left: -5px;
width: 10px;
bottom: 3px;
background: transparent url(img/left.png);
}

.#{$primaryStyleName} .center {
position: absolute; overflow: hidden;
top: 7px; left: 5px;
bottom: 3px; right: 5px;
background: transparent url(img/center.png);
}

.#{$primaryStyleName} .right {
position: absolute; overflow: hidden;
top: 7px; right: -5px;
width: 10px;
bottom: 3px;
background: transparent url(img/right.png);
}

.#{$primaryStyleName} .bottom-left {
position: absolute; overflow: hidden;
bottom: -7px; left: -5px;
width: 10px; height: 10px;
background: transparent url(img/bottom-left.png);
}

.#{$primaryStyleName} .bottom {
position: absolute; overflow: hidden;
bottom: -7px; left: 5px;
right: 5px; height: 10px;
background: transparent url(img/bottom.png);
}

.#{$primaryStyleName} .bottom-right {
position: absolute; overflow: hidden;
bottom: -7px; right: -5px;
width: 10px; height: 10px;
background: transparent url(img/bottom-right.png);
}

}

BIN
themes/src/main/themes/VAADIN/themes/base/window/img/shadow/bottom-left.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/window/img/shadow/bottom-right.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/window/img/shadow/bottom.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/window/img/shadow/center.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/window/img/shadow/left.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/window/img/shadow/right.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/window/img/shadow/top-left.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/window/img/shadow/top-right.png View File


BIN
themes/src/main/themes/VAADIN/themes/base/window/img/shadow/top.png View File


+ 0
- 65
themes/src/main/themes/VAADIN/themes/base/window/window.scss View File

@@ -123,69 +123,4 @@ div.#{$primaryStyleName}-header {
height: 100%;
filter: alpha(opacity=50);
}
/* Shadow for window */
.v-shadow-window {
position: absolute;
display: none;
pointer-events: none;

}
.v-shadow-window .top-left {
position: absolute; overflow: hidden;
top: -10px; left: -15px;
width: 28px; height: 28px;
background: transparent url(img/shadow/top-left.png);
}
.v-shadow-window .top {
position: absolute; overflow: hidden;
top: -10px; left: 13px;
height: 28px;
right: 13px;
background: transparent url(img/shadow/top.png);
}
.v-shadow-window .top-right {
position: absolute; overflow: hidden;
top: -10px; right: -15px;
width: 28px; height: 28px;
background: transparent url(img/shadow/top-right.png);
}
.v-shadow-window .left {
position: absolute; overflow: hidden;
top: 18px; left: -15px;
width: 28px;
bottom: 10px;
background: transparent url(img/shadow/left.png);
}
.v-shadow-window .center {
position: absolute; overflow: hidden;
top: 18px; left: 13px;
bottom: 10px; right: 13px;
background: transparent url(img/shadow/center.png);
}
.v-shadow-window .right {
position: absolute; overflow: hidden;
top: 18px; right: -15px;
width: 28px;
bottom: 10px;
background: transparent url(img/shadow/right.png);
}
.v-shadow-window .bottom-left {
position: absolute; overflow: hidden;
bottom: -18px; left: -15px;
width: 28px; height: 28px;
background: transparent url(img/shadow/bottom-left.png);
}
.v-shadow-window .bottom {
position: absolute; overflow: hidden;
bottom: -18px; left: 13px;
right: 13px; height: 28px;
background: transparent url(img/shadow/bottom.png);
}
.v-shadow-window .bottom-right {
position: absolute; overflow: hidden;
bottom: -18px; right: -15px;
width: 28px; height: 28px;
background: transparent url(img/shadow/bottom-right.png);
}

}

+ 0
- 2
themes/src/main/themes/VAADIN/themes/runo/runo.scss View File

@@ -39,7 +39,6 @@ $v-grid-header-background-color: #e7e9ea !default;
@import "popupview/popupview.scss";
@import "progressindicator/progressindicator.scss";
@import "select/select.scss";
@import "shadow/shadow.scss";
@import "slider/slider.scss";
@import "splitpanel/splitpanel.scss";
@import "table/table.scss";
@@ -82,7 +81,6 @@ $v-grid-header-background-color: #e7e9ea !default;
@include runo-progressindicator(v-progressindicator);

@include runo-select;
@include runo-shadow;
@include runo-slider;
@include runo-splitpanel;
@include runo-table;

BIN
themes/src/main/themes/VAADIN/themes/runo/shadow/img/bottom-left.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/shadow/img/bottom-right.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/shadow/img/bottom.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/shadow/img/center.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/shadow/img/left.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/shadow/img/right.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/shadow/img/top-left.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/shadow/img/top-right.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/shadow/img/top.png View File


+ 0
- 72
themes/src/main/themes/VAADIN/themes/runo/shadow/shadow.scss View File

@@ -1,72 +0,0 @@
@mixin runo-shadow($primaryStyleName : v-shadow) {

.#{$primaryStyleName} {
position: absolute;
}

.#{$primaryStyleName} .top-left {
position: absolute; overflow: hidden;
top: -3px; left: -4px;
width: 8px; height: 8px;
background: transparent url(img/top-left.png);
}

.#{$primaryStyleName} .top {
position: absolute; overflow: hidden;
top: -3px; left: 4px;
height: 8px; right: 4px;
background: transparent url(img/top.png);
}

.#{$primaryStyleName} .top-right {
position: absolute; overflow: hidden;
top: -3px; right: -4px;
width: 8px; height: 8px;
background: transparent url(img/top-right.png);
}

.#{$primaryStyleName} .left {
position: absolute; overflow: hidden;
top: 5px; left: -4px;
width: 8px;
bottom: 3px;
background: transparent url(img/left.png);
}

.#{$primaryStyleName} .center {
position: absolute; overflow: hidden;
top: 5px; left: 4px;
bottom: 3px; right: 4px;
background: transparent url(img/center.png);
}

.#{$primaryStyleName} .right {
position: absolute; overflow: hidden;
top: 5px; right: -4px;
width: 8px;
bottom: 3px;
background: transparent url(img/right.png);
}

.#{$primaryStyleName} .bottom-left {
position: absolute; overflow: hidden;
bottom: -5px; left: -4px;
width: 8px; height: 8px;
background: transparent url(img/bottom-left.png);
}

.#{$primaryStyleName} .bottom {
position: absolute; overflow: hidden;
bottom: -5px; left: 4px;
right: 4px; height: 8px;
background: transparent url(img/bottom.png);
}

.#{$primaryStyleName} .bottom-right {
position: absolute; overflow: hidden;
bottom: -5px; right: -4px;
width: 8px; height: 8px;
background: transparent url(img/bottom-right.png);
}

}

BIN
themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/bottom-left.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/bottom-right.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/bottom.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/center.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/left.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/right.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/top-left.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/top-right.png View File


BIN
themes/src/main/themes/VAADIN/themes/runo/window/img/shadow/top.png View File


+ 0
- 50
themes/src/main/themes/VAADIN/themes/runo/window/window.scss View File

@@ -153,54 +153,4 @@
}
}

/* Shadow for window */
.v-shadow-window .top-left {
top: -13px; left: -20px;
width: 39px; height: 39px;
background: transparent url(img/shadow/top-left.png);
}
.v-shadow-window .top {
top: -13px; left: 19px;
height: 39px;
right: 19px;
background: transparent url(img/shadow/top.png);
}
.v-shadow-window .top-right {
top: -13px; right: -20px;
width: 39px; height: 39px;
background: transparent url(img/shadow/top-right.png);
}
.v-shadow-window .left {
top: 26px; left: -20px;
width: 39px;
bottom: 12px;
background: transparent url(img/shadow/left.png);
}
.v-shadow-window .center {
top: 26px; left: 19px;
bottom: 12px; right: 19px;
background: transparent url(img/shadow/center.png);
}
.v-shadow-window .right {
top: 26px; right: -20px;
width: 39px;
bottom: 12px;
background: transparent url(img/shadow/right.png);
}
.v-shadow-window .bottom-left {
bottom: -27px; left: -20px;
width: 39px; height: 39px;
background: transparent url(img/shadow/bottom-left.png);
}
.v-shadow-window .bottom {
bottom: -27px; left: 19px;
right: 19px; height: 39px;
background: transparent url(img/shadow/bottom.png);
}
.v-shadow-window .bottom-right {
bottom: -27px; right: -20px;
width: 39px; height: 39px;
background: transparent url(img/shadow/bottom-right.png);
}

}

+ 0
- 50
themes/src/main/themes/VAADIN/themes/valo/shared/_overlay.scss View File

@@ -144,56 +144,6 @@ $v-selection-item-font-weight: max(400, $v-font-weight);
*/
$v-selection-item-selection-color: $v-selection-color !default;





/*
* Simulates CSS box-shadow using the extraneous shadow elements in the DOM.
*
* @access private
* @deprecated The .v-shadow element is deprecated since 7.3.0
* @group overlay
*/
@mixin valo-ie8-shadow($shadow, $element: top) {
.#{$element} {
$shadow-offset-x: nth($shadow, 1);
$shadow-offset-y: nth($shadow, 2);
$shadow-blur: nth($shadow, 3);
$shadow-spread: 0;
@if length($shadow) > 4 {
$shadow-spread: nth($shadow, 4);
}
$shadow-color: last($shadow);
$shadow-color-opacity: round(opacity($shadow-color) * 100);
$shadow-color: opacify($shadow-color, 1);

position: absolute;
top: $shadow-offset-y - $shadow-blur - $shadow-spread;
right: -$shadow-offset-x + $shadow-blur - $shadow-spread;
bottom: -$shadow-offset-y + $shadow-blur - $shadow-spread;
left: $shadow-offset-x - $shadow-blur - $shadow-spread;
background: $shadow-color;
filter: alpha(opacity=#{$shadow-color-opacity}) progid:DXImageTransform.Microsoft.blur(pixelradius=#{strip-units($shadow-blur)}, makeShadow=false);
}
}





// Not needed in modern browsers
.v-shadow,
.v-shadow-window {
display: none;
}







/**
* Outputs styles for overlay elements
*

Loading…
Cancel
Save