summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2013-02-22 16:23:49 +0200
committerArtur Signell <artur@vaadin.com>2013-02-22 16:24:06 +0200
commitfbdc52551e258d938db2e230366ca0e21d35c5bc (patch)
tree640740bcb63c2757facc9f19748a65eb46b50174
parentd9a8a21a62b977e32b65bcf436bbd229c9b798f4 (diff)
parent7af5b3fceb75b6f505a9a6d0a843b788bb06d9a7 (diff)
downloadvaadin-framework-fbdc52551e258d938db2e230366ca0e21d35c5bc.tar.gz
vaadin-framework-fbdc52551e258d938db2e230366ca0e21d35c5bc.zip
Merge remote-tracking branch 'origin/7.0'
Change-Id: Id48ccb3c400a78cddb8bb5c7bbcf2d65174e59d0
-rw-r--r--WebContent/release-notes.html1023
-rw-r--r--all/build.xml6
-rw-r--r--build/bin/closed-to-rn.py16
-rw-r--r--buildhelpers/build.xml7
-rw-r--r--buildhelpers/ivy.xml4
-rw-r--r--buildhelpers/src/com/vaadin/buildhelpers/FetchReleaseNotesTickets.java46
-rw-r--r--client-compiled/build.xml3
-rw-r--r--client-compiler/src/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java16
-rw-r--r--client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java35
-rw-r--r--client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java19
-rw-r--r--client/src/com/vaadin/client/ApplicationConfiguration.java6
-rw-r--r--client/src/com/vaadin/client/ApplicationConnection.java55
-rw-r--r--client/src/com/vaadin/client/ConnectorMap.java3
-rw-r--r--client/src/com/vaadin/client/FastStringMap.java2
-rw-r--r--client/src/com/vaadin/client/JsArrayObject.java2
-rw-r--r--client/src/com/vaadin/client/VCaption.java24
-rw-r--r--client/src/com/vaadin/client/VTooltip.java2
-rw-r--r--client/src/com/vaadin/client/metadata/AsyncBundleLoader.java4
-rw-r--r--client/src/com/vaadin/client/metadata/TypeDataStore.java19
-rw-r--r--client/src/com/vaadin/client/ui/AbstractComponentConnector.java93
-rw-r--r--client/src/com/vaadin/client/ui/AbstractConnector.java4
-rw-r--r--client/src/com/vaadin/client/ui/VAbsoluteLayout.java11
-rw-r--r--client/src/com/vaadin/client/ui/VCssLayout.java4
-rw-r--r--client/src/com/vaadin/client/ui/VScrollTable.java508
-rw-r--r--client/src/com/vaadin/client/ui/VTextField.java15
-rw-r--r--client/src/com/vaadin/client/ui/VTreeTable.java38
-rw-r--r--client/src/com/vaadin/client/ui/VUI.java3
-rw-r--r--client/src/com/vaadin/client/ui/label/LabelConnector.java6
-rw-r--r--client/src/com/vaadin/client/ui/link/LinkConnector.java6
-rw-r--r--client/src/com/vaadin/client/ui/table/TableConnector.java1
-rw-r--r--client/src/com/vaadin/client/ui/tabsheet/TabsheetBaseConnector.java8
-rw-r--r--client/src/com/vaadin/client/ui/textfield/TextFieldConnector.java6
-rw-r--r--client/src/com/vaadin/client/ui/ui/UIConnector.java19
-rw-r--r--common.xml35
-rw-r--r--server/src/com/vaadin/ui/CheckBox.java7
-rw-r--r--server/src/com/vaadin/ui/ProgressIndicator.java15
-rw-r--r--server/src/com/vaadin/ui/Slider.java16
-rw-r--r--server/src/com/vaadin/ui/Tree.java27
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/tree/TreeTest.java62
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java2247
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj51
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java30
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java31
-rw-r--r--theme-compiler/tests/resources/automatic/css/nested-selector-begin-with-plus.css9
-rw-r--r--theme-compiler/tests/resources/automatic/scss/nested-selector-begin-with-plus.scss9
-rw-r--r--theme-compiler/tests/resources/sasslang/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css (renamed from theme-compiler/tests/resources/sasslangbroken/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css)0
-rw-r--r--theme-compiler/tests/resources/sasslang/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss (renamed from theme-compiler/tests/resources/sasslangbroken/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss)0
-rw-r--r--theme-compiler/tests/resources/scss/mixin-extra-params.scss4
-rw-r--r--theme-compiler/tests/src/com/vaadin/sass/testcases/scss/MixinExtraParameters.java25
-rw-r--r--uitest/build.xml4
-rw-r--r--uitest/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutResizing.html37
-rw-r--r--uitest/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutResizing.java44
-rw-r--r--uitest/src/com/vaadin/tests/components/slider/SliderValueFromDataSource.html32
-rw-r--r--uitest/src/com/vaadin/tests/components/slider/SliderValueFromDataSource.java59
-rw-r--r--uitest/src/com/vaadin/tests/components/textfield/TextFieldMaxLengthRemovedFromDOM.html51
-rw-r--r--uitest/src/com/vaadin/tests/components/textfield/TextFieldMaxLengthRemovedFromDOM.java37
-rw-r--r--uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.html31
-rw-r--r--uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.java63
-rw-r--r--uitest/src/com/vaadin/tests/components/treetable/TreeTableExtraScrollBarWithChildren.html69
-rw-r--r--uitest/src/com/vaadin/tests/components/treetable/TreeTableExtraScrollbarWithChildren.java92
-rw-r--r--uitest/src/com/vaadin/tests/debug/HierarchyAfterAnalyzeLayouts.html37
-rw-r--r--uitest/src/com/vaadin/tests/debug/HierarchyAfterAnalyzeLayouts.java40
-rw-r--r--uitest/src/com/vaadin/tests/minitutorials/v7a1/CreatingPreserveState.java8
63 files changed, 2914 insertions, 2272 deletions
diff --git a/WebContent/release-notes.html b/WebContent/release-notes.html
index d5c1109068..39b6652532 100644
--- a/WebContent/release-notes.html
+++ b/WebContent/release-notes.html
@@ -37,10 +37,12 @@
<h2 id="tableofcontents">Release Notes for Vaadin Framework @version@</h2>
<ul>
- <li><a href="#overview">Overview</a></li>
- <li><a href="#enhancements">Enhancements in Vaadin @version-minor@</a></li>
- <li><a href="#limitations">Limitations in @version@</a></li>
+ <li><a href="#overview">Overview of Vaadin @version@ Release</a></li>
<li><a href="#changelog">Complete change log for Vaadin @version@</a></li>
+ <li><a href="#enhancements">Enhancements in Vaadin @version-minor@</a></li>
+ <li><a href="#limitations">Limitations in @version-minor@</a></li>
+ <li><a href="#vaadin">Vaadin Installation</a></li>
+ <li><a href="#package">Package Contents</a></li>
<li><a href="#migrating">Migrating from Vaadin 6 to Vaadin 7</a></li>
<li><a href="#dependencies">Vaadin @version@ dependencies</a></li>
<li><a href="#upgrading">Upgrading to Vaadin @version-minor@</a></li>
@@ -48,74 +50,44 @@
<li><a href="#vaadinontheweb">Vaadin on the Web</a></li>
</ul>
- <h2 id="overview">Overview</h2>
+ <h2 id="overview">Overview of Vaadin @version@ Release</h2>
<p>
- <b>Vaadin</b> is a Java framework for building modern web applications that look
- great, perform well and make you and your users happy. <b>Vaadin</b> is
- available under the Apache License, Version 2.0 (see the <tt>license.html</tt> in
- the Vaadin ZIP or JAR package).
+ Vaadin @version@ is a maintenance release that includes a number of important bug
+ fixes, as listed in the <a href="#changelog">change log</a> below. You can also
+ view the <a
+ href="http://dev.vaadin.com/query?status=closed&resolution=fixed&milestone=Vaadin+@version@&order=priority">list
+ of the closed issues</a> at the Vaadin developer's site.
</p>
-
+
<p>
- The easiest ways to install <b>Vaadin</b> are:
+ For a list of enhancements in the last feature release, see <a
+ href="#enhancements">Enhancements in Vaadin @version-minor@</a> and the <a
+ href="http://vaadin.com/download/release/@version-minor@/@version-minor@.0/release-notes.html">Release
+ Notes for Vaadin @version-minor@.0</a>.
</p>
- <ul>
- <li>If using Maven, define it as a dependency or use any of the available
- archetypes (only <tt>vaadin-application</tt> is available for Vaadin 7 at the time
- of this release) to create a new project</li>
-
- <li>If using Eclipse, use the Vaadin Plugin for Eclipse, which automatically
- downloads the Vaadin libraries</li>
- </ul>
+ <h3 id="changelog">ChangeLog</h3>
<p>
- It is also available as a ZIP package downloadable from <a href="http://vaadin.com/download">Vaadin Download page</a>.
+ This release includes the following closed issues:
</p>
- <h3 id="package">Package Contents</h3>
-
- <p>Inside the ZIP installation package you will find:</p>
-
<ul>
- <li>Separate server-side (<tt>vaadin-server</tt>) and client-side (<tt>vaadin-client</tt>, <tt>vaadin-client-compiler</tt>) development libraries</li>
- <li>Precompiled widget set (<tt>vaadin-client-compiled</tt>) for server-side development</li>
- <li>Shared library (<tt>vaadin-shared</tt>) for both server- and client-side libraries</li>
- <li>Built-in themes (<tt>vaadin-themes</tt>) and the theme compiler (<tt>vaadin-theme-compiler</tt>)</li>
- <li>Dependency libraries provided under the <tt>lib/</tt> folder</li>
+@release-notes-tickets@
</ul>
<p>
- See the <tt>README.TXT</tt> in the installation package for detailed information
- about the package contents. <a href="http://vaadin.com/book">Book of Vaadin</a>
- (for Vaadin 7) gives more detailed instructions.
- </p>
-
- <p>
- For server-side development, copy the <tt>vaadin-server</tt>,
- <tt>vaadin-client-compiled</tt>, <tt>vaadin-shared</tt>,
- <tt>vaadin-theme-compiler</tt>, and <tt>vaadin-themes</tt> from the main
- folder and the dependencies from the <tt>lib</tt> folder to the
- <tt>WEB-INF/lib</tt> folder of your Vaadin project. (The
- <tt>vaadin-client-compiled</tt> is necessary if you do not wish to compile the
- widget set by your own, which you need to do if you use almost any add-on
- components.)
- </p>
-
- <p>
- For pure client-side development, you only need the <tt>vaadin-client</tt> and
- <tt>vaadin-client-compiler</tt> JARs, which should be put to a non-deployed
- project library folder, such as <tt>lib</tt>. You also need them if you compile
- the widget set for any reason, such as using Vaadin add-ons, or create new
- server-side components integrated with client-side widgets.
+ The <a
+ href="http://dev.vaadin.com/query?status=closed&resolution=fixed&milestone=Vaadin+@version@&order=priority">full
+ list of the closed issues</a> can also be found at <tt>dev.vaadin.com</tt>.
</p>
- <h2 id="enhancements">Enhancements in Vaadin @version@</h2>
+ <h2 id="enhancements">Enhancements in Vaadin @version-minor@</h2>
<p>
- The @version@ includes many major and minor enhancements and changes. Below is a
- list of the most notable changes:
+ The @version-minor@ includes many major and minor enhancements and changes first
+ introduced in Vaadin @version-minor@.0. Below is a list of the most notable changes:
</p>
<ul>
@@ -375,7 +347,9 @@
the <a href="https://vaadin.com/wiki/-/wiki/Main/Vaadin+7">mini-tutorials</a> in
the Vaadin Wiki. Also see the <a
href="https://vaadin.com/wiki/-/wiki/Main/Migrating+from+Vaadin+6+to+Vaadin+7">Vaadin
- 6 to 7 Migration Guide</a>.
+ 6 to 7 Migration Guide</a>. See also the <a
+ href="http://vaadin.com/download/release/@version-minor@/@version-minor@.0/release-notes.html">Release
+ Notes for Vaadin @version-minor@.0</a>.
</p>
<h3 id="limitations">Limitations</h3>
@@ -386,902 +360,69 @@
href="http://dev.vaadin.com/ticket/10634">#10634</a>)</li>
</ul>
- <h3 id="changelog">ChangeLog</h3>
+ <h2 id="vaadin">Vaadin Installation</h2>
<p>
- Below is the complete list of closed tickets in Vaadin 7. You can also query the tickets by <a href="http://dev.vaadin.com/query?status=closed&group=resolution&milestone=Vaadin+7.0.0.alpha1&milestone=Vaadin+7.0.0.alpha2&milestone=Vaadin+7.0.0.alpha3&milestone=Vaadin+7.0.0.beta1&milestone=Vaadin+7.0.0.beta2&milestone=Vaadin+7.0.0.beta3&milestone=Vaadin+7.0.0.beta4&milestone=Vaadin+7.0.0.beta5&milestone=Vaadin+7.0.0.beta6&milestone=Vaadin+7.0.0.beta7&milestone=Vaadin+7.0.0.beta8&milestone=Vaadin+7.0.0.beta9&milestone=Vaadin+7.0.0.beta10&milestone=Vaadin+7.0.0.beta11&milestone=Vaadin+7.0.0.rc1&milestone=Vaadin+7.0.0.rc2&milestone=Vaadin+7.0.0">all the milestones</a> and filter out the defects and tasks from the query to list only actual enhancements.
+ <b>Vaadin</b> is a Java framework for building modern web applications that look
+ great, perform well and make you and your users happy. <b>Vaadin</b> is
+ available under the Apache License, Version 2.0 (see the <tt>license.html</tt> in
+ the Vaadin ZIP or JAR package).
+ </p>
+
+ <p>
+ The easiest ways to install <b>Vaadin</b> are:
+ </p>
+
+ <ul>
+ <li>If using Maven, define it as a dependency or use any of the available
+ archetypes (only <tt>vaadin-application</tt> is available for Vaadin 7 at the time
+ of this release) to create a new project</li>
+
+ <li>If using Eclipse, use the Vaadin Plugin for Eclipse, which automatically
+ downloads the Vaadin libraries</li>
+ </ul>
+
+ <p>
+ It is also available as a ZIP package downloadable from <a href="http://vaadin.com/download">Vaadin Download page</a>.
</p>
- <p>The features voted at the Vaadin <a href="https://vaadin.com/pro">Pro Account</a> are marked in the list.</p>
+ <h3 id="package">Package Contents</h3>
-<!-- Voted features: #6093 #9733 #6790 #8579 #8983 -->
+ <p>Inside the ZIP installation package you will find:</p>
<ul>
- <li><a href="http://dev.vaadin.com/ticket/1472">#1472</a>: Window.open() should be re-thought/documented</li>
- <li><a href="http://dev.vaadin.com/ticket/2490">#2490</a>: Deprecate reflect listeners</li>
- <li><a href="http://dev.vaadin.com/ticket/2527">#2527</a>: Component.getParent should return ComponentContainer instead of Component</li>
- <li><a href="http://dev.vaadin.com/ticket/2869">#2869</a>: Deprecate Select class</li>
- <li><a href="http://dev.vaadin.com/ticket/2924">#2924</a>: Panel/UI/Window child component hierarchy is invalid</li>
- <li><a href="http://dev.vaadin.com/ticket/3021">#3021</a>: Property.toString should not be used to convert property value</li>
- <li><a href="http://dev.vaadin.com/ticket/3067">#3067</a>: Split subwindow from Window</li>
- <li><a href="http://dev.vaadin.com/ticket/3168">#3168</a>: Getting the production mode status</li>
- <li><a href="http://dev.vaadin.com/ticket/3196">#3196</a>: Improvement ideas for theme development</li>
- <li><a href="http://dev.vaadin.com/ticket/3214">#3214</a>: Spacing is rendered for invisible components</li>
- <li><a href="http://dev.vaadin.com/ticket/3255">#3255</a>: Layout margins cascade too easily</li>
- <li><a href="http://dev.vaadin.com/ticket/3557">#3557</a>: AbstractComponentContainer should implement Iterable</li>
- <li><a href="http://dev.vaadin.com/ticket/3667">#3667</a>: Remove deprecated API from MenuBar (setSubMenuIcon & setCollapse)</li>
- <li><a href="http://dev.vaadin.com/ticket/3700">#3700</a>: Rename setDebugId to setId</li>
- <li><a href="http://dev.vaadin.com/ticket/3718">#3718</a>: CustomField component</li>
- <li><a href="http://dev.vaadin.com/ticket/3765">#3765</a>: Change client-server communication protocol to be JSON based</li>
- <li><a href="http://dev.vaadin.com/ticket/3851">#3851</a>: AbstractField should run validators for empty fields</li>
- <li><a href="http://dev.vaadin.com/ticket/3861">#3861</a>: Application.handleURI should not return null if resource is found but does not produce a stream</li>
- <li><a href="http://dev.vaadin.com/ticket/3950">#3950</a>: Change default Tree container to HierarchicalContainer</li>
- <li><a href="http://dev.vaadin.com/ticket/4127">#4127</a>: Allow custom system messages and locale specific messages</li>
- <li><a href="http://dev.vaadin.com/ticket/4131">#4131</a>: Make Vaadin compatible with Apache ProxyPass</li>
- <li><a href="http://dev.vaadin.com/ticket/4203">#4203</a>: Exception from one widget should not prevent updating other widgets</li>
- <li><a href="http://dev.vaadin.com/ticket/4294">#4294</a>: Decide the proper package name for utils/tools and move the utils/tools there</li>
- <li><a href="http://dev.vaadin.com/ticket/4355">#4355</a>: Consider removing Terminal.getDefaultTheme</li>
- <li><a href="http://dev.vaadin.com/ticket/4617">#4617</a>: Split Vaadin version handling to a separate class</li>
- <li><a href="http://dev.vaadin.com/ticket/4991">#4991</a>: com.vaadin.ui.Window javadoc</li>
- <li><a href="http://dev.vaadin.com/ticket/5381">#5381</a>: Select should have getter and setter methods for pageLength</li>
- <li><a href="http://dev.vaadin.com/ticket/5391">#5391</a>: CustomComponent JavaDoc should be improved</li>
- <li><a href="http://dev.vaadin.com/ticket/5422">#5422</a>: Add addComponents(Component..) to common layouts</li>
- <li><a href="http://dev.vaadin.com/ticket/5483">#5483</a>: Browser tabs recognition for subwindows</li>
- <li><a href="http://dev.vaadin.com/ticket/5494">#5494</a>: GridLayout/VerticalLayout/HorizontalLayout with undefined width should handle captions in the same way</li>
- <li><a href="http://dev.vaadin.com/ticket/5541">#5541</a>: Create build configurations for Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/5750">#5750</a>: FormLayout should not extend deprecated OrderedLayout</li>
- <li><a href="http://dev.vaadin.com/ticket/5814">#5814</a>: Deprecate setColumns from NativeSelect/ListSelect/TwincolSelect</li>
- <li><a href="http://dev.vaadin.com/ticket/5822">#5822</a>: ItemStyleGenerator.getStyle should include Component</li>
- <li><a href="http://dev.vaadin.com/ticket/5855">#5855</a>: Inner event classes should be converted to static nested classes</li>
- <li><a href="http://dev.vaadin.com/ticket/5856">#5856</a>: Table formatter</li>
- <li><a href="http://dev.vaadin.com/ticket/5890">#5890</a>: ComponentContainer interface should have method getComponentCount()</li>
- <li><a href="http://dev.vaadin.com/ticket/5956">#5956</a>: ClassPathExplorer.tryToAdd should read the ".class" file instead of loading the class</li>
- <li><a href="http://dev.vaadin.com/ticket/6010">#6010</a>: Remove Table.setLazyLoading and Tree.setLazyLoading</li>
- <li><a href="http://dev.vaadin.com/ticket/6093">#6093</a>: Add a way to revoke session - <b>VOTED FEATURE</b></li>
- <li><a href="http://dev.vaadin.com/ticket/6341">#6341</a>: Add methods for getting computed style from the browser</li>
- <li><a href="http://dev.vaadin.com/ticket/6342">#6342</a>: Support using border/padding/margin in core layouts</li>
- <li><a href="http://dev.vaadin.com/ticket/6366">#6366</a>: Add possibility to add all children directly in the constructor of most common component containers</li>
- <li><a href="http://dev.vaadin.com/ticket/6446">#6446</a>: Should we deprecate Label.CONTENT_XML?</li>
- <li><a href="http://dev.vaadin.com/ticket/6617">#6617</a>: Form.setLayout(Layout newLayout) may set parent with incompatible class</li>
- <li><a href="http://dev.vaadin.com/ticket/6619">#6619</a>: AbstractApplicationServlet.init: parameters reading order is strange</li>
- <li><a href="http://dev.vaadin.com/ticket/6690">#6690</a>: Plug-in support for Roots (aka components without a UI)</li>
- <li><a href="http://dev.vaadin.com/ticket/6696">#6696</a>: Check if VPanel Firefox2 (isGecko) workaround can be removed</li>
- <li><a href="http://dev.vaadin.com/ticket/6702">#6702</a>: Requesting a removed resource should give an error</li>
- <li><a href="http://dev.vaadin.com/ticket/6714">#6714</a>: Allow using multiple themes on the same page</li>
- <li><a href="http://dev.vaadin.com/ticket/6730">#6730</a>: JavaScript callback to server-side</li>
- <li><a href="http://dev.vaadin.com/ticket/6750">#6750</a>: ClassPathExplorer logs on error when using maven gwt plugin (compile)</li>
- <li><a href="http://dev.vaadin.com/ticket/6771">#6771</a>: Application url and static file location (VAADIN directory) should be expressed relatively to the host page</li>
- <li><a href="http://dev.vaadin.com/ticket/6790">#6790</a>: PopupDateField should allow disabling text input - <b>VOTED FEATURE</b></li>
- <li><a href="http://dev.vaadin.com/ticket/6887">#6887</a>: Conveniency method to add all nested bean properties</li>
- <li><a href="http://dev.vaadin.com/ticket/6977">#6977</a>: Adding a Vaadin portlet to Liferay causes the whole page to go blank</li>
- <li><a href="http://dev.vaadin.com/ticket/7045">#7045</a>: It should be simpler to find the window where a Terminal.ErrorEvent has occurred</li>
- <li><a href="http://dev.vaadin.com/ticket/7260">#7260</a>: VerticalLayout width calculations are not refreshed in Webkit when hiding component inside it</li>
- <li><a href="http://dev.vaadin.com/ticket/7285">#7285</a>: Simplify DOM structure for VL/HL</li>
- <li><a href="http://dev.vaadin.com/ticket/7456">#7456</a>: Create a Maven archetype for application projects</li>
- <li><a href="http://dev.vaadin.com/ticket/7480">#7480</a>: Vaadin ColorPicker is not compatible with GAE</li>
- <li><a href="http://dev.vaadin.com/ticket/7562">#7562</a>: random path in URL should give 404 or redirect to context root</li>
- <li><a href="http://dev.vaadin.com/ticket/7847">#7847</a>: Use ClientWidget.loadStyle by default</li>
- <li><a href="http://dev.vaadin.com/ticket/7880">#7880</a>: Review methods in Root</li>
- <li><a href="http://dev.vaadin.com/ticket/7882">#7882</a>: Implement dynamic Root creation</li>
- <li><a href="http://dev.vaadin.com/ticket/7883">#7883</a>: Implement late Root creation</li>
- <li><a href="http://dev.vaadin.com/ticket/7884">#7884</a>: Implement late Root initialization</li>
- <li><a href="http://dev.vaadin.com/ticket/7885">#7885</a>: Define theme and widgetset for each Root</li>
- <li><a href="http://dev.vaadin.com/ticket/7886">#7886</a>: Add generic support for RequestHandlers in Application</li>
- <li><a href="http://dev.vaadin.com/ticket/7887">#7887</a>: Serve ApplicationResource using a RequestHandler</li>
- <li><a href="http://dev.vaadin.com/ticket/7888">#7888</a>: Serve the html host page using a RequestHandler</li>
- <li><a href="http://dev.vaadin.com/ticket/7889">#7889</a>: Refactor LoginForm to use RequestHandler</li>
- <li><a href="http://dev.vaadin.com/ticket/7894">#7894</a>: Support multiple tabs by default</li>
- <li><a href="http://dev.vaadin.com/ticket/7895">#7895</a>: Provide ThreadLocal for the current Root</li>
- <li><a href="http://dev.vaadin.com/ticket/7896">#7896</a>: Provide ThreadLocal for the current Application</li>
- <li><a href="http://dev.vaadin.com/ticket/7897">#7897</a>: Ensure Portal actions and events doesn't cause the Root to be cleaned up</li>
- <li><a href="http://dev.vaadin.com/ticket/7898">#7898</a>: Migrate all tests to use Root instead of Window for top level windows</li>
- <li><a href="http://dev.vaadin.com/ticket/7899">#7899</a>: Multilevel Map</li>
- <li><a href="http://dev.vaadin.com/ticket/7912">#7912</a>: Remove support for IE6</li>
- <li><a href="http://dev.vaadin.com/ticket/7913">#7913</a>: Remove support for IE7</li>
- <li><a href="http://dev.vaadin.com/ticket/7917">#7917</a>: Conveniency method in BeanItem to add all nested properties of a property</li>
- <li><a href="http://dev.vaadin.com/ticket/7930">#7930</a>: Eliminate Validator.isValid()</li>
- <li><a href="http://dev.vaadin.com/ticket/7956">#7956</a>: Validators should support locales</li>
- <li><a href="http://dev.vaadin.com/ticket/7963">#7963</a>: Button should not be a field</li>
- <li><a href="http://dev.vaadin.com/ticket/7964">#7964</a>: CheckBox should not extend Button</li>
- <li><a href="http://dev.vaadin.com/ticket/7981">#7981</a>: Drop workarounds for Firefox 2</li>
- <li><a href="http://dev.vaadin.com/ticket/7984">#7984</a>: Drop workarounds for Firefox 3/4</li>
- <li><a href="http://dev.vaadin.com/ticket/7985">#7985</a>: Show informative message for users with an old browser version</li>
- <li><a href="http://dev.vaadin.com/ticket/7998">#7998</a>: Remove dependency jars from the project</li>
- <li><a href="http://dev.vaadin.com/ticket/8019">#8019</a>: Change existing constants from integers to enums</li>
- <li><a href="http://dev.vaadin.com/ticket/8024">#8024</a>: Add a notification for not supported browsers</li>
- <li><a href="http://dev.vaadin.com/ticket/8026">#8026</a>: Remove API deprecated in Vaadin 6 or earlier</li>
- <li><a href="http://dev.vaadin.com/ticket/8027">#8027</a>: Remove abstractions for non-web terminals</li>
- <li><a href="http://dev.vaadin.com/ticket/8028">#8028</a>: Extend Container.Indexed to provide a method for retrieving a range of item ids</li>
- <li><a href="http://dev.vaadin.com/ticket/8030">#8030</a>: Add a (Component... children) constructor to all component containers that accept more than one child</li>
- <li><a href="http://dev.vaadin.com/ticket/8048">#8048</a>: Include support for URI fragments in Root</li>
- <li><a href="http://dev.vaadin.com/ticket/8049">#8049</a>: Include initial UIDL in the first response</li>
- <li><a href="http://dev.vaadin.com/ticket/8052">#8052</a>: Restore Portlet support</li>
- <li><a href="http://dev.vaadin.com/ticket/8053">#8053</a>: Add new base classes for testing that doesn't use LegacyApplication</li>
- <li><a href="http://dev.vaadin.com/ticket/8061">#8061</a>: Remove Button(String caption, Object target, String methodName) constructor</li>
- <li><a href="http://dev.vaadin.com/ticket/8062">#8062</a>: Git repository problem</li>
- <li><a href="http://dev.vaadin.com/ticket/8068">#8068</a>: Provide an option for preserving Root state on browser refresh</li>
- <li><a href="http://dev.vaadin.com/ticket/8073">#8073</a>: Slider.setValue(Double value, boolean repaintIsNotNeeded) should be protected, not public</li>
- <li><a href="http://dev.vaadin.com/ticket/8074">#8074</a>: Slider accepts values out of range</li>
- <li><a href="http://dev.vaadin.com/ticket/8093">#8093</a>: Include Bean Validation</li>
- <li><a href="http://dev.vaadin.com/ticket/8094">#8094</a>: Implement two phase commit for FieldBinder</li>
- <li><a href="http://dev.vaadin.com/ticket/8095">#8095</a>: Implement FieldGroup</li>
- <li><a href="http://dev.vaadin.com/ticket/8097">#8097</a>: Root does not send resize events</li>
- <li><a href="http://dev.vaadin.com/ticket/8098">#8098</a>: Make WebBrowser details available in Root init when using delayed initialization</li>
- <li><a href="http://dev.vaadin.com/ticket/8101">#8101</a>: Implement generic converters that convert from one type to another</li>
- <li><a href="http://dev.vaadin.com/ticket/8102">#8102</a>: Fields should use a Converter to convert to and from data model type</li>
- <li><a href="http://dev.vaadin.com/ticket/8103">#8103</a>: Provide a ConverterFactory for default converters</li>
- <li><a href="http://dev.vaadin.com/ticket/8110">#8110</a>: Validation should be done on the converted value</li>
- <li><a href="http://dev.vaadin.com/ticket/8111">#8111</a>: Default field caption should not include dotted path of nested properties</li>
- <li><a href="http://dev.vaadin.com/ticket/8117">#8117</a>: DateField resolution default should be day</li>
- <li><a href="http://dev.vaadin.com/ticket/8118">#8118</a>: Remove support for millisecond resolution</li>
- <li><a href="http://dev.vaadin.com/ticket/8125">#8125</a>: Remove MethodProperty.convertValue and similar methods to avoid confusion</li>
- <li><a href="http://dev.vaadin.com/ticket/8127">#8127</a>: Add setBuffered to ease use of read through and write through modes</li>
- <li><a href="http://dev.vaadin.com/ticket/8142">#8142</a>: Label overrides setReadOnly and works differently from all other components</li>
- <li><a href="http://dev.vaadin.com/ticket/8151">#8151</a>: Root does not send click events</li>
- <li><a href="http://dev.vaadin.com/ticket/8153">#8153</a>: Add BeanItem.addNestedProperty</li>
- <li><a href="http://dev.vaadin.com/ticket/8154">#8154</a>: public methods in AbstractComponent should be declared in Component interface</li>
- <li><a href="http://dev.vaadin.com/ticket/8159">#8159</a>: Extract UI class selection logic to UIProviders</li>
- <li><a href="http://dev.vaadin.com/ticket/8163">#8163</a>: Print an error message if vaadinBootstap.js cannot be loaded</li>
- <li><a href="http://dev.vaadin.com/ticket/8164">#8164</a>: Make WrappedHttpServletRequest inherit from javax.servlet.http.HttpServletRequestWrapper</li>
- <li><a href="http://dev.vaadin.com/ticket/8165">#8165</a>: BrowserDetails, VBrowserDetails and WebBrowser 'mess' should be simplified</li>
- <li><a href="http://dev.vaadin.com/ticket/8167">#8167</a>: Verify contributor agreement for Bean Validation</li>
- <li><a href="http://dev.vaadin.com/ticket/8169">#8169</a>: Remove API deprecated in Vaadin 6 or earlier</li>
- <li><a href="http://dev.vaadin.com/ticket/8172">#8172</a>: WrappedResponse is missing javadoc</li>
- <li><a href="http://dev.vaadin.com/ticket/8173">#8173</a>: Depercate separate read through and write through modes in favor of buffered</li>
- <li><a href="http://dev.vaadin.com/ticket/8175">#8175</a>: Test using Firefox 9</li>
- <li><a href="http://dev.vaadin.com/ticket/8178">#8178</a>: Test using Chrome 16</li>
- <li><a href="http://dev.vaadin.com/ticket/8180">#8180</a>: Remove separate read through and write through modes in favor of buffered</li>
- <li><a href="http://dev.vaadin.com/ticket/8182">#8182</a>: A helper method for finding the first parent component of a given type</li>
- <li><a href="http://dev.vaadin.com/ticket/8190">#8190</a>: Recorder no longer waits for Vaadin application to load</li>
- <li><a href="http://dev.vaadin.com/ticket/8191">#8191</a>: AbstractField does take into account that field value can be modified by the converter</li>
- <li><a href="http://dev.vaadin.com/ticket/8192">#8192</a>: Wrong locale might be used if value is set before field is attached to the application</li>
- <li><a href="http://dev.vaadin.com/ticket/8226">#8226</a>: Don't throw exception from bootstrap if defaults have already been defined</li>
- <li><a href="http://dev.vaadin.com/ticket/8232">#8232</a>: Cached html pages cause problem with browser details request</li>
- <li><a href="http://dev.vaadin.com/ticket/8243">#8243</a>: Exception thrown in Root.init is swallowed</li>
- <li><a href="http://dev.vaadin.com/ticket/8274">#8274</a>: Communicating back to the server doesn't work</li>
- <li><a href="http://dev.vaadin.com/ticket/8277">#8277</a>: Convert low-level communication from client to server to support RPC</li>
- <li><a href="http://dev.vaadin.com/ticket/8278">#8278</a>: Support RPC for communication from client to server</li>
- <li><a href="http://dev.vaadin.com/ticket/8279">#8279</a>: Use JSON as the low level format of client to server RPC calls</li>
- <li><a href="http://dev.vaadin.com/ticket/8292">#8292</a>: Margin API should be cleaned up</li>
- <li><a href="http://dev.vaadin.com/ticket/8294">#8294</a>: Use HTML5 doctype</li>
- <li><a href="http://dev.vaadin.com/ticket/8304">#8304</a>: Support simple shared state for server to client communication</li>
- <li><a href="http://dev.vaadin.com/ticket/8312">#8312</a>: Remove client side conversion from percent size to pixel size</li>
- <li><a href="http://dev.vaadin.com/ticket/8313">#8313</a>: Provide a way of measuring in batches to reduce reflows</li>
- <li><a href="http://dev.vaadin.com/ticket/8323">#8323</a>: Create a client side paintable hierarchy</li>
- <li><a href="http://dev.vaadin.com/ticket/8324">#8324</a>: Split core components into a widget and a paintable class</li>
- <li><a href="http://dev.vaadin.com/ticket/8325">#8325</a>: Move ApplicationConnection.updateComponent to VAbstractPaintableWidget.updateFromUIDL</li>
- <li><a href="http://dev.vaadin.com/ticket/8326">#8326</a>: Remove support for changing widget class on the client side depending on variables set on the server side</li>
- <li><a href="http://dev.vaadin.com/ticket/8405">#8405</a>: Deprecate LoginForm as it does not save password in all browsers</li>
- <li><a href="http://dev.vaadin.com/ticket/8419">#8419</a>: Initially only send the part of a state which has non-default values</li>
- <li><a href="http://dev.vaadin.com/ticket/8420">#8420</a>: Support for listening to state changes on client side</li>
- <li><a href="http://dev.vaadin.com/ticket/8421">#8421</a>: Add support for @Delayed RPC methods</li>
- <li><a href="http://dev.vaadin.com/ticket/8422">#8422</a>: Debug console should show shared state updates</li>
- <li><a href="http://dev.vaadin.com/ticket/8425">#8425</a>: Move Tooltip handling from ApplicationConnection to AbstractComponentConnector</li>
- <li><a href="http://dev.vaadin.com/ticket/8426">#8426</a>: Implement server to client RPC</li>
- <li><a href="http://dev.vaadin.com/ticket/8429">#8429</a>: button.setClickShortcut(KeyCode.ENTER) does not work on child windows</li>
- <li><a href="http://dev.vaadin.com/ticket/8434">#8434</a>: Rename Paintable on client side to Connector</li>
- <li><a href="http://dev.vaadin.com/ticket/8435">#8435</a>: Refactor caption handling so it is not based on UIDL</li>
- <li><a href="http://dev.vaadin.com/ticket/8436">#8436</a>: Move code from AbstractComponentConnector.updateFromUIDL</li>
- <li><a href="http://dev.vaadin.com/ticket/8437">#8437</a>: Refactor Error communication and error handling on client side so it is not based on UIDL</li>
- <li><a href="http://dev.vaadin.com/ticket/8438">#8438</a>: Refactor event handler registration on client side so it is not based on UIDL</li>
- <li><a href="http://dev.vaadin.com/ticket/8439">#8439</a>: Deprecate ApplicationConnection.getPaintable(UIDL)</li>
- <li><a href="http://dev.vaadin.com/ticket/8440">#8440</a>: Rename @ClientWidget to @Component and move to client side</li>
- <li><a href="http://dev.vaadin.com/ticket/8441">#8441</a>: Shared state class can't be a nested static class</li>
- <li><a href="http://dev.vaadin.com/ticket/8442">#8442</a>: Generate and use JSON serializers for all classes referenced from other serializable classes</li>
- <li><a href="http://dev.vaadin.com/ticket/8443">#8443</a>: Automatically generate serializers for server to client RPC call parameter classes</li>
- <li><a href="http://dev.vaadin.com/ticket/8444">#8444</a>: Automatically generate serializers for client to server RPC call parameter classes</li>
- <li><a href="http://dev.vaadin.com/ticket/8448">#8448</a>: Replace Connector setId and setConnection with init method parameters</li>
- <li><a href="http://dev.vaadin.com/ticket/8455">#8455</a>: Root.getCurrentRoot returns null in Root.init</li>
- <li><a href="http://dev.vaadin.com/ticket/8462">#8462</a>: Moving component doesn't update its caption</li>
- <li><a href="http://dev.vaadin.com/ticket/8469">#8469</a>: Make it possible to create test Connectors/Widgets</li>
- <li><a href="http://dev.vaadin.com/ticket/8471">#8471</a>: Create test for serialization of bean inside bean</li>
- <li><a href="http://dev.vaadin.com/ticket/8478">#8478</a>: Don't use overflow: hidden by default</li>
- <li><a href="http://dev.vaadin.com/ticket/8500">#8500</a>: Component/Connector hierarchy information should be automatically sent to the client side</li>
- <li><a href="http://dev.vaadin.com/ticket/8501">#8501</a>: Client to server RPC calls for disabled/invisible components should be ignored</li>
- <li><a href="http://dev.vaadin.com/ticket/8502">#8502</a>: Remove Connector.setState</li>
- <li><a href="http://dev.vaadin.com/ticket/8504">#8504</a>: Support passing Connector references through the shared state</li>
- <li><a href="http://dev.vaadin.com/ticket/8507">#8507</a>: Handle cascading disabling of components on the client side</li>
- <li><a href="http://dev.vaadin.com/ticket/8510">#8510</a>: Support passing Resource references through the shared state</li>
- <li><a href="http://dev.vaadin.com/ticket/8515">#8515</a>: Component state does not support Collections</li>
- <li><a href="http://dev.vaadin.com/ticket/8522">#8522</a>: NPE on Root.getCurrentRoot() in LoginListener.onLogin()</li>
- <li><a href="http://dev.vaadin.com/ticket/8529">#8529</a>: Send an event when the parent is changed</li>
- <li><a href="http://dev.vaadin.com/ticket/8534">#8534</a>: JsonCodec breaks down when handling nulls</li>
- <li><a href="http://dev.vaadin.com/ticket/8540">#8540</a>: Infinite layout loop in EmbeddedFormExample</li>
- <li><a href="http://dev.vaadin.com/ticket/8542">#8542</a>: Not possible to use custom class loader in Application class</li>
- <li><a href="http://dev.vaadin.com/ticket/8544">#8544</a>: Remove error reporting as error notifications</li>
- <li><a href="http://dev.vaadin.com/ticket/8555">#8555</a>: Provide a listener method where components can modify their state before it is sent to the client</li>
- <li><a href="http://dev.vaadin.com/ticket/8574">#8574</a>: Support custom ClassLoader for Portlets</li>
- <li><a href="http://dev.vaadin.com/ticket/8579">#8579</a>: Components should send events on attach and detach - <b>VOTED FEATURE</b></li>
- <li><a href="http://dev.vaadin.com/ticket/8581">#8581</a>: Too many layout passes for SubWindowOrder test</li>
- <li><a href="http://dev.vaadin.com/ticket/8590">#8590</a>: Calls to server side RPC methods should not cause internal error if no receiver has been declared</li>
- <li><a href="http://dev.vaadin.com/ticket/8591">#8591</a>: Make server side rpc registration easier</li>
- <li><a href="http://dev.vaadin.com/ticket/8598">#8598</a>: Support for listening to given changes on client side</li>
- <li><a href="http://dev.vaadin.com/ticket/8599">#8599</a>: InitializableClientToServerRpc should not be an inner class of ServerRpc</li>
- <li><a href="http://dev.vaadin.com/ticket/8602">#8602</a>: Support arbitrary types for map keys</li>
- <li><a href="http://dev.vaadin.com/ticket/8615">#8615</a>: Redesign WebkitOverflowAutoFix</li>
- <li><a href="http://dev.vaadin.com/ticket/8618">#8618</a>: Infinite loop in AbstractErrorMessage.getErrorMessageForException</li>
- <li><a href="http://dev.vaadin.com/ticket/8636">#8636</a>: Code splitting not working as expected</li>
- <li><a href="http://dev.vaadin.com/ticket/8641">#8641</a>: Move @AcceptCriteria annotation to client side</li>
- <li><a href="http://dev.vaadin.com/ticket/8642">#8642</a>: Components have no way of knowing when a "full repaint" is needed.</li>
- <li><a href="http://dev.vaadin.com/ticket/8644">#8644</a>: Application is not serializable because of Application.classloader</li>
- <li><a href="http://dev.vaadin.com/ticket/8651">#8651</a>: UnknownComponent is not rendered</li>
- <li><a href="http://dev.vaadin.com/ticket/8652">#8652</a>: v-paintable should be v-connector</li>
- <li><a href="http://dev.vaadin.com/ticket/8655">#8655</a>: float[] and other array types do not work</li>
- <li><a href="http://dev.vaadin.com/ticket/8657">#8657</a>: double is encoded as float</li>
- <li><a href="http://dev.vaadin.com/ticket/8664">#8664</a>: AbstractComponentConnector removes non-primary css class names</li>
- <li><a href="http://dev.vaadin.com/ticket/8666">#8666</a>: RPC from server to client doesn't support Resources properly</li>
- <li><a href="http://dev.vaadin.com/ticket/8667">#8667</a>: Server should use types from RPC interface when deserializing</li>
- <li><a href="http://dev.vaadin.com/ticket/8668">#8668</a>: Server should not allow custom types to be used with changeVariables</li>
- <li><a href="http://dev.vaadin.com/ticket/8669">#8669</a>: State cannot include a "value" field</li>
- <li><a href="http://dev.vaadin.com/ticket/8670">#8670</a>: GateIn/eXo/Liferay 5 portlet support broken</li>
- <li><a href="http://dev.vaadin.com/ticket/8671">#8671</a>: Height incorrectly measured for Label with &lt;hr&gt;</li>
- <li><a href="http://dev.vaadin.com/ticket/8672">#8672</a>: Remove API deprecated in Vaadin 6 or earlier</li>
- <li><a href="http://dev.vaadin.com/ticket/8673">#8673</a>: Field named zIndex does not work in shared state</li>
- <li><a href="http://dev.vaadin.com/ticket/8674">#8674</a>: Horizontal/vertical layout that does minimal calculations</li>
- <li><a href="http://dev.vaadin.com/ticket/8675">#8675</a>: Support enums in shared state and as RPC parameters</li>
- <li><a href="http://dev.vaadin.com/ticket/8677">#8677</a>: Shared state should be encoded as the declared type</li>
- <li><a href="http://dev.vaadin.com/ticket/8682">#8682</a>: Fix box-sizing styling</li>
- <li><a href="http://dev.vaadin.com/ticket/8683">#8683</a>: Preserve package name for state serializers</li>
- <li><a href="http://dev.vaadin.com/ticket/8684">#8684</a>: Missing state serializer not gracefully handled</li>
- <li><a href="http://dev.vaadin.com/ticket/8685">#8685</a>: References to connectors that are not visible should not be sent to the client</li>
- <li><a href="http://dev.vaadin.com/ticket/8688">#8688</a>: CustomLayout stopped working</li>
- <li><a href="http://dev.vaadin.com/ticket/8698">#8698</a>: Component managed captions do not work with Vaadin 6 legacy components</li>
- <li><a href="http://dev.vaadin.com/ticket/8700">#8700</a>: Panel is empty in Liferay theme test</li>
- <li><a href="http://dev.vaadin.com/ticket/8708">#8708</a>: TextArea inside a component that becomes disabled looks enabled in IE8</li>
- <li><a href="http://dev.vaadin.com/ticket/8710">#8710</a>: Ensure that shared state types and RPC parameter types are Serializable</li>
- <li><a href="http://dev.vaadin.com/ticket/8711">#8711</a>: Ensure Vaadin build fails but not all widgetset compilations if shared classes are not serializable</li>
- <li><a href="http://dev.vaadin.com/ticket/8714">#8714</a>: Table throws NPE when selecting a tab containing a Table</li>
- <li><a href="http://dev.vaadin.com/ticket/8717">#8717</a>: Really bad layout performance in IE8</li>
- <li><a href="http://dev.vaadin.com/ticket/8719">#8719</a>: A component inside a disabled parent has v-disabled class name after parent has been enabled</li>
- <li><a href="http://dev.vaadin.com/ticket/8729">#8729</a>: Root.getComponentIterator returns an iterator with a null component during init</li>
- <li><a href="http://dev.vaadin.com/ticket/8735">#8735</a>: Panel setContent doesn't update client after initial rendering</li>
- <li><a href="http://dev.vaadin.com/ticket/8778">#8778</a>: Notification added from Application.terminalError not displayed</li>
- <li><a href="http://dev.vaadin.com/ticket/8784">#8784</a>: Class level javadoc of com.vaadin.ui.Window is incorrect for Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/8785">#8785</a>: Rendering an Upload component in the initial layout fails in Liferay</li>
- <li><a href="http://dev.vaadin.com/ticket/8791">#8791</a>: Missing genericization for Property class as method parameter</li>
- <li><a href="http://dev.vaadin.com/ticket/8794">#8794</a>: FormLayout: Uncaught client side exception</li>
- <li><a href="http://dev.vaadin.com/ticket/8796">#8796</a>: Hierarchy problem with CustomFieldConnector</li>
- <li><a href="http://dev.vaadin.com/ticket/8797">#8797</a>: Hierarchy problem with CustomFieldConnector</li>
- <li><a href="http://dev.vaadin.com/ticket/8804">#8804</a>: Component hierarchy broken in reopened PopupView</li>
- <li><a href="http://dev.vaadin.com/ticket/8819">#8819</a>: VScrollTable: Uncaught client side exceptions</li>
- <li><a href="http://dev.vaadin.com/ticket/8829">#8829</a>: AbstractInMemoryContainer should create a UnmodifieableList rather than an unmodifiableCollection</li>
- <li><a href="http://dev.vaadin.com/ticket/8832">#8832</a>: setContent() does not request paint</li>
- <li><a href="http://dev.vaadin.com/ticket/8845">#8845</a>: Label implements Comparable but cannot be compared to another Label</li>
- <li><a href="http://dev.vaadin.com/ticket/8859">#8859</a>: Implement view and navigation framework</li>
- <li><a href="http://dev.vaadin.com/ticket/8879">#8879</a>: Send type info only for legacy messages</li>
- <li><a href="http://dev.vaadin.com/ticket/8888">#8888</a>: Support wrapping javascript widgets</li>
- <li><a href="http://dev.vaadin.com/ticket/8889">#8889</a>: AbstractField.setPropertyDataSource silently ignores throwables</li>
- <li><a href="http://dev.vaadin.com/ticket/8891">#8891</a>: Transient red "Communication Problem" error appears when clicking on a Link</li>
- <li><a href="http://dev.vaadin.com/ticket/8907">#8907</a>: Split Root/Region and Page (browser window/tab)</li>
- <li><a href="http://dev.vaadin.com/ticket/8908">#8908</a>: Rename Root to UI</li>
- <li><a href="http://dev.vaadin.com/ticket/8934">#8934</a>: There should be a "shared" package for classes common to client and server</li>
- <li><a href="http://dev.vaadin.com/ticket/8943">#8943</a>: Components that are detached and attached cannot receive RPC calls</li>
- <li><a href="http://dev.vaadin.com/ticket/8955">#8955</a>: Replace @VaadinApache2LicenseForJavaFiles@ with actual apache 2 license</li>
- <li><a href="http://dev.vaadin.com/ticket/8967">#8967</a>: Broken reference images: LayoutTesterApplication</li>
- <li><a href="http://dev.vaadin.com/ticket/8977">#8977</a>: Update mini tutorials to use Notification.show</li>
- <li><a href="http://dev.vaadin.com/ticket/8980">#8980</a>: Make executeJavascript use new Function(code) instead of eval(code)</li>
- <li><a href="http://dev.vaadin.com/ticket/8983">#8983</a>: Include SuperDevMode support when GWT 2.5+ is used - <b>VOTED FEATURE</b></li>
- <li><a href="http://dev.vaadin.com/ticket/8985">#8985</a>: Properly support setWidgetEnabled for ListSelectConnector</li>
- <li><a href="http://dev.vaadin.com/ticket/8986">#8986</a>: Properly support setWidgetEnabled for NativeSelectConnector</li>
- <li><a href="http://dev.vaadin.com/ticket/8987">#8987</a>: Properly support setWidgetEnabled for OptionGroupConnector</li>
- <li><a href="http://dev.vaadin.com/ticket/8988">#8988</a>: Properly support setWidgetEnabled for OptionGroupConnector</li>
- <li><a href="http://dev.vaadin.com/ticket/8989">#8989</a>: Properly support setWidgetEnabled for TwinColSelectConnector</li>
- <li><a href="http://dev.vaadin.com/ticket/8990">#8990</a>: Label.setValue should not update the data source</li>
- <li><a href="http://dev.vaadin.com/ticket/8991">#8991</a>: Label does not support converters</li>
- <li><a href="http://dev.vaadin.com/ticket/8992">#8992</a>: ConverterFactory is always retrieved from Application.getCurrentApplication</li>
- <li><a href="http://dev.vaadin.com/ticket/9004">#9004</a>: Extra scrollbar in Liferay theme demo in IE8/IE9</li>
- <li><a href="http://dev.vaadin.com/ticket/9005">#9005</a>: CustomField calls attach for its content multiple times</li>
- <li><a href="http://dev.vaadin.com/ticket/9006">#9006</a>: Form calls attach for its content multiple times</li>
- <li><a href="http://dev.vaadin.com/ticket/9007">#9007</a>: Broken reference images: TabKeyboardNavigation</li>
- <li><a href="http://dev.vaadin.com/ticket/9011">#9011</a>: Extra attach/detach calls to sub window</li>
- <li><a href="http://dev.vaadin.com/ticket/9017">#9017</a>: Browser window size is not reported to Page unless browser is resized</li>
- <li><a href="http://dev.vaadin.com/ticket/9018">#9018</a>: Exceptions in RPC handler causes Internal Error</li>
- <li><a href="http://dev.vaadin.com/ticket/9021">#9021</a>: Change name & logic of Table.setSortDisabled() to ".setSortEnabled"</li>
- <li><a href="http://dev.vaadin.com/ticket/9022">#9022</a>: NativeButton/Button setTabIndex does not work</li>
- <li><a href="http://dev.vaadin.com/ticket/9026">#9026</a>: Only send the part of a connector state that has changed</li>
- <li><a href="http://dev.vaadin.com/ticket/9029">#9029</a>: Change Foo.getCurrentFoo() to Foo.getCurrent()</li>
- <li><a href="http://dev.vaadin.com/ticket/9031">#9031</a>: Don't use Root.getCaption() for bootstrap HTML title tag</li>
- <li><a href="http://dev.vaadin.com/ticket/9032">#9032</a>: ComponentState should be AbstractComponentState</li>
- <li><a href="http://dev.vaadin.com/ticket/9034">#9034</a>: Upload throws NPE because of missing connector</li>
- <li><a href="http://dev.vaadin.com/ticket/9044">#9044</a>: Allow defining that a Connector type depends on external javascript or CSS</li>
- <li><a href="http://dev.vaadin.com/ticket/9048">#9048</a>: @Javascript should work for portlets and independent of deployment configuration</li>
- <li><a href="http://dev.vaadin.com/ticket/9051">#9051</a>: AbsoluteLayout should add child component style names to wrapper div</li>
- <li><a href="http://dev.vaadin.com/ticket/9053">#9053</a>: AbstractMedia is not abstract</li>
- <li><a href="http://dev.vaadin.com/ticket/9054">#9054</a>: AbstractJavascriptComponent is not abstract</li>
- <li><a href="http://dev.vaadin.com/ticket/9055">#9055</a>: Hard to get Navigator from View</li>
- <li><a href="http://dev.vaadin.com/ticket/9056">#9056</a>: Meaning of navigateTo() differs in Navigator and View</li>
- <li><a href="http://dev.vaadin.com/ticket/9059">#9059</a>: Support relative @JavaScript paths in portlets</li>
- <li><a href="http://dev.vaadin.com/ticket/9060">#9060</a>: Navigator needs a way to handle missing Views</li>
- <li><a href="http://dev.vaadin.com/ticket/9065">#9065</a>: Integrate checkstyle into framework build</li>
- <li><a href="http://dev.vaadin.com/ticket/9066">#9066</a>: Change Notifcations to not use HTML by default.</li>
- <li><a href="http://dev.vaadin.com/ticket/9067">#9067</a>: Table row sizing broken after 6.8 mass merge</li>
- <li><a href="http://dev.vaadin.com/ticket/9071">#9071</a>: Remove API deprecated in Vaadin 6 or earlier</li>
- <li><a href="http://dev.vaadin.com/ticket/9072">#9072</a>: Change existing constants from integers to enums</li>
- <li><a href="http://dev.vaadin.com/ticket/9073">#9073</a>: Browser window size shouls be included in browser details request</li>
- <li><a href="http://dev.vaadin.com/ticket/9074">#9074</a>: Field value is not sent to server when navigating with browser</li>
- <li><a href="http://dev.vaadin.com/ticket/9076">#9076</a>: FieldGroup.bindMemberFields(..) ignores configuration on fields</li>
- <li><a href="http://dev.vaadin.com/ticket/9077">#9077</a>: TabSheet tab scrolls on mousemove</li>
- <li><a href="http://dev.vaadin.com/ticket/9078">#9078</a>: Provide com.vaadin.Vaadin.gwt.xml for use in client side projects</li>
- <li><a href="http://dev.vaadin.com/ticket/9081">#9081</a>: VConsole.log() throws NPE when used from a client side module</li>
- <li><a href="http://dev.vaadin.com/ticket/9083">#9083</a>: Build a minimal vaadin jar</li>
- <li><a href="http://dev.vaadin.com/ticket/9084">#9084</a>: Merge GWT related changes to Vaadin 7 git repository</li>
- <li><a href="http://dev.vaadin.com/ticket/9085">#9085</a>: Add @Override for interface implementations</li>
- <li><a href="http://dev.vaadin.com/ticket/9086">#9086</a>: Update getting started to Java6</li>
- <li><a href="http://dev.vaadin.com/ticket/9087">#9087</a>: Split Embedded into several components</li>
- <li><a href="http://dev.vaadin.com/ticket/9088">#9088</a>: Table cell tooltip only shown for cell element</li>
- <li><a href="http://dev.vaadin.com/ticket/9089">#9089</a>: The v-connector class name should not be used in themes</li>
- <li><a href="http://dev.vaadin.com/ticket/9096">#9096</a>: Run JavaScript RPC callbacks with this pointing to the connector wrapper object</li>
- <li><a href="http://dev.vaadin.com/ticket/9102">#9102</a>: Vaadin 7.0.0.alpha3 contains GWT (and libraries) without sources</li>
- <li><a href="http://dev.vaadin.com/ticket/9106">#9106</a>: SerializerMapGenerator.findTypesWithExistingSerializers checks for wrong method signature</li>
- <li><a href="http://dev.vaadin.com/ticket/9121">#9121</a>: Vaadin 7 as OSGI in Glassfish 3.1.2 fails after restart</li>
- <li><a href="http://dev.vaadin.com/ticket/9122">#9122</a>: Decide whether to officially support Firefox ESR in Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/9156">#9156</a>: Communication synchronization should be on a dedicated lock object not the Application monitor</li>
- <li><a href="http://dev.vaadin.com/ticket/9168">#9168</a>: Redesign Portlet url handling</li>
- <li><a href="http://dev.vaadin.com/ticket/9172">#9172</a>: Tooltip not working in Window</li>
- <li><a href="http://dev.vaadin.com/ticket/9173">#9173</a>: Form validation error is used as tooltip for all fields in the form</li>
- <li><a href="http://dev.vaadin.com/ticket/9175">#9175</a>: Label.toString throws UnsupportedOperationException</li>
- <li><a href="http://dev.vaadin.com/ticket/9179">#9179</a>: Getting file name as Null from Upload component of Vaadin 7.0.0.alpha* version</li>
- <li><a href="http://dev.vaadin.com/ticket/9182">#9182</a>: Split Panel: Strange order of sub-components in DOM resulting in wrong order for screenreader users</li>
- <li><a href="http://dev.vaadin.com/ticket/9196">#9196</a>: CustomLayout does not show its content until addComponent</li>
- <li><a href="http://dev.vaadin.com/ticket/9201">#9201</a>: Vaadin 7 compatible ColorPicker</li>
- <li><a href="http://dev.vaadin.com/ticket/9205">#9205</a>: Warning for duplicate connector resource if opening multiple tabs</li>
- <li><a href="http://dev.vaadin.com/ticket/9209">#9209</a>: JavaScript connector can't translate vaadin urls</li>
- <li><a href="http://dev.vaadin.com/ticket/9211">#9211</a>: Make it easier to use ResourceReference</li>
- <li><a href="http://dev.vaadin.com/ticket/9212">#9212</a>: Duplicated code for getting URL for Resource</li>
- <li><a href="http://dev.vaadin.com/ticket/9217">#9217</a>: Add support for detecting IE10</li>
- <li><a href="http://dev.vaadin.com/ticket/9218">#9218</a>: Install test machines for running tests on IE 10</li>
- <li><a href="http://dev.vaadin.com/ticket/9220">#9220</a>: Add a container element for all overlays</li>
- <li><a href="http://dev.vaadin.com/ticket/9222">#9222</a>: Provide a servlet which compiles SCSS -&gt; CSS on the fly</li>
- <li><a href="http://dev.vaadin.com/ticket/9223">#9223</a>: Integrate SASS compiler into Vaadin</li>
- <li><a href="http://dev.vaadin.com/ticket/9228">#9228</a>: Replace updateState by beforeSendState(boolean initial)</li>
- <li><a href="http://dev.vaadin.com/ticket/9249">#9249</a>: Add getLocation to Page</li>
- <li><a href="http://dev.vaadin.com/ticket/9254">#9254</a>: Exception: Type null is not a supported internal type in JsonCodec</li>
- <li><a href="http://dev.vaadin.com/ticket/9265">#9265</a>: Implement basic heartbeat</li>
- <li><a href="http://dev.vaadin.com/ticket/9266">#9266</a>: Add support for heartbeat not extending session</li>
- <li><a href="http://dev.vaadin.com/ticket/9268">#9268</a>: Decide on default URI format for navigation</li>
- <li><a href="http://dev.vaadin.com/ticket/9273">#9273</a>: Allow add-ons to integrate with servlet/portlet functions without sublcassing the servlet/portlet</li>
- <li><a href="http://dev.vaadin.com/ticket/9274">#9274</a>: Let add-ons modify the bootstrap page</li>
- <li><a href="http://dev.vaadin.com/ticket/9278">#9278</a>: Fix dependencies from shared to server/client code</li>
- <li><a href="http://dev.vaadin.com/ticket/9279">#9279</a>: Fix dependencies from server to client code</li>
- <li><a href="http://dev.vaadin.com/ticket/9280">#9280</a>: Preserve this reference when calling RPC methods.</li>
- <li><a href="http://dev.vaadin.com/ticket/9282">#9282</a>: Removing extension throws client-side exception</li>
- <li><a href="http://dev.vaadin.com/ticket/9283">#9283</a>: Compile SASS parser using JavaCC during build</li>
- <li><a href="http://dev.vaadin.com/ticket/9285">#9285</a>: Replace overloaded addListener with more specific addClickListener etc</li>
- <li><a href="http://dev.vaadin.com/ticket/9292">#9292</a>: Allow JavaScriptConnectors to get unRegister events</li>
- <li><a href="http://dev.vaadin.com/ticket/9293">#9293</a>: Rename the JavaScript callback concept to function instead</li>
- <li><a href="http://dev.vaadin.com/ticket/9294">#9294</a>: Nested TabSheets and hideTabs(true)</li>
- <li><a href="http://dev.vaadin.com/ticket/9295">#9295</a>: Review assorted Vaadin 7 patches not yet committed</li>
- <li><a href="http://dev.vaadin.com/ticket/9296">#9296</a>: Review Vaadin 7 tickets and wiki plans that require API changes</li>
- <li><a href="http://dev.vaadin.com/ticket/9297">#9297</a>: Make it possible to delegate state changes to widget automatically</li>
- <li><a href="http://dev.vaadin.com/ticket/9298">#9298</a>: AbstractComponentContainerConnector should not implement onConnectorHierarchyChange</li>
- <li><a href="http://dev.vaadin.com/ticket/9299">#9299</a>: Package Vaadin as many jars</li>
- <li><a href="http://dev.vaadin.com/ticket/9302">#9302</a>: Update Vaadin IPC for Liferay to support Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/9304">#9304</a>: Migrate Slider to Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/9312">#9312</a>: Make getRpcProxy protected</li>
- <li><a href="http://dev.vaadin.com/ticket/9315">#9315</a>: Make the getState method protected</li>
- <li><a href="http://dev.vaadin.com/ticket/9317">#9317</a>: Review SASS compiler API</li>
- <li><a href="http://dev.vaadin.com/ticket/9318">#9318</a>: Reindeer cannot be compiled on Windows</li>
- <li><a href="http://dev.vaadin.com/ticket/9322">#9322</a>: ApplicationConnection should have a method to suspend "rendering" for a short period of time</li>
- <li><a href="http://dev.vaadin.com/ticket/9324">#9324</a>: Support using public fields in state classes</li>
- <li><a href="http://dev.vaadin.com/ticket/9325">#9325</a>: Handle requestRepaint automatically</li>
- <li><a href="http://dev.vaadin.com/ticket/9327">#9327</a>: ApplicationConnection needs to have API "communication activity listeners"</li>
- <li><a href="http://dev.vaadin.com/ticket/9333">#9333</a>: Server-side enum decode throws ClassCastException</li>
- <li><a href="http://dev.vaadin.com/ticket/9334">#9334</a>: Update wiki tutorials once beta1 is out</li>
- <li><a href="http://dev.vaadin.com/ticket/9337">#9337</a>: Remove PortalDefaultWidgetSet</li>
- <li><a href="http://dev.vaadin.com/ticket/9340">#9340</a>: Add accessors for servlet init parameters to DeploymentConfiguration</li>
- <li><a href="http://dev.vaadin.com/ticket/9341">#9341</a>: Pass DeploymentConfiguration to Application</li>
- <li><a href="http://dev.vaadin.com/ticket/9342">#9342</a>: Add EventRouter support to AbstractExtension</li>
- <li><a href="http://dev.vaadin.com/ticket/9343">#9343</a>: Abort widgetset compile for conflicting @Connect mappings</li>
- <li><a href="http://dev.vaadin.com/ticket/9346">#9346</a>: SASS compiler should look for themes in the vaadin.jar</li>
- <li><a href="http://dev.vaadin.com/ticket/9347">#9347</a>: SASS compiler fails when mixin w/ args has nested blocks</li>
- <li><a href="http://dev.vaadin.com/ticket/9357">#9357</a>: Simplify CSSLayout</li>
- <li><a href="http://dev.vaadin.com/ticket/9367">#9367</a>: Remove all references to fragment from Navigator API</li>
- <li><a href="http://dev.vaadin.com/ticket/9371">#9371</a>: Unify GWT code generators</li>
- <li><a href="http://dev.vaadin.com/ticket/9372">#9372</a>: Root.getCurrent() returns null in LoginForm LoginListener</li>
- <li><a href="http://dev.vaadin.com/ticket/9378">#9378</a>: Rename requestRepaint to markAsDirty</li>
- <li><a href="http://dev.vaadin.com/ticket/9380">#9380</a>: SASSCompiler should support custom list functions</li>
- <li><a href="http://dev.vaadin.com/ticket/9382">#9382</a>: DeploymentConfiguration should not be part of Application</li>
- <li><a href="http://dev.vaadin.com/ticket/9392">#9392</a>: Move widget classes from c.v.c.ui.&lt;component&gt; to c.v.c.ui</li>
- <li><a href="http://dev.vaadin.com/ticket/9399">#9399</a>: Remove custom source file checkers</li>
- <li><a href="http://dev.vaadin.com/ticket/9400">#9400</a>: TabSheet broken</li>
- <li><a href="http://dev.vaadin.com/ticket/9402">#9402</a>: Remove Application</li>
- <li><a href="http://dev.vaadin.com/ticket/9406">#9406</a>: Client NullPointerException on Image shared state update</li>
- <li><a href="http://dev.vaadin.com/ticket/9407">#9407</a>: Using a variable color as a parameter for the lighten function alters the parameter as well</li>
- <li><a href="http://dev.vaadin.com/ticket/9408">#9408</a>: Referencing and setting the same SASS variable on the same line causes a StackOverflowException</li>
- <li><a href="http://dev.vaadin.com/ticket/9409">#9409</a>: If a temporary variable is used in SASS compile another variable, it needs to be used in the output in order for both to be compiled</li>
- <li><a href="http://dev.vaadin.com/ticket/9410">#9410</a>: Interpolation doesn't work in property name</li>
- <li><a href="http://dev.vaadin.com/ticket/9411">#9411</a>: Mixin parameters don't support values with spaces in them</li>
- <li><a href="http://dev.vaadin.com/ticket/9413">#9413</a>: Version is wrong in latest nightly</li>
- <li><a href="http://dev.vaadin.com/ticket/9414">#9414</a>: Mixin name can't be followed by a whitespace before the parameter braces</li>
- <li><a href="http://dev.vaadin.com/ticket/9416">#9416</a>: Rename Navigator.[un]registerProvider()</li>
- <li><a href="http://dev.vaadin.com/ticket/9419">#9419</a>: Replace ApplicationResource with ConnectorResource</li>
- <li><a href="http://dev.vaadin.com/ticket/9420">#9420</a>: Container.Indexed.getIdByIndex error behavior</li>
- <li><a href="http://dev.vaadin.com/ticket/9422">#9422</a>: State change event for fields with default value is never sent</li>
- <li><a href="http://dev.vaadin.com/ticket/9423">#9423</a>: Don't show unsupported browser message for supported Android versions</li>
- <li><a href="http://dev.vaadin.com/ticket/9431">#9431</a>: Merge com.vaadin.terminal and com.vaadin.terminal.gwt into com.vaadin.server</li>
- <li><a href="http://dev.vaadin.com/ticket/9432">#9432</a>: Rename com.vaadin.terminal.gwt.client to com.vaadin.client</li>
- <li><a href="http://dev.vaadin.com/ticket/9434">#9434</a>: Vaadin6Component should be renamed for consistency</li>
- <li><a href="http://dev.vaadin.com/ticket/9436">#9436</a>: Merge gwt-maven-plugin and vaadin-maven-plugin</li>
- <li><a href="http://dev.vaadin.com/ticket/9437">#9437</a>: Vaadin Maven Plug-in should use Vaadin dependencies instead of GWT dependencies</li>
- <li><a href="http://dev.vaadin.com/ticket/9438">#9438</a>: Package a zip containing all Vaadin jars and dependencies</li>
- <li><a href="http://dev.vaadin.com/ticket/9441">#9441</a>: Empty string should be used instead of null to denote "no fragment parameters" in Navigator</li>
- <li><a href="http://dev.vaadin.com/ticket/9442">#9442</a>: Navigator should have a method to navigate to the current location</li>
- <li><a href="http://dev.vaadin.com/ticket/9443">#9443</a>: Refactor UI bootstrap</li>
- <li><a href="http://dev.vaadin.com/ticket/9444">#9444</a>: LegacyPaint.paint causes component to be marked dirty again</li>
- <li><a href="http://dev.vaadin.com/ticket/9445">#9445</a>: Remove @EagerInit</li>
- <li><a href="http://dev.vaadin.com/ticket/9450">#9450</a>: Run server-side tests with assertions enabled</li>
- <li><a href="http://dev.vaadin.com/ticket/9452">#9452</a>: AbstractCommunicationManager.getDirtyVisibleConnectors() throws ConcurrentModificationException in some cases</li>
- <li><a href="http://dev.vaadin.com/ticket/9460">#9460</a>: Rename servlet and portlet to VaadinServlet and VaadinPortlet</li>
- <li><a href="http://dev.vaadin.com/ticket/9461">#9461</a>: Generated project should be Vaadin 7 beta 1 compatible</li>
- <li><a href="http://dev.vaadin.com/ticket/9466">#9466</a>: Use jetty-runner instead of DemoLauncher to launch test server</li>
- <li><a href="http://dev.vaadin.com/ticket/9469">#9469</a>: Unify ThreadLocal handling</li>
- <li><a href="http://dev.vaadin.com/ticket/9471">#9471</a>: SASS compiler should support the @each directive</li>
- <li><a href="http://dev.vaadin.com/ticket/9472">#9472</a>: SQLContainer.getIdByIndex broken</li>
- <li><a href="http://dev.vaadin.com/ticket/9474">#9474</a>: A "ui" init parameter should work aswell as "UI"</li>
- <li><a href="http://dev.vaadin.com/ticket/9475">#9475</a>: problems with components in accordion</li>
- <li><a href="http://dev.vaadin.com/ticket/9481">#9481</a>: Calling AbstractField.toString keeps creating warning log messages</li>
- <li><a href="http://dev.vaadin.com/ticket/9482">#9482</a>: SASS compiler should support the @if directive</li>
- <li><a href="http://dev.vaadin.com/ticket/9485">#9485</a>: SplitPanel reverse split position is broken</li>
- <li><a href="http://dev.vaadin.com/ticket/9489">#9489</a>: SassCompiler @each should be able to iterate over $list</li>
- <li><a href="http://dev.vaadin.com/ticket/9492">#9492</a>: Mixin parameters not available for interpolation</li>
- <li><a href="http://dev.vaadin.com/ticket/9494">#9494</a>: Write "Creating a custom (application) theme using SASS" tutorial</li>
- <li><a href="http://dev.vaadin.com/ticket/9495">#9495</a>: Write "Compiling SASS to CSS manually" tutorial</li>
- <li><a href="http://dev.vaadin.com/ticket/9497">#9497</a>: Write "Automatically compiling SASS during development" tutorial</li>
- <li><a href="http://dev.vaadin.com/ticket/9498">#9498</a>: Write "Reducing server round trips for components" tutorial</li>
- <li><a href="http://dev.vaadin.com/ticket/9499">#9499</a>: Write "Dynamically updating state before sending changes to client" tutorial</li>
- <li><a href="http://dev.vaadin.com/ticket/9500">#9500</a>: Write "Modifying the startup page in an add-on" tutorial</li>
- <li><a href="http://dev.vaadin.com/ticket/9501">#9501</a>: Write "Modifying the startup page in an application" tutorial</li>
- <li><a href="http://dev.vaadin.com/ticket/9503">#9503</a>: Write "Cleaning up resources in a UI" tutorial</li>
- <li><a href="http://dev.vaadin.com/ticket/9505">#9505</a>: Add getCurrent() for servlet, portlet, service, request and response.</li>
- <li><a href="http://dev.vaadin.com/ticket/9509">#9509</a>: TreeTable renders wrong items</li>
- <li><a href="http://dev.vaadin.com/ticket/9511">#9511</a>: Rename ViewChangeListener methods</li>
- <li><a href="http://dev.vaadin.com/ticket/9513">#9513</a>: Create UIProvider for easily opening popups.</li>
- <li><a href="http://dev.vaadin.com/ticket/9514">#9514</a>: Allow storing values in VaadinSession</li>
- <li><a href="http://dev.vaadin.com/ticket/9520">#9520</a>: vaadin-application-archetype uses deprecated API</li>
- <li><a href="http://dev.vaadin.com/ticket/9522">#9522</a>: Don't use Resource with the Page.open API</li>
- <li><a href="http://dev.vaadin.com/ticket/9524">#9524</a>: FileDownloadExtension which avoids problems with file downloads</li>
- <li><a href="http://dev.vaadin.com/ticket/9528">#9528</a>: Precompiled theme is version 9.9.9</li>
- <li><a href="http://dev.vaadin.com/ticket/9536">#9536</a>: Vaadin6Connector should be renamed for consistency</li>
- <li><a href="http://dev.vaadin.com/ticket/9539">#9539</a>: Use org.json instead of com.vaadin.external.json</li>
- <li><a href="http://dev.vaadin.com/ticket/9542">#9542</a>: Add removeAllValidators() to Field or Validatable</li>
- <li><a href="http://dev.vaadin.com/ticket/9543">#9543</a>: Components that wrap a single other component should not implement ComponentContainer</li>
- <li><a href="http://dev.vaadin.com/ticket/9544">#9544</a>: New theme should create a SASS theme</li>
- <li><a href="http://dev.vaadin.com/ticket/9545">#9545</a>: SASS mixin nesting bugs with mixin</li>
- <li><a href="http://dev.vaadin.com/ticket/9546">#9546</a>: SASS should support @include $var</li>
- <li><a href="http://dev.vaadin.com/ticket/9549">#9549</a>: Investigate whether the initial Navigator.navigate() call could be automated</li>
- <li><a href="http://dev.vaadin.com/ticket/9550">#9550</a>: Bind a Navigator instance to a UI instance.</li>
- <li><a href="http://dev.vaadin.com/ticket/9551">#9551</a>: Vaadin-maven-plugin does not add validation API to compile path</li>
- <li><a href="http://dev.vaadin.com/ticket/9552">#9552</a>: Extra scrollbars for Accordion in SplitPanel in IE8</li>
- <li><a href="http://dev.vaadin.com/ticket/9553">#9553</a>: /APP should not use UIProviders</li>
- <li><a href="http://dev.vaadin.com/ticket/9555">#9555</a>: Icons do not work in Vertical/HorizontalLayout</li>
- <li><a href="http://dev.vaadin.com/ticket/9556">#9556</a>: Portal support broken</li>
- <li><a href="http://dev.vaadin.com/ticket/9557">#9557</a>: Vaadin jars do not contain Import-Package in MANIFEST.MF</li>
- <li><a href="http://dev.vaadin.com/ticket/9559">#9559</a>: Spacing broken in GridLayout</li>
- <li><a href="http://dev.vaadin.com/ticket/9561">#9561</a>: @DelegateToWidget not always working if createWidget is overridden</li>
- <li><a href="http://dev.vaadin.com/ticket/9565">#9565</a>: Window themes are broken in Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/9572">#9572</a>: Extra scrollbars in TabSheet and Accordion in IE8</li>
- <li><a href="http://dev.vaadin.com/ticket/9576">#9576</a>: Vertical/HorizontalLayout slot should get style name from child</li>
- <li><a href="http://dev.vaadin.com/ticket/9577">#9577</a>: DateFieldExtendedRange test fails</li>
- <li><a href="http://dev.vaadin.com/ticket/9578">#9578</a>: Extra scrollbars in PopupViewOffScreen in IE8</li>
- <li><a href="http://dev.vaadin.com/ticket/9579">#9579</a>: RichTextAreaScrolling throws client side exception in Chrome/Safari/Opera</li>
- <li><a href="http://dev.vaadin.com/ticket/9580">#9580</a>: VaadinServlet should not send a redirect on failed heartbeat request</li>
- <li><a href="http://dev.vaadin.com/ticket/9581">#9581</a>: Infinite recursion in LegacyApplication.terminalError</li>
- <li><a href="http://dev.vaadin.com/ticket/9582">#9582</a>: TabsheetScrolling test broken</li>
- <li><a href="http://dev.vaadin.com/ticket/9586">#9586</a>: Servlet integration tests broken</li>
- <li><a href="http://dev.vaadin.com/ticket/9588">#9588</a>: Vaadin-client-compiler jar is missing CodeServer classes</li>
- <li><a href="http://dev.vaadin.com/ticket/9589">#9589</a>: SassCompiler should support microsoft extensions etc</li>
- <li><a href="http://dev.vaadin.com/ticket/9591">#9591</a>: Rename onVaadinSessionStarted() in VaadinServlet and VaadinPortlet</li>
- <li><a href="http://dev.vaadin.com/ticket/9593">#9593</a>: vaadin-maven-plugin can not compile widgetset without vaadin-client-precompiled</li>
- <li><a href="http://dev.vaadin.com/ticket/9596">#9596</a>: HorizontalLayout fails to calculate relative sized children correctly</li>
- <li><a href="http://dev.vaadin.com/ticket/9597">#9597</a>: Maven plugin should update .gwt.xml in src folder, not in target</li>
- <li><a href="http://dev.vaadin.com/ticket/9598">#9598</a>: Rename themes-compiled package to themes</li>
- <li><a href="http://dev.vaadin.com/ticket/9600">#9600</a>: FieldGroup: missing propagation of read-only state in setReadOnly()</li>
- <li><a href="http://dev.vaadin.com/ticket/9604">#9604</a>: Unable to compile themes on the fly</li>
- <li><a href="http://dev.vaadin.com/ticket/9605">#9605</a>: Packages incorrectly require servlet-api 2.5</li>
- <li><a href="http://dev.vaadin.com/ticket/9606">#9606</a>: VaadinServlet.serveOnTheFlyCompiledScss doesn't find scss files from vaadin-themes JAR in Windows</li>
- <li><a href="http://dev.vaadin.com/ticket/9608">#9608</a>: Package modified/rebased dependencies as separate packages and remove them from vaadin-* jar files</li>
- <li><a href="http://dev.vaadin.com/ticket/9609">#9609</a>: Modified Flute jar is declared as an (invalid) dependency</li>
- <li><a href="http://dev.vaadin.com/ticket/9612">#9612</a>: Create vaadin-shared-deps.jar</li>
- <li><a href="http://dev.vaadin.com/ticket/9613">#9613</a>: Create an all-javadoc package</li>
- <li><a href="http://dev.vaadin.com/ticket/9618">#9618</a>: Label: setPropertyDataSource() won't update Label value on client</li>
- <li><a href="http://dev.vaadin.com/ticket/9619">#9619</a>: Multi-servlet deployment configuration broken</li>
- <li><a href="http://dev.vaadin.com/ticket/9624">#9624</a>: Vaadin 7 Beta 1 reports the wrong widget build version</li>
- <li><a href="http://dev.vaadin.com/ticket/9625">#9625</a>: Change "close" to "cleanup" in UI.CloseListener and others</li>
- <li><a href="http://dev.vaadin.com/ticket/9628">#9628</a>: Allow specifying UIProvider using a servlet parameter</li>
- <li><a href="http://dev.vaadin.com/ticket/9633">#9633</a>: Rename the WrappedXYZ classes</li>
- <li><a href="http://dev.vaadin.com/ticket/9635">#9635</a>: Add listeners for initialized and destroyed VaadinSession</li>
- <li><a href="http://dev.vaadin.com/ticket/9637">#9637</a>: Move UIProvider logic from VaadinSession to VaadinService</li>
- <li><a href="http://dev.vaadin.com/ticket/9638">#9638</a>: Remove VaadinServletSession</li>
- <li><a href="http://dev.vaadin.com/ticket/9639">#9639</a>: Support defining UIProviders as servlet/portlet init parameters</li>
- <li><a href="http://dev.vaadin.com/ticket/9640">#9640</a>: java.io.NotSerializableException: org.json.JSONObject</li>
- <li><a href="http://dev.vaadin.com/ticket/9642">#9642</a>: Make UIProvider easier to use</li>
- <li><a href="http://dev.vaadin.com/ticket/9644">#9644</a>: Write tutorial "Setting and reading Cookies"</li>
- <li><a href="http://dev.vaadin.com/ticket/9645">#9645</a>: Write tutorial "Setting and reading session attributes"</li>
- <li><a href="http://dev.vaadin.com/ticket/9646">#9646</a>: Write tutorial "Handling logout"</li>
- <li><a href="http://dev.vaadin.com/ticket/9647">#9647</a>: Delete ScssServlet</li>
- <li><a href="http://dev.vaadin.com/ticket/9648">#9648</a>: Multiple Vaadin portlets on the same page does not work</li>
- <li><a href="http://dev.vaadin.com/ticket/9652">#9652</a>: SessionExpired when embedding UIs in a HTML page</li>
- <li><a href="http://dev.vaadin.com/ticket/9654">#9654</a>: All thread locals should be cleared at the beginning of any request</li>
- <li><a href="http://dev.vaadin.com/ticket/9655">#9655</a>: Add getWrappedSession method that does not create a new session</li>
- <li><a href="http://dev.vaadin.com/ticket/9656">#9656</a>: Session is not locked during browser details request</li>
- <li><a href="http://dev.vaadin.com/ticket/9658">#9658</a>: Change VaadinService to be an abstract class</li>
- <li><a href="http://dev.vaadin.com/ticket/9684">#9684</a>: requestRepaint deprecation message should tell that requestRepaint is rarely needed anymore</li>
- <li><a href="http://dev.vaadin.com/ticket/9687">#9687</a>: Reindeer WINDOW_LIGHT style broken</li>
- <li><a href="http://dev.vaadin.com/ticket/9689">#9689</a>: Update mini tutorial for using Resource in connectors</li>
- <li><a href="http://dev.vaadin.com/ticket/9690">#9690</a>: Remove ApplicationClassException</li>
- <li><a href="http://dev.vaadin.com/ticket/9691">#9691</a>: Rename old connector resource concept</li>
- <li><a href="http://dev.vaadin.com/ticket/9695">#9695</a>: All components are marked dirty at the end of each request</li>
- <li><a href="http://dev.vaadin.com/ticket/9696">#9696</a>: Diff state fails to compare null values properly</li>
- <li><a href="http://dev.vaadin.com/ticket/9704">#9704</a>: Make GWT generator require RPC methods to return void</li>
- <li><a href="http://dev.vaadin.com/ticket/9706">#9706</a>: Add getContextPath to VaadinRequest</li>
- <li><a href="http://dev.vaadin.com/ticket/9707">#9707</a>: Support both ui and UI as the init parameter for selecting UI class</li>
- <li><a href="http://dev.vaadin.com/ticket/9711">#9711</a>: Not possible to set custom system messages</li>
- <li><a href="http://dev.vaadin.com/ticket/9716">#9716</a>: browserWindowHeight and browserWindowWidth are always -1</li>
- <li><a href="http://dev.vaadin.com/ticket/9717">#9717</a>: ConnectorTracker should serialize diff state</li>
- <li><a href="http://dev.vaadin.com/ticket/9718">#9718</a>: Rename ServletService and move to its own file</li>
- <li><a href="http://dev.vaadin.com/ticket/9719">#9719</a>: Remove ApplicationStartedListener</li>
- <li><a href="http://dev.vaadin.com/ticket/9720">#9720</a>: Remove WidgetMapGenerator and subclasses</li>
- <li><a href="http://dev.vaadin.com/ticket/9721">#9721</a>: Pass UI id to UIProvider.createInstance</li>
- <li><a href="http://dev.vaadin.com/ticket/9722">#9722</a>: Make DefaultUIProvider path aware</li>
- <li><a href="http://dev.vaadin.com/ticket/9723">#9723</a>: Validatable.getValidators() is specified to return null if no validators</li>
- <li><a href="http://dev.vaadin.com/ticket/9724">#9724</a>: Add Component.setPrimaryStyleName</li>
- <li><a href="http://dev.vaadin.com/ticket/9725">#9725</a>: CustomLayout without children doesn't display anything</li>
- <li><a href="http://dev.vaadin.com/ticket/9726">#9726</a>: Review usage of the Vaadin prefix in method names</li>
- <li><a href="http://dev.vaadin.com/ticket/9727">#9727</a>: It should be easier to write custom NavigationStateManagers</li>
- <li><a href="http://dev.vaadin.com/ticket/9728">#9728</a>: NPE when initializing LegacyVaadinPortlet</li>
- <li><a href="http://dev.vaadin.com/ticket/9730">#9730</a>: Two portlets on the same page conflict with each other</li>
- <li><a href="http://dev.vaadin.com/ticket/9731">#9731</a>: Map PortalDefaultWidgetSet to DefaultWidgetSet</li>
- <li><a href="http://dev.vaadin.com/ticket/9733">#9733</a>: Make VaadinSession non-global. - <b>VOTED FEATURE</b></li>
- <li><a href="http://dev.vaadin.com/ticket/9734">#9734</a>: Slider max value is 0 by default, should be 100</li>
- <li><a href="http://dev.vaadin.com/ticket/9735">#9735</a>: Handle exceptions from UI.init in a better way</li>
- <li><a href="http://dev.vaadin.com/ticket/9736">#9736</a>: HTML5 doctype changes breaks vertical alignment in HorizontalLayout</li>
- <li><a href="http://dev.vaadin.com/ticket/9737">#9737</a>: AbstractField.convertToModel error handling throws NPE</li>
- <li><a href="http://dev.vaadin.com/ticket/9740">#9740</a>: NPE in Slider inside a GridLayout</li>
- <li><a href="http://dev.vaadin.com/ticket/9745">#9745</a>: Build all javadoc automatically during build</li>
- <li><a href="http://dev.vaadin.com/ticket/9747">#9747</a>: Invalid request path info in CombinedRequest</li>
- <li><a href="http://dev.vaadin.com/ticket/9749">#9749</a>: Add common methods from servlet/portlet request, response and session to Vaadin interfaces</li>
- <li><a href="http://dev.vaadin.com/ticket/9750">#9750</a>: Rename addVaadinSessionInitializationListener to addSessionInitListener</li>
- <li><a href="http://dev.vaadin.com/ticket/9751">#9751</a>: Import sass tests</li>
- <li><a href="http://dev.vaadin.com/ticket/9752">#9752</a>: UI serialization fails because of VaadinServiceData</li>
- <li><a href="http://dev.vaadin.com/ticket/9755">#9755</a>: Roots do not get detach() notifications</li>
- <li><a href="http://dev.vaadin.com/ticket/9764">#9764</a>: Make DefaultUIProvider serve the default UI for all paths</li>
- <li><a href="http://dev.vaadin.com/ticket/9767">#9767</a>: ConnectorTracker throws NPE if using deserialized session</li>
- <li><a href="http://dev.vaadin.com/ticket/9768">#9768</a>: ComboBox drop down list in PopupView Content has wrong offset</li>
- <li><a href="http://dev.vaadin.com/ticket/9770">#9770</a>: Heartbeat and Connector resource requests do not clean up inactive UIs</li>
- <li><a href="http://dev.vaadin.com/ticket/9776">#9776</a>: Vaadin 7 beta 1/2 and Websphere 8: Hourglass is running - no GUI components are shown</li>
- <li><a href="http://dev.vaadin.com/ticket/9777">#9777</a>: Sass mixin does not handle named parameters correctly</li>
- <li><a href="http://dev.vaadin.com/ticket/9791">#9791</a>: The constructor is ambiguous (Navigator)</li>
- <li><a href="http://dev.vaadin.com/ticket/9792">#9792</a>: Layout-Bug in AbstractJavaScriptComponent</li>
- <li><a href="http://dev.vaadin.com/ticket/9793">#9793</a>: Vaadin 7 - OSGi</li>
- <li><a href="http://dev.vaadin.com/ticket/9794">#9794</a>: VaadinService.addUiProvider -&gt; NPE</li>
- <li><a href="http://dev.vaadin.com/ticket/9798">#9798</a>: Datefield's container div height is 4 pixels too much</li>
- <li><a href="http://dev.vaadin.com/ticket/9802">#9802</a>: RpcInvoicationHandler.toString() should not cause an client rpc invocation</li>
- <li><a href="http://dev.vaadin.com/ticket/9804">#9804</a>: sun.io.serialization.extendedDebugInfo & toString</li>
- <li><a href="http://dev.vaadin.com/ticket/9805">#9805</a>: Javascript handling regression</li>
- <li><a href="http://dev.vaadin.com/ticket/9807">#9807</a>: vaadin 7 beta 2 Accordion not working properly</li>
- <li><a href="http://dev.vaadin.com/ticket/9808">#9808</a>: NPEs when calling removeAllComponents() for VerticalLayout</li>
- <li><a href="http://dev.vaadin.com/ticket/9815">#9815</a>: Hierarchy change events should be sent to component containers which are about to be removed</li>
- <li><a href="http://dev.vaadin.com/ticket/9816">#9816</a>: Update Google App Engine test to use UI</li>
- <li><a href="http://dev.vaadin.com/ticket/9817">#9817</a>: GlobalResourceHandler is not serializable</li>
- <li><a href="http://dev.vaadin.com/ticket/9819">#9819</a>: Setting custom class loader doesn't work</li>
- <li><a href="http://dev.vaadin.com/ticket/9821">#9821</a>: Sass mixin can't call other mixin with param</li>
- <li><a href="http://dev.vaadin.com/ticket/9824">#9824</a>: Remove support for default configuration options during bootstrap</li>
- <li><a href="http://dev.vaadin.com/ticket/9826">#9826</a>: NoDataException when (lazy) loading CheckBox first time with overrided CheckBoxConnector</li>
- <li><a href="http://dev.vaadin.com/ticket/9828">#9828</a>: Vaadin 7 ComponentLocator doesn't work with debug IDs</li>
- <li><a href="http://dev.vaadin.com/ticket/9832">#9832</a>: Root div should have v-ui and v-ui-&lt;uiclass&gt; css class names</li>
- <li><a href="http://dev.vaadin.com/ticket/9838">#9838</a>: Combobox popup item line heights are wrong in Chameleon theme</li>
- <li><a href="http://dev.vaadin.com/ticket/9841">#9841</a>: Deploy vaadin-buildhelpers to Maven</li>
- <li><a href="http://dev.vaadin.com/ticket/9845">#9845</a>: Resizing browser window throws exception in Firefox</li>
- <li><a href="http://dev.vaadin.com/ticket/9846">#9846</a>: Sass mixin does not support multiple params w/ defaults</li>
- <li><a href="http://dev.vaadin.com/ticket/9848">#9848</a>: VaadinServlet.servletInitialized() should throw ServletException</li>
- <li><a href="http://dev.vaadin.com/ticket/9852">#9852</a>: Add dependencies to client-compiler module for jars which are not rebased or modified by GWT</li>
- <li><a href="http://dev.vaadin.com/ticket/9858">#9858</a>: SassCompiler does not accept CSS3 selectors</li>
- <li><a href="http://dev.vaadin.com/ticket/9859">#9859</a>: Need replacement for Application.close() and .setLogoutUrl()</li>
- <li><a href="http://dev.vaadin.com/ticket/9860">#9860</a>: layout.scss contains wrong selectors</li>
- <li><a href="http://dev.vaadin.com/ticket/9863">#9863</a>: Building with recent Ant versions throws NPE</li>
- <li><a href="http://dev.vaadin.com/ticket/9867">#9867</a>: Add information about SuperDevMode in the widgetset in the archetype</li>
- <li><a href="http://dev.vaadin.com/ticket/9871">#9871</a>: SASS parses CSS incorrectly</li>
- <li><a href="http://dev.vaadin.com/ticket/9880">#9880</a>: Convert Runo to scss</li>
- <li><a href="http://dev.vaadin.com/ticket/9881">#9881</a>: Convert Chameleon to scss</li>
- <li><a href="http://dev.vaadin.com/ticket/9883">#9883</a>: Document limitations in setPrimaryStyleName</li>
- <li><a href="http://dev.vaadin.com/ticket/9884">#9884</a>: Remove VaadinServiceSession.getURL</li>
- <li><a href="http://dev.vaadin.com/ticket/9887">#9887</a>: Check Trident version before declaring IE incompatible</li>
- <li><a href="http://dev.vaadin.com/ticket/9888">#9888</a>: NPE in getBrowserDetailsUI()</li>
- <li><a href="http://dev.vaadin.com/ticket/9891">#9891</a>: Theme resources can not be loaded if theme name contains -</li>
- <li><a href="http://dev.vaadin.com/ticket/9893">#9893</a>: Reorganize VOrderedLayout package and class structure</li>
- <li><a href="http://dev.vaadin.com/ticket/9895">#9895</a>: Client-side NPE if hiding CustomComponent child</li>
- <li><a href="http://dev.vaadin.com/ticket/9896">#9896</a>: TextField.setPrimaryStyleName does not work dynamically</li>
- <li><a href="http://dev.vaadin.com/ticket/9897">#9897</a>: Document layout changes in migration guide</li>
- <li><a href="http://dev.vaadin.com/ticket/9898">#9898</a>: Slider does not change primary stylenames of inner elements when calling setPrimaryStylename</li>
- <li><a href="http://dev.vaadin.com/ticket/9899">#9899</a>: Dynamically setting the primary stylename for the AbsoluteLayout does not work</li>
- <li><a href="http://dev.vaadin.com/ticket/9900">#9900</a>: Accordion.setPrimaryStylename does not change the stylename for inner elements</li>
- <li><a href="http://dev.vaadin.com/ticket/9901">#9901</a>: Combobox does not support primary stylenames</li>
- <li><a href="http://dev.vaadin.com/ticket/9902">#9902</a>: CustomLayout does not work properly with primary stylenames</li>
- <li><a href="http://dev.vaadin.com/ticket/9903">#9903</a>: DateField does not work properly with primary stylenames</li>
- <li><a href="http://dev.vaadin.com/ticket/9904">#9904</a>: Form does not work properly with primary stylenames</li>
- <li><a href="http://dev.vaadin.com/ticket/9907">#9907</a>: ListSelect does not properly support primary stylenames</li>
- <li><a href="http://dev.vaadin.com/ticket/9908">#9908</a>: MenuBars does not support primary stylenames properly</li>
- <li><a href="http://dev.vaadin.com/ticket/9917">#9917</a>: LegacyWindow should not be a UI inner class</li>
- <li><a href="http://dev.vaadin.com/ticket/9921">#9921</a>: Redirect if trailing slash missing after context path</li>
- <li><a href="http://dev.vaadin.com/ticket/9923">#9923</a>: Move hierarchy related code in Form to onConnectorHierarchyChange</li>
- <li><a href="http://dev.vaadin.com/ticket/9924">#9924</a>: Move hierarchy related code in PopupView to onConnectorHierarchyChange</li>
- <li><a href="http://dev.vaadin.com/ticket/9926">#9926</a>: Build script should not automatically deploy to local Maven</li>
- <li><a href="http://dev.vaadin.com/ticket/9931">#9931</a>: Vaadin-maven-plugin does not include vaadin-client-compiler dependencies when compiling widget set</li>
- <li><a href="http://dev.vaadin.com/ticket/9936">#9936</a>: Remove Navigator.SimpleViewDisplay</li>
- <li><a href="http://dev.vaadin.com/ticket/9943">#9943</a>: CompileTheme.createSprites hides classpath problems</li>
- <li><a href="http://dev.vaadin.com/ticket/9946">#9946</a>: VaadinServiceSession.getCurrent() fails on first request</li>
- <li><a href="http://dev.vaadin.com/ticket/9947">#9947</a>: UI constructor invariably throws IllegalStateException</li>
- <li><a href="http://dev.vaadin.com/ticket/9949">#9949</a>: Browser Back Button does not trigger ValueChangeListener/Blur (Vaadin 7)</li>
- <li><a href="http://dev.vaadin.com/ticket/9952">#9952</a>: UI is not Scrollable</li>
- <li><a href="http://dev.vaadin.com/ticket/9956">#9956</a>: DoubleClick on table row failed in IE8</li>
- <li><a href="http://dev.vaadin.com/ticket/9963">#9963</a>: Vaadin All zip size and JavaDoc</li>
- <li><a href="http://dev.vaadin.com/ticket/9967">#9967</a>: UI.replaceComponent() throws UnsupportedOperationException</li>
- <li><a href="http://dev.vaadin.com/ticket/9969">#9969</a>: UI iterator() and getComponentCount() are inconsistent with addComponent() and others</li>
- <li><a href="http://dev.vaadin.com/ticket/9970">#9970</a>: Duplicate jars in Vaadin All zip archive</li>
- <li><a href="http://dev.vaadin.com/ticket/9972">#9972</a>: Add Navigator.getState()</li>
- <li><a href="http://dev.vaadin.com/ticket/9974">#9974</a>: Sass remove() does not work properly in @mixin</li>
- <li><a href="http://dev.vaadin.com/ticket/9975">#9975</a>: Sass contains() does not work directly in if()</li>
- <li><a href="http://dev.vaadin.com/ticket/9977">#9977</a>: ItemClickListener in Table throws NullPointerException in IE8</li>
- <li><a href="http://dev.vaadin.com/ticket/9983">#9983</a>: Adding multiple stylenames fails in certain conditions</li>
- <li><a href="http://dev.vaadin.com/ticket/9987">#9987</a>: Changing heartbeat interval in web.xml does not work</li>
- <li><a href="http://dev.vaadin.com/ticket/9989">#9989</a>: Improve message when session is already set</li>
- <li><a href="http://dev.vaadin.com/ticket/9999">#9999</a>: Debug console does not recognize ExtensionConnectors</li>
- <li><a href="http://dev.vaadin.com/ticket/10000">#10000</a>: @keyframes syntax breaks Sass compiler</li>
- <li><a href="http://dev.vaadin.com/ticket/10003">#10003</a>: CssLayout click listeners do not work unless there's at least one child component</li>
- <li><a href="http://dev.vaadin.com/ticket/10006">#10006</a>: ServerRpc causes the target connector and all its parents to be marked dirty</li>
- <li><a href="http://dev.vaadin.com/ticket/10007">#10007</a>: Property.setValue should be setValue(T) and not setValue(Object)</li>
- <li><a href="http://dev.vaadin.com/ticket/10008">#10008</a>: Update ProgressIndicator to use state and Rpc</li>
- <li><a href="http://dev.vaadin.com/ticket/10030">#10030</a>: Button.DisableOnClick</li>
- <li><a href="http://dev.vaadin.com/ticket/10034">#10034</a>: Moving components from outer AbsoluteLayout to an inner layout fails with client side exception</li>
- <li><a href="http://dev.vaadin.com/ticket/10036">#10036</a>: Selecting a row in Table leaves focus indicator for previously selected line</li>
- <li><a href="http://dev.vaadin.com/ticket/10039">#10039</a>: ComponentLocator.getElementByDOMPath throws NPE if the target could not be found</li>
- <li><a href="http://dev.vaadin.com/ticket/10040">#10040</a>: uitest.war web.xml does not validate</li>
- <li><a href="http://dev.vaadin.com/ticket/10043">#10043</a>: NullPointerException in AbstractField.convertToModel()</li>
- <li><a href="http://dev.vaadin.com/ticket/10044">#10044</a>: Reopening UI with @PreserveOnRefresh doesn't fire fragment change</li>
- <li><a href="http://dev.vaadin.com/ticket/10045">#10045</a>: WebLogic 9 does not support Java 6</li>
- <li><a href="http://dev.vaadin.com/ticket/10049">#10049</a>: Util.getAbsoluteUrl does nothing in IE 8</li>
- <li><a href="http://dev.vaadin.com/ticket/10050">#10050</a>: Create tutorials for BrowserPopupOpener and FileDownloader</li>
- <li><a href="http://dev.vaadin.com/ticket/10053">#10053</a>: A ClassResource which points to a non-existing file should return 404 and not an empty page</li>
- <li><a href="http://dev.vaadin.com/ticket/10061">#10061</a>: OSGi - can not instantiate vaadin session anymore</li>
- <li><a href="http://dev.vaadin.com/ticket/10066">#10066</a>: OSGi - wrong dependencies</li>
- <li><a href="http://dev.vaadin.com/ticket/10068">#10068</a>: Vertical- and Horizontal-layouts should not attach/detach element resize listeners on state change</li>
- <li><a href="http://dev.vaadin.com/ticket/10069">#10069</a>: Update the "Using Vaadin in an existing GWT project" tutorial</li>
- <li><a href="http://dev.vaadin.com/ticket/10070">#10070</a>: InlineDateField broken with Chameleon</li>
- <li><a href="http://dev.vaadin.com/ticket/10071">#10071</a>: Internal Error - Table marked as dirty while connected SQLContainer is rolled back</li>
- <li><a href="http://dev.vaadin.com/ticket/10075">#10075</a>: InlineDateField has extra horizontal line below day names</li>
- <li><a href="http://dev.vaadin.com/ticket/10076">#10076</a>: Write tutorial about creating a LoginForm with Vaadin components</li>
- <li><a href="http://dev.vaadin.com/ticket/10077">#10077</a>: MenuItem stylenames are lost when the menu item is selected</li>
- <li><a href="http://dev.vaadin.com/ticket/10078">#10078</a>: CustomField should implement HasComponents, not ComponentContainer</li>
- <li><a href="http://dev.vaadin.com/ticket/10079">#10079</a>: AbstractOrderedLayout does not add v-disabled to caption of child when a parent is disabled</li>
- <li><a href="http://dev.vaadin.com/ticket/10080">#10080</a>: Undefined wide HorizontalLayout becomes 100% wide</li>
- <li><a href="http://dev.vaadin.com/ticket/10082">#10082</a>: Icon in Panel caption causes wrapping</li>
- <li><a href="http://dev.vaadin.com/ticket/10083">#10083</a>: AbsoluteLayout does not render captions</li>
- <li><a href="http://dev.vaadin.com/ticket/10085">#10085</a>: HasComponents should not declare getComponentIterator()</li>
- <li><a href="http://dev.vaadin.com/ticket/10088">#10088</a>: Non-transient servlet reference in VaadinServletService</li>
- <li><a href="http://dev.vaadin.com/ticket/10089">#10089</a>: NPE in Page.setFragment(String newFragment, boolean fireEvents)</li>
- <li><a href="http://dev.vaadin.com/ticket/10093">#10093</a>: Allow to provide parameters for the UI in a popup window</li>
- <li><a href="http://dev.vaadin.com/ticket/10097">#10097</a>: GridLayout insertRow() causes client side exception</li>
- <li><a href="http://dev.vaadin.com/ticket/10098">#10098</a>: Layout bug: nested HorizontalLayout is offset vertically downward</li>
- <li><a href="http://dev.vaadin.com/ticket/10100">#10100</a>: Sass parent selector fails if rule has more than one selector</li>
- <li><a href="http://dev.vaadin.com/ticket/10101">#10101</a>: Client side exception with Image()</li>
- <li><a href="http://dev.vaadin.com/ticket/10104">#10104</a>: LegacyComponent should be in com.vaadin.ui</li>
- <li><a href="http://dev.vaadin.com/ticket/10107">#10107</a>: SCSS compiler fails when theme is not in same project as UI</li>
- <li><a href="http://dev.vaadin.com/ticket/10112">#10112</a>: Using Upload with multiple UIs causes NPE</li>
- <li><a href="http://dev.vaadin.com/ticket/10113">#10113</a>: VerticalLayout is a block element which always makes it 100% wide</li>
- <li><a href="http://dev.vaadin.com/ticket/10116">#10116</a>: Idle UIs should be closed only when all UIs have been idle long enough</li>
- <li><a href="http://dev.vaadin.com/ticket/10118">#10118</a>: josn dependency is not OSGi compatible out-of-the-box</li>
- <li><a href="http://dev.vaadin.com/ticket/10121">#10121</a>: Fields named description don't bind in FieldGroup.bindMemberFields method</li>
- <li><a href="http://dev.vaadin.com/ticket/10124">#10124</a>: SQLContainer.prevItem() does not return null</li>
- <li><a href="http://dev.vaadin.com/ticket/10126">#10126</a>: Using GWT PopupPanel.show() fails with NPE due to Vaadin PopupView</li>
- <li><a href="http://dev.vaadin.com/ticket/10128">#10128</a>: Undefined wide accordion sets width 2px too small, causing scrollbars</li>
- <li><a href="http://dev.vaadin.com/ticket/10130">#10130</a>: ProgressIndicator keeps polling after it has been removed</li>
- <li><a href="http://dev.vaadin.com/ticket/10132">#10132</a>: Navigator.navigateTo(…) should call View.enter(…) AFTER it has called ViewDisplay.showView(…)</li>
- <li><a href="http://dev.vaadin.com/ticket/10134">#10134</a>: Check that connector has a matching RPC handler before deserializing parameters</li>
- <li><a href="http://dev.vaadin.com/ticket/10136">#10136</a>: Tooltip is too high in Runo</li>
- <li><a href="http://dev.vaadin.com/ticket/10137">#10137</a>: NativeButton does not set the v-disabled style when using disableOnClick</li>
- <li><a href="http://dev.vaadin.com/ticket/10140">#10140</a>: Unify slash usage in constants</li>
- <li><a href="http://dev.vaadin.com/ticket/10141">#10141</a>: Rename Page.getFragment to Page.getUriFragment</li>
- <li><a href="http://dev.vaadin.com/ticket/10143">#10143</a>: Add AbstractConnector.getRpcProxy to be consistent with server side</li>
- <li><a href="http://dev.vaadin.com/ticket/10144">#10144</a>: AbstractComponentContainer should implement getComponentIterator and not iterator()</li>
- <li><a href="http://dev.vaadin.com/ticket/10145">#10145</a>: Move classes from the com.vaadin package</li>
- <li><a href="http://dev.vaadin.com/ticket/10146">#10146</a>: Move classes from the com.vaadin.service package</li>
- <li><a href="http://dev.vaadin.com/ticket/10150">#10150</a>: Detached SplitPanel still holds on to its previous children.</li>
- <li><a href="http://dev.vaadin.com/ticket/10151">#10151</a>: Invalid state in hierarchy change event for detached connector</li>
- <li><a href="http://dev.vaadin.com/ticket/10153">#10153</a>: Update "Dependencies Included in Installation package"</li>
- <li><a href="http://dev.vaadin.com/ticket/10154">#10154</a>: HorizontalLayout adds component in wrong order</li>
- <li><a href="http://dev.vaadin.com/ticket/10155">#10155</a>: Hiding or removing a component from an AbsoluteLayout causes ClassCastException</li>
- <li><a href="http://dev.vaadin.com/ticket/10156">#10156</a>: Vaadin internal init parameters should be prefixed by "v-"</li>
- <li><a href="http://dev.vaadin.com/ticket/10157">#10157</a>: Vaadin internal init parameters should be prefixed by "v-"</li>
- <li><a href="http://dev.vaadin.com/ticket/10158">#10158</a>: API: getRootConnector() should be getUIConnector()</li>
- <li><a href="http://dev.vaadin.com/ticket/10161">#10161</a>: VerticalLayout expand ratio cannot be changed dynamically</li>
- <li><a href="http://dev.vaadin.com/ticket/10162">#10162</a>: VLayoutSlot.positionHorizontally does not sanitize availableWidth before setting it to the DOM</li>
- <li><a href="http://dev.vaadin.com/ticket/10166">#10166</a>: SassCompiler parent reference in middle of selector bugs</li>
- <li><a href="http://dev.vaadin.com/ticket/10172">#10172</a>: Ue IE9 mode for IE10</li>
- <li><a href="http://dev.vaadin.com/ticket/10174">#10174</a>: Value of a variable cannot be assigned to another variable</li>
- <li><a href="http://dev.vaadin.com/ticket/10179">#10179</a>: AbstractComponentConnector removes id attribute set in widget</li>
- <li><a href="http://dev.vaadin.com/ticket/10180">#10180</a>: AbsoluteLayout will not position components with setVisible(false)</li>
- <li><a href="http://dev.vaadin.com/ticket/10181">#10181</a>: AbsoluteLayout will not position components with setVisible(false)</li>
- <li><a href="http://dev.vaadin.com/ticket/10182">#10182</a>: Rule order not preserved when using parent reference in sass</li>
- <li><a href="http://dev.vaadin.com/ticket/10183">#10183</a>: InlineDateField and ComboBox broken in BaseTheme</li>
- <li><a href="http://dev.vaadin.com/ticket/10184">#10184</a>: Match not found in GlobalResourceHandler when requesting dynamic resource from a Table</li>
- <li><a href="http://dev.vaadin.com/ticket/10186">#10186</a>: Using the lighten function breaks up any later references to the parameter value</li>
- <li><a href="http://dev.vaadin.com/ticket/10187">#10187</a>: VPopupView no longer works with TestBench</li>
- <li><a href="http://dev.vaadin.com/ticket/10198">#10198</a>: FileDownloaderExtension cannot be removed</li>
- <li><a href="http://dev.vaadin.com/ticket/10202">#10202</a>: Allow the client side to use an SASS file</li>
- <li><a href="http://dev.vaadin.com/ticket/10203">#10203</a>: add setFileDownloadResource to FileDownloader</li>
- <li><a href="http://dev.vaadin.com/ticket/10204">#10204</a>: Update Eclipse project template to be compatible with beta9</li>
- <li><a href="http://dev.vaadin.com/ticket/10205">#10205</a>: Ensure Maven project template is compatible with beta9</li>
- <li><a href="http://dev.vaadin.com/ticket/10211">#10211</a>: No longer possible to use Navigator on a Panel/Window/UI</li>
- <li><a href="http://dev.vaadin.com/ticket/10221">#10221</a>: Generated AsyncBundleLoader.load() too long</li>
- <li><a href="http://dev.vaadin.com/ticket/10222">#10222</a>: Aborting layout after 100 passes</li>
- <li><a href="http://dev.vaadin.com/ticket/10223">#10223</a>: Rename VaadinServiceSession to VaadinSession</li>
- <li><a href="http://dev.vaadin.com/ticket/10224">#10224</a>: Rename DependencyResource to PublishedFile</li>
- <li><a href="http://dev.vaadin.com/ticket/10225">#10225</a>: Remove verifyLock() from and add getLockInstance() to VaadinSession</li>
- <li><a href="http://dev.vaadin.com/ticket/10226">#10226</a>: SystemMessagesProvider.getSystemMessages should get an event object</li>
- <li><a href="http://dev.vaadin.com/ticket/10227">#10227</a>: Remove DynamicConnectorResource</li>
- <li><a href="http://dev.vaadin.com/ticket/10229">#10229</a>: Update all @deprecated messages in VaadinService related classes</li>
- <li><a href="http://dev.vaadin.com/ticket/10230">#10230</a>: Remove Terminal</li>
- <li><a href="http://dev.vaadin.com/ticket/10231">#10231</a>: Replace ComponentErrorHandler with ErrorListener and make error handling use hierarchy</li>
- <li><a href="http://dev.vaadin.com/ticket/10232">#10232</a>: Remove ApplicationError</li>
- <li><a href="http://dev.vaadin.com/ticket/10235">#10235</a>: CustomComponent should implement HasComponents</li>
- <li><a href="http://dev.vaadin.com/ticket/10236">#10236</a>: DragAndDropWrapper should not be a ComponentContainer</li>
- <li><a href="http://dev.vaadin.com/ticket/10237">#10237</a>: LoginForm should not be a ComponentContainer</li>
- <li><a href="http://dev.vaadin.com/ticket/10238">#10238</a>: PopupView should implement HasComponents</li>
- <li><a href="http://dev.vaadin.com/ticket/10239">#10239</a>: Remove Navigator.navigate()</li>
- <li><a href="http://dev.vaadin.com/ticket/10240">#10240</a>: Update Navigator.addView(String,View) and Navigator.setErrorView(View) javadoc</li>
- <li><a href="http://dev.vaadin.com/ticket/10241">#10241</a>: Refactor BrowserPopupOpener API</li>
- <li><a href="http://dev.vaadin.com/ticket/10242">#10242</a>: Rename ApplicationConnection suspend/resumeRendering</li>
- <li><a href="http://dev.vaadin.com/ticket/10243">#10243</a>: Refactor ApplicationConnection communication related API</li>
- <li><a href="http://dev.vaadin.com/ticket/10244">#10244</a>: Correct camelCasing in @Delayed</li>
- <li><a href="http://dev.vaadin.com/ticket/10245">#10245</a>: Add addComponents(Component...) to ComponentContainer</li>
- <li><a href="http://dev.vaadin.com/ticket/10246">#10246</a>: Add multiple Component constructors to all ComponentContainers</li>
- <li><a href="http://dev.vaadin.com/ticket/10247">#10247</a>: Remove EventRouter deprecation messages</li>
- <li><a href="http://dev.vaadin.com/ticket/10248">#10248</a>: Implement abstract client side connector classes for HasComponents and SingleComponentContainer</li>
- <li><a href="http://dev.vaadin.com/ticket/10249">#10249</a>: Add UI.close(), UI.isClosing()</li>
- <li><a href="http://dev.vaadin.com/ticket/10251">#10251</a>: Refactor clean up of UIs</li>
- <li><a href="http://dev.vaadin.com/ticket/10252">#10252</a>: Refactor hearbeat API</li>
- <li><a href="http://dev.vaadin.com/ticket/10253">#10253</a>: Refactor VaadinSession API request time API</li>
- <li><a href="http://dev.vaadin.com/ticket/10254">#10254</a>: Remove AddonContext and related methods</li>
- <li><a href="http://dev.vaadin.com/ticket/10257">#10257</a>: Loading indicator remains visible if there is an exception during layout</li>
- <li><a href="http://dev.vaadin.com/ticket/10258">#10258</a>: Bottom left corner of the Runo panel is not visible</li>
- <li><a href="http://dev.vaadin.com/ticket/10284">#10284</a>: Document @PreserveOnRefresh</li>
- <li><a href="http://dev.vaadin.com/ticket/10289">#10289</a>: Javadoc for com.vaadin.ui.Window contains wrong information</li>
- <li><a href="http://dev.vaadin.com/ticket/10293">#10293</a>: Resolve sass compiler thread safety problems in servlet</li>
- <li><a href="http://dev.vaadin.com/ticket/10294">#10294</a>: Change primary style name mixin parameter to $primaryStyleName</li>
- <li><a href="http://dev.vaadin.com/ticket/10299">#10299</a>: SassCompiler input argument not resolved correctly</li>
- <li><a href="http://dev.vaadin.com/ticket/10300">#10300</a>: Panel and Window constructors should use Component</li>
- <li><a href="http://dev.vaadin.com/ticket/10302">#10302</a>: Remove RpcManager interface as ServerRpcManager must be used</li>
- <li><a href="http://dev.vaadin.com/ticket/10303">#10303</a>: Move HasComponents.isComponentVisible to SelectiveRenderer.isRendered</li>
- <li><a href="http://dev.vaadin.com/ticket/10304">#10304</a>: Update ServerConnector.getState javadoc</li>
- <li><a href="http://dev.vaadin.com/ticket/10305">#10305</a>: Rename Page.setBrowserWindowSize to updateBrowserWindowSize</li>
- <li><a href="http://dev.vaadin.com/ticket/10306">#10306</a>: Change WebBrowser.getTimezoneOffset and getRawTimezoneOffset to return int instead of Integer</li>
- <li><a href="http://dev.vaadin.com/ticket/10308">#10308</a>: SassCompiler drops selectors when & is used</li>
- <li><a href="http://dev.vaadin.com/ticket/10309">#10309</a>: SassCompiler wrong order when nesting</li>
- <li><a href="http://dev.vaadin.com/ticket/10310">#10310</a>: Compare.Equal passesFilter() does not work on some Comparable values</li>
- <li><a href="http://dev.vaadin.com/ticket/10315">#10315</a>: No propagation tabIndex on PopupFIeld, Table, Selects</li>
- <li><a href="http://dev.vaadin.com/ticket/10316">#10316</a>: fails to parse selectors with parenthesis "(", ")" in styles.scss</li>
- <li><a href="http://dev.vaadin.com/ticket/10318">#10318</a>: Compare performance with Vaadin 6</li>
- <li><a href="http://dev.vaadin.com/ticket/10322">#10322</a>: vaadin-shared-deps osgi manifest should declare versions</li>
- <li><a href="http://dev.vaadin.com/ticket/10324">#10324</a>: Fix GridLayout to update hierarchy in onConnectorHierarchyChange</li>
- <li><a href="http://dev.vaadin.com/ticket/10325">#10325</a>: Opening a sub-window without content displays client-side exception</li>
- <li><a href="http://dev.vaadin.com/ticket/10326">#10326</a>: SassCompiler wrong order when mixing parent selectors and other blocks</li>
- <li><a href="http://dev.vaadin.com/ticket/10330">#10330</a>: Wrap themes in themename{}</li>
- <li><a href="http://dev.vaadin.com/ticket/10332">#10332</a>: Nothing happens in browser if UI.init throws exception</li>
- <li><a href="http://dev.vaadin.com/ticket/10337">#10337</a>: Refactor Extension API</li>
- <li><a href="http://dev.vaadin.com/ticket/10339">#10339</a>: SassCompiler should be the only public API to sass ATM</li>
- <li><a href="http://dev.vaadin.com/ticket/10340">#10340</a>: Rename ComponentEventListener to ConnectorEventListener</li>
- <li><a href="http://dev.vaadin.com/ticket/10355">#10355</a>: Debug window no longer gets any styles</li>
- <li><a href="http://dev.vaadin.com/ticket/10357">#10357</a>: Debug console can't find its theme</li>
- <li><a href="http://dev.vaadin.com/ticket/10358">#10358</a>: Specfiy version numbers for vaadin-shared-deps imports</li>
- <li><a href="http://dev.vaadin.com/ticket/10359">#10359</a>: Test using Firefox 17 ESR</li>
- <li><a href="http://dev.vaadin.com/ticket/10360">#10360</a>: Overlays cause scrollbars on body</li>
- <li><a href="http://dev.vaadin.com/ticket/10362">#10362</a>: Browser specific theme selectors broken</li>
- <li><a href="http://dev.vaadin.com/ticket/10364">#10364</a>: com.vaadin.server.ServerRpcManager not Serializable</li>
- <li><a href="http://dev.vaadin.com/ticket/10367">#10367</a>: Session scope converters doesn't properly works with Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/10369">#10369</a>: Include fixes from Vaadin 6</li>
- <li><a href="http://dev.vaadin.com/ticket/10370">#10370</a>: Set Cache-Control in heartbeat responses</li>
- <li><a href="http://dev.vaadin.com/ticket/10372">#10372</a>: Debug window should tell which theme is being used</li>
- <li><a href="http://dev.vaadin.com/ticket/10373">#10373</a>: Write a tutorial on how to change the "unsupported browser" page</li>
- <li><a href="http://dev.vaadin.com/ticket/10374">#10374</a>: Throw an exception if a Window is added to the component hierarchy</li>
- <li><a href="http://dev.vaadin.com/ticket/10375">#10375</a>: ClassCastException when resizing a Window containing a Label</li>
- <li><a href="http://dev.vaadin.com/ticket/10378">#10378</a>: AbstractExtensionConnector.extend should be abstract</li>
- <li><a href="http://dev.vaadin.com/ticket/10381">#10381</a>: NPE in StringToDoubleConverter</li>
- <li><a href="http://dev.vaadin.com/ticket/10382">#10382</a>: Chameleon uses "body" prefix rules which are now broken</li>
- <li><a href="http://dev.vaadin.com/ticket/10383">#10383</a>: LoginForm generated HTML does not get "themename" style resulting in inconsistent look</li>
- <li><a href="http://dev.vaadin.com/ticket/10384">#10384</a>: Drag'n'drop drag-image should be attached to the overlay container</li>
- <li><a href="http://dev.vaadin.com/ticket/10385">#10385</a>: Drag elements are not shown</li>
- <li><a href="http://dev.vaadin.com/ticket/10386">#10386</a>: Uncaught exceptions are not styled</li>
- <li><a href="http://dev.vaadin.com/ticket/10388">#10388</a>: First accordion tab cannot be closed when active</li>
- <li><a href="http://dev.vaadin.com/ticket/10389">#10389</a>: VisualDesigner generates invalid code for Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/10395">#10395</a>: Update release notes</li>
- <li><a href="http://dev.vaadin.com/ticket/10396">#10396</a>: Rewrite migration guide</li>
- <li><a href="http://dev.vaadin.com/ticket/10397">#10397</a>: Update tutorials for Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/10399">#10399</a>: ClassCastException when using extensions with multiple portlets on the same page</li>
- <li><a href="http://dev.vaadin.com/ticket/10400">#10400</a>: NPE from VUI.windowSizeMaybeChanged</li>
- <li><a href="http://dev.vaadin.com/ticket/10401">#10401</a>: Add Notification.show(String caption, String message, Type type) helper</li>
- <li><a href="http://dev.vaadin.com/ticket/10404">#10404</a>: TabSheet containing a HasComponent causes child not to be rendered</li>
- <li><a href="http://dev.vaadin.com/ticket/10406">#10406</a>: SCSS parser (sometimes) fails after ":" (colon) inside @mixin</li>
- <li><a href="http://dev.vaadin.com/ticket/10408">#10408</a>: Converter created in a ConverterFactory isn't used in Table</li>
- <li><a href="http://dev.vaadin.com/ticket/10409">#10409</a>: Table never uses ConverterFactory converters</li>
- <li><a href="http://dev.vaadin.com/ticket/10411">#10411</a>: VaadinSession throws NPE if Http session is invalidated</li>
- <li><a href="http://dev.vaadin.com/ticket/10414">#10414</a>: CustomComponent setVisible doesn't show the component</li>
- <li><a href="http://dev.vaadin.com/ticket/10415">#10415</a>: vaadin-theme-compiler incorrectly depends on old vaadin-shared-deps</li>
- <li><a href="http://dev.vaadin.com/ticket/10416">#10416</a>: ListSelect jumps to top row after each client -&gt; server contact</li>
- <li><a href="http://dev.vaadin.com/ticket/10417">#10417</a>: com.google.gwt.user.client.rpc.IsSerializable should be in vaadin-shared</li>
- <li><a href="http://dev.vaadin.com/ticket/10418">#10418</a>: AbstractSplitPanel.setMinSplitPosition takes incorrect parameter type</li>
- <li><a href="http://dev.vaadin.com/ticket/10419">#10419</a>: Data type conversion forced for non-used fields of a BeanItem</li>
- <li><a href="http://dev.vaadin.com/ticket/10421">#10421</a>: Serving *nocache* files using VaadinServlet should not set the cache header to 1h</li>
- <li><a href="http://dev.vaadin.com/ticket/10422">#10422</a>: It should be possible to remove the ?timestamp from the request for the widgetset</li>
- <li><a href="http://dev.vaadin.com/ticket/10423">#10423</a>: "Object Expected" in IE8 if Native XMLHttpSupport is disabled</li>
- <li><a href="http://dev.vaadin.com/ticket/10432">#10432</a>: ApplicationConnection.handleComponentRelativeSize and related methods serve no purpose</li>
- <li><a href="http://dev.vaadin.com/ticket/10433">#10433</a>: AbstractComponentConnector.hasEventListener should be in AbstractConnector</li>
- <li><a href="http://dev.vaadin.com/ticket/10434">#10434</a>: Wrong memcache expiration in GAEVaadinServlet</li>
- <li><a href="http://dev.vaadin.com/ticket/10438">#10438</a>: @if does not work directly in @mixin</li>
- <li><a href="http://dev.vaadin.com/ticket/10453">#10453</a>: Sass @mixin variables behaves strangely</li>
- <li><a href="http://dev.vaadin.com/ticket/10458">#10458</a>: Unable to use a SQLContainer with ComboBox</li>
- <li><a href="http://dev.vaadin.com/ticket/10478">#10478</a>: Form should support empty footer</li>
- <li><a href="http://dev.vaadin.com/ticket/10479">#10479</a>: TabSheet custom stylename in GWT Mode gives NPE</li>
- <li><a href="http://dev.vaadin.com/ticket/10480">#10480</a>: AssertionError when using DragAndDropWrapper with DevMode</li>
- <li><a href="http://dev.vaadin.com/ticket/10481">#10481</a>: Custom VDropHandler causes NPE in JsonEncoder when dropping component</li>
- <li><a href="http://dev.vaadin.com/ticket/10484">#10484</a>: ComboBox rendering problem in Runo Theme</li>
- <li><a href="http://dev.vaadin.com/ticket/10485">#10485</a>: PopupDateField rendering problem in Runo and Chameleon theme</li>
- <li><a href="http://dev.vaadin.com/ticket/10486">#10486</a>: @something should be passed through the sass compiler as-is</li>
- <li><a href="http://dev.vaadin.com/ticket/10488">#10488</a>: Only measure connectors for which a measurement is actually required</li>
- <li><a href="http://dev.vaadin.com/ticket/10489">#10489</a>: OrderedLayout should send detach and attach events when updating the DOM for expand</li>
- <li><a href="http://dev.vaadin.com/ticket/10494">#10494</a>: Space not always properly allocated in ordered layout with fixed size</li>
- <li><a href="http://dev.vaadin.com/ticket/10496">#10496</a>: Provide a way for connectors to avoid recalculating internal values if it gets multiple events based on the same data</li>
- <li><a href="http://dev.vaadin.com/ticket/10498">#10498</a>: DateField in a GridLayout causes scrollbars in IE</li>
- <li><a href="http://dev.vaadin.com/ticket/10503">#10503</a>: Panel content not displaying inside TabSheet</li>
- <li><a href="http://dev.vaadin.com/ticket/10504">#10504</a>: FieldGroup bound to inherited layout error</li>
- <li><a href="http://dev.vaadin.com/ticket/10505">#10505</a>: Sass compiler should preserve UTF-8 characters from imported files and output UTF-8 to the browser</li>
- <li><a href="http://dev.vaadin.com/ticket/10511">#10511</a>: Compiling widgetset using plugin fails</li>
- <li><a href="http://dev.vaadin.com/ticket/10520">#10520</a>: Write tutorial about using Vaadin 7 with Liferay</li>
- <li><a href="http://dev.vaadin.com/ticket/10529">#10529</a>: "Not using retained UI" always prints Integer.class instead of the class of the UI</li>
- <li><a href="http://dev.vaadin.com/ticket/10531">#10531</a>: Pixel values with fractions should not be rounded before sent to client</li>
- <li><a href="http://dev.vaadin.com/ticket/10532">#10532</a>: Invalid state update for reattached connector</li>
- <li><a href="http://dev.vaadin.com/ticket/10537">#10537</a>: NewItemsAllowed in Optiongroup and ListSelect give javascriptException</li>
- <li><a href="http://dev.vaadin.com/ticket/10541">#10541</a>: TestBench 3 doesn't work with Vaadin 7 beta10</li>
- <li><a href="http://dev.vaadin.com/ticket/10545">#10545</a>: FormFieldFactory should be deprecated in Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/10549">#10549</a>: Cannot send subclassed objects over RPC</li>
- <li><a href="http://dev.vaadin.com/ticket/10553">#10553</a>: Provide a StringToFloat converter</li>
- <li><a href="http://dev.vaadin.com/ticket/10559">#10559</a>: ComboBox popup higher in Firefox 17 than in other browsers</li>
- <li><a href="http://dev.vaadin.com/ticket/10560">#10560</a>: EmailValidator on TextField always shows the error mark</li>
- <li><a href="http://dev.vaadin.com/ticket/10561">#10561</a>: EmailValidator on TextField always shows the error symbol</li>
- <li><a href="http://dev.vaadin.com/ticket/10562">#10562</a>: ReadOnlyException when TextField with setReadOnly(true) is added</li>
- <li><a href="http://dev.vaadin.com/ticket/10564">#10564</a>: Ensure updateCaption is invoked for new children</li>
- <li><a href="http://dev.vaadin.com/ticket/10587">#10587</a>: NativeButton broken in Liferay theme</li>
- <li><a href="http://dev.vaadin.com/ticket/10588">#10588</a>: IE8 does not always update layout slot sizes</li>
- <li><a href="http://dev.vaadin.com/ticket/10589">#10589</a>: Form error display does not work</li>
- <li><a href="http://dev.vaadin.com/ticket/10593">#10593</a>: SassLinker fails for deeper folder hierarchies</li>
- <li><a href="http://dev.vaadin.com/ticket/10594">#10594</a>: Unnesessary scss files from SassLinker</li>
- <li><a href="http://dev.vaadin.com/ticket/10596">#10596</a>: SplitPanel splitter left in bad position if temporarily out of bounds</li>
- <li><a href="http://dev.vaadin.com/ticket/10597">#10597</a>: Compile error for Microsoft css gradient filter</li>
- <li><a href="http://dev.vaadin.com/ticket/10598">#10598</a>: Extra vertical scrollbars in IE 9</li>
- <li><a href="http://dev.vaadin.com/ticket/10599">#10599</a>: Window with style Runo.WINDOW_DIALOG has rendering errors</li>
- <li><a href="http://dev.vaadin.com/ticket/10606">#10606</a>: Chameleon styles ceased working in Vaadin 7</li>
- <li><a href="http://dev.vaadin.com/ticket/10616">#10616</a>: Legacy style for Reindeer.TABSHEET_MINIMAL is broken in FF</li>
- <li><a href="http://dev.vaadin.com/ticket/10630">#10630</a>: Uncaught client side exception with to narrow GridLayout in IE8</li>
- <li><a href="http://dev.vaadin.com/ticket/10631">#10631</a>: MenuBar, css font-size in % / VerticalLayout, width in em / Button, size while dis-/enabled</li>
- <li><a href="http://dev.vaadin.com/ticket/10636">#10636</a>: Util.getRequiredHeight/getRequiredWidth incorreclty rounds down for IE9</li>
- <li><a href="http://dev.vaadin.com/ticket/10651">#10651</a>: Update release notes for RC1</li>
- <li><a href="http://dev.vaadin.com/ticket/10656">#10656</a>: No requiredFieldIndicator for CustomField</li>
- <li><a href="http://dev.vaadin.com/ticket/10658">#10658</a>: Bottom left corner of the Runo tabsheet is not visible</li>
- <li><a href="http://dev.vaadin.com/ticket/10659">#10659</a>: "Can't start a new layout phase before the previous layout phase ends." in Opera 12</li>
- <li><a href="http://dev.vaadin.com/ticket/10682">#10682</a>: Close element should not be placed before the caption text</li>
- <li><a href="http://dev.vaadin.com/ticket/10705">#10705</a>: Vaadin beta 11 - Javascript error</li>
- <li><a href="http://dev.vaadin.com/ticket/10710">#10710</a>: Enable building minimal widgetset</li>
- <li><a href="http://dev.vaadin.com/ticket/10713">#10713</a>: NullPointerException on TextField validation</li>
- <li><a href="http://dev.vaadin.com/ticket/10722">#10722</a>: Client ClassCastException Safari/IOS6</li>
- <li><a href="http://dev.vaadin.com/ticket/10723">#10723</a>: Vaadin test war cannot be deployed to Liferay 6.1.1</li>
- <li><a href="http://dev.vaadin.com/ticket/10735">#10735</a>: Ensure all server and shared classes are serializable</li>
- <li><a href="http://dev.vaadin.com/ticket/10743">#10743</a>: NPE when reloading the browser</li>
- <li><a href="http://dev.vaadin.com/ticket/10744">#10744</a>: Write tutorial about how to include a set of widgets in the eager bundle and defer others</li>
- <li><a href="http://dev.vaadin.com/ticket/10746">#10746</a>: Correct which connectors are eagerly loaded</li>
- <li><a href="http://dev.vaadin.com/ticket/10783">#10783</a>: A component which is 100% and expand=0 should not be shown</li>
- <li><a href="http://dev.vaadin.com/ticket/10792">#10792</a>: Analyze layouts should show an error for a relative sized component which will not be expanded</li>
-
+ <li>Separate server-side (<tt>vaadin-server</tt>) and client-side (<tt>vaadin-client</tt>, <tt>vaadin-client-compiler</tt>) development libraries</li>
+ <li>Precompiled widget set (<tt>vaadin-client-compiled</tt>) for server-side development</li>
+ <li>Shared library (<tt>vaadin-shared</tt>) for both server- and client-side libraries</li>
+ <li>Built-in themes (<tt>vaadin-themes</tt>) and the theme compiler (<tt>vaadin-theme-compiler</tt>)</li>
+ <li>Dependency libraries provided under the <tt>lib/</tt> folder</li>
</ul>
+ <p>
+ See the <tt>README.TXT</tt> in the installation package for detailed information
+ about the package contents. <a href="http://vaadin.com/book">Book of Vaadin</a>
+ (for Vaadin 7) gives more detailed instructions.
+ </p>
+
+ <p>
+ For server-side development, copy the <tt>vaadin-server</tt>,
+ <tt>vaadin-client-compiled</tt>, <tt>vaadin-shared</tt>,
+ <tt>vaadin-theme-compiler</tt>, and <tt>vaadin-themes</tt> from the main
+ folder and the dependencies from the <tt>lib</tt> folder to the
+ <tt>WEB-INF/lib</tt> folder of your Vaadin project. (The
+ <tt>vaadin-client-compiled</tt> is necessary if you do not wish to compile the
+ widget set by your own, which you need to do if you use almost any add-on
+ components.)
+ </p>
+
+ <p>
+ For pure client-side development, you only need the <tt>vaadin-client</tt> and
+ <tt>vaadin-client-compiler</tt> JARs, which should be put to a non-deployed
+ project library folder, such as <tt>lib</tt>. You also need them if you compile
+ the widget set for any reason, such as using Vaadin add-ons, or create new
+ server-side components integrated with client-side widgets.
+ </p>
+
<h2 id="migrating">Migrating from Vaadin 6</h2>
<p>
diff --git a/all/build.xml b/all/build.xml
index ef8ac71c4d..40d82b3d47 100644
--- a/all/build.xml
+++ b/all/build.xml
@@ -35,6 +35,9 @@
</target>
<target name="javadoc" depends="copy-jars">
+ <!-- Ensure filtered webcontent files are available -->
+ <antcall target="common.filter.webcontent" />
+
<!-- Unpack all source files to javadoc.temp.dir-->
<antcontrib:foreach list="${modules.to.publish.to.maven}" target="unzip.to.javadoctemp" param="module" />
@@ -76,6 +79,9 @@
</target>
<target name="zip" depends="copy-jars, javadoc">
+ <!-- Ensure filtered webcontent files are available -->
+ <antcall target="common.filter.webcontent" />
+
<zip destfile="${zip.file}">
<fileset dir="${temp.dir}">
<!-- Avoid conflicts with servlet and portlet API. They are provided by the container -->
diff --git a/build/bin/closed-to-rn.py b/build/bin/closed-to-rn.py
deleted file mode 100644
index 0928877e1c..0000000000
--- a/build/bin/closed-to-rn.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/python
-
-import sys,string
-
-filename = sys.argv[1]
-
-fin = open(filename, "r")
-lines = fin.readlines()
-fin.close()
-
-for line in lines:
- fields = string.split(line, "\t")
-
- if fields[0] != "id":
- ticketid = "<a href=\"http://dev.vaadin.com/ticket/%s\">#%s</a>" % (fields[0],fields[0])
- print " <li>%s: %s</li>" % (ticketid, fields[1])
diff --git a/buildhelpers/build.xml b/buildhelpers/build.xml
index c7b9eba9d3..b56209f6cc 100644
--- a/buildhelpers/build.xml
+++ b/buildhelpers/build.xml
@@ -36,6 +36,13 @@
</antcall>
</target>
+ <target name="fetch-release-notes-tickets">
+ <antcall target="common.exec-buildhelper">
+ <param name="main.class" value="com.vaadin.buildhelpers.FetchReleaseNotesTickets" />
+ <param name="output" value="${output}" />
+ </antcall>
+ </target>
+
<target name="tests" depends="checkstyle">
<!--<antcall target="common.tests.run" />-->
<echo>WHAT? No JUnit tests for ${module.name}!</echo>
diff --git a/buildhelpers/ivy.xml b/buildhelpers/ivy.xml
index ba44ebfc3f..d8e4457296 100644
--- a/buildhelpers/ivy.xml
+++ b/buildhelpers/ivy.xml
@@ -27,6 +27,8 @@
<artifact type="pom" ext="pom" />
</publications>
- <dependencies />
+ <dependencies>
+ <dependency org="commons-io" name="commons-io" rev="1.4" />
+ </dependencies>
</ivy-module>
diff --git a/buildhelpers/src/com/vaadin/buildhelpers/FetchReleaseNotesTickets.java b/buildhelpers/src/com/vaadin/buildhelpers/FetchReleaseNotesTickets.java
new file mode 100644
index 0000000000..76952bb329
--- /dev/null
+++ b/buildhelpers/src/com/vaadin/buildhelpers/FetchReleaseNotesTickets.java
@@ -0,0 +1,46 @@
+package com.vaadin.buildhelpers;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
+
+public class FetchReleaseNotesTickets {
+ private static final String queryURL = "http://dev.vaadin.com/query?status=closed&amp;milestone=Vaadin+@version@&amp;resolution=fixed&amp;format=tab&amp;order=id";
+ private static final String ticketTemplate = " <li><a href=\"http://dev.vaadin.com/ticket/@ticket@\">#@ticket@</a>: @description@</li>";
+
+ public static void main(String[] args) throws IOException {
+ String version = System.getProperty("vaadin.version");
+ if (version == null || version.equals("")) {
+ usage();
+ }
+
+ URL url = new URL(queryURL.replace("@version@", version));
+ URLConnection connection = url.openConnection();
+ InputStream urlStream = connection.getInputStream();
+
+ @SuppressWarnings("unchecked")
+ List<String> tickets = IOUtils.readLines(urlStream);
+
+ for (String ticket : tickets) {
+ String[] fields = ticket.split("\t");
+ if ("id".equals(fields[0])) {
+ // This is the header
+ continue;
+ }
+ System.out.println(ticketTemplate.replace("@ticket@", fields[0])
+ .replace("@description@", fields[1]));
+ }
+ urlStream.close();
+ }
+
+ private static void usage() {
+ System.err.println("Usage: "
+ + FetchReleaseNotesTickets.class.getSimpleName()
+ + " -Dvaadin.version=<version>");
+ System.exit(1);
+ }
+}
diff --git a/client-compiled/build.xml b/client-compiled/build.xml
index d1f3eda674..1a78b17a7f 100644
--- a/client-compiled/build.xml
+++ b/client-compiled/build.xml
@@ -98,6 +98,9 @@
</target>
<target name="client-compiled-cache.jar" depends="default-widgetset-cache">
+ <!-- Ensure filtered webcontent files are available -->
+ <antcall target="common.filter.webcontent" />
+
<jar file="${compiled-cache.jar}" compress="true">
<fileset dir="${gwtar.dir}">
<include name="**/*.gwtar" />
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java b/client-compiler/src/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java
index f8aa586064..2be3bf5a16 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java
+++ b/client-compiler/src/com/vaadin/server/widgetsetutils/ConnectorBundleLoaderFactory.java
@@ -334,6 +334,22 @@ public class ConnectorBundleLoaderFactory extends Generator {
writeGetters(logger, w, bundle);
writeSerializers(logger, w, bundle);
writeDelegateToWidget(logger, w, bundle);
+ writeHasGetTooltip(logger, w, bundle);
+ }
+
+ /**
+ * @deprecated As of 7.0.1. This is just a hack to avoid breaking backwards
+ * compatibility and will be removed in Vaadin 7.1
+ */
+ @Deprecated
+ private void writeHasGetTooltip(TreeLogger logger, SplittingSourceWriter w,
+ ConnectorBundle bundle) {
+ Set<JClassType> types = bundle.getHasGetTooltip();
+ for (JClassType type : types) {
+ w.println("store.setHasGetTooltipInfo(%s);",
+ getClassLiteralString(type));
+ w.splitIfNeeded();
+ }
}
private void writeDelegateToWidget(TreeLogger logger,
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java b/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java
index ff91e249b7..f6dc982f15 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java
+++ b/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/ConnectorBundle.java
@@ -63,6 +63,7 @@ public class ConnectorBundle {
private final Set<JClassType> needsGwtConstructor = new HashSet<JClassType>();
private final Set<JClassType> visitedTypes = new HashSet<JClassType>();
private final Set<JClassType> needsProxySupport = new HashSet<JClassType>();
+ private final Set<JClassType> hasGetTooltip = new HashSet<JClassType>();
private final Map<JClassType, Set<String>> identifiers = new HashMap<JClassType, Set<String>>();
private final Map<JClassType, Set<JMethod>> needsReturnType = new HashMap<JClassType, Set<JMethod>>();
@@ -618,4 +619,38 @@ public class ConnectorBundle {
public Set<Property> getNeedsDelegateToWidget() {
return Collections.unmodifiableSet(needsDelegateToWidget);
}
+
+ /**
+ * @deprecated As of 7.0.1. This is just a hack to avoid breaking backwards
+ * compatibility and will be removed in Vaadin 7.1
+ */
+ @Deprecated
+ public Set<JClassType> getHasGetTooltip() {
+ return Collections.unmodifiableSet(hasGetTooltip);
+ }
+
+ /**
+ * @deprecated As of 7.0.1. This is just a hack to avoid breaking backwards
+ * compatibility and will be removed in Vaadin 7.1
+ */
+ @Deprecated
+ public void setHasGetTooltip(JClassType type) {
+ if (!isHasGetTooltip(type)) {
+ hasGetTooltip.add(type);
+ }
+ }
+
+ /**
+ * @deprecated As of 7.0.1. This is just a hack to avoid breaking backwards
+ * compatibility and will be removed in Vaadin 7.1
+ */
+ @Deprecated
+ private boolean isHasGetTooltip(JClassType type) {
+ if (hasGetTooltip.contains(type)) {
+ return true;
+ } else {
+ return previousBundle != null
+ && previousBundle.isHasGetTooltip(type);
+ }
+ }
} \ No newline at end of file
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java b/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
index 4de9d2ae99..662ecf872b 100644
--- a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
+++ b/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
@@ -47,6 +47,25 @@ public class WidgetInitVisitor extends TypeVisitor {
bundle.setNeedsReturnType(type, getWidget);
}
+ // Hack to detect when getTooltipInfo has a custom implementation
+ // #11051
+ JClassType getTooltipParamType = type.getOracle().findType(
+ "com.google.gwt.dom.client.Element");
+ JMethod getTooltipInfoMethod = findInheritedMethod(type,
+ "getTooltipInfo", getTooltipParamType);
+ if (getTooltipInfoMethod == null) {
+ logger.log(Type.ERROR, "Could not find getTooltipInfo in "
+ + type.getQualifiedSourceName());
+ throw new UnableToCompleteException();
+ }
+ JClassType enclosingType = getTooltipInfoMethod.getEnclosingType();
+ if (!enclosingType.getQualifiedSourceName().equals(
+ AbstractComponentConnector.class.getCanonicalName())) {
+ logger.log(Type.WARN, type.getQualifiedSourceName()
+ + " has overridden getTooltipInfo");
+ bundle.setHasGetTooltip(type);
+ }
+
// Check state properties for @DelegateToWidget
JMethod getState = findInheritedMethod(type, "getState");
JClassType stateType = getState.getReturnType().isClass();
diff --git a/client/src/com/vaadin/client/ApplicationConfiguration.java b/client/src/com/vaadin/client/ApplicationConfiguration.java
index 5c3ec36d78..9ba660626e 100644
--- a/client/src/com/vaadin/client/ApplicationConfiguration.java
+++ b/client/src/com/vaadin/client/ApplicationConfiguration.java
@@ -381,11 +381,14 @@ public class ApplicationConfiguration implements EntryPoint {
@Override
public void execute() {
+ Profiler.enter("ApplicationConfiguration.startApplication");
ApplicationConfiguration appConf = getConfigFromDOM(applicationId);
ApplicationConnection a = GWT
.create(ApplicationConnection.class);
a.init(widgetSet, appConf);
runningApplications.add(a);
+ Profiler.leave("ApplicationConfiguration.startApplication");
+
a.start();
}
});
@@ -532,6 +535,8 @@ public class ApplicationConfiguration implements EntryPoint {
@Override
public void onModuleLoad() {
+ Profiler.reset();
+ Profiler.enter("ApplicationConfiguration.onModuleLoad");
BrowserInfo browserInfo = BrowserInfo.get();
@@ -567,6 +572,7 @@ public class ApplicationConfiguration implements EntryPoint {
VConsole.getImplementation().error(e);
}
});
+ Profiler.leave("ApplicationConfiguration.onModuleLoad");
if (SuperDevMode.enableBasedOnParameter()) {
// Do not start any application as super dev mode will refresh the
diff --git a/client/src/com/vaadin/client/ApplicationConnection.java b/client/src/com/vaadin/client/ApplicationConnection.java
index 44c7397655..de034a65a6 100644
--- a/client/src/com/vaadin/client/ApplicationConnection.java
+++ b/client/src/com/vaadin/client/ApplicationConnection.java
@@ -1311,8 +1311,6 @@ public class ApplicationConnection {
return;
}
- Profiler.reset();
-
VConsole.log("Handling message from server");
eventBus.fireEvent(new ResponseHandlingStartedEvent(this));
@@ -1397,15 +1395,12 @@ public class ApplicationConnection {
Profiler.leave("Handling locales");
Profiler.enter("Handling meta information");
- boolean repaintAll = false;
ValueMap meta = null;
if (json.containsKey("meta")) {
VConsole.log(" * Handling meta information");
meta = json.getValueMap("meta");
if (meta.containsKey("repaintAll")) {
- repaintAll = true;
- uIConnector.getWidget().clear();
- getConnectorMap().clear();
+ prepareRepaintAll();
if (meta.containsKey("invalidLayouts")) {
validatingLayouts = true;
}
@@ -1528,10 +1523,46 @@ public class ApplicationConnection {
endRequest();
if (Profiler.isEnabled()) {
- Profiler.logTimings();
- Profiler.reset();
+ Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
+ public void execute() {
+ Profiler.logTimings();
+ Profiler.reset();
+ }
+ });
+ }
+
+ }
+
+ /**
+ * Properly clean up any old stuff to ensure everything is properly
+ * reinitialized.
+ */
+ private void prepareRepaintAll() {
+ String uiConnectorId = uIConnector.getConnectorId();
+ if (uiConnectorId == null) {
+ // Nothing to clear yet
+ return;
}
+ // Create fake server response that says that the uiConnector
+ // has no children
+ JSONObject fakeHierarchy = new JSONObject();
+ fakeHierarchy.put(uiConnectorId, new JSONArray());
+ JSONObject fakeJson = new JSONObject();
+ fakeJson.put("hierarchy", fakeHierarchy);
+ ValueMap fakeValueMap = fakeJson.getJavaScriptObject().cast();
+
+ // Update hierarchy based on the fake response
+ ConnectorHierarchyUpdateResult connectorHierarchyUpdateResult = updateConnectorHierarchy(fakeValueMap);
+
+ // Send hierarchy events based on the fake update
+ sendHierarchyChangeEvents(connectorHierarchyUpdateResult.events);
+
+ // Unregister all the old connectors that have now been removed
+ unregisterRemovedConnectors();
+
+ getLayoutManager().cleanMeasuredSizes();
}
private void updateCaptions(
@@ -1548,8 +1579,10 @@ public class ApplicationConnection {
// Find components with potentially changed caption state
for (StateChangeEvent event : pendingStateChangeEvents) {
- ServerConnector connector = event.getConnector();
- needsCaptionUpdate.add(connector);
+ if (VCaption.mightChange(event)) {
+ ServerConnector connector = event.getConnector();
+ needsCaptionUpdate.add(connector);
+ }
}
// Update captions for all suitable candidates
@@ -1916,6 +1949,7 @@ public class ApplicationConnection {
}
}
+ Profiler.enter("updateConnectorState newWithoutState");
// Fire events for properties using the default value for newly
// created connectors even if there were no state changes
for (ServerConnector connector : remainingNewConnectors) {
@@ -1928,6 +1962,7 @@ public class ApplicationConnection {
events.add(event);
}
+ Profiler.leave("updateConnectorState newWithoutState");
Profiler.leave("updateConnectorState");
diff --git a/client/src/com/vaadin/client/ConnectorMap.java b/client/src/com/vaadin/client/ConnectorMap.java
index 5f6053dd32..810f12824a 100644
--- a/client/src/com/vaadin/client/ConnectorMap.java
+++ b/client/src/com/vaadin/client/ConnectorMap.java
@@ -126,8 +126,9 @@ public class ConnectorMap {
componentDetail.setConnector(connector);
if (connector instanceof ComponentConnector) {
ComponentConnector pw = (ComponentConnector) connector;
+ Widget widget = pw.getWidget();
Profiler.enter("ConnectorMap.setConnectorId");
- setConnectorId(pw.getWidget().getElement(), id);
+ setConnectorId(widget.getElement(), id);
Profiler.leave("ConnectorMap.setConnectorId");
}
Profiler.leave("ConnectorMap.registerConnector");
diff --git a/client/src/com/vaadin/client/FastStringMap.java b/client/src/com/vaadin/client/FastStringMap.java
index cbb61427d2..5b15b1263a 100644
--- a/client/src/com/vaadin/client/FastStringMap.java
+++ b/client/src/com/vaadin/client/FastStringMap.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2012 Vaadin Ltd.
+ * Copyright 2000-2013 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
diff --git a/client/src/com/vaadin/client/JsArrayObject.java b/client/src/com/vaadin/client/JsArrayObject.java
index 182b68ac3f..5b45650684 100644
--- a/client/src/com/vaadin/client/JsArrayObject.java
+++ b/client/src/com/vaadin/client/JsArrayObject.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2012 Vaadin Ltd.
+ * Copyright 2000-2013 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
diff --git a/client/src/com/vaadin/client/VCaption.java b/client/src/com/vaadin/client/VCaption.java
index efa9be1850..47287636c4 100644
--- a/client/src/com/vaadin/client/VCaption.java
+++ b/client/src/com/vaadin/client/VCaption.java
@@ -20,6 +20,7 @@ import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.HTML;
+import com.vaadin.client.communication.StateChangeEvent;
import com.vaadin.client.ui.AbstractFieldConnector;
import com.vaadin.client.ui.Icon;
import com.vaadin.shared.AbstractComponentState;
@@ -408,6 +409,29 @@ public class VCaption extends HTML {
}
/**
+ * Checks whether anything in a given state change might cause the caption
+ * to change.
+ *
+ * @param event
+ * the state change event to check
+ * @return <code>true</code> if the caption might have changed; otherwise
+ * <code>false</code>
+ */
+ public static boolean mightChange(StateChangeEvent event) {
+ if (event.hasPropertyChanged("caption")) {
+ return true;
+ }
+ if (event.hasPropertyChanged("resources")) {
+ return true;
+ }
+ if (event.hasPropertyChanged("errorMessage")) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
* Returns Paintable for which this Caption belongs to.
*
* @return owner Widget
diff --git a/client/src/com/vaadin/client/VTooltip.java b/client/src/com/vaadin/client/VTooltip.java
index 6e365b4017..759b90a8cd 100644
--- a/client/src/com/vaadin/client/VTooltip.java
+++ b/client/src/com/vaadin/client/VTooltip.java
@@ -366,8 +366,10 @@ public class VTooltip extends VOverlay {
* Widget which DOM handlers are connected
*/
public void connectHandlersToWidget(Widget widget) {
+ Profiler.enter("VTooltip.connectHandlersToWidget");
widget.addDomHandler(tooltipEventHandler, MouseMoveEvent.getType());
widget.addDomHandler(tooltipEventHandler, ClickEvent.getType());
widget.addDomHandler(tooltipEventHandler, KeyDownEvent.getType());
+ Profiler.leave("VTooltip.connectHandlersToWidget");
}
}
diff --git a/client/src/com/vaadin/client/metadata/AsyncBundleLoader.java b/client/src/com/vaadin/client/metadata/AsyncBundleLoader.java
index e0ebb5e047..6be89c9cc9 100644
--- a/client/src/com/vaadin/client/metadata/AsyncBundleLoader.java
+++ b/client/src/com/vaadin/client/metadata/AsyncBundleLoader.java
@@ -19,6 +19,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import com.vaadin.client.Profiler;
+
public abstract class AsyncBundleLoader {
public enum State {
NOT_STARTED, LOADING, LOADED, ERROR;
@@ -63,9 +65,11 @@ public abstract class AsyncBundleLoader {
public void load(BundleLoadCallback callback, TypeDataStore store) {
assert state == State.NOT_STARTED;
+ Profiler.enter("AsyncBundleLoader.load");
state = State.LOADING;
addCallback(callback);
load(store);
+ Profiler.leave("AsyncBundleLoader.load");
}
public void addCallback(BundleLoadCallback callback) {
diff --git a/client/src/com/vaadin/client/metadata/TypeDataStore.java b/client/src/com/vaadin/client/metadata/TypeDataStore.java
index 5b466146a3..c1eca0a168 100644
--- a/client/src/com/vaadin/client/metadata/TypeDataStore.java
+++ b/client/src/com/vaadin/client/metadata/TypeDataStore.java
@@ -38,6 +38,7 @@ public class TypeDataStore {
private final FastStringSet delayedMethods = FastStringSet.create();
private final FastStringSet lastOnlyMethods = FastStringSet.create();
+ private final FastStringSet hasGetTooltipInfo = FastStringSet.create();
private final FastStringMap<Type> returnTypes = FastStringMap.create();
private final FastStringMap<Invoker> invokers = FastStringMap.create();
@@ -276,4 +277,22 @@ public class TypeDataStore {
public static boolean hasProperties(Type type) {
return get().properties.containsKey(type.getSignature());
}
+
+ /**
+ * @deprecated As of 7.0.1. This is just a hack to avoid breaking backwards
+ * compatibility and will be removed in Vaadin 7.1
+ */
+ @Deprecated
+ public void setHasGetTooltipInfo(Class<?> clazz) {
+ hasGetTooltipInfo.add(getType(clazz).getSignature());
+ }
+
+ /**
+ * @deprecated As of 7.0.1. This is just a hack to avoid breaking backwards
+ * compatibility and will be removed in Vaadin 7.1
+ */
+ @Deprecated
+ public static boolean getHasGetTooltipInfo(Class clazz) {
+ return get().hasGetTooltipInfo.contains(getType(clazz).getSignature());
+ }
}
diff --git a/client/src/com/vaadin/client/ui/AbstractComponentConnector.java b/client/src/com/vaadin/client/ui/AbstractComponentConnector.java
index e35e3eafcf..694db6f02c 100644
--- a/client/src/com/vaadin/client/ui/AbstractComponentConnector.java
+++ b/client/src/com/vaadin/client/ui/AbstractComponentConnector.java
@@ -15,9 +15,6 @@
*/
package com.vaadin.client.ui;
-import java.util.ArrayList;
-import java.util.List;
-
import com.google.gwt.core.client.JsArrayString;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.Focusable;
@@ -27,6 +24,7 @@ import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.HasComponentsConnector;
import com.vaadin.client.LayoutManager;
+import com.vaadin.client.Profiler;
import com.vaadin.client.ServerConnector;
import com.vaadin.client.StyleConstants;
import com.vaadin.client.TooltipInfo;
@@ -37,6 +35,7 @@ import com.vaadin.client.communication.StateChangeEvent;
import com.vaadin.client.metadata.NoDataException;
import com.vaadin.client.metadata.Type;
import com.vaadin.client.metadata.TypeData;
+import com.vaadin.client.metadata.TypeDataStore;
import com.vaadin.client.ui.datefield.PopupDateFieldConnector;
import com.vaadin.client.ui.ui.UIConnector;
import com.vaadin.shared.AbstractComponentState;
@@ -55,6 +54,8 @@ public abstract class AbstractComponentConnector extends AbstractConnector
private boolean initialStateEvent = true;
+ private boolean tooltipListenersAttached = false;
+
/**
* The style names from getState().getStyles() which are currently applied
* to the widget.
@@ -67,14 +68,6 @@ public abstract class AbstractComponentConnector extends AbstractConnector
public AbstractComponentConnector() {
}
- @Override
- protected void init() {
- super.init();
-
- getConnection().getVTooltip().connectHandlersToWidget(getWidget());
-
- }
-
/**
* Creates and returns the widget for this VPaintableWidget. This method
* should only be called once when initializing the paintable.
@@ -105,7 +98,11 @@ public abstract class AbstractComponentConnector extends AbstractConnector
@Override
public Widget getWidget() {
if (widget == null) {
+ Profiler.enter("AbstractComponentConnector.createWidget for "
+ + Util.getSimpleName(this));
widget = createWidget();
+ Profiler.leave("AbstractComponentConnector.createWidget for "
+ + Util.getSimpleName(this));
}
return widget;
@@ -123,6 +120,8 @@ public abstract class AbstractComponentConnector extends AbstractConnector
@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ Profiler.enter("AbstractComponentConnector.onStateChanged");
+ Profiler.enter("AbstractComponentConnector.onStateChanged update id");
if (stateChangeEvent.hasPropertyChanged("id")) {
if (getState().id != null) {
getWidget().getElement().setId(getState().id);
@@ -130,17 +129,20 @@ public abstract class AbstractComponentConnector extends AbstractConnector
getWidget().getElement().removeAttribute("id");
}
}
+ Profiler.leave("AbstractComponentConnector.onStateChanged update id");
/*
* Disabled state may affect (override) tabindex so the order must be
* first setting tabindex, then enabled state (through super
* implementation).
*/
+ Profiler.enter("AbstractComponentConnector.onStateChanged update tab index");
if (getState() instanceof TabIndexState
&& getWidget() instanceof Focusable) {
((Focusable) getWidget())
.setTabIndex(((TabIndexState) getState()).tabIndex);
}
+ Profiler.leave("AbstractComponentConnector.onStateChanged update tab index");
super.onStateChanged(stateChangeEvent);
@@ -154,7 +156,20 @@ public abstract class AbstractComponentConnector extends AbstractConnector
updateComponentSize();
+ Profiler.enter("AbstractComponentContainer.onStateChanged check tooltip");
+ if (!tooltipListenersAttached && hasTooltip()) {
+ /*
+ * Add event handlers for tooltips if they are needed but have not
+ * yet been added.
+ */
+ tooltipListenersAttached = true;
+ getConnection().getVTooltip().connectHandlersToWidget(getWidget());
+ }
+ Profiler.leave("AbstractComponentContainer.onStateChanged check tooltip");
+
initialStateEvent = false;
+
+ Profiler.leave("AbstractComponentConnector.onStateChanged");
}
@Override
@@ -182,6 +197,8 @@ public abstract class AbstractComponentConnector extends AbstractConnector
}
private void updateComponentSize() {
+ Profiler.enter("AbstractComponentConnector.updateComponentSize");
+
String newWidth = getState().width == null ? "" : getState().width;
String newHeight = getState().height == null ? "" : getState().height;
@@ -209,11 +226,17 @@ public abstract class AbstractComponentConnector extends AbstractConnector
// Set defined sizes
Widget widget = getWidget();
+ Profiler.enter("AbstractComponentConnector.updateComponentSize update styleNames");
widget.setStyleName("v-has-width", !isUndefinedWidth());
widget.setStyleName("v-has-height", !isUndefinedHeight());
+ Profiler.leave("AbstractComponentConnector.updateComponentSize update styleNames");
+ Profiler.enter("AbstractComponentConnector.updateComponentSize update DOM");
widget.setHeight(newHeight);
widget.setWidth(newWidth);
+ Profiler.leave("AbstractComponentConnector.updateComponentSize update DOM");
+
+ Profiler.leave("AbstractComponentConnector.updateComponentSize");
}
@Override
@@ -257,10 +280,12 @@ public abstract class AbstractComponentConnector extends AbstractConnector
* </p>
*/
protected void updateWidgetStyleNames() {
+ Profiler.enter("AbstractComponentConnector.updateWidgetStyleNames");
AbstractComponentState state = getState();
String primaryStyleName = getWidget().getStylePrimaryName();
- if (state.primaryStyleName != null) {
+ if (state.primaryStyleName != null
+ && !state.primaryStyleName.equals(primaryStyleName)) {
/*
* We overwrite the widgets primary stylename if state defines a
* primary stylename.
@@ -302,7 +327,7 @@ public abstract class AbstractComponentConnector extends AbstractConnector
}
}
-
+ Profiler.leave("AbstractComponentConnector.updateWidgetStyleNames");
}
/**
@@ -394,11 +419,16 @@ public abstract class AbstractComponentConnector extends AbstractConnector
}
}
- /*
- * (non-Javadoc)
+ /**
+ * {@inheritDoc}
+ *
+ * <p>
+ * When overriding this method, {@link #hasTooltip()} should also be
+ * overridden to return true in all situations where this method might
+ * return a non-empty result.
+ * </p>
*
- * @see com.vaadin.client.ComponentConnector#getTooltipInfo(com.
- * google.gwt.dom.client.Element)
+ * @see ComponentConnector#getTooltipInfo(Element)
*/
@Override
public TooltipInfo getTooltipInfo(Element element) {
@@ -406,6 +436,35 @@ public abstract class AbstractComponentConnector extends AbstractConnector
}
/**
+ * Check whether there might be a tooltip for this component. The framework
+ * will only add event listeners for automatically handling tooltips (using
+ * {@link #getTooltipInfo(Element)}) if this method returns true.
+ *
+ * @return <code>true</code> if some part of the component might have a
+ * tooltip, otherwise <code>false</code>
+ */
+ private boolean hasTooltip() {
+ /*
+ * Hack to avoid breaking backwards compatibility - use a generator to
+ * know whether there's a custom implementation of getTooltipInfo, and
+ * in that case always assume that there might be tooltip.
+ */
+ if (TypeDataStore.getHasGetTooltipInfo(getClass())) {
+ return true;
+ }
+
+ // Normally, there is a tooltip if description or errorMessage is set
+ AbstractComponentState state = getState();
+ if (state.description != null && !state.description.equals("")) {
+ return true;
+ } else if (state.errorMessage != null && !state.errorMessage.equals("")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
* Gets the icon set for this component.
*
* @return the URL of the icon, or <code>null</code> if no icon has been
diff --git a/client/src/com/vaadin/client/ui/AbstractConnector.java b/client/src/com/vaadin/client/ui/AbstractConnector.java
index 32f5370dc3..2c76aa93fe 100644
--- a/client/src/com/vaadin/client/ui/AbstractConnector.java
+++ b/client/src/com/vaadin/client/ui/AbstractConnector.java
@@ -218,6 +218,7 @@ public abstract class AbstractConnector implements ServerConnector,
}
if (statePropertyHandlerManagers != null
&& event instanceof StateChangeEvent) {
+ Profiler.enter("AbstractConnector.fireEvent statePropertyHandlerManagers");
StateChangeEvent stateChangeEvent = (StateChangeEvent) event;
JsArrayString keys = statePropertyHandlerManagers.getKeys();
for (int i = 0; i < keys.length(); i++) {
@@ -226,6 +227,7 @@ public abstract class AbstractConnector implements ServerConnector,
statePropertyHandlerManagers.get(property).fireEvent(event);
}
}
+ Profiler.leave("AbstractConnector.fireEvent statePropertyHandlerManagers");
}
if (Profiler.isEnabled()) {
Profiler.leave(profilerKey);
@@ -400,6 +402,7 @@ public abstract class AbstractConnector implements ServerConnector,
if (lastEnabledState == enabledState) {
return;
}
+ Profiler.enter("AbstractConnector.updateEnabledState");
lastEnabledState = enabledState;
for (ServerConnector c : getChildren()) {
@@ -407,6 +410,7 @@ public abstract class AbstractConnector implements ServerConnector,
// their parent
c.updateEnabledState(c.isEnabled());
}
+ Profiler.leave("AbstractConnector.updateEnabledState");
}
/**
diff --git a/client/src/com/vaadin/client/ui/VAbsoluteLayout.java b/client/src/com/vaadin/client/ui/VAbsoluteLayout.java
index 92a51f209d..88fbae6e88 100644
--- a/client/src/com/vaadin/client/ui/VAbsoluteLayout.java
+++ b/client/src/com/vaadin/client/ui/VAbsoluteLayout.java
@@ -326,6 +326,10 @@ public class VAbsoluteLayout extends ComplexPanel {
Style wrapperStyle = wrapper.getElement().getStyle();
Style widgetStyle = wrapper.getWidget().getElement().getStyle();
+
+ // Ensure previous heights do not affect the measures
+ wrapperStyle.clearHeight();
+
if (widgetStyle.getHeight() != null
&& widgetStyle.getHeight().endsWith("%")) {
int h;
@@ -343,8 +347,6 @@ public class VAbsoluteLayout extends ComplexPanel {
- wrapper.getElement().getOffsetTop();
}
wrapperStyle.setHeight(h, Unit.PX);
- } else {
- wrapperStyle.clearHeight();
}
wrapper.updateCaptionPosition();
@@ -380,6 +382,9 @@ public class VAbsoluteLayout extends ComplexPanel {
Style wrapperStyle = wrapper.getElement().getStyle();
Style widgetStyle = wrapper.getWidget().getElement().getStyle();
+ // Ensure previous heights do not affect the measures
+ wrapperStyle.clearWidth();
+
if (widgetStyle.getWidth() != null
&& widgetStyle.getWidth().endsWith("%")) {
int w;
@@ -398,8 +403,6 @@ public class VAbsoluteLayout extends ComplexPanel {
- wrapper.getElement().getOffsetLeft();
}
wrapperStyle.setWidth(w, Unit.PX);
- } else {
- wrapperStyle.clearWidth();
}
wrapper.updateCaptionPosition();
diff --git a/client/src/com/vaadin/client/ui/VCssLayout.java b/client/src/com/vaadin/client/ui/VCssLayout.java
index 0936859ace..4357116707 100644
--- a/client/src/com/vaadin/client/ui/VCssLayout.java
+++ b/client/src/com/vaadin/client/ui/VCssLayout.java
@@ -18,6 +18,7 @@ package com.vaadin.client.ui;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.Profiler;
import com.vaadin.client.StyleConstants;
/**
@@ -41,12 +42,15 @@ public class VCssLayout extends FlowPanel {
* For internal use only. May be removed or replaced in the future.
*/
public void addOrMove(Widget child, int index) {
+ Profiler.enter("VCssLayout.addOrMove");
if (child.getParent() == this) {
int currentIndex = getWidgetIndex(child);
if (index == currentIndex) {
+ Profiler.leave("VCssLayout.addOrMove");
return;
}
}
insert(child, index);
+ Profiler.leave("VCssLayout.addOrMove");
}
}
diff --git a/client/src/com/vaadin/client/ui/VScrollTable.java b/client/src/com/vaadin/client/ui/VScrollTable.java
index 75d67b82d6..c76dd38d8f 100644
--- a/client/src/com/vaadin/client/ui/VScrollTable.java
+++ b/client/src/com/vaadin/client/ui/VScrollTable.java
@@ -1191,6 +1191,39 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return totalRows;
}
+ /**
+ * Returns the extra space that is given to the header column when column
+ * width is determined by header text.
+ *
+ * @return extra space in pixels
+ */
+ private int getHeaderPadding() {
+ return scrollBody.getCellExtraWidth();
+ }
+
+ /**
+ * This method exists for the needs of {@link VTreeTable} only. Not part of
+ * the official API, <b>extend at your own risk</b>. May be removed or
+ * replaced in the future.
+ *
+ * @return index of TreeTable's hierarchy column, or -1 if not applicable
+ */
+ protected int getHierarchyColumnIndex() {
+ return -1;
+ }
+
+ /**
+ * For internal use only. May be removed or replaced in the future.
+ */
+ public void updateMaxIndent() {
+ int oldIndent = scrollBody.getMaxIndent();
+ scrollBody.calculateMaxIndent();
+ if (oldIndent != scrollBody.getMaxIndent()) {
+ // indent updated, headers might need adjusting
+ triggerLazyColumnAdjustment(true);
+ }
+ }
+
/** For internal use only. May be removed or replaced in the future. */
public void focusRowFromBody() {
if (selectedRowKeys.size() == 1) {
@@ -1382,6 +1415,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* amount of rows in data set
*/
public void updateBody(UIDL uidl, int firstRow, int reqRows) {
+ int oldIndent = scrollBody.getMaxIndent();
if (uidl == null || reqRows < 1) {
// container is empty, remove possibly existing rows
if (firstRow <= 0) {
@@ -1399,6 +1433,11 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
scrollBody.renderRows(uidl, firstRow, reqRows);
discardRowsOutsideCacheWindow();
+ scrollBody.calculateMaxIndent();
+ if (oldIndent != scrollBody.getMaxIndent()) {
+ // indent updated, headers might need adjusting
+ headerChangedDuringUpdate = true;
+ }
}
/** For internal use only. May be removed or replaced in the future. */
@@ -1591,31 +1630,55 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return tHead.getHeaderCell(index).getColKey();
}
- private void setColWidth(int colIndex, int w, boolean isDefinedWidth) {
+ /**
+ * Note: not part of the official API, extend at your own risk. May be
+ * removed or replaced in the future.
+ *
+ * Sets the indicated column's width for headers and scrollBody alike.
+ *
+ * @param colIndex
+ * index of the modified column
+ * @param w
+ * new width (may be subject to modifications if doesn't meet
+ * minimum requirements)
+ * @param isDefinedWidth
+ * disables expand ratio if set true
+ */
+ protected void setColWidth(int colIndex, int w, boolean isDefinedWidth) {
final HeaderCell hcell = tHead.getHeaderCell(colIndex);
// Make sure that the column grows to accommodate the sort indicator if
// necessary.
- if (w < hcell.getMinWidth()) {
- w = hcell.getMinWidth();
+ // get min width with no indent or padding
+ int minWidth = hcell.getMinWidth(false, false);
+ if (w < minWidth) {
+ w = minWidth;
}
- // Set header column width
+ // Set header column width WITHOUT INDENT
hcell.setWidth(w, isDefinedWidth);
+ // Set footer column width likewise
+ FooterCell fcell = tFoot.getFooterCell(colIndex);
+ fcell.setWidth(w, isDefinedWidth);
+
// Ensure indicators have been taken into account
tHead.resizeCaptionContainer(hcell);
+ // Make sure that the body column grows to accommodate the indent if
+ // necessary.
+ // get min width with indent, no padding
+ minWidth = hcell.getMinWidth(true, false);
+ if (w < minWidth) {
+ w = minWidth;
+ }
+
// Set body column width
scrollBody.setColWidth(colIndex, w);
-
- // Set footer column width
- FooterCell fcell = tFoot.getFooterCell(colIndex);
- fcell.setWidth(w, isDefinedWidth);
}
private int getColWidth(String colKey) {
- return tHead.getHeaderCell(colKey).getWidth();
+ return tHead.getHeaderCell(colKey).getWidthWithIndent();
}
/**
@@ -1813,22 +1876,37 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
tHead.enableBrowserIntelligence();
tFoot.enableBrowserIntelligence();
+ int hierarchyColumnIndent = scrollBody != null ? scrollBody
+ .getMaxIndent() : 0;
+ HeaderCell hierarchyHeaderWithExpandRatio = null;
+
// first loop: collect natural widths
while (headCells.hasNext()) {
final HeaderCell hCell = (HeaderCell) headCells.next();
final FooterCell fCell = (FooterCell) footCells.next();
+ boolean needsIndent = hierarchyColumnIndent > 0
+ && hCell.isHierarchyColumn();
int w = hCell.getWidth();
if (hCell.isDefinedWidth()) {
// server has defined column width explicitly
+ if (needsIndent && w < hierarchyColumnIndent) {
+ // hierarchy indent overrides explicitly set width
+ w = hierarchyColumnIndent;
+ }
totalExplicitColumnsWidths += w;
} else {
if (hCell.getExpandRatio() > 0) {
expandRatioDivider += hCell.getExpandRatio();
w = 0;
+ if (needsIndent && w < hierarchyColumnIndent) {
+ hierarchyHeaderWithExpandRatio = hCell;
+ // don't add to widths here, because will be included in
+ // the expand ratio space if there's enough of it
+ }
} else {
// get and store greater of header width and column width,
- // and
- // store it as a minimumn natural col width
+ // and store it as a minimum natural column width (these
+ // already contain the indent if any)
int headerWidth = hCell.getNaturalColumnWidth(i);
int footerWidth = fCell.getNaturalColumnWidth(i);
w = headerWidth > footerWidth ? headerWidth : footerWidth;
@@ -1840,6 +1918,9 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
total += w;
i++;
}
+ if (hierarchyHeaderWithExpandRatio != null) {
+ total += hierarchyColumnIndent;
+ }
tHead.disableBrowserIntelligence();
tFoot.disableBrowserIntelligence();
@@ -1871,13 +1952,24 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
if (availW > total) {
// natural size is smaller than available space
- final int extraSpace = availW - total;
+ int extraSpace = availW - total;
+ if (hierarchyHeaderWithExpandRatio != null) {
+ /*
+ * add the indent's space back to ensure each column gets an
+ * even share according to the expand ratios (note: if the
+ * allocated space isn't enough for the hierarchy column it
+ * shall be treated like a defined width column and the indent
+ * space gets removed from the extra space again)
+ */
+ extraSpace += hierarchyColumnIndent;
+ }
final int totalWidthR = total - totalExplicitColumnsWidths;
int checksum = 0;
if (extraSpace == 1) {
// We cannot divide one single pixel so we give it the first
// undefined column
+ // no need to worry about indent here
headCells = tHead.iterator();
i = 0;
checksum = availW;
@@ -1891,6 +1983,22 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
}
} else if (expandRatioDivider > 0) {
+ boolean setIndentToHierarchyHeader = false;
+ if (hierarchyHeaderWithExpandRatio != null) {
+ // ensure first that the hierarchyColumn gets at least the
+ // space allocated for indent
+ final int newSpace = Math
+ .round((extraSpace * (hierarchyHeaderWithExpandRatio
+ .getExpandRatio() / expandRatioDivider)));
+ if (newSpace < hierarchyColumnIndent) {
+ // not enough space for indent, remove indent from the
+ // extraSpace again and handle hierarchy column's header
+ // separately
+ setIndentToHierarchyHeader = true;
+ extraSpace -= hierarchyColumnIndent;
+ }
+ }
+
// visible columns have some active expand ratios, excess
// space is divided according to them
headCells = tHead.iterator();
@@ -1899,9 +2007,17 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
HeaderCell hCell = (HeaderCell) headCells.next();
if (hCell.getExpandRatio() > 0) {
int w = widths[i];
- final int newSpace = Math.round((extraSpace * (hCell
- .getExpandRatio() / expandRatioDivider)));
- w += newSpace;
+ if (setIndentToHierarchyHeader
+ && hierarchyHeaderWithExpandRatio.equals(hCell)) {
+ // hierarchy column's header is no longer part of
+ // the expansion divide and only gets indent
+ w += hierarchyColumnIndent;
+ } else {
+ final int newSpace = Math
+ .round((extraSpace * (hCell
+ .getExpandRatio() / expandRatioDivider)));
+ w += newSpace;
+ }
widths[i] = w;
}
checksum += widths[i];
@@ -1911,6 +2027,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
// no expand ratios defined, we will share extra space
// relatively to "natural widths" among those without
// explicit width
+ // no need to worry about indent here, it's already included
headCells = tHead.iterator();
i = 0;
while (headCells.hasNext()) {
@@ -1946,7 +2063,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
}
} else {
- // bodys size will be more than available and scrollbar will appear
+ // body's size will be more than available and scrollbar will appear
}
// last loop: set possibly modified values or reset if new tBody
@@ -2046,8 +2163,8 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
}
/**
- * Note, this method is not official api although declared as protected.
- * Extend at you own risk.
+ * Note: this method is not part of official API although declared as
+ * protected. Extend at your own risk.
*
* @return true if content area will have scrollbars visible.
*/
@@ -2430,6 +2547,16 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
expandRatio = 0;
}
+ /**
+ * Sets width to the header cell. This width should not include any
+ * possible indent modifications that are present in
+ * {@link VScrollTableBody#getMaxIndent()}.
+ *
+ * @param w
+ * required width of the cell sans indentations
+ * @param ensureDefinedWidth
+ * disables expand ratio if required
+ */
public void setWidth(int w, boolean ensureDefinedWidth) {
if (ensureDefinedWidth) {
definedWidth = true;
@@ -2453,15 +2580,23 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* unless TD width is not explicitly set.
*/
if (scrollBody != null) {
- int tdWidth = width + scrollBody.getCellExtraWidth();
+ int maxIndent = scrollBody.getMaxIndent();
+ if (w < maxIndent && isHierarchyColumn()) {
+ w = maxIndent;
+ }
+ int tdWidth = w + scrollBody.getCellExtraWidth();
setWidth(tdWidth + "px");
} else {
Scheduler.get().scheduleDeferred(new Command() {
@Override
public void execute() {
- int tdWidth = width
- + scrollBody.getCellExtraWidth();
+ int maxIndent = scrollBody.getMaxIndent();
+ int tdWidth = width;
+ if (tdWidth < maxIndent && isHierarchyColumn()) {
+ tdWidth = maxIndent;
+ }
+ tdWidth += scrollBody.getCellExtraWidth();
setWidth(tdWidth + "px");
}
});
@@ -2484,10 +2619,45 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return definedWidth && width >= 0;
}
+ /**
+ * This method exists for the needs of {@link VTreeTable} only.
+ *
+ * Returns the pixels width of the header cell. This includes the
+ * indent, if applicable.
+ *
+ * @return The width in pixels
+ */
+ protected int getWidthWithIndent() {
+ if (scrollBody != null && isHierarchyColumn()) {
+ int maxIndent = scrollBody.getMaxIndent();
+ if (maxIndent > width) {
+ return maxIndent;
+ }
+ }
+ return width;
+ }
+
+ /**
+ * Returns the pixels width of the header cell.
+ *
+ * @return The width in pixels
+ */
public int getWidth() {
return width;
}
+ /**
+ * This method exists for the needs of {@link VTreeTable} only.
+ *
+ * @return <code>true</code> if this is hierarcyColumn's header cell,
+ * <code>false</code> otherwise
+ */
+ private boolean isHierarchyColumn() {
+ int hierarchyColumnIndex = getHierarchyColumnIndex();
+ return hierarchyColumnIndex >= 0
+ && tHead.visibleCells.indexOf(this) == hierarchyColumnIndex;
+ }
+
public void setText(String headerText) {
DOM.setInnerHTML(captionContainer, headerText);
}
@@ -2742,7 +2912,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
DOM.setCapture(getElement());
dragStartX = DOM.eventGetClientX(event);
colIndex = getColIndexByKey(cid);
- originalWidth = getWidth();
+ originalWidth = getWidthWithIndent();
DOM.eventPreventDefault(event);
break;
case Event.ONMOUSEUP:
@@ -2774,8 +2944,11 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
tHead.disableAutoColumnWidthCalculation(this);
int newWidth = originalWidth + deltaX;
- if (newWidth < getMinWidth()) {
- newWidth = getMinWidth();
+ // get min width with indent, no padding
+ int minWidth = getMinWidth(true, false);
+ if (newWidth < minWidth) {
+ // already includes indent if any
+ newWidth = minWidth;
}
setColWidth(colIndex, newWidth, true);
triggerLazyColumnAdjustment(false);
@@ -2787,12 +2960,37 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
}
}
- public int getMinWidth() {
- int cellExtraWidth = 0;
+ /**
+ * Returns the smallest possible cell width in pixels.
+ *
+ * @param includeIndent
+ * - width should include hierarchy column indent if
+ * applicable (VTreeTable only)
+ * @param includeCellExtraWidth
+ * - width should include paddings etc.
+ * @return
+ */
+ private int getMinWidth(boolean includeIndent,
+ boolean includeCellExtraWidth) {
+ int minWidth = sortIndicator.getOffsetWidth();
if (scrollBody != null) {
- cellExtraWidth += scrollBody.getCellExtraWidth();
+ // check the need for indent before adding paddings etc.
+ if (includeIndent && isHierarchyColumn()) {
+ int maxIndent = scrollBody.getMaxIndent();
+ if (minWidth < maxIndent) {
+ minWidth = maxIndent;
+ }
+ }
+ if (includeCellExtraWidth) {
+ minWidth += scrollBody.getCellExtraWidth();
+ }
}
- return cellExtraWidth + sortIndicator.getOffsetWidth();
+ return minWidth;
+ }
+
+ public int getMinWidth() {
+ // get min width with padding, no indent
+ return getMinWidth(false, true);
}
public String getCaption() {
@@ -2823,16 +3021,20 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* @return
*/
public int getNaturalColumnWidth(int columnIndex) {
+ final int iw = columnIndex == getHierarchyColumnIndex() ? scrollBody
+ .getMaxIndent() : 0;
if (isDefinedWidth()) {
+ if (iw > width) {
+ return iw;
+ }
return width;
} else {
if (naturalWidth < 0) {
// This is recently revealed column. Try to detect a proper
- // value (greater of header and data
- // cols)
+ // value (greater of header and data columns)
int hw = captionContainer.getOffsetWidth()
- + scrollBody.getCellExtraWidth();
+ + getHeaderPadding();
if (BrowserInfo.get().isGecko()) {
hw += sortIndicator.getOffsetWidth();
}
@@ -2848,7 +3050,13 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
final int cw = scrollBody.getColWidth(columnIndex);
naturalWidth = (hw > cw ? hw : cw);
}
- return naturalWidth;
+ if (iw > naturalWidth) {
+ // indent is temporary value, naturalWidth shouldn't be
+ // updated
+ return iw;
+ } else {
+ return naturalWidth;
+ }
}
}
@@ -2945,32 +3153,49 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
public void resizeCaptionContainer(HeaderCell cell) {
HeaderCell lastcell = getHeaderCell(visibleCells.size() - 1);
+ int columnSelectorOffset = columnSelector.getOffsetWidth();
- // Measure column widths
- int columnTotalWidth = 0;
- for (Widget w : visibleCells) {
- columnTotalWidth += w.getOffsetWidth();
- }
-
- if (cell == lastcell
- && columnSelector.getOffsetWidth() > 0
- && columnTotalWidth >= div.getOffsetWidth()
- - columnSelector.getOffsetWidth()
+ if (cell == lastcell && columnSelectorOffset > 0
&& !hasVerticalScrollbar()) {
- // Ensure column caption is visible when placed under the column
- // selector widget by shifting and resizing the caption.
- int offset = 0;
- int diff = div.getOffsetWidth() - columnTotalWidth;
- if (diff < columnSelector.getOffsetWidth() && diff > 0) {
- // If the difference is less than the column selectors width
- // then just offset by the
- // difference
- offset = columnSelector.getOffsetWidth() - diff;
+
+ // Measure column widths
+ int columnTotalWidth = 0;
+ for (Widget w : visibleCells) {
+ int cellExtraWidth = w.getOffsetWidth();
+ if (scrollBody != null
+ && visibleCells.indexOf(w) == getHierarchyColumnIndex()
+ && cellExtraWidth < scrollBody.getMaxIndent()) {
+ // indent must be taken into consideration even if it
+ // hasn't been applied yet
+ columnTotalWidth += scrollBody.getMaxIndent();
+ } else {
+ columnTotalWidth += cellExtraWidth;
+ }
+ }
+
+ int divOffset = div.getOffsetWidth();
+ if (columnTotalWidth >= divOffset - columnSelectorOffset) {
+ /*
+ * Ensure column caption is visible when placed under the
+ * column selector widget by shifting and resizing the
+ * caption.
+ */
+ int offset = 0;
+ int diff = divOffset - columnTotalWidth;
+ if (diff < columnSelectorOffset && diff > 0) {
+ /*
+ * If the difference is less than the column selectors
+ * width then just offset by the difference
+ */
+ offset = columnSelectorOffset - diff;
+ } else {
+ // Else offset by the whole column selector
+ offset = columnSelectorOffset;
+ }
+ lastcell.resizeCaptionContainer(offset);
} else {
- // Else offset by the whole column selector
- offset = columnSelector.getOffsetWidth();
+ cell.resizeCaptionContainer(0);
}
- lastcell.resizeCaptionContainer(offset);
} else {
cell.resizeCaptionContainer(0);
}
@@ -3033,10 +3258,14 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
// Make sure to accomodate for the sort indicator if
// necessary.
int width = Integer.parseInt(widthStr);
- if (width < c.getMinWidth()) {
- width = c.getMinWidth();
+ int widthWithoutAddedIndent = width;
+
+ // get min width with indent, no padding
+ int minWidth = c.getMinWidth(true, false);
+ if (width < minWidth) {
+ width = minWidth;
}
- if (width != c.getWidth() && scrollBody != null) {
+ if (scrollBody != null && width != c.getWidthWithIndent()) {
// Do a more thorough update if a column is resized from
// the server *after* the header has been properly
// initialized
@@ -3052,7 +3281,13 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
});
refreshContentWidths = true;
} else {
- c.setWidth(width, true);
+ // get min width with no indent or padding
+ minWidth = c.getMinWidth(false, false);
+ if (widthWithoutAddedIndent < minWidth) {
+ widthWithoutAddedIndent = minWidth;
+ }
+ // save min width without indent
+ c.setWidth(widthWithoutAddedIndent, true);
}
} else if (recalcWidths) {
c.setUndefinedWidth();
@@ -3507,12 +3742,14 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
}
/**
- * Sets the width of the cell
+ * Sets the width of the cell. This width should not include any
+ * possible indent modifications that are present in
+ * {@link VScrollTableBody#getMaxIndent()}.
*
* @param w
* The width of the cell
* @param ensureDefinedWidth
- * Ensures the the given width is not recalculated
+ * Ensures that the given width is not recalculated
*/
public void setWidth(int w, boolean ensureDefinedWidth) {
@@ -3549,7 +3786,13 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* unless TD width is not explicitly set.
*/
if (scrollBody != null) {
- int tdWidth = width + scrollBody.getCellExtraWidth()
+ int maxIndent = scrollBody.getMaxIndent();
+ if (w < maxIndent
+ && tFoot.visibleCells.indexOf(this) == getHierarchyColumnIndex()) {
+ // ensure there's room for the indent
+ w = maxIndent;
+ }
+ int tdWidth = w + scrollBody.getCellExtraWidth()
- borderWidths;
setWidth(Math.max(tdWidth, 0) + "px");
} else {
@@ -3557,8 +3800,14 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
@Override
public void execute() {
- int tdWidth = width
- + scrollBody.getCellExtraWidth()
+ int tdWidth = width;
+ int maxIndent = scrollBody.getMaxIndent();
+ if (tdWidth < maxIndent
+ && tFoot.visibleCells.indexOf(this) == getHierarchyColumnIndex()) {
+ // ensure there's room for the indent
+ tdWidth = maxIndent;
+ }
+ tdWidth += scrollBody.getCellExtraWidth()
- borderWidths;
setWidth(Math.max(tdWidth, 0) + "px");
}
@@ -3571,6 +3820,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* Sets the width to undefined
*/
public void setUndefinedWidth() {
+ definedWidth = false;
setWidth(-1, false);
}
@@ -3585,7 +3835,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
}
/**
- * Returns the pixels width of the footer cell
+ * Returns the pixels width of the footer cell.
*
* @return The width in pixels
*/
@@ -3699,7 +3949,12 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* @return
*/
public int getNaturalColumnWidth(int columnIndex) {
+ final int iw = columnIndex == getHierarchyColumnIndex() ? scrollBody
+ .getMaxIndent() : 0;
if (isDefinedWidth()) {
+ if (iw > width) {
+ return iw;
+ }
return width;
} else {
if (naturalWidth < 0) {
@@ -3708,7 +3963,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
// cols)
final int hw = ((Element) getElement().getLastChild())
- .getOffsetWidth() + scrollBody.getCellExtraWidth();
+ .getOffsetWidth() + getHeaderPadding();
if (columnIndex < 0) {
columnIndex = 0;
for (Iterator<Widget> it = tHead.iterator(); it
@@ -3721,7 +3976,11 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
final int cw = scrollBody.getColWidth(columnIndex);
naturalWidth = (hw > cw ? hw : cw);
}
- return naturalWidth;
+ if (iw > naturalWidth) {
+ return iw;
+ } else {
+ return naturalWidth;
+ }
}
}
@@ -4627,6 +4886,28 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return cellExtraWidth;
}
+ /**
+ * This method exists for the needs of {@link VTreeTable} only. May be
+ * removed or replaced in the future.</br> </br> Returns the maximum
+ * indent of the hierarcyColumn, if applicable.
+ *
+ * @see {@link VScrollTable#getHierarchyColumnIndex()}
+ *
+ * @return maximum indent in pixels
+ */
+ protected int getMaxIndent() {
+ return 0;
+ }
+
+ /**
+ * This method exists for the needs of {@link VTreeTable} only. May be
+ * removed or replaced in the future.</br> </br> Calculates the maximum
+ * indent of the hierarcyColumn, if applicable.
+ */
+ protected void calculateMaxIndent() {
+ // NOP
+ }
+
private void detectExtrawidth() {
NodeList<TableRowElement> rows = tBodyElement.getRows();
if (rows.getLength() == 0) {
@@ -4806,8 +5087,23 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
protected void setCellWidth(int cellIx, int width) {
final Element cell = DOM.getChild(getElement(), cellIx);
- cell.getFirstChildElement().getStyle()
- .setPropertyPx("width", width);
+ Style wrapperStyle = cell.getFirstChildElement().getStyle();
+ int wrapperWidth = width;
+ if (BrowserInfo.get().isWebkit()
+ || BrowserInfo.get().isOpera10()) {
+ /*
+ * Some versions of Webkit and Opera ignore the width
+ * definition of zero width table cells. Instead, use 1px
+ * and compensate with a negative margin.
+ */
+ if (width == 0) {
+ wrapperWidth = 1;
+ wrapperStyle.setMarginRight(-1, Unit.PX);
+ } else {
+ wrapperStyle.clearMarginRight();
+ }
+ }
+ wrapperStyle.setPropertyPx("width", wrapperWidth);
cell.getStyle().setPropertyPx("width", width);
}
@@ -5866,7 +6162,8 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
@Override
public void execute() {
if (showRowHeaders) {
- setCellWidth(0, tHead.getHeaderCell(0).getWidth());
+ setCellWidth(0, tHead.getHeaderCell(0)
+ .getWidthWithIndent());
calcAndSetSpanWidthOnCell(1);
} else {
calcAndSetSpanWidthOnCell(0);
@@ -6100,14 +6397,35 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
int totalExplicitColumnsWidths = 0;
float expandRatioDivider = 0;
int colIndex = 0;
+
+ int hierarchyColumnIndent = scrollBody.getMaxIndent();
+ int hierarchyColumnIndex = getHierarchyColumnIndex();
+ HeaderCell hierarchyHeaderInNeedOfFurtherHandling = null;
+
while (headCells.hasNext()) {
final HeaderCell hCell = (HeaderCell) headCells.next();
+ boolean hasIndent = hierarchyColumnIndent > 0
+ && hCell.isHierarchyColumn();
if (hCell.isDefinedWidth()) {
- totalExplicitColumnsWidths += hCell.getWidth();
- usedMinimumWidth += hCell.getWidth();
+ // get width without indent to find out whether adjustments
+ // are needed (requires special handling further ahead)
+ int w = hCell.getWidth();
+ if (hasIndent && w < hierarchyColumnIndent) {
+ // enforce indent if necessary
+ w = hierarchyColumnIndent;
+ hierarchyHeaderInNeedOfFurtherHandling = hCell;
+ }
+ totalExplicitColumnsWidths += w;
+ usedMinimumWidth += w;
} else {
- usedMinimumWidth += hCell.getNaturalColumnWidth(colIndex);
+ // natural width already includes indent if any
+ int naturalColumnWidth = hCell
+ .getNaturalColumnWidth(colIndex);
+ usedMinimumWidth += naturalColumnWidth;
expandRatioDivider += hCell.getExpandRatio();
+ if (hasIndent) {
+ hierarchyHeaderInNeedOfFurtherHandling = hCell;
+ }
}
colIndex++;
}
@@ -6152,6 +6470,28 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
int totalUndefinedNaturalWidths = usedMinimumWidth
- totalExplicitColumnsWidths;
+ if (hierarchyHeaderInNeedOfFurtherHandling != null
+ && !hierarchyHeaderInNeedOfFurtherHandling.isDefinedWidth()) {
+ // ensure the cell gets enough space for the indent
+ int w = hierarchyHeaderInNeedOfFurtherHandling
+ .getNaturalColumnWidth(hierarchyColumnIndex);
+ int newSpace = Math.round(w + (float) extraSpace * (float) w
+ / totalUndefinedNaturalWidths);
+ if (newSpace >= hierarchyColumnIndent) {
+ // no special handling required
+ hierarchyHeaderInNeedOfFurtherHandling = null;
+ } else {
+ // treat as a defined width column of indent's width
+ totalExplicitColumnsWidths += hierarchyColumnIndent;
+ usedMinimumWidth -= w - hierarchyColumnIndent;
+ totalUndefinedNaturalWidths = usedMinimumWidth
+ - totalExplicitColumnsWidths;
+ expandRatioDivider += hierarchyHeaderInNeedOfFurtherHandling
+ .getExpandRatio();
+ extraSpace = Math.max(availW - usedMinimumWidth, 0);
+ }
+ }
+
// we have some space that can be divided optimally
HeaderCell hCell;
colIndex = 0;
@@ -6167,7 +6507,10 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
newSpace = Math.round((w + extraSpace
* hCell.getExpandRatio() / expandRatioDivider));
} else {
- if (totalUndefinedNaturalWidths != 0) {
+ if (hierarchyHeaderInNeedOfFurtherHandling == hCell) {
+ // still exists, so needs exactly the indent's width
+ newSpace = hierarchyColumnIndent;
+ } else if (totalUndefinedNaturalWidths != 0) {
// divide relatively to natural column widths
newSpace = Math.round(w + (float) extraSpace
* (float) w / totalUndefinedNaturalWidths);
@@ -6177,8 +6520,21 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
}
checksum += newSpace;
setColWidth(colIndex, newSpace, false);
+
} else {
- checksum += hCell.getWidth();
+ if (hierarchyHeaderInNeedOfFurtherHandling == hCell) {
+ // defined with enforced into indent width
+ checksum += hierarchyColumnIndent;
+ setColWidth(colIndex, hierarchyColumnIndent, false);
+ } else {
+ int cellWidth = hCell.getWidthWithIndent();
+ checksum += cellWidth;
+ if (hCell.isHierarchyColumn()) {
+ // update in case the indent has changed
+ // (not detectable earlier)
+ setColWidth(colIndex, cellWidth, true);
+ }
+ }
}
colIndex++;
}
@@ -6194,8 +6550,8 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
while (headCells.hasNext()) {
HeaderCell hc = (HeaderCell) headCells.next();
if (!hc.isDefinedWidth()) {
- setColWidth(colIndex,
- hc.getWidth() + availW - checksum, false);
+ setColWidth(colIndex, hc.getWidthWithIndent() + availW
+ - checksum, false);
break;
}
colIndex++;
diff --git a/client/src/com/vaadin/client/ui/VTextField.java b/client/src/com/vaadin/client/ui/VTextField.java
index 1229eda093..0fbed0dd90 100644
--- a/client/src/com/vaadin/client/ui/VTextField.java
+++ b/client/src/com/vaadin/client/ui/VTextField.java
@@ -272,19 +272,16 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
/** For internal use only. May be removed or replaced in the future. */
public void setMaxLength(int newMaxLength) {
- if (newMaxLength >= 0 && newMaxLength != maxLength) {
- maxLength = newMaxLength;
- updateMaxLength(maxLength);
- } else if (maxLength != -1) {
- maxLength = -1;
- updateMaxLength(maxLength);
+ if (newMaxLength == maxLength) {
+ return;
}
-
+ maxLength = newMaxLength;
+ updateMaxLength(maxLength);
}
/**
- * This method is reponsible for updating the DOM or otherwise ensuring that
- * the given max length is enforced. Called when the max length for the
+ * This method is responsible for updating the DOM or otherwise ensuring
+ * that the given max length is enforced. Called when the max length for the
* field has changed.
*
* @param maxLength
diff --git a/client/src/com/vaadin/client/ui/VTreeTable.java b/client/src/com/vaadin/client/ui/VTreeTable.java
index f65198865c..097b9c7ab2 100644
--- a/client/src/com/vaadin/client/ui/VTreeTable.java
+++ b/client/src/com/vaadin/client/ui/VTreeTable.java
@@ -122,8 +122,14 @@ public class VTreeTable extends VScrollTable {
}
}
+ @Override
+ protected int getHierarchyColumnIndex() {
+ return colIndexOfHierarchy + (showRowHeaders ? 1 : 0);
+ }
+
public class VTreeTableScrollBody extends VScrollTable.VScrollTableBody {
private int indentWidth = -1;
+ private int maxIndent = 0;
VTreeTableScrollBody() {
super();
@@ -232,6 +238,11 @@ public class VTreeTable extends VScrollTable {
treeSpacer.getParentElement().getStyle()
.setPaddingLeft(getIndent(), Unit.PX);
treeSpacer.getStyle().setWidth(getIndent(), Unit.PX);
+ int colWidth = getColWidth(getHierarchyColumnIndex());
+ if (colWidth > 0 && getIndent() > colWidth) {
+ VTreeTable.this.setColWidth(getHierarchyColumnIndex(),
+ getIndent(), false);
+ }
}
}
@@ -277,16 +288,12 @@ public class VTreeTable extends VScrollTable {
// hierarchy column
int indent = getIndent();
if (indent != -1) {
- width = Math.max(width - getIndent(), 0);
+ width = Math.max(width - indent, 0);
}
}
super.setCellWidth(cellIx, width);
}
- private int getHierarchyColumnIndex() {
- return colIndexOfHierarchy + (showRowHeaders ? 1 : 0);
- }
-
private int getIndent() {
return (depth + 1) * getIndentWidth();
}
@@ -323,7 +330,8 @@ public class VTreeTable extends VScrollTable {
@Override
public void execute() {
if (showRowHeaders) {
- setCellWidth(0, tHead.getHeaderCell(0).getWidth());
+ setCellWidth(0, tHead.getHeaderCell(0)
+ .getWidthWithIndent());
calcAndSetSpanWidthOnCell(1);
} else {
calcAndSetSpanWidthOnCell(0);
@@ -421,6 +429,22 @@ public class VTreeTable extends VScrollTable {
return indentWidth;
}
+ @Override
+ protected int getMaxIndent() {
+ return maxIndent;
+ }
+
+ @Override
+ protected void calculateMaxIndent() {
+ int maxIndent = 0;
+ Iterator<Widget> iterator = iterator();
+ while (iterator.hasNext()) {
+ VTreeTableRow next = (VTreeTableRow) iterator.next();
+ maxIndent = Math.max(maxIndent, next.getIndent());
+ }
+ this.maxIndent = maxIndent;
+ }
+
private void detectIndent(VTreeTableRow vTreeTableRow) {
indentWidth = vTreeTableRow.treeSpacer.getOffsetWidth();
if (indentWidth == 0) {
@@ -432,6 +456,7 @@ public class VTreeTable extends VScrollTable {
VTreeTableRow next = (VTreeTableRow) iterator.next();
next.setIndent();
}
+ calculateMaxIndent();
}
protected void unlinkRowsAnimatedAndUpdateCacheWhenFinished(
@@ -471,6 +496,7 @@ public class VTreeTable extends VScrollTable {
RowExpandAnimation anim = new RowExpandAnimation(insertedRows);
anim.run(150);
}
+ scrollBody.calculateMaxIndent();
return insertedRows;
}
diff --git a/client/src/com/vaadin/client/ui/VUI.java b/client/src/com/vaadin/client/ui/VUI.java
index 6e6bcaf587..b627d4a2a9 100644
--- a/client/src/com/vaadin/client/ui/VUI.java
+++ b/client/src/com/vaadin/client/ui/VUI.java
@@ -41,6 +41,7 @@ import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ConnectorMap;
import com.vaadin.client.Focusable;
import com.vaadin.client.LayoutManager;
+import com.vaadin.client.Profiler;
import com.vaadin.client.VConsole;
import com.vaadin.client.ui.ShortcutActionHandler.ShortcutActionHandlerOwner;
import com.vaadin.client.ui.TouchScrollDelegate.TouchScrollHandler;
@@ -395,11 +396,13 @@ public class VUI extends SimplePanel implements ResizeHandler,
* For internal use only. May be removed or replaced in the future.
*/
public void sendClientResized() {
+ Profiler.enter("VUI.sendClientResized");
Element parentElement = getElement().getParentElement();
int viewHeight = parentElement.getClientHeight();
int viewWidth = parentElement.getClientWidth();
ResizeEvent.fire(this, viewWidth, viewHeight);
+ Profiler.leave("VUI.sendClientResized");
}
public native static void goTo(String url)
diff --git a/client/src/com/vaadin/client/ui/label/LabelConnector.java b/client/src/com/vaadin/client/ui/label/LabelConnector.java
index 896c9d8573..9639987e8d 100644
--- a/client/src/com/vaadin/client/ui/label/LabelConnector.java
+++ b/client/src/com/vaadin/client/ui/label/LabelConnector.java
@@ -17,6 +17,7 @@ package com.vaadin.client.ui.label;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.PreElement;
+import com.vaadin.client.Profiler;
import com.vaadin.client.Util;
import com.vaadin.client.communication.StateChangeEvent;
import com.vaadin.client.ui.AbstractComponentConnector;
@@ -44,6 +45,7 @@ public class LabelConnector extends AbstractComponentConnector {
public void onStateChanged(StateChangeEvent stateChangeEvent) {
super.onStateChanged(stateChangeEvent);
boolean sinkOnloads = false;
+ Profiler.enter("LabelConnector.onStateChanged update content");
switch (getState().contentMode) {
case PREFORMATTED:
PreElement preElement = Document.get().createPreElement();
@@ -69,8 +71,12 @@ public class LabelConnector extends AbstractComponentConnector {
break;
}
+ Profiler.leave("LabelConnector.onStateChanged update content");
+
if (sinkOnloads) {
+ Profiler.enter("LabelConnector.onStateChanged sinkOnloads");
Util.sinkOnloadForImages(getWidget().getElement());
+ Profiler.leave("LabelConnector.onStateChanged sinkOnloads");
}
}
diff --git a/client/src/com/vaadin/client/ui/link/LinkConnector.java b/client/src/com/vaadin/client/ui/link/LinkConnector.java
index 807a9bcc64..228897278e 100644
--- a/client/src/com/vaadin/client/ui/link/LinkConnector.java
+++ b/client/src/com/vaadin/client/ui/link/LinkConnector.java
@@ -42,7 +42,11 @@ public class LinkConnector extends AbstractComponentConnector implements
@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
getWidget().src = getResourceUrl(LinkConstants.HREF_RESOURCE);
- getWidget().anchor.setAttribute("href", getWidget().src);
+ if (getWidget().src == null) {
+ getWidget().anchor.removeAttribute("href");
+ } else {
+ getWidget().anchor.setAttribute("href", getWidget().src);
+ }
}
});
}
diff --git a/client/src/com/vaadin/client/ui/table/TableConnector.java b/client/src/com/vaadin/client/ui/table/TableConnector.java
index c967642059..fc31cdf8ea 100644
--- a/client/src/com/vaadin/client/ui/table/TableConnector.java
+++ b/client/src/com/vaadin/client/ui/table/TableConnector.java
@@ -176,6 +176,7 @@ public class TableConnector extends AbstractHasComponentsConnector implements
// amount of rows)
getWidget().scrollBody.setLastRendered(getWidget().scrollBody
.getLastRendered());
+ getWidget().updateMaxIndent();
} else {
getWidget().postponeSanityCheckForLastRendered = false;
UIDL rowData = uidl.getChildByTagName("rows");
diff --git a/client/src/com/vaadin/client/ui/tabsheet/TabsheetBaseConnector.java b/client/src/com/vaadin/client/ui/tabsheet/TabsheetBaseConnector.java
index 9944ec5308..283bc1b63b 100644
--- a/client/src/com/vaadin/client/ui/tabsheet/TabsheetBaseConnector.java
+++ b/client/src/com/vaadin/client/ui/tabsheet/TabsheetBaseConnector.java
@@ -89,6 +89,14 @@ public abstract class TabsheetBaseConnector extends
}
}
+ // Detach any old tab widget, should be max 1
+ for (Iterator<Widget> iterator = oldWidgets.iterator(); iterator
+ .hasNext();) {
+ Widget oldWidget = iterator.next();
+ if (oldWidget.isAttached()) {
+ oldWidget.removeFromParent();
+ }
+ }
}
@Override
diff --git a/client/src/com/vaadin/client/ui/textfield/TextFieldConnector.java b/client/src/com/vaadin/client/ui/textfield/TextFieldConnector.java
index 922e8d4a32..e2ede121b6 100644
--- a/client/src/com/vaadin/client/ui/textfield/TextFieldConnector.java
+++ b/client/src/com/vaadin/client/ui/textfield/TextFieldConnector.java
@@ -77,8 +77,10 @@ public class TextFieldConnector extends AbstractFieldConnector implements
}
getWidget().setColumns(getState().columns);
- final String text = getState().text;
-
+ String text = getState().text;
+ if (text == null) {
+ text = "";
+ }
/*
* We skip the text content update if field has been repainted, but text
* has not been changed. Additional sanity check verifies there is no
diff --git a/client/src/com/vaadin/client/ui/ui/UIConnector.java b/client/src/com/vaadin/client/ui/ui/UIConnector.java
index 85e75b943e..0fb7439587 100644
--- a/client/src/com/vaadin/client/ui/ui/UIConnector.java
+++ b/client/src/com/vaadin/client/ui/ui/UIConnector.java
@@ -20,6 +20,7 @@ import java.util.Iterator;
import java.util.List;
import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Position;
@@ -43,6 +44,7 @@ import com.vaadin.client.ConnectorHierarchyChangeEvent;
import com.vaadin.client.ConnectorMap;
import com.vaadin.client.Focusable;
import com.vaadin.client.Paintable;
+import com.vaadin.client.TooltipInfo;
import com.vaadin.client.UIDL;
import com.vaadin.client.VConsole;
import com.vaadin.client.communication.StateChangeEvent;
@@ -312,7 +314,12 @@ public class UIConnector extends AbstractSingleComponentContainerConnector
if (firstPaint) {
// Queue the initial window size to be sent with the following
// request.
- getWidget().sendClientResized();
+ Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
+ public void execute() {
+ getWidget().sendClientResized();
+ }
+ });
}
getWidget().rendering = false;
}
@@ -467,6 +474,16 @@ public class UIConnector extends AbstractSingleComponentContainerConnector
}
}
+ @Override
+ public TooltipInfo getTooltipInfo(com.google.gwt.dom.client.Element element) {
+ /*
+ * Override method to make AbstractComponentConnector.hasTooltip()
+ * return true so there's a top level handler that takes care of hiding
+ * tooltips whenever the mouse is moved somewhere else.
+ */
+ return super.getTooltipInfo(element);
+ }
+
/**
* Tries to scroll the viewport so that the given connector is in view.
*
diff --git a/common.xml b/common.xml
index ff82b6b7ec..163ce8827d 100644
--- a/common.xml
+++ b/common.xml
@@ -27,9 +27,12 @@
<union id="empty.reference" />
<property name="filtered.webcontent.dir" location="${vaadin.basedir}/result/filteredWebContent" />
+ <property name="release-notes-tickets-file" location="${vaadin.basedir}/result/release-notes-tickets.html" />
- <target name="filter.webcontent" unless="webcontent.filtered">
+ <target name="filter.webcontent" unless="webcontent.filtered" depends="fetch-release-notes-tickets">
<property name="webcontent.filtered" value="true" />
+ <!-- Running without build.release-notes will cause an error, which is ignored -->
+ <loadfile property="release-notes-tickets" srcFile="${release-notes-tickets-file}" failonerror="false" />
<delete dir="${filtered.webcontent.dir}" />
<copy todir="${filtered.webcontent.dir}">
@@ -57,11 +60,21 @@
<replacetokens begintoken="@" endtoken="@">
<token key="builddate" value="${build.date}" />
</replacetokens>
+ <replacetokens begintoken="@" endtoken="@">
+ <token key="release-notes-tickets" value="${release-notes-tickets}" />
+ </replacetokens>
</filterchain>
</copy>
+ </target>
-
+ <target name="fetch-release-notes-tickets" unless="built.release-notes" if="build.release-notes">
+ <mkdir dir="${vaadin.basedir}/result"/>
+ <subant buildpath="${vaadin.basedir}/buildhelpers" target="fetch-release-notes-tickets" antfile="build.xml" inheritall="true">
+ <property name="output" location="${release-notes-tickets-file}" />
+ </subant>
+ <property name="built.release-notes" value="1" />
</target>
+
<fileset dir="${filtered.webcontent.dir}" id="common.files.for.all.jars">
<patternset>
<include name="release-notes.html" />
@@ -110,7 +123,7 @@
</target>
- <target name="sources.jar" depends="compile">
+ <target name="sources.jar" depends="compile, filter.webcontent">
<fail unless="result.dir" message="No result.dir parameter given" />
<fail unless="module.name" message="No module.name parameter given" />
<fail unless="src" message="No src directory parameter given" />
@@ -132,7 +145,7 @@
</target>
- <target name="javadoc.jar" depends="dependencies">
+ <target name="javadoc.jar" depends="dependencies, filter.webcontent">
<fail unless="result.dir" message="No result.dir parameter given" />
<fail unless="module.name" message="No module.name parameter given" />
<property name="src" location="{$result.dir}/../src" />
@@ -157,7 +170,7 @@
</target>
- <target name="jar" depends="compile, pom.xml">
+ <target name="jar" depends="compile, pom.xml, filter.webcontent">
<fail unless="result.dir" message="No result.dir parameter given" />
<fail unless="module.name" message="No module.name parameter given" />
@@ -261,6 +274,16 @@
</javac>
</target>
+ <target name="exec-buildhelper" depends="compile">
+ <fail unless="main.class" message="No main class given in 'main.class'" />
+ <fail unless="output" message="No output file given in 'output'" />
+ <java classname="${main.class}" output="${output}" failonerror="true" fork="yes">
+ <classpath refid="vaadin.buildhelpers.classpath" />
+ <classpath refid="classpath.compile.dependencies" />
+ <jvmarg value="-Dvaadin.version=${vaadin.version}" />
+ </java>
+ </target>
+
<target name="directories">
<property name="result.dir" location="result" />
<property name="src" location="${result.dir}/../src" />
@@ -321,7 +344,7 @@
</copy>
</target>
- <target name="dependencies" description="Resolves dependencies needed by this module" depends="filter.webcontent">
+ <target name="dependencies" description="Resolves dependencies needed by this module">
<property name='conf' value="build, build-provided" />
<ivy:resolve resolveid="common" conf="${conf}" />
<ivy:cachepath pathid="classpath.compile.dependencies" conf="${conf}" />
diff --git a/server/src/com/vaadin/ui/CheckBox.java b/server/src/com/vaadin/ui/CheckBox.java
index 22b90b224f..0ace0a4f26 100644
--- a/server/src/com/vaadin/ui/CheckBox.java
+++ b/server/src/com/vaadin/ui/CheckBox.java
@@ -110,6 +110,13 @@ public class CheckBox extends AbstractField<Boolean> {
return (CheckBoxState) super.getState();
}
+ /*
+ * Overridden to keep the shared state in sync with the AbstractField
+ * internal value. Should be removed once AbstractField is refactored to use
+ * shared state.
+ *
+ * See tickets #10921 and #11064.
+ */
@Override
protected void setInternalValue(Boolean newValue) {
super.setInternalValue(newValue);
diff --git a/server/src/com/vaadin/ui/ProgressIndicator.java b/server/src/com/vaadin/ui/ProgressIndicator.java
index 96c2d2814a..c481aa1e8f 100644
--- a/server/src/com/vaadin/ui/ProgressIndicator.java
+++ b/server/src/com/vaadin/ui/ProgressIndicator.java
@@ -157,4 +157,19 @@ public class ProgressIndicator extends AbstractField<Float> implements
return getState().pollingInterval;
}
+ /*
+ * Overridden to keep the shared state in sync with the AbstractField
+ * internal value. Should be removed once AbstractField is refactored to use
+ * shared state.
+ *
+ * See tickets #10921 and #11064.
+ */
+ @Override
+ protected void setInternalValue(Float newValue) {
+ super.setInternalValue(newValue);
+ if (newValue == null) {
+ newValue = 0.0f;
+ }
+ getState().state = newValue;
+ }
}
diff --git a/server/src/com/vaadin/ui/Slider.java b/server/src/com/vaadin/ui/Slider.java
index 2bf05f895c..e63fdc5e10 100644
--- a/server/src/com/vaadin/ui/Slider.java
+++ b/server/src/com/vaadin/ui/Slider.java
@@ -263,6 +263,22 @@ public class Slider extends AbstractField<Double> {
getState().value = newFieldValue;
}
+ /*
+ * Overridden to keep the shared state in sync with the AbstractField
+ * internal value. Should be removed once AbstractField is refactored to use
+ * shared state.
+ *
+ * See tickets #10921 and #11064.
+ */
+ @Override
+ protected void setInternalValue(Double newValue) {
+ super.setInternalValue(newValue);
+ if (newValue == null) {
+ newValue = 0.0;
+ }
+ getState().value = newValue;
+ }
+
/**
* Thrown when the value of the slider is about to be set to a value that is
* outside the valid range of the slider.
diff --git a/server/src/com/vaadin/ui/Tree.java b/server/src/com/vaadin/ui/Tree.java
index 608c947d59..32c5712f0f 100644
--- a/server/src/com/vaadin/ui/Tree.java
+++ b/server/src/com/vaadin/ui/Tree.java
@@ -414,6 +414,9 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
final Object id = itemIdMapper.get(keys[i]);
if (id != null && isExpanded(id)) {
expanded.remove(id);
+ if (expandedItemId == id) {
+ expandedItemId = null;
+ }
fireCollapseEvent(id);
}
}
@@ -841,6 +844,10 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
super.setContainerDataSource(new ContainerHierarchicalWrapper(
newDataSource));
}
+
+ // Ensure previous expanded items are cleaned up if they don't exist in
+ // the new container
+ cleanupExpandedItems();
}
/* Expand event and listener */
@@ -1670,4 +1677,24 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
return itemDescriptionGenerator;
}
+ @Override
+ public void containerItemSetChange(
+ com.vaadin.data.Container.ItemSetChangeEvent event) {
+
+ // Ensure removed items are cleaned up from expanded list
+ cleanupExpandedItems();
+
+ super.containerItemSetChange(event);
+ }
+
+ private void cleanupExpandedItems() {
+ for (Object expandedItemId : expanded) {
+ if (getItem(expandedItemId) == null) {
+ expanded.remove(expandedItemId);
+ if (this.expandedItemId == expandedItemId) {
+ this.expandedItemId = null;
+ }
+ }
+ }
+ }
}
diff --git a/server/tests/src/com/vaadin/tests/server/component/tree/TreeTest.java b/server/tests/src/com/vaadin/tests/server/component/tree/TreeTest.java
index 16a7091947..c1d7653c01 100644
--- a/server/tests/src/com/vaadin/tests/server/component/tree/TreeTest.java
+++ b/server/tests/src/com/vaadin/tests/server/component/tree/TreeTest.java
@@ -1,5 +1,8 @@
package com.vaadin.tests.server.component.tree;
+import java.lang.reflect.Field;
+import java.util.HashSet;
+
import junit.framework.TestCase;
import com.vaadin.data.Container;
@@ -71,4 +74,63 @@ public class TreeTest extends TestCase {
assertTrue(Container.Hierarchical.class.isAssignableFrom(tree4
.getContainerDataSource().getClass()));
}
+
+ public void testRemoveExpandedItems() throws Exception {
+ tree.expandItem("parent");
+ tree.expandItem("child");
+
+ Field expandedField = tree.getClass()
+ .getDeclaredField("expanded");
+ Field expandedItemIdField = tree.getClass().getDeclaredField(
+ "expandedItemId");
+
+ expandedField.setAccessible(true);
+ expandedItemIdField.setAccessible(true);
+
+ HashSet<Object> expanded = (HashSet<Object>) expandedField.get(tree);
+ Object expandedItemId = expandedItemIdField.get(tree);
+
+ assertEquals(2, expanded.size());
+ assertTrue("Contains parent", expanded.contains("parent"));
+ assertTrue("Contains child", expanded.contains("child"));
+ assertEquals("child", expandedItemId);
+
+ tree.removeItem("parent");
+
+ expanded = (HashSet<Object>) expandedField.get(tree);
+ expandedItemId = expandedItemIdField.get(tree);
+
+ assertEquals(1, expanded.size());
+ assertTrue("Contains child", expanded.contains("child"));
+ assertEquals("child", expandedItemId);
+
+ tree.removeItem("child");
+
+ expanded = (HashSet<Object>) expandedField.get(tree);
+ expandedItemId = expandedItemIdField.get(tree);
+
+ assertEquals(0, expanded.size());
+ assertNull(expandedItemId);
+ }
+
+ public void testRemoveExpandedItemsOnContainerChange() throws Exception {
+ tree.expandItem("parent");
+ tree.expandItem("child");
+
+ tree.setContainerDataSource(new HierarchicalContainer());
+
+ Field expandedField = tree.getClass().getDeclaredField("expanded");
+ Field expandedItemIdField = tree.getClass().getDeclaredField(
+ "expandedItemId");
+
+ expandedField.setAccessible(true);
+ expandedItemIdField.setAccessible(true);
+
+ HashSet<Object> expanded = (HashSet<Object>) expandedField.get(tree);
+ assertEquals(0, expanded.size());
+
+ Object expandedItemId = expandedItemIdField.get(tree);
+ assertNull(expandedItemId);
+ }
+
}
diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
index 928c889956..4861a27e75 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
@@ -314,10 +314,12 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
String encoding = source.getEncoding();
InputStream input = source.getByteStream();
if (!input.markSupported()) {
+ // If mark is not supported, wrap it in a stream which supports mark
input = new BufferedInputStream(input);
source.setByteStream(input);
- input.mark(100);
}
+ // Mark either the original stream or the wrapped stream
+ input.mark(100);
if (encoding == null) {
encoding = "ASCII";
@@ -603,6 +605,9 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case INCLUDE_SYM:
includeDirective();
break;
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -938,6 +943,9 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
documentHandler.startKeyframeSelector(n.image);
label_21: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -963,6 +971,9 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break label_21;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -1110,6 +1121,9 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case WARN_SYM:
debuggingDirective();
break;
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -1124,12 +1138,9 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case LBRACE:
case DASHMATCH:
case INCLUDES:
- case PLUS:
case MINUS:
case COMMA:
case SEMICOLON:
- case PRECEDES:
- case SIBLING:
case NONASCII:
case STRING:
case NUMBER:
@@ -1564,15 +1575,6 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case SEMICOLON:
n = jj_consume_token(SEMICOLON);
break;
- case PLUS:
- n = jj_consume_token(PLUS);
- break;
- case PRECEDES:
- n = jj_consume_token(PRECEDES);
- break;
- case SIBLING:
- n = jj_consume_token(SIBLING);
- break;
case MINUS:
n = jj_consume_token(MINUS);
break;
@@ -1602,61 +1604,9 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
char connector = ' ';
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case PLUS:
- jj_consume_token(PLUS);
- label_42: while (true) {
- switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
- case S:
- ;
- break;
- default:
- jj_la1[58] = jj_gen;
- break label_42;
- }
- jj_consume_token(S);
- }
- {
- if (true) {
- return '+';
- }
- }
- break;
case PRECEDES:
- jj_consume_token(PRECEDES);
- label_43: while (true) {
- switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
- case S:
- ;
- break;
- default:
- jj_la1[59] = jj_gen;
- break label_43;
- }
- jj_consume_token(S);
- }
- {
- if (true) {
- return '>';
- }
- }
- break;
case SIBLING:
- jj_consume_token(SIBLING);
- label_44: while (true) {
- switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
- case S:
- ;
- break;
- default:
- jj_la1[60] = jj_gen;
- break label_44;
- }
- jj_consume_token(S);
- }
- {
- if (true) {
- return '~';
- }
- }
+ connector = combinatorChar();
break;
case S:
jj_consume_token(S);
@@ -1664,51 +1614,60 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case PLUS:
case PRECEDES:
case SIBLING:
- switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
- case PLUS:
- jj_consume_token(PLUS);
- connector = '+';
- break;
- case PRECEDES:
- jj_consume_token(PRECEDES);
- connector = '>';
- break;
- case SIBLING:
- jj_consume_token(SIBLING);
- connector = '~';
- break;
- default:
- jj_la1[61] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- label_45: while (true) {
- switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
- case S:
- ;
- break;
- default:
- jj_la1[62] = jj_gen;
- break label_45;
- }
- jj_consume_token(S);
- }
+ connector = combinatorChar();
break;
default:
- jj_la1[63] = jj_gen;
+ jj_la1[58] = jj_gen;
;
}
- {
- if (true) {
- return connector;
- }
+ break;
+ default:
+ jj_la1[59] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ {
+ if (true) {
+ return connector;
}
+ }
+ throw new Error("Missing return statement in function");
+ }
+
+ /** to refactor combinator and reuse in selector(). */
+ final public char combinatorChar() throws ParseException {
+ Token t;
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ t = jj_consume_token(PLUS);
+ break;
+ case PRECEDES:
+ t = jj_consume_token(PRECEDES);
+ break;
+ case SIBLING:
+ t = jj_consume_token(SIBLING);
break;
default:
- jj_la1[64] = jj_gen;
+ jj_la1[60] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
+ label_42: while (true) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case S:
+ ;
+ break;
+ default:
+ jj_la1[61] = jj_gen;
+ break label_42;
+ }
+ jj_consume_token(S);
+ }
+ {
+ if (true) {
+ return t.image.charAt(0);
+ }
+ }
throw new Error("Missing return statement in function");
}
@@ -1718,20 +1677,20 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
String value = "";
// This is not really taking the syntax of filter rules into account
n = jj_consume_token(MICROSOFT_RULE);
- label_46: while (true) {
+ label_43: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[65] = jj_gen;
- break label_46;
+ jj_la1[62] = jj_gen;
+ break label_43;
}
jj_consume_token(S);
}
name = n.image;
jj_consume_token(COLON);
- label_47: while (true) {
+ label_44: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case IDENT:
n = jj_consume_token(IDENT);
@@ -1780,7 +1739,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[66] = jj_gen;
+ jj_la1[63] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1799,19 +1758,19 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[67] = jj_gen;
- break label_47;
+ jj_la1[64] = jj_gen;
+ break label_44;
}
}
jj_consume_token(SEMICOLON);
- label_48: while (true) {
+ label_45: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[68] = jj_gen;
- break label_48;
+ jj_la1[65] = jj_gen;
+ break label_45;
}
jj_consume_token(S);
}
@@ -1825,7 +1784,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public String property() throws ParseException {
Token t;
String s = "";
- label_49: while (true) {
+ label_46: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case IDENT:
t = jj_consume_token(IDENT);
@@ -1836,7 +1795,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
s += t.image;
break;
default:
- jj_la1[69] = jj_gen;
+ jj_la1[66] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1846,18 +1805,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[70] = jj_gen;
- break label_49;
+ jj_la1[67] = jj_gen;
+ break label_46;
}
}
- label_50: while (true) {
+ label_47: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[71] = jj_gen;
- break label_50;
+ jj_la1[68] = jj_gen;
+ break label_47;
}
jj_consume_token(S);
}
@@ -1872,14 +1831,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public String variableName() throws ParseException {
Token n;
n = jj_consume_token(VARIABLE);
- label_51: while (true) {
+ label_48: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[72] = jj_gen;
- break label_51;
+ jj_la1[69] = jj_gen;
+ break label_48;
}
jj_consume_token(S);
}
@@ -1894,14 +1853,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public String functionName() throws ParseException {
Token n;
n = jj_consume_token(FUNCTION);
- label_52: while (true) {
+ label_49: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[73] = jj_gen;
- break label_52;
+ jj_la1[70] = jj_gen;
+ break label_49;
}
jj_consume_token(S);
}
@@ -1926,21 +1885,24 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
l = selectorList();
save = token;
jj_consume_token(LBRACE);
- label_53: while (true) {
+ label_50: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[74] = jj_gen;
- break label_53;
+ jj_la1[71] = jj_gen;
+ break label_50;
}
jj_consume_token(S);
}
start = true;
documentHandler.startSelector(l);
- label_54: while (true) {
+ label_51: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -1962,10 +1924,13 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[75] = jj_gen;
- break label_54;
+ jj_la1[72] = jj_gen;
+ break label_51;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -1991,20 +1956,20 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
microsoftExtension();
break;
default:
- jj_la1[76] = jj_gen;
+ jj_la1[73] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
jj_consume_token(RBRACE);
- label_55: while (true) {
+ label_52: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[77] = jj_gen;
- break label_55;
+ jj_la1[74] = jj_gen;
+ break label_52;
}
jj_consume_token(S);
}
@@ -2033,24 +1998,24 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
ArrayList<String> selectors = new ArrayList<String>();
String selector;
selector = selector();
- label_56: while (true) {
+ label_53: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
;
break;
default:
- jj_la1[78] = jj_gen;
- break label_56;
+ jj_la1[75] = jj_gen;
+ break label_53;
}
jj_consume_token(COMMA);
- label_57: while (true) {
+ label_54: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[79] = jj_gen;
- break label_57;
+ jj_la1[76] = jj_gen;
+ break label_54;
}
jj_consume_token(S);
}
@@ -2071,27 +2036,48 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
* exception during the parse
*/
final public String selector() throws ParseException {
- String selector;
+ String selector = null;
char comb;
try {
- selector = simple_selector(null, ' ');
- label_58: while (true) {
+ switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case INTERPOLATION:
+ case IDENT:
+ case HASH:
+ selector = simple_selector(null, ' ');
+ break;
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
+ comb = combinatorChar();
+ selector = simple_selector(selector, comb);
+ break;
+ default:
+ jj_la1[77] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ label_55: while (true) {
if (jj_2_2(2)) {
;
} else {
- break label_58;
+ break label_55;
}
comb = combinator();
selector = simple_selector(selector, comb);
}
- label_59: while (true) {
+ label_56: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[80] = jj_gen;
- break label_59;
+ jj_la1[78] = jj_gen;
+ break label_56;
}
jj_consume_token(S);
}
@@ -2140,7 +2126,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case INTERPOLATION:
case IDENT:
simple_current = element_name();
- label_60: while (true) {
+ label_57: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case LBRACKET:
case DOT:
@@ -2149,8 +2135,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[81] = jj_gen;
- break label_60;
+ jj_la1[79] = jj_gen;
+ break label_57;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case HASH:
@@ -2166,7 +2152,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cond = pseudo(cond);
break;
default:
- jj_la1[82] = jj_gen;
+ jj_la1[80] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2174,7 +2160,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
case HASH:
cond = hash(cond);
- label_61: while (true) {
+ label_58: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case LBRACKET:
case DOT:
@@ -2182,8 +2168,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[83] = jj_gen;
- break label_61;
+ jj_la1[81] = jj_gen;
+ break label_58;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case DOT:
@@ -2196,7 +2182,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cond = pseudo(cond);
break;
default:
- jj_la1[84] = jj_gen;
+ jj_la1[82] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2204,7 +2190,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
case DOT:
cond = _class(cond);
- label_62: while (true) {
+ label_59: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case LBRACKET:
case DOT:
@@ -2213,8 +2199,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[85] = jj_gen;
- break label_62;
+ jj_la1[83] = jj_gen;
+ break label_59;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case HASH:
@@ -2230,7 +2216,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cond = pseudo(cond);
break;
default:
- jj_la1[86] = jj_gen;
+ jj_la1[84] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2238,7 +2224,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
case COLON:
cond = pseudo(cond);
- label_63: while (true) {
+ label_60: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case LBRACKET:
case DOT:
@@ -2247,8 +2233,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[87] = jj_gen;
- break label_63;
+ jj_la1[85] = jj_gen;
+ break label_60;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case HASH:
@@ -2264,7 +2250,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cond = pseudo(cond);
break;
default:
- jj_la1[88] = jj_gen;
+ jj_la1[86] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2272,7 +2258,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
case LBRACKET:
cond = attrib(cond);
- label_64: while (true) {
+ label_61: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case LBRACKET:
case DOT:
@@ -2281,8 +2267,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[89] = jj_gen;
- break label_64;
+ jj_la1[87] = jj_gen;
+ break label_61;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case HASH:
@@ -2298,14 +2284,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cond = pseudo(cond);
break;
default:
- jj_la1[90] = jj_gen;
+ jj_la1[88] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
break;
default:
- jj_la1[91] = jj_gen;
+ jj_la1[89] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2315,25 +2301,30 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
if (cond != null) {
simple_current = simple_current + cond;
}
- if (selector != null) {
- switch (comb) {
- case ' ':
- selector = selector + comb + simple_current;
- break;
- case '+':
- case '>':
- case '~':
- selector = selector + " " + comb + " " + simple_current;
- break;
- default: {
- if (true) {
- throw new ParseException("invalid state. send a bug report");
- }
+ StringBuilder builder = new StringBuilder();
+ switch (comb) {
+ case ' ':
+ if (selector != null) {
+ builder.append(selector).append(" ");
}
+ break;
+ case '+':
+ case '>':
+ case '~':
+ if (selector != null) {
+ builder.append(selector).append(" ");
+ }
+ builder.append(comb).append(" ");
+ break;
+ default: {
+ if (true) {
+ throw new ParseException("invalid state. send a bug report");
}
- } else {
- selector = simple_current;
}
+ }
+ builder.append(simple_current);
+ selector = builder.toString();
+
if (pseudoElt != null) {
selector = selector + pseudoElt;
}
@@ -2353,7 +2344,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
Token t;
String s = ".";
jj_consume_token(DOT);
- label_65: while (true) {
+ label_62: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case IDENT:
t = jj_consume_token(IDENT);
@@ -2364,7 +2355,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
s += t.image;
break;
default:
- jj_la1[92] = jj_gen;
+ jj_la1[90] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2374,8 +2365,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[93] = jj_gen;
- break label_65;
+ jj_la1[91] = jj_gen;
+ break label_62;
}
}
if (pred == null) {
@@ -2404,7 +2395,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case INTERPOLATION:
case IDENT:
- label_66: while (true) {
+ label_63: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case IDENT:
t = jj_consume_token(IDENT);
@@ -2415,7 +2406,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
s += t.image;
break;
default:
- jj_la1[94] = jj_gen;
+ jj_la1[92] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2425,8 +2416,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[95] = jj_gen;
- break label_66;
+ jj_la1[93] = jj_gen;
+ break label_63;
}
}
{
@@ -2452,7 +2443,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[96] = jj_gen;
+ jj_la1[94] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2469,26 +2460,26 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
Token val = null;
String attValue = null;
jj_consume_token(LBRACKET);
- label_67: while (true) {
+ label_64: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[97] = jj_gen;
- break label_67;
+ jj_la1[95] = jj_gen;
+ break label_64;
}
jj_consume_token(S);
}
att = jj_consume_token(IDENT);
- label_68: while (true) {
+ label_65: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[98] = jj_gen;
- break label_68;
+ jj_la1[96] = jj_gen;
+ break label_65;
}
jj_consume_token(S);
}
@@ -2525,18 +2516,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
cases = 6;
break;
default:
- jj_la1[99] = jj_gen;
+ jj_la1[97] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
- label_69: while (true) {
+ label_66: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[100] = jj_gen;
- break label_69;
+ jj_la1[98] = jj_gen;
+ break label_66;
}
jj_consume_token(S);
}
@@ -2550,24 +2541,24 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
attValue = val.image;
break;
default:
- jj_la1[101] = jj_gen;
+ jj_la1[99] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
- label_70: while (true) {
+ label_67: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[102] = jj_gen;
- break label_70;
+ jj_la1[100] = jj_gen;
+ break label_67;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[103] = jj_gen;
+ jj_la1[101] = jj_gen;
;
}
jj_consume_token(RBRACKET);
@@ -2632,7 +2623,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
isPseudoElement = true;
break;
default:
- jj_la1[104] = jj_gen;
+ jj_la1[102] = jj_gen;
;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -2675,14 +2666,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
case FUNCTION:
n = jj_consume_token(FUNCTION);
- label_71: while (true) {
+ label_68: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[105] = jj_gen;
- break label_71;
+ jj_la1[103] = jj_gen;
+ break label_68;
}
jj_consume_token(S);
}
@@ -2707,7 +2698,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[106] = jj_gen;
+ jj_la1[104] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2746,14 +2737,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
try {
name = variableName();
jj_consume_token(COLON);
- label_72: while (true) {
+ label_69: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[107] = jj_gen;
- break label_72;
+ jj_la1[105] = jj_gen;
+ break label_69;
}
jj_consume_token(S);
}
@@ -2763,19 +2754,19 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
guarded = guarded();
break;
default:
- jj_la1[108] = jj_gen;
+ jj_la1[106] = jj_gen;
;
}
- label_73: while (true) {
+ label_70: while (true) {
jj_consume_token(SEMICOLON);
- label_74: while (true) {
+ label_71: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[109] = jj_gen;
- break label_74;
+ jj_la1[107] = jj_gen;
+ break label_71;
}
jj_consume_token(S);
}
@@ -2784,8 +2775,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[110] = jj_gen;
- break label_73;
+ jj_la1[108] = jj_gen;
+ break label_70;
}
}
documentHandler.variable(name, exp, guarded);
@@ -2823,7 +2814,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
eachDirective();
break;
default:
- jj_la1[111] = jj_gen;
+ jj_la1[109] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2840,6 +2831,9 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case EXTEND_SYM:
extendDirective();
break;
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -2856,7 +2850,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
keyframes();
break;
default:
- jj_la1[112] = jj_gen;
+ jj_la1[110] = jj_gen;
if (jj_2_3(2147483647)) {
variable();
} else {
@@ -2865,7 +2859,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
listModifyDirective();
break;
default:
- jj_la1[113] = jj_gen;
+ jj_la1[111] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2878,7 +2872,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
String s = null;
String evaluator = "";
jj_consume_token(IF_SYM);
- label_75: while (true) {
+ label_72: while (true) {
s = booleanExpressionToken();
evaluator += s;
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -2903,26 +2897,29 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[114] = jj_gen;
- break label_75;
+ jj_la1[112] = jj_gen;
+ break label_72;
}
}
jj_consume_token(LBRACE);
- label_76: while (true) {
+ label_73: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[115] = jj_gen;
- break label_76;
+ jj_la1[113] = jj_gen;
+ break label_73;
}
jj_consume_token(S);
}
documentHandler.startIfElseDirective();
documentHandler.ifDirective(evaluator);
- label_77: while (true) {
+ label_74: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -2941,31 +2938,31 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[116] = jj_gen;
- break label_77;
+ jj_la1[114] = jj_gen;
+ break label_74;
}
ifContentStatement();
}
jj_consume_token(RBRACE);
- label_78: while (true) {
+ label_75: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[117] = jj_gen;
- break label_78;
+ jj_la1[115] = jj_gen;
+ break label_75;
}
jj_consume_token(S);
}
- label_79: while (true) {
+ label_76: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case ELSE_SYM:
;
break;
default:
- jj_la1[118] = jj_gen;
- break label_79;
+ jj_la1[116] = jj_gen;
+ break label_76;
}
elseDirective();
}
@@ -2977,21 +2974,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
Token n = null;
String s = null;
jj_consume_token(ELSE_SYM);
- label_80: while (true) {
+ label_77: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[119] = jj_gen;
- break label_80;
+ jj_la1[117] = jj_gen;
+ break label_77;
}
jj_consume_token(S);
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case IF:
jj_consume_token(IF);
- label_81: while (true) {
+ label_78: while (true) {
s = booleanExpressionToken();
evaluator += s;
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -3016,24 +3013,24 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[120] = jj_gen;
- break label_81;
+ jj_la1[118] = jj_gen;
+ break label_78;
}
}
break;
default:
- jj_la1[121] = jj_gen;
+ jj_la1[119] = jj_gen;
;
}
jj_consume_token(LBRACE);
- label_82: while (true) {
+ label_79: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[122] = jj_gen;
- break label_82;
+ jj_la1[120] = jj_gen;
+ break label_79;
}
jj_consume_token(S);
}
@@ -3042,8 +3039,11 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
} else {
documentHandler.elseDirective();
}
- label_83: while (true) {
+ label_80: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -3062,20 +3062,20 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[123] = jj_gen;
- break label_83;
+ jj_la1[121] = jj_gen;
+ break label_80;
}
ifContentStatement();
}
jj_consume_token(RBRACE);
- label_84: while (true) {
+ label_81: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[124] = jj_gen;
- break label_84;
+ jj_la1[122] = jj_gen;
+ break label_81;
}
jj_consume_token(S);
}
@@ -3140,7 +3140,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
n = jj_consume_token(NOT_EQ);
break;
default:
- jj_la1[125] = jj_gen;
+ jj_la1[123] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3166,38 +3166,38 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
ArrayList<String> list = null;
String listVariable = null;
jj_consume_token(EACH_SYM);
- label_85: while (true) {
+ label_82: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[126] = jj_gen;
- break label_85;
+ jj_la1[124] = jj_gen;
+ break label_82;
}
jj_consume_token(S);
}
var = jj_consume_token(VARIABLE);
- label_86: while (true) {
+ label_83: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[127] = jj_gen;
- break label_86;
+ jj_la1[125] = jj_gen;
+ break label_83;
}
jj_consume_token(S);
}
jj_consume_token(EACH_IN);
- label_87: while (true) {
+ label_84: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[128] = jj_gen;
- break label_87;
+ jj_la1[126] = jj_gen;
+ break label_84;
}
jj_consume_token(S);
}
@@ -3211,24 +3211,27 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
documentHandler.startEachDirective(var.image, listVariable);
break;
default:
- jj_la1[129] = jj_gen;
+ jj_la1[127] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
jj_consume_token(LBRACE);
- label_88: while (true) {
+ label_85: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[130] = jj_gen;
- break label_88;
+ jj_la1[128] = jj_gen;
+ break label_85;
}
jj_consume_token(S);
}
- label_89: while (true) {
+ label_86: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -3247,20 +3250,20 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[131] = jj_gen;
- break label_89;
+ jj_la1[129] = jj_gen;
+ break label_86;
}
ifContentStatement();
}
jj_consume_token(RBRACE);
- label_90: while (true) {
+ label_87: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[132] = jj_gen;
- break label_90;
+ jj_la1[130] = jj_gen;
+ break label_87;
}
jj_consume_token(S);
}
@@ -3271,49 +3274,49 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
ArrayList<String> strings = new ArrayList<String>();
Token input;
input = jj_consume_token(IDENT);
- label_91: while (true) {
+ label_88: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[133] = jj_gen;
- break label_91;
+ jj_la1[131] = jj_gen;
+ break label_88;
}
jj_consume_token(S);
}
strings.add(input.image);
- label_92: while (true) {
+ label_89: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
;
break;
default:
- jj_la1[134] = jj_gen;
- break label_92;
+ jj_la1[132] = jj_gen;
+ break label_89;
}
jj_consume_token(COMMA);
- label_93: while (true) {
+ label_90: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[135] = jj_gen;
- break label_93;
+ jj_la1[133] = jj_gen;
+ break label_90;
}
jj_consume_token(S);
}
input = jj_consume_token(IDENT);
strings.add(input.image);
- label_94: while (true) {
+ label_91: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[136] = jj_gen;
- break label_94;
+ jj_la1[134] = jj_gen;
+ break label_91;
}
jj_consume_token(S);
}
@@ -3331,14 +3334,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
ArrayList<VariableNode> args = null;
String body;
jj_consume_token(MIXIN_SYM);
- label_95: while (true) {
+ label_92: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[137] = jj_gen;
- break label_95;
+ jj_la1[135] = jj_gen;
+ break label_92;
}
jj_consume_token(S);
}
@@ -3351,38 +3354,41 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
name = functionName();
args = arglist();
jj_consume_token(RPARAN);
- label_96: while (true) {
+ label_93: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[138] = jj_gen;
- break label_96;
+ jj_la1[136] = jj_gen;
+ break label_93;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[139] = jj_gen;
+ jj_la1[137] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
jj_consume_token(LBRACE);
- label_97: while (true) {
+ label_94: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[140] = jj_gen;
- break label_97;
+ jj_la1[138] = jj_gen;
+ break label_94;
}
jj_consume_token(S);
}
documentHandler.startMixinDirective(name, args);
- label_98: while (true) {
+ label_95: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -3405,10 +3411,13 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[141] = jj_gen;
- break label_98;
+ jj_la1[139] = jj_gen;
+ break label_95;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -3437,20 +3446,20 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
page();
break;
default:
- jj_la1[142] = jj_gen;
+ jj_la1[140] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
jj_consume_token(RBRACE);
- label_99: while (true) {
+ label_96: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[143] = jj_gen;
- break label_99;
+ jj_la1[141] = jj_gen;
+ break label_96;
}
jj_consume_token(S);
}
@@ -3462,24 +3471,24 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
VariableNode arg;
boolean hasNonOptionalArgument = false;
arg = mixinArg();
- label_100: while (true) {
+ label_97: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
;
break;
default:
- jj_la1[144] = jj_gen;
- break label_100;
+ jj_la1[142] = jj_gen;
+ break label_97;
}
jj_consume_token(COMMA);
- label_101: while (true) {
+ label_98: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[145] = jj_gen;
- break label_101;
+ jj_la1[143] = jj_gen;
+ break label_98;
}
jj_consume_token(S);
}
@@ -3530,42 +3539,42 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COLON:
jj_consume_token(COLON);
- label_102: while (true) {
+ label_99: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[146] = jj_gen;
- break label_102;
+ jj_la1[144] = jj_gen;
+ break label_99;
}
jj_consume_token(S);
}
first = nonVariableTerm(null);
prev = first;
- label_103: while (true) {
+ label_100: while (true) {
if (jj_2_5(3)) {
;
} else {
- break label_103;
+ break label_100;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
jj_consume_token(COMMA);
- label_104: while (true) {
+ label_101: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[147] = jj_gen;
- break label_104;
+ jj_la1[145] = jj_gen;
+ break label_101;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[148] = jj_gen;
+ jj_la1[146] = jj_gen;
;
}
prev = nonVariableTerm(prev);
@@ -3577,13 +3586,13 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
token.beginColumn, prev, variable.image);
break;
default:
- jj_la1[149] = jj_gen;
+ jj_la1[147] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[150] = jj_gen;
+ jj_la1[148] = jj_gen;
;
}
VariableNode arg = new VariableNode(name, first, false);
@@ -3604,7 +3613,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
first = term(null);
args.add(first);
prev = first;
- label_105: while (true) {
+ label_102: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case PLUS:
case MINUS:
@@ -3640,57 +3649,57 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[151] = jj_gen;
- break label_105;
+ jj_la1[149] = jj_gen;
+ break label_102;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COLON:
jj_consume_token(COLON);
- label_106: while (true) {
+ label_103: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[152] = jj_gen;
- break label_106;
+ jj_la1[150] = jj_gen;
+ break label_103;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[153] = jj_gen;
+ jj_la1[151] = jj_gen;
;
}
next = term(prev);
prev.setNextLexicalUnit(next);
prev = next;
}
- label_107: while (true) {
+ label_104: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
;
break;
default:
- jj_la1[154] = jj_gen;
- break label_107;
+ jj_la1[152] = jj_gen;
+ break label_104;
}
jj_consume_token(COMMA);
- label_108: while (true) {
+ label_105: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[155] = jj_gen;
- break label_108;
+ jj_la1[153] = jj_gen;
+ break label_105;
}
jj_consume_token(S);
}
first = term(null);
args.add(first);
prev = first;
- label_109: while (true) {
+ label_106: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case PLUS:
case MINUS:
@@ -3726,26 +3735,26 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[156] = jj_gen;
- break label_109;
+ jj_la1[154] = jj_gen;
+ break label_106;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COLON:
jj_consume_token(COLON);
- label_110: while (true) {
+ label_107: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[157] = jj_gen;
- break label_110;
+ jj_la1[155] = jj_gen;
+ break label_107;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[158] = jj_gen;
+ jj_la1[156] = jj_gen;
;
}
next = term(prev);
@@ -3765,14 +3774,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
String name;
ArrayList<LexicalUnitImpl> args = null;
jj_consume_token(INCLUDE_SYM);
- label_111: while (true) {
+ label_108: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[159] = jj_gen;
- break label_111;
+ jj_la1[157] = jj_gen;
+ break label_108;
}
jj_consume_token(S);
}
@@ -3791,20 +3800,20 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
jj_consume_token(RPARAN);
break;
default:
- jj_la1[160] = jj_gen;
+ jj_la1[158] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
- label_112: while (true) {
+ label_109: while (true) {
jj_consume_token(SEMICOLON);
- label_113: while (true) {
+ label_110: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[161] = jj_gen;
- break label_113;
+ jj_la1[159] = jj_gen;
+ break label_110;
}
jj_consume_token(S);
}
@@ -3813,8 +3822,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[162] = jj_gen;
- break label_112;
+ jj_la1[160] = jj_gen;
+ break label_109;
}
}
documentHandler.includeDirective(name, args);
@@ -3841,26 +3850,26 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
// refactor, remove those 3 LOOKAHEAD(5).
n = jj_consume_token(VARIABLE);
variable = n.image;
- label_114: while (true) {
+ label_111: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[163] = jj_gen;
- break label_114;
+ jj_la1[161] = jj_gen;
+ break label_111;
}
jj_consume_token(S);
}
jj_consume_token(COLON);
- label_115: while (true) {
+ label_112: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[164] = jj_gen;
- break label_115;
+ jj_la1[162] = jj_gen;
+ break label_112;
}
jj_consume_token(S);
}
@@ -3875,18 +3884,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
type = jj_consume_token(CONTAINS);
break;
default:
- jj_la1[165] = jj_gen;
+ jj_la1[163] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
- label_116: while (true) {
+ label_113: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[166] = jj_gen;
- break label_116;
+ jj_la1[164] = jj_gen;
+ break label_113;
}
jj_consume_token(S);
}
@@ -3896,18 +3905,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
jj_consume_token(RPARAN);
break;
default:
- jj_la1[167] = jj_gen;
+ jj_la1[165] = jj_gen;
;
}
jj_consume_token(COMMA);
- label_117: while (true) {
+ label_114: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[168] = jj_gen;
- break label_117;
+ jj_la1[166] = jj_gen;
+ break label_114;
}
jj_consume_token(S);
}
@@ -3915,33 +3924,33 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
jj_consume_token(COMMA);
- label_118: while (true) {
+ label_115: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[169] = jj_gen;
- break label_118;
+ jj_la1[167] = jj_gen;
+ break label_115;
}
jj_consume_token(S);
}
n = jj_consume_token(IDENT);
separator = n.image;
- label_119: while (true) {
+ label_116: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[170] = jj_gen;
- break label_119;
+ jj_la1[168] = jj_gen;
+ break label_116;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[171] = jj_gen;
+ jj_la1[169] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -3962,26 +3971,26 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
default:
break;
}
- label_120: while (true) {
+ label_117: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[172] = jj_gen;
- break label_120;
+ jj_la1[170] = jj_gen;
+ break label_117;
}
jj_consume_token(S);
}
jj_consume_token(SEMICOLON);
- label_121: while (true) {
+ label_118: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[173] = jj_gen;
- break label_121;
+ jj_la1[171] = jj_gen;
+ break label_118;
}
jj_consume_token(S);
}
@@ -3999,38 +4008,38 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
Token n = null;
n = jj_consume_token(VARIABLE);
variable = n.image;
- label_122: while (true) {
+ label_119: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[174] = jj_gen;
- break label_122;
+ jj_la1[172] = jj_gen;
+ break label_119;
}
jj_consume_token(S);
}
jj_consume_token(COLON);
- label_123: while (true) {
+ label_120: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[175] = jj_gen;
- break label_123;
+ jj_la1[173] = jj_gen;
+ break label_120;
}
jj_consume_token(S);
}
jj_consume_token(APPEND);
- label_124: while (true) {
+ label_121: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[176] = jj_gen;
- break label_124;
+ jj_la1[174] = jj_gen;
+ break label_121;
}
jj_consume_token(S);
}
@@ -4040,18 +4049,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
jj_consume_token(RPARAN);
break;
default:
- jj_la1[177] = jj_gen;
+ jj_la1[175] = jj_gen;
;
}
jj_consume_token(COMMA);
- label_125: while (true) {
+ label_122: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[178] = jj_gen;
- break label_125;
+ jj_la1[176] = jj_gen;
+ break label_122;
}
jj_consume_token(S);
}
@@ -4059,33 +4068,33 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
jj_consume_token(COMMA);
- label_126: while (true) {
+ label_123: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[179] = jj_gen;
- break label_126;
+ jj_la1[177] = jj_gen;
+ break label_123;
}
jj_consume_token(S);
}
n = jj_consume_token(IDENT);
separator = n.image;
- label_127: while (true) {
+ label_124: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[180] = jj_gen;
- break label_127;
+ jj_la1[178] = jj_gen;
+ break label_124;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[181] = jj_gen;
+ jj_la1[179] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -4104,38 +4113,38 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
Token n = null;
n = jj_consume_token(VARIABLE);
variable = n.image;
- label_128: while (true) {
+ label_125: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[182] = jj_gen;
- break label_128;
+ jj_la1[180] = jj_gen;
+ break label_125;
}
jj_consume_token(S);
}
jj_consume_token(COLON);
- label_129: while (true) {
+ label_126: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[183] = jj_gen;
- break label_129;
+ jj_la1[181] = jj_gen;
+ break label_126;
}
jj_consume_token(S);
}
jj_consume_token(REMOVE);
- label_130: while (true) {
+ label_127: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[184] = jj_gen;
- break label_130;
+ jj_la1[182] = jj_gen;
+ break label_127;
}
jj_consume_token(S);
}
@@ -4145,18 +4154,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
jj_consume_token(RPARAN);
break;
default:
- jj_la1[185] = jj_gen;
+ jj_la1[183] = jj_gen;
;
}
jj_consume_token(COMMA);
- label_131: while (true) {
+ label_128: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[186] = jj_gen;
- break label_131;
+ jj_la1[184] = jj_gen;
+ break label_128;
}
jj_consume_token(S);
}
@@ -4164,33 +4173,33 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
jj_consume_token(COMMA);
- label_132: while (true) {
+ label_129: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[187] = jj_gen;
- break label_132;
+ jj_la1[185] = jj_gen;
+ break label_129;
}
jj_consume_token(S);
}
n = jj_consume_token(IDENT);
separator = n.image;
- label_133: while (true) {
+ label_130: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[188] = jj_gen;
- break label_133;
+ jj_la1[186] = jj_gen;
+ break label_130;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[189] = jj_gen;
+ jj_la1[187] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -4211,43 +4220,43 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case VARIABLE:
n = jj_consume_token(VARIABLE);
variable = n.image;
- label_134: while (true) {
+ label_131: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[190] = jj_gen;
- break label_134;
+ jj_la1[188] = jj_gen;
+ break label_131;
}
jj_consume_token(S);
}
jj_consume_token(COLON);
- label_135: while (true) {
+ label_132: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[191] = jj_gen;
- break label_135;
+ jj_la1[189] = jj_gen;
+ break label_132;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[192] = jj_gen;
+ jj_la1[190] = jj_gen;
;
}
jj_consume_token(CONTAINS);
- label_136: while (true) {
+ label_133: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[193] = jj_gen;
- break label_136;
+ jj_la1[191] = jj_gen;
+ break label_133;
}
jj_consume_token(S);
}
@@ -4257,18 +4266,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
jj_consume_token(RPARAN);
break;
default:
- jj_la1[194] = jj_gen;
+ jj_la1[192] = jj_gen;
;
}
jj_consume_token(COMMA);
- label_137: while (true) {
+ label_134: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[195] = jj_gen;
- break label_137;
+ jj_la1[193] = jj_gen;
+ break label_134;
}
jj_consume_token(S);
}
@@ -4276,33 +4285,33 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
jj_consume_token(COMMA);
- label_138: while (true) {
+ label_135: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[196] = jj_gen;
- break label_138;
+ jj_la1[194] = jj_gen;
+ break label_135;
}
jj_consume_token(S);
}
n = jj_consume_token(IDENT);
separator = n.image;
- label_139: while (true) {
+ label_136: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[197] = jj_gen;
- break label_139;
+ jj_la1[195] = jj_gen;
+ break label_136;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[198] = jj_gen;
+ jj_la1[196] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -4404,7 +4413,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
warnDirective();
break;
default:
- jj_la1[199] = jj_gen;
+ jj_la1[197] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4416,14 +4425,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
// TODO should evaluate the content expression, call
// documentHandler.debugDirective() etc.
System.out.println(content);
- label_140: while (true) {
+ label_137: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[200] = jj_gen;
- break label_140;
+ jj_la1[198] = jj_gen;
+ break label_137;
}
jj_consume_token(S);
}
@@ -4435,14 +4444,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
// TODO should evaluate the content expression, call
// documentHandler.warnDirective() etc.
System.err.println(content);
- label_141: while (true) {
+ label_138: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[201] = jj_gen;
- break label_141;
+ jj_la1[199] = jj_gen;
+ break label_138;
}
jj_consume_token(S);
}
@@ -4468,19 +4477,19 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
exclusive = false;
break;
default:
- jj_la1[202] = jj_gen;
+ jj_la1[200] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
to = skipStatementUntilLeftBrace();
- label_142: while (true) {
+ label_139: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[203] = jj_gen;
- break label_142;
+ jj_la1[201] = jj_gen;
+ break label_139;
}
jj_consume_token(S);
}
@@ -4510,28 +4519,28 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public void extendDirective() throws ParseException {
ArrayList<String> list;
jj_consume_token(EXTEND_SYM);
- label_143: while (true) {
+ label_140: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[204] = jj_gen;
- break label_143;
+ jj_la1[202] = jj_gen;
+ break label_140;
}
jj_consume_token(S);
}
list = selectorList();
- label_144: while (true) {
+ label_141: while (true) {
jj_consume_token(SEMICOLON);
- label_145: while (true) {
+ label_142: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[205] = jj_gen;
- break label_145;
+ jj_la1[203] = jj_gen;
+ break label_142;
}
jj_consume_token(S);
}
@@ -4540,8 +4549,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[206] = jj_gen;
- break label_144;
+ jj_la1[204] = jj_gen;
+ break label_141;
}
}
documentHandler.extendDirective(list);
@@ -4568,26 +4577,26 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
LexicalUnit exp;
name = property();
jj_consume_token(COLON);
- label_146: while (true) {
+ label_143: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[207] = jj_gen;
- break label_146;
+ jj_la1[205] = jj_gen;
+ break label_143;
}
jj_consume_token(S);
}
jj_consume_token(LBRACE);
- label_147: while (true) {
+ label_144: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[208] = jj_gen;
- break label_147;
+ jj_la1[206] = jj_gen;
+ break label_144;
}
jj_consume_token(S);
}
@@ -4598,27 +4607,27 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[209] = jj_gen;
+ jj_la1[207] = jj_gen;
;
}
- label_148: while (true) {
+ label_145: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[210] = jj_gen;
- break label_148;
+ jj_la1[208] = jj_gen;
+ break label_145;
}
jj_consume_token(SEMICOLON);
- label_149: while (true) {
+ label_146: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[211] = jj_gen;
- break label_149;
+ jj_la1[209] = jj_gen;
+ break label_146;
}
jj_consume_token(S);
}
@@ -4628,20 +4637,20 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[212] = jj_gen;
+ jj_la1[210] = jj_gen;
;
}
}
jj_consume_token(RBRACE);
documentHandler.endNestedProperties(name);
- label_150: while (true) {
+ label_147: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[213] = jj_gen;
- break label_150;
+ jj_la1[211] = jj_gen;
+ break label_147;
}
jj_consume_token(S);
}
@@ -4660,13 +4669,16 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
debuggingDirective();
break;
default:
- jj_la1[214] = jj_gen;
+ jj_la1[212] = jj_gen;
if (jj_2_6(2147483647)) {
styleRule();
} else if (jj_2_7(3)) {
declarationOrNestedProperties();
} else {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -4678,7 +4690,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
styleRule();
break;
default:
- jj_la1[215] = jj_gen;
+ jj_la1[213] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4723,14 +4735,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
name = property();
save = token;
jj_consume_token(COLON);
- label_151: while (true) {
+ label_148: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[216] = jj_gen;
- break label_151;
+ jj_la1[214] = jj_gen;
+ break label_148;
}
jj_consume_token(S);
}
@@ -4771,7 +4783,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
important = prio();
break;
default:
- jj_la1[217] = jj_gen;
+ jj_la1[215] = jj_gen;
;
}
Token next = getToken(1);
@@ -4790,14 +4802,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
case LBRACE:
jj_consume_token(LBRACE);
- label_152: while (true) {
+ label_149: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[218] = jj_gen;
- break label_152;
+ jj_la1[216] = jj_gen;
+ break label_149;
}
jj_consume_token(S);
}
@@ -4808,27 +4820,27 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[219] = jj_gen;
+ jj_la1[217] = jj_gen;
;
}
- label_153: while (true) {
+ label_150: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[220] = jj_gen;
- break label_153;
+ jj_la1[218] = jj_gen;
+ break label_150;
}
jj_consume_token(SEMICOLON);
- label_154: while (true) {
+ label_151: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[221] = jj_gen;
- break label_154;
+ jj_la1[219] = jj_gen;
+ break label_151;
}
jj_consume_token(S);
}
@@ -4838,26 +4850,26 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[222] = jj_gen;
+ jj_la1[220] = jj_gen;
;
}
}
jj_consume_token(RBRACE);
- label_155: while (true) {
+ label_152: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[223] = jj_gen;
- break label_155;
+ jj_la1[221] = jj_gen;
+ break label_152;
}
jj_consume_token(S);
}
documentHandler.endNestedProperties(name);
break;
default:
- jj_la1[224] = jj_gen;
+ jj_la1[222] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4905,14 +4917,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
name = property();
save = token;
jj_consume_token(COLON);
- label_156: while (true) {
+ label_153: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[225] = jj_gen;
- break label_156;
+ jj_la1[223] = jj_gen;
+ break label_153;
}
jj_consume_token(S);
}
@@ -4922,7 +4934,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
important = prio();
break;
default:
- jj_la1[226] = jj_gen;
+ jj_la1[224] = jj_gen;
;
}
documentHandler.property(name, exp, important);
@@ -4963,14 +4975,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
*/
final public boolean prio() throws ParseException {
jj_consume_token(IMPORTANT_SYM);
- label_157: while (true) {
+ label_154: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[227] = jj_gen;
- break label_157;
+ jj_la1[225] = jj_gen;
+ break label_154;
}
jj_consume_token(S);
}
@@ -4984,14 +4996,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public boolean guarded() throws ParseException {
jj_consume_token(GUARDED_SYM);
- label_158: while (true) {
+ label_155: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[228] = jj_gen;
- break label_158;
+ jj_la1[226] = jj_gen;
+ break label_155;
}
jj_consume_token(S);
}
@@ -5013,14 +5025,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case DIV:
n = jj_consume_token(DIV);
- label_159: while (true) {
+ label_156: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[229] = jj_gen;
- break label_159;
+ jj_la1[227] = jj_gen;
+ break label_156;
}
jj_consume_token(S);
}
@@ -5033,14 +5045,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
case COMMA:
n = jj_consume_token(COMMA);
- label_160: while (true) {
+ label_157: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[230] = jj_gen;
- break label_160;
+ jj_la1[228] = jj_gen;
+ break label_157;
}
jj_consume_token(S);
}
@@ -5052,7 +5064,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[231] = jj_gen;
+ jj_la1[229] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5068,11 +5080,11 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
char op;
first = term(null);
res = first;
- label_161: while (true) {
+ label_158: while (true) {
if (jj_2_8(2)) {
;
} else {
- break label_161;
+ break label_158;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case COMMA:
@@ -5080,7 +5092,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
res = operator(res);
break;
default:
- jj_la1[232] = jj_gen;
+ jj_la1[230] = jj_gen;
;
}
res = term(res);
@@ -5116,7 +5128,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[233] = jj_gen;
+ jj_la1[231] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5168,7 +5180,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
result = variableTerm(prev);
break;
default:
- jj_la1[234] = jj_gen;
+ jj_la1[232] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5232,7 +5244,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
op = unaryOperator();
break;
default:
- jj_la1[235] = jj_gen;
+ jj_la1[233] = jj_gen;
;
}
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
@@ -5347,7 +5359,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
result = function(op, prev);
break;
default:
- jj_la1[236] = jj_gen;
+ jj_la1[234] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -5373,7 +5385,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
s += ".";
break;
default:
- jj_la1[237] = jj_gen;
+ jj_la1[235] = jj_gen;
;
}
n = jj_consume_token(IDENT);
@@ -5411,24 +5423,24 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
result = unicode(prev);
break;
default:
- jj_la1[238] = jj_gen;
+ jj_la1[236] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[239] = jj_gen;
+ jj_la1[237] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
- label_162: while (true) {
+ label_159: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[240] = jj_gen;
- break label_162;
+ jj_la1[238] = jj_gen;
+ break label_159;
}
jj_consume_token(S);
}
@@ -5451,14 +5463,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
Token n;
LexicalUnit params = null;
n = jj_consume_token(FUNCTION);
- label_163: while (true) {
+ label_160: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[241] = jj_gen;
- break label_163;
+ jj_la1[239] = jj_gen;
+ break label_160;
}
jj_consume_token(S);
}
@@ -5514,7 +5526,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
params = expr();
break;
default:
- jj_la1[242] = jj_gen;
+ jj_la1[240] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -6051,14 +6063,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
*/
final public void _parseRule() throws ParseException {
String ret = null;
- label_164: while (true) {
+ label_161: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[243] = jj_gen;
- break label_164;
+ jj_la1[241] = jj_gen;
+ break label_161;
}
jj_consume_token(S);
}
@@ -6070,6 +6082,9 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
case WARN_SYM:
debuggingDirective();
break;
+ case PLUS:
+ case PRECEDES:
+ case SIBLING:
case LBRACKET:
case ANY:
case PARENT:
@@ -6090,7 +6105,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
fontFace();
break;
default:
- jj_la1[244] = jj_gen;
+ jj_la1[242] = jj_gen;
ret = skipStatement();
if ((ret == null) || (ret.length() == 0)) {
{
@@ -6113,14 +6128,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
final public void _parseImportRule() throws ParseException {
- label_165: while (true) {
+ label_162: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[245] = jj_gen;
- break label_165;
+ jj_la1[243] = jj_gen;
+ break label_162;
}
jj_consume_token(S);
}
@@ -6128,14 +6143,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
final public void _parseMediaRule() throws ParseException {
- label_166: while (true) {
+ label_163: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[246] = jj_gen;
- break label_166;
+ jj_la1[244] = jj_gen;
+ break label_163;
}
jj_consume_token(S);
}
@@ -6143,14 +6158,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
final public void _parseDeclarationBlock() throws ParseException {
- label_167: while (true) {
+ label_164: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[247] = jj_gen;
- break label_167;
+ jj_la1[245] = jj_gen;
+ break label_164;
}
jj_consume_token(S);
}
@@ -6160,27 +6175,27 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[248] = jj_gen;
+ jj_la1[246] = jj_gen;
;
}
- label_168: while (true) {
+ label_165: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case SEMICOLON:
;
break;
default:
- jj_la1[249] = jj_gen;
- break label_168;
+ jj_la1[247] = jj_gen;
+ break label_165;
}
jj_consume_token(SEMICOLON);
- label_169: while (true) {
+ label_166: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[250] = jj_gen;
- break label_169;
+ jj_la1[248] = jj_gen;
+ break label_166;
}
jj_consume_token(S);
}
@@ -6190,7 +6205,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[251] = jj_gen;
+ jj_la1[249] = jj_gen;
;
}
}
@@ -6199,14 +6214,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
final public ArrayList<String> _parseSelectors() throws ParseException {
ArrayList<String> p = null;
try {
- label_170: while (true) {
+ label_167: while (true) {
switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
case S:
;
break;
default:
- jj_la1[252] = jj_gen;
- break label_170;
+ jj_la1[250] = jj_gen;
+ break label_167;
}
jj_consume_token(S);
}
@@ -6322,87 +6337,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
}
- private boolean jj_3R_212() {
- if (jj_3R_249()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_195() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_212()) {
- jj_scanpos = xsp;
- }
- xsp = jj_scanpos;
- if (jj_3R_213()) {
- jj_scanpos = xsp;
- if (jj_3R_214()) {
- jj_scanpos = xsp;
- if (jj_3R_215()) {
- jj_scanpos = xsp;
- if (jj_3R_216()) {
- jj_scanpos = xsp;
- if (jj_3R_217()) {
- jj_scanpos = xsp;
- if (jj_3R_218()) {
- jj_scanpos = xsp;
- if (jj_3R_219()) {
- jj_scanpos = xsp;
- if (jj_3R_220()) {
- jj_scanpos = xsp;
- if (jj_3R_221()) {
- jj_scanpos = xsp;
- if (jj_3R_222()) {
- jj_scanpos = xsp;
- if (jj_3R_223()) {
- jj_scanpos = xsp;
- if (jj_3R_224()) {
- jj_scanpos = xsp;
- if (jj_3R_225()) {
- jj_scanpos = xsp;
- if (jj_3R_226()) {
- jj_scanpos = xsp;
- if (jj_3R_227()) {
- jj_scanpos = xsp;
- if (jj_3R_228()) {
- jj_scanpos = xsp;
- if (jj_3R_229()) {
- jj_scanpos = xsp;
- if (jj_3R_230()) {
- jj_scanpos = xsp;
- if (jj_3R_231()) {
- jj_scanpos = xsp;
- if (jj_3R_232()) {
- jj_scanpos = xsp;
- if (jj_3R_233()) {
- return true;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- return false;
- }
-
- private boolean jj_3R_181() {
+ private boolean jj_3R_178() {
if (jj_scan_token(VARIABLE)) {
return true;
}
@@ -6417,74 +6352,47 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_176() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_195()) {
- jj_scanpos = xsp;
- if (jj_3R_196()) {
- return true;
- }
- }
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- return false;
- }
-
- private boolean jj_3R_184() {
- if (jj_scan_token(SEMICOLON)) {
- return true;
- }
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- return false;
- }
-
- private boolean jj_3R_252() {
- if (jj_scan_token(HASH)) {
+ private boolean jj_3R_240() {
+ if (jj_3R_178()) {
return true;
}
return false;
}
- private boolean jj_3R_239() {
+ private boolean jj_3R_237() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_255()) {
+ if (jj_3R_250()) {
jj_scanpos = xsp;
- if (jj_3R_256()) {
+ if (jj_3R_251()) {
return true;
}
}
return false;
}
- private boolean jj_3R_255() {
+ private boolean jj_3R_250() {
if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3R_199() {
+ private boolean jj_3R_248() {
+ if (jj_scan_token(URL)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_194() {
Token xsp;
- if (jj_3R_239()) {
+ if (jj_3R_237()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_239()) {
+ if (jj_3R_237()) {
jj_scanpos = xsp;
break;
}
@@ -6499,127 +6407,114 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_242() {
- if (jj_3R_181()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_253() {
- if (jj_scan_token(URL)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_183() {
- if (jj_3R_205()) {
+ private boolean jj_3R_180() {
+ if (jj_3R_200()) {
return true;
}
return false;
}
- private boolean jj_3R_203() {
- if (jj_3R_176()) {
+ private boolean jj_3R_198() {
+ if (jj_3R_173()) {
return true;
}
return false;
}
- private boolean jj_3R_180() {
+ private boolean jj_3R_177() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_203()) {
+ if (jj_3R_198()) {
jj_scanpos = xsp;
- if (jj_3R_204()) {
+ if (jj_3R_199()) {
return true;
}
}
return false;
}
- private boolean jj_3R_179() {
- if (jj_3R_202()) {
+ private boolean jj_3R_176() {
+ if (jj_3R_197()) {
return true;
}
return false;
}
- private boolean jj_3R_259() {
+ private boolean jj_3R_254() {
if (jj_scan_token(PLUS)) {
return true;
}
return false;
}
- private boolean jj_3R_249() {
+ private boolean jj_3R_244() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_258()) {
+ if (jj_3R_253()) {
jj_scanpos = xsp;
- if (jj_3R_259()) {
+ if (jj_3R_254()) {
return true;
}
}
return false;
}
- private boolean jj_3R_258() {
+ private boolean jj_3R_253() {
if (jj_scan_token(MINUS)) {
return true;
}
return false;
}
- private boolean jj_3R_245() {
- if (jj_scan_token(SIBLING)) {
+ private boolean jj_3R_249() {
+ if (jj_scan_token(UNICODERANGE)) {
return true;
}
return false;
}
- private boolean jj_3R_244() {
- if (jj_scan_token(PRECEDES)) {
- return true;
+ private boolean jj_3_8() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_176()) {
+ jj_scanpos = xsp;
}
- return false;
- }
-
- private boolean jj_3R_254() {
- if (jj_scan_token(UNICODERANGE)) {
+ if (jj_3R_177()) {
return true;
}
return false;
}
- private boolean jj_3R_243() {
- if (jj_scan_token(PLUS)) {
+ private boolean jj_3R_179() {
+ if (jj_3R_177()) {
return true;
}
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3_8()) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
return false;
}
- private boolean jj_3_8() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_179()) {
- jj_scanpos = xsp;
- }
- if (jj_3R_180()) {
+ private boolean jj_3R_202() {
+ if (jj_3R_201()) {
return true;
}
return false;
}
- private boolean jj_3R_206() {
+ private boolean jj_3R_201() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_243()) {
+ if (jj_scan_token(20)) {
jj_scanpos = xsp;
- if (jj_3R_244()) {
+ if (jj_scan_token(24)) {
jj_scanpos = xsp;
- if (jj_3R_245()) {
+ if (jj_scan_token(25)) {
return true;
}
}
@@ -6634,23 +6529,11 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_182() {
- if (jj_3R_180()) {
+ private boolean jj_3R_168() {
+ if (jj_3R_178()) {
return true;
}
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3_8()) {
- jj_scanpos = xsp;
- break;
- }
- }
- return false;
- }
-
- private boolean jj_3R_187() {
- if (jj_scan_token(SIBLING)) {
+ if (jj_scan_token(COLON)) {
return true;
}
Token xsp;
@@ -6661,17 +6544,19 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- return false;
- }
-
- private boolean jj_3R_186() {
- if (jj_scan_token(PRECEDES)) {
+ if (jj_3R_179()) {
+ return true;
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_180()) {
+ jj_scanpos = xsp;
+ }
+ if (jj_3R_181()) {
return true;
}
- Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_scan_token(1)) {
+ if (jj_3R_181()) {
jj_scanpos = xsp;
break;
}
@@ -6679,38 +6564,20 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_188() {
+ private boolean jj_3R_183() {
if (jj_scan_token(S)) {
return true;
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_206()) {
+ if (jj_3R_202()) {
jj_scanpos = xsp;
}
return false;
}
- private boolean jj_3R_172() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_185()) {
- jj_scanpos = xsp;
- if (jj_3R_186()) {
- jj_scanpos = xsp;
- if (jj_3R_187()) {
- jj_scanpos = xsp;
- if (jj_3R_188()) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- private boolean jj_3R_185() {
- if (jj_scan_token(PLUS)) {
+ private boolean jj_3R_239() {
+ if (jj_scan_token(COMMA)) {
return true;
}
Token xsp;
@@ -6724,69 +6591,38 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_171() {
- if (jj_3R_181()) {
- return true;
- }
- if (jj_scan_token(COLON)) {
- return true;
- }
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
- }
- }
- if (jj_3R_182()) {
- return true;
- }
- xsp = jj_scanpos;
- if (jj_3R_183()) {
- jj_scanpos = xsp;
- }
- if (jj_3R_184()) {
+ private boolean jj_3R_182() {
+ if (jj_3R_201()) {
return true;
}
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_184()) {
- jj_scanpos = xsp;
- break;
- }
- }
return false;
}
- private boolean jj_3R_241() {
- if (jj_scan_token(COMMA)) {
- return true;
- }
+ private boolean jj_3R_169() {
Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) {
- jj_scanpos = xsp;
- break;
+ xsp = jj_scanpos;
+ if (jj_3R_182()) {
+ jj_scanpos = xsp;
+ if (jj_3R_183()) {
+ return true;
}
}
return false;
}
- private boolean jj_3R_202() {
+ private boolean jj_3R_197() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_240()) {
+ if (jj_3R_238()) {
jj_scanpos = xsp;
- if (jj_3R_241()) {
+ if (jj_3R_239()) {
return true;
}
}
return false;
}
- private boolean jj_3R_240() {
+ private boolean jj_3R_238() {
if (jj_scan_token(DIV)) {
return true;
}
@@ -6801,7 +6637,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_205() {
+ private boolean jj_3R_200() {
if (jj_scan_token(GUARDED_SYM)) {
return true;
}
@@ -6816,7 +6652,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_194() {
+ private boolean jj_3R_189() {
if (jj_scan_token(VARIABLE)) {
return true;
}
@@ -6841,10 +6677,10 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_174() {
+ private boolean jj_3R_171() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_194()) {
+ if (jj_3R_189()) {
jj_scanpos = xsp;
}
if (jj_scan_token(CONTAINS)) {
@@ -6865,21 +6701,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_208() {
+ private boolean jj_3R_204() {
if (jj_scan_token(HASH)) {
return true;
}
return false;
}
- private boolean jj_3R_281() {
+ private boolean jj_3R_276() {
if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3R_282() {
+ private boolean jj_3R_277() {
if (jj_scan_token(FUNCTION)) {
return true;
}
@@ -6899,26 +6735,26 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_280() {
+ private boolean jj_3R_275() {
if (jj_scan_token(COLON)) {
return true;
}
return false;
}
- private boolean jj_3R_210() {
+ private boolean jj_3R_206() {
if (jj_scan_token(COLON)) {
return true;
}
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_280()) {
+ if (jj_3R_275()) {
jj_scanpos = xsp;
}
xsp = jj_scanpos;
- if (jj_3R_281()) {
+ if (jj_3R_276()) {
jj_scanpos = xsp;
- if (jj_3R_282()) {
+ if (jj_3R_277()) {
return true;
}
}
@@ -6926,96 +6762,96 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
private boolean jj_3_7() {
- if (jj_3R_178()) {
+ if (jj_3R_175()) {
return true;
}
return false;
}
- private boolean jj_3R_301() {
+ private boolean jj_3R_296() {
if (jj_scan_token(STRING)) {
return true;
}
return false;
}
- private boolean jj_3R_299() {
+ private boolean jj_3R_294() {
if (jj_scan_token(STARMATCH)) {
return true;
}
return false;
}
- private boolean jj_3R_300() {
- if (jj_scan_token(IDENT)) {
+ private boolean jj_3R_293() {
+ if (jj_scan_token(DOLLARMATCH)) {
return true;
}
return false;
}
- private boolean jj_3R_298() {
- if (jj_scan_token(DOLLARMATCH)) {
+ private boolean jj_3R_295() {
+ if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3R_297() {
+ private boolean jj_3R_292() {
if (jj_scan_token(CARETMATCH)) {
return true;
}
return false;
}
- private boolean jj_3R_296() {
+ private boolean jj_3R_291() {
if (jj_scan_token(DASHMATCH)) {
return true;
}
return false;
}
- private boolean jj_3R_295() {
+ private boolean jj_3R_290() {
if (jj_scan_token(INCLUDES)) {
return true;
}
return false;
}
- private boolean jj_3R_267() {
+ private boolean jj_3R_257() {
if (jj_scan_token(INTERPOLATION)) {
return true;
}
return false;
}
- private boolean jj_3R_294() {
+ private boolean jj_3R_289() {
if (jj_scan_token(EQ)) {
return true;
}
return false;
}
- private boolean jj_3R_201() {
+ private boolean jj_3R_196() {
if (jj_scan_token(LBRACE)) {
return true;
}
return false;
}
- private boolean jj_3R_287() {
+ private boolean jj_3R_282() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_294()) {
+ if (jj_3R_289()) {
jj_scanpos = xsp;
- if (jj_3R_295()) {
+ if (jj_3R_290()) {
jj_scanpos = xsp;
- if (jj_3R_296()) {
+ if (jj_3R_291()) {
jj_scanpos = xsp;
- if (jj_3R_297()) {
+ if (jj_3R_292()) {
jj_scanpos = xsp;
- if (jj_3R_298()) {
+ if (jj_3R_293()) {
jj_scanpos = xsp;
- if (jj_3R_299()) {
+ if (jj_3R_294()) {
return true;
}
}
@@ -7031,9 +6867,9 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
}
xsp = jj_scanpos;
- if (jj_3R_300()) {
+ if (jj_3R_295()) {
jj_scanpos = xsp;
- if (jj_3R_301()) {
+ if (jj_3R_296()) {
return true;
}
}
@@ -7047,7 +6883,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_211() {
+ private boolean jj_3R_207() {
if (jj_scan_token(LBRACKET)) {
return true;
}
@@ -7070,7 +6906,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
}
xsp = jj_scanpos;
- if (jj_3R_287()) {
+ if (jj_3R_282()) {
jj_scanpos = xsp;
}
if (jj_scan_token(RBRACKET)) {
@@ -7079,28 +6915,28 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_293() {
+ private boolean jj_3R_288() {
if (jj_scan_token(INTERPOLATION)) {
return true;
}
return false;
}
- private boolean jj_3R_200() {
- if (jj_3R_182()) {
+ private boolean jj_3R_195() {
+ if (jj_3R_179()) {
return true;
}
return false;
}
- private boolean jj_3R_248() {
+ private boolean jj_3R_243() {
if (jj_scan_token(PARENT)) {
return true;
}
return false;
}
- private boolean jj_3R_247() {
+ private boolean jj_3R_242() {
if (jj_scan_token(ANY)) {
return true;
}
@@ -7108,7 +6944,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
private boolean jj_3_6() {
- if (jj_3R_177()) {
+ if (jj_3R_174()) {
return true;
}
if (jj_scan_token(LBRACE)) {
@@ -7117,8 +6953,8 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_178() {
- if (jj_3R_199()) {
+ private boolean jj_3R_175() {
+ if (jj_3R_194()) {
return true;
}
if (jj_scan_token(COLON)) {
@@ -7133,42 +6969,42 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
}
xsp = jj_scanpos;
- if (jj_3R_200()) {
+ if (jj_3R_195()) {
jj_scanpos = xsp;
- if (jj_3R_201()) {
+ if (jj_3R_196()) {
return true;
}
}
return false;
}
- private boolean jj_3R_257() {
+ private boolean jj_3R_252() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_266()) {
+ if (jj_3R_256()) {
jj_scanpos = xsp;
- if (jj_3R_267()) {
+ if (jj_3R_257()) {
return true;
}
}
return false;
}
- private boolean jj_3R_266() {
+ private boolean jj_3R_256() {
if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3R_207() {
+ private boolean jj_3R_203() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_246()) {
+ if (jj_3R_241()) {
jj_scanpos = xsp;
- if (jj_3R_247()) {
+ if (jj_3R_242()) {
jj_scanpos = xsp;
- if (jj_3R_248()) {
+ if (jj_3R_243()) {
return true;
}
}
@@ -7176,14 +7012,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_246() {
+ private boolean jj_3R_241() {
Token xsp;
- if (jj_3R_257()) {
+ if (jj_3R_252()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_257()) {
+ if (jj_3R_252()) {
jj_scanpos = xsp;
break;
}
@@ -7191,7 +7027,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_175() {
+ private boolean jj_3R_172() {
if (jj_scan_token(COMMA)) {
return true;
}
@@ -7206,48 +7042,27 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_291() {
- if (jj_3R_210()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_275() {
+ private boolean jj_3R_270() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_292()) {
+ if (jj_3R_287()) {
jj_scanpos = xsp;
- if (jj_3R_293()) {
+ if (jj_3R_288()) {
return true;
}
}
return false;
}
- private boolean jj_3R_292() {
+ private boolean jj_3R_287() {
if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3R_289() {
- if (jj_3R_209()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_284() {
- if (jj_3R_209()) {
- return true;
- }
- return false;
- }
-
private boolean jj_3R_286() {
- if (jj_3R_210()) {
+ if (jj_3R_206()) {
return true;
}
return false;
@@ -7256,26 +7071,26 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
private boolean jj_3_5() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_175()) {
+ if (jj_3R_172()) {
jj_scanpos = xsp;
}
- if (jj_3R_176()) {
+ if (jj_3R_173()) {
return true;
}
return false;
}
- private boolean jj_3R_209() {
+ private boolean jj_3R_205() {
if (jj_scan_token(DOT)) {
return true;
}
Token xsp;
- if (jj_3R_275()) {
+ if (jj_3R_270()) {
return true;
}
while (true) {
xsp = jj_scanpos;
- if (jj_3R_275()) {
+ if (jj_3R_270()) {
jj_scanpos = xsp;
break;
}
@@ -7283,51 +7098,72 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_274() {
- if (jj_3R_210()) {
+ private boolean jj_3R_284() {
+ if (jj_3R_205()) {
return true;
}
return false;
}
- private boolean jj_3R_277() {
- if (jj_3R_209()) {
+ private boolean jj_3R_279() {
+ if (jj_3R_205()) {
return true;
}
return false;
}
- private boolean jj_3R_279() {
- if (jj_3R_210()) {
+ private boolean jj_3R_281() {
+ if (jj_3R_206()) {
return true;
}
return false;
}
- private boolean jj_3R_290() {
- if (jj_3R_211()) {
+ private boolean jj_3R_269() {
+ if (jj_3R_206()) {
return true;
}
return false;
}
- private boolean jj_3R_260() {
- if (jj_3R_182()) {
+ private boolean jj_3R_272() {
+ if (jj_3R_205()) {
return true;
}
return false;
}
- private boolean jj_3R_265() {
+ private boolean jj_3R_274() {
+ if (jj_3R_206()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_255() {
+ if (jj_3R_179()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_285() {
+ if (jj_3R_207()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_262() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_288()) {
+ if (jj_3R_283()) {
jj_scanpos = xsp;
- if (jj_3R_289()) {
+ if (jj_3R_284()) {
jj_scanpos = xsp;
- if (jj_3R_290()) {
+ if (jj_3R_285()) {
jj_scanpos = xsp;
- if (jj_3R_291()) {
+ if (jj_3R_286()) {
return true;
}
}
@@ -7336,23 +7172,23 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_288() {
- if (jj_3R_208()) {
+ private boolean jj_3R_283() {
+ if (jj_3R_204()) {
return true;
}
return false;
}
- private boolean jj_3R_264() {
+ private boolean jj_3R_261() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_283()) {
+ if (jj_3R_278()) {
jj_scanpos = xsp;
- if (jj_3R_284()) {
+ if (jj_3R_279()) {
jj_scanpos = xsp;
- if (jj_3R_285()) {
+ if (jj_3R_280()) {
jj_scanpos = xsp;
- if (jj_3R_286()) {
+ if (jj_3R_281()) {
return true;
}
}
@@ -7361,30 +7197,30 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_283() {
- if (jj_3R_208()) {
+ private boolean jj_3R_278() {
+ if (jj_3R_204()) {
return true;
}
return false;
}
- private boolean jj_3R_271() {
- if (jj_3R_210()) {
+ private boolean jj_3R_266() {
+ if (jj_3R_206()) {
return true;
}
return false;
}
- private boolean jj_3R_263() {
+ private boolean jj_3R_260() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_276()) {
+ if (jj_3R_271()) {
jj_scanpos = xsp;
- if (jj_3R_277()) {
+ if (jj_3R_272()) {
jj_scanpos = xsp;
- if (jj_3R_278()) {
+ if (jj_3R_273()) {
jj_scanpos = xsp;
- if (jj_3R_279()) {
+ if (jj_3R_274()) {
return true;
}
}
@@ -7393,42 +7229,42 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_276() {
- if (jj_3R_208()) {
+ private boolean jj_3R_271() {
+ if (jj_3R_204()) {
return true;
}
return false;
}
- private boolean jj_3R_285() {
- if (jj_3R_211()) {
+ private boolean jj_3R_280() {
+ if (jj_3R_207()) {
return true;
}
return false;
}
- private boolean jj_3R_273() {
- if (jj_3R_211()) {
+ private boolean jj_3R_268() {
+ if (jj_3R_207()) {
return true;
}
return false;
}
- private boolean jj_3R_278() {
- if (jj_3R_211()) {
+ private boolean jj_3R_273() {
+ if (jj_3R_207()) {
return true;
}
return false;
}
- private boolean jj_3R_262() {
+ private boolean jj_3R_259() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_272()) {
+ if (jj_3R_267()) {
jj_scanpos = xsp;
- if (jj_3R_273()) {
+ if (jj_3R_268()) {
jj_scanpos = xsp;
- if (jj_3R_274()) {
+ if (jj_3R_269()) {
return true;
}
}
@@ -7436,21 +7272,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_269() {
- if (jj_3R_209()) {
+ private boolean jj_3R_264() {
+ if (jj_3R_205()) {
return true;
}
return false;
}
- private boolean jj_3R_272() {
- if (jj_3R_209()) {
+ private boolean jj_3R_267() {
+ if (jj_3R_205()) {
return true;
}
return false;
}
- private boolean jj_3R_250() {
+ private boolean jj_3R_245() {
if (jj_scan_token(FUNCTION)) {
return true;
}
@@ -7463,7 +7299,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
}
xsp = jj_scanpos;
- if (jj_3R_260()) {
+ if (jj_3R_255()) {
jj_scanpos = xsp;
}
if (jj_scan_token(RPARAN)) {
@@ -7472,29 +7308,28 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_193() {
- if (jj_3R_211()) {
+ private boolean jj_3R_234() {
+ if (jj_3R_249()) {
return true;
}
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_265()) {
- jj_scanpos = xsp;
- break;
- }
+ return false;
+ }
+
+ private boolean jj_3R_233() {
+ if (jj_3R_248()) {
+ return true;
}
return false;
}
- private boolean jj_3R_192() {
- if (jj_3R_210()) {
+ private boolean jj_3R_188() {
+ if (jj_3R_207()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_264()) {
+ if (jj_3R_262()) {
jj_scanpos = xsp;
break;
}
@@ -7502,28 +7337,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_270() {
- if (jj_3R_211()) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_238() {
- if (jj_3R_254()) {
+ private boolean jj_3R_232() {
+ if (jj_3R_247()) {
return true;
}
return false;
}
- private boolean jj_3R_191() {
- if (jj_3R_209()) {
+ private boolean jj_3R_187() {
+ if (jj_3R_206()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_263()) {
+ if (jj_3R_261()) {
jj_scanpos = xsp;
break;
}
@@ -7531,28 +7359,36 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_237() {
- if (jj_3R_253()) {
+ private boolean jj_3R_265() {
+ if (jj_3R_207()) {
return true;
}
return false;
}
- private boolean jj_3R_236() {
- if (jj_3R_252()) {
+ private boolean jj_3R_186() {
+ if (jj_3R_205()) {
return true;
}
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_260()) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
return false;
}
- private boolean jj_3R_190() {
- if (jj_3R_208()) {
+ private boolean jj_3R_185() {
+ if (jj_3R_204()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_262()) {
+ if (jj_3R_259()) {
jj_scanpos = xsp;
break;
}
@@ -7560,16 +7396,16 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_261() {
+ private boolean jj_3R_258() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_268()) {
+ if (jj_3R_263()) {
jj_scanpos = xsp;
- if (jj_3R_269()) {
+ if (jj_3R_264()) {
jj_scanpos = xsp;
- if (jj_3R_270()) {
+ if (jj_3R_265()) {
jj_scanpos = xsp;
- if (jj_3R_271()) {
+ if (jj_3R_266()) {
return true;
}
}
@@ -7578,21 +7414,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_268() {
- if (jj_3R_208()) {
+ private boolean jj_3R_263() {
+ if (jj_3R_204()) {
return true;
}
return false;
}
- private boolean jj_3R_189() {
- if (jj_3R_207()) {
+ private boolean jj_3R_184() {
+ if (jj_3R_203()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_261()) {
+ if (jj_3R_258()) {
jj_scanpos = xsp;
break;
}
@@ -7600,18 +7436,18 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_173() {
+ private boolean jj_3R_170() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_189()) {
+ if (jj_3R_184()) {
jj_scanpos = xsp;
- if (jj_3R_190()) {
+ if (jj_3R_185()) {
jj_scanpos = xsp;
- if (jj_3R_191()) {
+ if (jj_3R_186()) {
jj_scanpos = xsp;
- if (jj_3R_192()) {
+ if (jj_3R_187()) {
jj_scanpos = xsp;
- if (jj_3R_193()) {
+ if (jj_3R_188()) {
return true;
}
}
@@ -7621,68 +7457,61 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_251() {
- if (jj_scan_token(DOT)) {
+ private boolean jj_3R_236() {
+ if (jj_3R_201()) {
return true;
}
- return false;
- }
-
- private boolean jj_3R_235() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_251()) {
- jj_scanpos = xsp;
- }
- if (jj_scan_token(IDENT)) {
+ if (jj_3R_170()) {
return true;
}
return false;
}
- private boolean jj_3_1() {
- if (jj_3R_171()) {
+ private boolean jj_3R_246() {
+ if (jj_scan_token(DOT)) {
return true;
}
return false;
}
- private boolean jj_3R_234() {
- if (jj_scan_token(STRING)) {
+ private boolean jj_3R_231() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_246()) {
+ jj_scanpos = xsp;
+ }
+ if (jj_scan_token(IDENT)) {
return true;
}
return false;
}
- private boolean jj_3_2() {
- if (jj_3R_172()) {
- return true;
- }
- if (jj_3R_173()) {
+ private boolean jj_3R_230() {
+ if (jj_scan_token(STRING)) {
return true;
}
return false;
}
- private boolean jj_3R_233() {
- if (jj_3R_250()) {
+ private boolean jj_3R_229() {
+ if (jj_3R_245()) {
return true;
}
return false;
}
- private boolean jj_3R_196() {
+ private boolean jj_3R_191() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_234()) {
+ if (jj_3R_230()) {
jj_scanpos = xsp;
- if (jj_3R_235()) {
+ if (jj_3R_231()) {
jj_scanpos = xsp;
- if (jj_3R_236()) {
+ if (jj_3R_232()) {
jj_scanpos = xsp;
- if (jj_3R_237()) {
+ if (jj_3R_233()) {
jj_scanpos = xsp;
- if (jj_3R_238()) {
+ if (jj_3R_234()) {
return true;
}
}
@@ -7692,7 +7521,24 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_198() {
+ private boolean jj_3_2() {
+ if (jj_3R_169()) {
+ return true;
+ }
+ if (jj_3R_170()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3_1() {
+ if (jj_3R_168()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_193() {
if (jj_scan_token(COMMA)) {
return true;
}
@@ -7704,17 +7550,42 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
break;
}
}
- if (jj_3R_197()) {
+ if (jj_3R_192()) {
return true;
}
return false;
}
- private boolean jj_3R_197() {
- if (jj_3R_173()) {
+ private boolean jj_3R_235() {
+ if (jj_3R_170()) {
return true;
}
+ return false;
+ }
+
+ private boolean jj_3R_228() {
+ if (jj_scan_token(DIMEN)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_227() {
+ if (jj_scan_token(KHZ)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_192() {
Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_235()) {
+ jj_scanpos = xsp;
+ if (jj_3R_236()) {
+ return true;
+ }
+ }
while (true) {
xsp = jj_scanpos;
if (jj_3_2()) {
@@ -7732,49 +7603,49 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_232() {
- if (jj_scan_token(DIMEN)) {
+ private boolean jj_3R_226() {
+ if (jj_scan_token(HZ)) {
return true;
}
return false;
}
- private boolean jj_3R_231() {
- if (jj_scan_token(KHZ)) {
+ private boolean jj_3R_225() {
+ if (jj_scan_token(MS)) {
return true;
}
return false;
}
- private boolean jj_3R_230() {
- if (jj_scan_token(HZ)) {
+ private boolean jj_3R_224() {
+ if (jj_scan_token(SECOND)) {
return true;
}
return false;
}
- private boolean jj_3R_229() {
- if (jj_scan_token(MS)) {
+ private boolean jj_3R_223() {
+ if (jj_scan_token(GRAD)) {
return true;
}
return false;
}
- private boolean jj_3R_228() {
- if (jj_scan_token(SECOND)) {
+ private boolean jj_3R_222() {
+ if (jj_scan_token(RAD)) {
return true;
}
return false;
}
- private boolean jj_3R_177() {
- if (jj_3R_197()) {
+ private boolean jj_3R_174() {
+ if (jj_3R_192()) {
return true;
}
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_198()) {
+ if (jj_3R_193()) {
jj_scanpos = xsp;
break;
}
@@ -7782,35 +7653,21 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
return false;
}
- private boolean jj_3R_227() {
- if (jj_scan_token(GRAD)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_226() {
- if (jj_scan_token(RAD)) {
- return true;
- }
- return false;
- }
-
- private boolean jj_3R_225() {
+ private boolean jj_3R_221() {
if (jj_scan_token(DEG)) {
return true;
}
return false;
}
- private boolean jj_3R_224() {
+ private boolean jj_3R_220() {
if (jj_scan_token(EXS)) {
return true;
}
return false;
}
- private boolean jj_3R_223() {
+ private boolean jj_3R_219() {
if (jj_scan_token(REM)) {
return true;
}
@@ -7818,103 +7675,224 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
private boolean jj_3_4() {
- if (jj_3R_174()) {
+ if (jj_3R_171()) {
return true;
}
return false;
}
- private boolean jj_3R_222() {
+ private boolean jj_3R_218() {
if (jj_scan_token(LEM)) {
return true;
}
return false;
}
- private boolean jj_3R_221() {
+ private boolean jj_3R_217() {
if (jj_scan_token(EMS)) {
return true;
}
return false;
}
- private boolean jj_3R_220() {
+ private boolean jj_3R_216() {
if (jj_scan_token(PX)) {
return true;
}
return false;
}
- private boolean jj_3R_219() {
+ private boolean jj_3R_215() {
if (jj_scan_token(IN)) {
return true;
}
return false;
}
- private boolean jj_3R_218() {
+ private boolean jj_3R_214() {
if (jj_scan_token(PC)) {
return true;
}
return false;
}
- private boolean jj_3R_256() {
- if (jj_scan_token(INTERPOLATION)) {
+ private boolean jj_3R_213() {
+ if (jj_scan_token(MM)) {
return true;
}
return false;
}
- private boolean jj_3R_217() {
- if (jj_scan_token(MM)) {
+ private boolean jj_3R_212() {
+ if (jj_scan_token(CM)) {
return true;
}
return false;
}
- private boolean jj_3R_216() {
- if (jj_scan_token(CM)) {
+ private boolean jj_3R_251() {
+ if (jj_scan_token(INTERPOLATION)) {
return true;
}
return false;
}
- private boolean jj_3R_215() {
+ private boolean jj_3R_211() {
if (jj_scan_token(PT)) {
return true;
}
return false;
}
- private boolean jj_3R_214() {
+ private boolean jj_3R_210() {
if (jj_scan_token(PERCENTAGE)) {
return true;
}
return false;
}
- private boolean jj_3R_204() {
- if (jj_3R_242()) {
+ private boolean jj_3R_199() {
+ if (jj_3R_240()) {
return true;
}
return false;
}
private boolean jj_3_3() {
- if (jj_3R_171()) {
+ if (jj_3R_168()) {
return true;
}
return false;
}
- private boolean jj_3R_213() {
+ private boolean jj_3R_209() {
if (jj_scan_token(NUMBER)) {
return true;
}
return false;
}
+ private boolean jj_3R_208() {
+ if (jj_3R_244()) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_190() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_208()) {
+ jj_scanpos = xsp;
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_209()) {
+ jj_scanpos = xsp;
+ if (jj_3R_210()) {
+ jj_scanpos = xsp;
+ if (jj_3R_211()) {
+ jj_scanpos = xsp;
+ if (jj_3R_212()) {
+ jj_scanpos = xsp;
+ if (jj_3R_213()) {
+ jj_scanpos = xsp;
+ if (jj_3R_214()) {
+ jj_scanpos = xsp;
+ if (jj_3R_215()) {
+ jj_scanpos = xsp;
+ if (jj_3R_216()) {
+ jj_scanpos = xsp;
+ if (jj_3R_217()) {
+ jj_scanpos = xsp;
+ if (jj_3R_218()) {
+ jj_scanpos = xsp;
+ if (jj_3R_219()) {
+ jj_scanpos = xsp;
+ if (jj_3R_220()) {
+ jj_scanpos = xsp;
+ if (jj_3R_221()) {
+ jj_scanpos = xsp;
+ if (jj_3R_222()) {
+ jj_scanpos = xsp;
+ if (jj_3R_223()) {
+ jj_scanpos = xsp;
+ if (jj_3R_224()) {
+ jj_scanpos = xsp;
+ if (jj_3R_225()) {
+ jj_scanpos = xsp;
+ if (jj_3R_226()) {
+ jj_scanpos = xsp;
+ if (jj_3R_227()) {
+ jj_scanpos = xsp;
+ if (jj_3R_228()) {
+ jj_scanpos = xsp;
+ if (jj_3R_229()) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_173() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_190()) {
+ jj_scanpos = xsp;
+ if (jj_3R_191()) {
+ return true;
+ }
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_181() {
+ if (jj_scan_token(SEMICOLON)) {
+ return true;
+ }
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) {
+ jj_scanpos = xsp;
+ break;
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_247() {
+ if (jj_scan_token(HASH)) {
+ return true;
+ }
+ return false;
+ }
+
/** Generated Token Manager. */
public ParserTokenManager token_source;
/** Current token. */
@@ -7925,7 +7903,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
private Token jj_scanpos, jj_lastpos;
private int jj_la;
private int jj_gen;
- final private int[] jj_la1 = new int[253];
+ final private int[] jj_la1 = new int[251];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static private int[] jj_la1_2;
@@ -7939,33 +7917,33 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
private static void jj_la1_init_0() {
jj_la1_0 = new int[] { 0x0, 0xc02, 0xc02, 0x0, 0xc00, 0x2, 0x2, 0x2,
- 0xd0000000, 0x0, 0xc00, 0x2, 0xc00, 0x2, 0x0, 0x2, 0x0, 0x2,
- 0x2, 0x0, 0x0, 0x2, 0x2, 0x0, 0x2, 0x0, 0x2, 0x2, 0xd0000000,
- 0xd0000000, 0x2, 0x2, 0x2, 0xd3f45400, 0xd3f45400, 0x2,
+ 0xd3100000, 0x0, 0xc00, 0x2, 0xc00, 0x2, 0x0, 0x2, 0x0, 0x2,
+ 0x2, 0x0, 0x0, 0x2, 0x2, 0x0, 0x2, 0x0, 0x2, 0x2, 0xd3100000,
+ 0xd3100000, 0x2, 0x2, 0x2, 0xd3f45400, 0xd3f45400, 0x2,
0x400000, 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x2, 0x0, 0x800000,
0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2,
- 0x3f45400, 0x2, 0x2, 0x2, 0x3100000, 0x2, 0x3100000, 0x3100002,
- 0x2, 0x480002, 0x480002, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2,
- 0xd0000000, 0xd0000000, 0x2, 0x400000, 0x2, 0x2, 0x10000000,
+ 0xe45400, 0x3100000, 0x3100002, 0x3100000, 0x2, 0x2, 0x480002,
+ 0x480002, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, 0xd3100000,
+ 0xd3100000, 0x2, 0x400000, 0x2, 0xd3100000, 0x2, 0x10000000,
0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000,
0x10000000, 0x10000000, 0x10000000, 0x10000000, 0xd0000000,
0x0, 0x0, 0x0, 0x0, 0xc0000000, 0x2, 0x2, 0xfc000, 0x2, 0x0,
0x2, 0xfc000, 0x0, 0x2, 0x0, 0x2, 0x0, 0x2, 0x800000, 0x0,
- 0xd0000000, 0x0, 0x4d380002, 0x2, 0xd0000000, 0x2, 0x0, 0x2,
- 0x4d380002, 0x0, 0x2, 0xd0000000, 0x2, 0x4d380002, 0x2, 0x2,
- 0x2, 0x0, 0x2, 0xd0000000, 0x2, 0x2, 0x400000, 0x2, 0x2, 0x2,
- 0x2, 0x0, 0x2, 0xd0000000, 0xd0000000, 0x2, 0x400000, 0x2, 0x2,
+ 0xd3100000, 0x0, 0x4d380002, 0x2, 0xd3100000, 0x2, 0x0, 0x2,
+ 0x4d380002, 0x0, 0x2, 0xd3100000, 0x2, 0x4d380002, 0x2, 0x2,
+ 0x2, 0x0, 0x2, 0xd3100000, 0x2, 0x2, 0x400000, 0x2, 0x2, 0x2,
+ 0x2, 0x0, 0x2, 0xd3100000, 0xd3100000, 0x2, 0x400000, 0x2, 0x2,
0x2, 0x400000, 0x0, 0x0, 0x300000, 0x2, 0x0, 0x400000, 0x2,
0x300000, 0x2, 0x0, 0x2, 0x0, 0x2, 0x800000, 0x2, 0x2, 0x0,
0x2, 0x0, 0x2, 0x2, 0x2, 0x400000, 0x2, 0x2, 0x2, 0x2, 0x2,
0x0, 0x2, 0x2, 0x2, 0x400000, 0x2, 0x2, 0x2, 0x0, 0x2, 0x2,
0x2, 0x400000, 0x2, 0x2, 0x0, 0x2, 0x0, 0x2, 0x2, 0x2,
0x400000, 0x0, 0x2, 0x2, 0x0, 0x2, 0x2, 0x2, 0x800000, 0x2,
- 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, 0x0, 0xd0000000, 0x2, 0x0,
+ 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, 0x0, 0xd3100000, 0x2, 0x0,
0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, 0x301000, 0x2, 0x0, 0x2,
0x2, 0x2, 0x2, 0x8400000, 0x8400000, 0x300000, 0x300000,
0x300000, 0x0, 0x0, 0x0, 0x300000, 0x2, 0x2, 0x300000, 0x2,
- 0xd0000000, 0x2, 0x2, 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, };
+ 0xd3100000, 0x2, 0x2, 0x2, 0x0, 0x800000, 0x2, 0x0, 0x2, };
}
private static void jj_la1_init_1() {
@@ -7975,11 +7953,11 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
0xac800181, 0xac800181, 0x0, 0x0, 0x0, 0xc000381, 0xc000381,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x100, 0x0, 0x0,
0x100, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x200,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x185, 0x185, 0x0,
- 0x100, 0x100, 0x0, 0x0, 0x0, 0x0, 0xac800181, 0xac800181, 0x0,
- 0x0, 0x0, 0x0, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
- 0x81, 0x81, 0x181, 0x100, 0x100, 0x100, 0x100, 0x100, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x185, 0x185, 0x0, 0x100, 0x100, 0x0,
+ 0x0, 0x0, 0x0, 0xac800181, 0xac800181, 0x0, 0x0, 0x0, 0x181,
+ 0x0, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x181, 0x100, 0x100, 0x100, 0x100, 0x100, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xa0000000, 0xc800181, 0x0, 0x7e, 0x0, 0xc800181, 0x0, 0x0,
0x0, 0x7e, 0x0, 0x0, 0xc800181, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0,
0x0, 0xc800181, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0,
@@ -8003,25 +7981,24 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
0x0, 0x0, 0x0, 0x2b80, 0x2b80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x100, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 0x0,
0x100, 0x0, 0x0, 0x100, 0x0, 0x2a80, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x380, 0x380, 0x0, 0x100, 0x100, 0x0, 0x0, 0x0,
- 0x0, 0x1112, 0x1112, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x100, 0x100, 0x100,
- 0x100, 0x100, 0x0, 0x0, 0x0, 0x0, 0x180, 0x0, 0x0, 0x0, 0x0,
- 0x100, 0x0, 0x40, 0x0, 0x0, 0x0, 0x102, 0x1000, 0x1300, 0x0,
- 0x1102, 0x0, 0x1, 0x0, 0x1300, 0x20, 0x0, 0x1102, 0x0, 0x1300,
- 0x0, 0x0, 0x0, 0x1100, 0x0, 0x1102, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x100, 0x0, 0x1102, 0x1102, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x1000, 0x1000, 0xfffffb80, 0x0, 0x0, 0x0, 0x0,
- 0xfffffb80, 0x0, 0x0, 0x0, 0x1100, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x380, 0x380, 0x0, 0x100, 0x100, 0x0, 0x0, 0x0, 0x0, 0x1112,
+ 0x1112, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x100, 0x100, 0x100, 0x100,
+ 0x100, 0x0, 0x0, 0x0, 0x0, 0x180, 0x0, 0x0, 0x0, 0x0, 0x100,
+ 0x0, 0x40, 0x0, 0x0, 0x0, 0x102, 0x1000, 0x1300, 0x0, 0x1102,
+ 0x0, 0x1, 0x0, 0x1300, 0x20, 0x0, 0x1102, 0x0, 0x1300, 0x0,
+ 0x0, 0x0, 0x1100, 0x0, 0x1102, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x100, 0x0, 0x1102, 0x1102, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x1000, 0x1000, 0xfffffb80, 0x0, 0x0, 0x0, 0x0, 0xfffffb80,
+ 0x0, 0x0, 0x0, 0x1100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0,
- 0x0, 0x100, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0,
- 0xfffffb80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0xfffffb80, 0x0, 0xffffe200, 0x0, 0x980, 0xffffeb80, 0x0, 0x0,
- 0xfffffb80, 0x0, 0x100, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100,
- 0x0, };
+ 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100,
+ 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0xfffffb80, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffb80, 0x0,
+ 0xffffe200, 0x0, 0x980, 0xffffeb80, 0x0, 0x0, 0xfffffb80, 0x0,
+ 0x100, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, };
}
private static void jj_la1_init_3() {
@@ -8030,16 +8007,16 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45, 0x45, 0x0, 0x0, 0x0,
0xc401bf, 0xc401bf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0xc401be, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x400000, 0x400000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45,
- 0x45, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1,
- 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x400000, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x45, 0x0, 0x200000, 0x0, 0x45, 0x0, 0x0, 0x0, 0x200000,
- 0x0, 0x0, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x400000, 0x0, 0x75, 0x75, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x440001, 0x0, 0x0, 0x0,
- 0x0, 0x440001, 0x0, 0x0, 0x0, 0x400000, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0xc401be, 0x0, 0x0, 0x0, 0x0, 0x0, 0x400000,
+ 0x400000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45, 0x45, 0x0,
+ 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1,
+ 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x400000, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x45, 0x0, 0x200000, 0x0, 0x45, 0x0, 0x0, 0x0, 0x200000, 0x0,
+ 0x0, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x400000, 0x0, 0x75, 0x75, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x440001, 0x0, 0x0, 0x0, 0x0,
+ 0x440001, 0x0, 0x0, 0x0, 0x400000, 0x0, 0x0, 0x0, 0x0,
0x380000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
@@ -8060,7 +8037,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 253; i++) {
+ for (int i = 0; i < 251; i++) {
jj_la1[i] = -1;
}
for (int i = 0; i < jj_2_rtns.length; i++) {
@@ -8074,7 +8051,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 253; i++) {
+ for (int i = 0; i < 251; i++) {
jj_la1[i] = -1;
}
for (int i = 0; i < jj_2_rtns.length; i++) {
@@ -8088,7 +8065,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 253; i++) {
+ for (int i = 0; i < 251; i++) {
jj_la1[i] = -1;
}
for (int i = 0; i < jj_2_rtns.length; i++) {
@@ -8102,7 +8079,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 253; i++) {
+ for (int i = 0; i < 251; i++) {
jj_la1[i] = -1;
}
for (int i = 0; i < jj_2_rtns.length; i++) {
@@ -8253,7 +8230,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
la1tokens[jj_kind] = true;
jj_kind = -1;
}
- for (int i = 0; i < 253; i++) {
+ for (int i = 0; i < 251; i++) {
if (jj_la1[i] == jj_gen) {
for (int j = 0; j < 32; j++) {
if ((jj_la1_0[i] & (1 << j)) != 0) {
diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
index a0bd883101..3798947d1d 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
@@ -319,10 +319,12 @@ public class Parser implements org.w3c.css.sac.Parser {
String encoding = source.getEncoding();
InputStream input = source.getByteStream();
if (!input.markSupported()) {
+ // If mark is not supported, wrap it in a stream which supports mark
input = new BufferedInputStream(input);
source.setByteStream(input);
- input.mark(100);
}
+ // Mark either the original stream or the wrapped stream
+ input.mark(100);
if(encoding == null){
encoding = "ASCII";
@@ -1056,9 +1058,6 @@ void skipUnknownRule() :
| n=<UNICODERANGE>
| n=<URL>
| n=";"
-| n="+"
-| n=">"
-| n="~"
| n="-"
| n=<UNKNOWN>
) {
@@ -1081,13 +1080,18 @@ char combinator() :
char connector = ' ';
}
{
- "+" ( <S> )* { return '+'; }
- | ">" ( <S> )* { return '>'; }
- | "~" ( <S> )* { return '~'; }
-| <S> ( ( "+" { connector = '+'; }
- | ">" { connector = '>'; }
- | "~" { connector = '~'; } )
- ( <S> )* )? { return connector; }
+ (connector = combinatorChar()
+ | <S> (connector = combinatorChar())?) { return connector; }
+}
+
+/**to refactor combinator and reuse in selector().*/
+char combinatorChar() :
+{Token t;}
+{
+ (t = <PLUS> | t = <PRECEDES> | t = <SIBLING>) (<S>)*
+ {
+ return t.image.charAt(0);
+ }
}
void microsoftExtension() :
@@ -1200,12 +1204,14 @@ void styleRule() :
*/
String selector() :
{
- String selector;
+ String selector = null;
char comb;
}
{
try {
- selector=simple_selector(null, ' ')
+ // the selector can begin either a simple_selector, or a combinatorChar(+, >, ~).
+ // when beginning with combinatorChar, the next one should be a simple_selector().
+ (selector=simple_selector(null, ' ') | (comb=combinatorChar() selector=simple_selector(selector, comb)))
( LOOKAHEAD(2) comb=combinator()
selector=simple_selector(selector, comb) )* (<S>)*
{
@@ -1265,22 +1271,27 @@ String simple_selector(String selector, char comb) :
if (cond != null) {
simple_current = simple_current + cond;
}
- if (selector != null) {
- switch (comb) {
+ StringBuilder builder = new StringBuilder();
+ switch (comb) {
case ' ':
- selector = selector + comb + simple_current;
+ if(selector!=null){
+ builder.append(selector).append(" ");
+ }
break;
case '+':
case '>':
case '~':
- selector = selector + " " + comb + " " + simple_current;
+ if(selector!=null){
+ builder.append(selector).append(" ");
+ }
+ builder.append(comb).append(" ");
break;
default:
throw new ParseException("invalid state. send a bug report");
- }
- } else {
- selector= simple_current;
}
+ builder.append(simple_current);
+ selector = builder.toString();
+
if (pseudoElt != null) {
selector = selector + pseudoElt;
}
diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java b/theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java
index e5116bdb49..9ff123c808 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2013 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.
+ */
/* Generated By:JavaCC: Do not edit this line. ParserTokenManager.java */
package com.vaadin.sass.internal.parser;
@@ -5835,21 +5850,6 @@ public class ParserTokenManager implements ParserConstants {
int jjmatchedPos;
int jjmatchedKind;
- /*
- * Copyright 2000-2013 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.
- */
/** Get the next Token. */
public Token getNextToken() {
Token specialToken = null;
diff --git a/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java b/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java
index 8a62e3abf8..5aa90151b9 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/visitor/MixinNodeHandler.java
@@ -108,18 +108,39 @@ public class MixinNodeHandler {
}
}
}
-
- int i = 0;
- for (final LexicalUnitImpl unit : remainingUnits) {
+ checkExtraParameters(mixinNode, remainingNodes.size(),
+ remainingUnits.size());
+ for (int i = 0; i < remainingNodes.size()
+ && i < remainingUnits.size(); i++) {
+ LexicalUnitImpl unit = remainingUnits.get(i);
remainingNodes.get(i).setExpr(
(LexicalUnitImpl) DeepCopy.copy(unit));
- i++;
}
-
}
}
+ protected static void checkExtraParameters(MixinNode mixinNode,
+ int remainingNodesSize, int remainingUnitsSize) {
+ if (remainingUnitsSize > remainingNodesSize) {
+ String fileName = null;
+ Node root = mixinNode.getParentNode();
+ while (root != null && !(root instanceof ScssStylesheet)) {
+ root = root.getParentNode();
+ }
+ if (root != null) {
+ fileName = ((ScssStylesheet) root).getFileName();
+ }
+ StringBuilder builder = new StringBuilder();
+ builder.append("More parameters than expected, in Mixin ").append(
+ mixinNode.getName());
+ if (fileName != null) {
+ builder.append(", in file ").append(fileName);
+ }
+ throw new RuntimeException(builder.toString());
+ }
+ }
+
private static void replaceChildVariables(MixinDefNode mixinDef, Node node) {
for (final Node child : node.getChildren()) {
replaceChildVariables(mixinDef, child);
diff --git a/theme-compiler/tests/resources/automatic/css/nested-selector-begin-with-plus.css b/theme-compiler/tests/resources/automatic/css/nested-selector-begin-with-plus.css
new file mode 100644
index 0000000000..fa8d2861a6
--- /dev/null
+++ b/theme-compiler/tests/resources/automatic/css/nested-selector-begin-with-plus.css
@@ -0,0 +1,9 @@
+.v-panel {
+ display: block;
+ max-width: 84em;
+ margin: auto;
+}
+
+.v-panel + .abc {
+ margin-top: 1em;
+} \ No newline at end of file
diff --git a/theme-compiler/tests/resources/automatic/scss/nested-selector-begin-with-plus.scss b/theme-compiler/tests/resources/automatic/scss/nested-selector-begin-with-plus.scss
new file mode 100644
index 0000000000..f5a61b86ea
--- /dev/null
+++ b/theme-compiler/tests/resources/automatic/scss/nested-selector-begin-with-plus.scss
@@ -0,0 +1,9 @@
+.v-panel {
+ display: block;
+ max-width: 84em;
+ margin: auto;
+
+ + .abc {
+ margin-top: 1em;
+ }
+ } \ No newline at end of file
diff --git a/theme-compiler/tests/resources/sasslangbroken/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css b/theme-compiler/tests/resources/sasslang/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css
index 09b4ccac27..09b4ccac27 100644
--- a/theme-compiler/tests/resources/sasslangbroken/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css
+++ b/theme-compiler/tests/resources/sasslang/css/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.css
diff --git a/theme-compiler/tests/resources/sasslangbroken/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss b/theme-compiler/tests/resources/sasslang/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss
index 73f6254f21..73f6254f21 100644
--- a/theme-compiler/tests/resources/sasslangbroken/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss
+++ b/theme-compiler/tests/resources/sasslang/scss/95-test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee.scss
diff --git a/theme-compiler/tests/resources/scss/mixin-extra-params.scss b/theme-compiler/tests/resources/scss/mixin-extra-params.scss
new file mode 100644
index 0000000000..af376adf90
--- /dev/null
+++ b/theme-compiler/tests/resources/scss/mixin-extra-params.scss
@@ -0,0 +1,4 @@
+@mixin test ($p1) {
+ color: $p1;
+}
+@include test(foo, bar); \ No newline at end of file
diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/MixinExtraParameters.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/MixinExtraParameters.java
new file mode 100644
index 0000000000..79c2ec366a
--- /dev/null
+++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/MixinExtraParameters.java
@@ -0,0 +1,25 @@
+package com.vaadin.sass.testcases.scss;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.sass.AbstractTestBase;
+import com.vaadin.sass.internal.ScssStylesheet;
+
+public class MixinExtraParameters extends AbstractTestBase {
+ String scss = "/scss/mixin-extra-params.scss";
+
+ @Test
+ public void testCompiler() {
+ ScssStylesheet sheet;
+ try {
+ sheet = getStyleSheet(scss);
+ sheet.compile();
+ } catch (RuntimeException e) {
+ Assert.assertEquals(e.getMessage(),
+ "More parameters than expected, in Mixin test");
+ } catch (Exception e) {
+ Assert.fail();
+ }
+ }
+}
diff --git a/uitest/build.xml b/uitest/build.xml
index ee2b2c6124..53da0ae2e9 100644
--- a/uitest/build.xml
+++ b/uitest/build.xml
@@ -106,6 +106,10 @@
<path refid="classpath.runtime.dependencies" />
</copy>
+
+ <!-- Ensure filtered webcontent files are available -->
+ <antcall target="common.filter.webcontent" />
+
<war destfile="${result.war}" duplicate="fail" index="true">
<fileset refid="common.files.for.all.jars" />
<fileset dir="${result.dir}">
diff --git a/uitest/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutResizing.html b/uitest/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutResizing.html
new file mode 100644
index 0000000000..01206b317c
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutResizing.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.absolutelayout.AbsoluteLayoutResizing?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>dragAndDrop</td>
+ <td>vaadin=runcomvaadintestscomponentsabsolutelayoutAbsoluteLayoutResizing::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VSplitPanelVertical[0]/domChild[0]/domChild[1]/domChild[0]</td>
+ <td>0,294</td>
+</tr>
+<tr>
+ <td>dragAndDrop</td>
+ <td>vaadin=runcomvaadintestscomponentsabsolutelayoutAbsoluteLayoutResizing::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VSplitPanelVertical[0]/VSplitPanelHorizontal[0]/domChild[0]/domChild[1]/domChild[0]</td>
+ <td>588,0</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>resized</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutResizing.java b/uitest/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutResizing.java
new file mode 100644
index 0000000000..810a583ba5
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/absolutelayout/AbsoluteLayoutResizing.java
@@ -0,0 +1,44 @@
+package com.vaadin.tests.components.absolutelayout;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.AbsoluteLayout;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.TextArea;
+import com.vaadin.ui.VerticalSplitPanel;
+
+public class AbsoluteLayoutResizing extends TestBase {
+
+ @Override
+ protected void setup() {
+ getLayout().setSizeFull();
+
+ AbsoluteLayout al = new AbsoluteLayout();
+
+ TextArea ta = new TextArea();
+ ta.setValue("When resizing the layout this text area should also get resized");
+ ta.setSizeFull();
+ al.addComponent(ta, "left: 10px; right: 10px; top: 10px; bottom: 10px;");
+
+ HorizontalSplitPanel horizPanel = new HorizontalSplitPanel();
+ horizPanel.setSizeFull();
+ horizPanel.setFirstComponent(al);
+
+ VerticalSplitPanel vertPanel = new VerticalSplitPanel();
+ vertPanel.setSizeFull();
+ vertPanel.setFirstComponent(horizPanel);
+
+ addComponent(vertPanel);
+
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Absolute layout should correctly dynamically resize itself";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10427;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/slider/SliderValueFromDataSource.html b/uitest/src/com/vaadin/tests/components/slider/SliderValueFromDataSource.html
new file mode 100644
index 0000000000..8b5a7067e4
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/slider/SliderValueFromDataSource.html
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8070/" />
+<title>SliderValueFromDataSource</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">SliderValueFromDataSource</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/SliderValueFromDataSource?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runSliderValueFromDataSource::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[1]/VProgressIndicator[0]/domChild[0]/domChild[0]@style</td>
+ <td>regex:.*(width|WIDTH): 50%.*</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runSliderValueFromDataSource::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VSlider[0]/domChild[2]/domChild[0]@style</td>
+ <td>regex:.*(margin-left|MARGIN-LEFT): 94px.*</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/slider/SliderValueFromDataSource.java b/uitest/src/com/vaadin/tests/components/slider/SliderValueFromDataSource.java
new file mode 100644
index 0000000000..141dc5baf4
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/slider/SliderValueFromDataSource.java
@@ -0,0 +1,59 @@
+package com.vaadin.tests.components.slider;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.ProgressIndicator;
+import com.vaadin.ui.Slider;
+
+public class SliderValueFromDataSource extends AbstractTestUI {
+
+ public static class TestBean {
+
+ private double doubleValue = 10.0;
+ private float floatValue = 0.5f;
+
+ public double getDoubleValue() {
+ return doubleValue;
+ }
+
+ public void setDoubleValue(double doubleValue) {
+ this.doubleValue = doubleValue;
+ }
+
+ public float getFloatValue() {
+ return floatValue;
+ }
+
+ public void setFloatValue(float floatValue) {
+ this.floatValue = floatValue;
+ }
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ Item item = new BeanItem<TestBean>(new TestBean());
+
+ Slider slider = new Slider(0, 20);
+ slider.setWidth("200px");
+ slider.setPropertyDataSource(item.getItemProperty("doubleValue"));
+ addComponent(slider);
+
+ ProgressIndicator pi = new ProgressIndicator();
+ pi.setPollingInterval(60 * 1000);
+ pi.setWidth("200px");
+ pi.setPropertyDataSource(item.getItemProperty("floatValue"));
+ addComponent(pi);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Slider and ProgressIndicator do not properly pass a value from data source to the client";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10921;
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/textfield/TextFieldMaxLengthRemovedFromDOM.html b/uitest/src/com/vaadin/tests/components/textfield/TextFieldMaxLengthRemovedFromDOM.html
new file mode 100644
index 0000000000..3086b66dfa
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/textfield/TextFieldMaxLengthRemovedFromDOM.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.textfield.TextFieldMaxLengthRemovedFromDOM?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestscomponentstextfieldTextFieldMaxLengthRemovedFromDOM::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]@maxlength</td>
+ <td>11</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstextfieldTextFieldMaxLengthRemovedFromDOM::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>118,13</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestscomponentstextfieldTextFieldMaxLengthRemovedFromDOM::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]@maxlength</td>
+ <td>11</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>vaadin=runcomvaadintestscomponentstextfieldTextFieldMaxLengthRemovedFromDOM::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]</td>
+ <td>hello</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentstextfieldTextFieldMaxLengthRemovedFromDOM::/VVerticalLayout[0]/domChild[0]</td>
+ <td>172,60</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestscomponentstextfieldTextFieldMaxLengthRemovedFromDOM::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VTextField[0]@maxlength</td>
+ <td>11</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/textfield/TextFieldMaxLengthRemovedFromDOM.java b/uitest/src/com/vaadin/tests/components/textfield/TextFieldMaxLengthRemovedFromDOM.java
new file mode 100644
index 0000000000..28ff20c174
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/textfield/TextFieldMaxLengthRemovedFromDOM.java
@@ -0,0 +1,37 @@
+package com.vaadin.tests.components.textfield;
+
+import com.vaadin.event.FieldEvents;
+import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.TextField;
+
+public class TextFieldMaxLengthRemovedFromDOM extends TestBase {
+
+ @Override
+ protected void setup() {
+ final TextField tf = new TextField();
+ tf.setMaxLength(11);
+ tf.setRequired(true);
+ tf.setImmediate(true);
+ addComponent(tf);
+
+ tf.addFocusListener(new FieldEvents.FocusListener() {
+
+ public void focus(FocusEvent event) {
+ // Resetting Max length should not remove maxlength attribute
+ tf.setMaxLength(11);
+ }
+ });
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Maxlength attribute should not dissappear from the DOM when I focus the text field.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 9940;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.html b/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.html
new file mode 100644
index 0000000000..cf08d8923d
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.textfield.TextFieldWithDataSourceAndInputPrompt?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertValue</td>
+ <td>vaadin=runcomvaadintestscomponentstextfieldTextFieldWithDataSourceAndInputPrompt::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VTextField[0]</td>
+ <td>Me is input prompt</td>
+</tr>
+<tr>
+ <td>assertValue</td>
+ <td>vaadin=runcomvaadintestscomponentstextfieldTextFieldWithDataSourceAndInputPrompt::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[1]/VTextField[0]</td>
+ <td>Me is input prompt</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.java b/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.java
new file mode 100644
index 0000000000..881aa11fbb
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/textfield/TextFieldWithDataSourceAndInputPrompt.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2012 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.tests.components.textfield;
+
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.TextField;
+
+public class TextFieldWithDataSourceAndInputPrompt extends AbstractTestUI {
+ public static class Pojo {
+ private String string;
+
+ public String getString() {
+ return string;
+ }
+
+ public void setString(String string) {
+ this.string = string;
+ }
+ }
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ TextField textField = new TextField("TextField with null value");
+ textField.setInputPrompt("Me is input prompt");
+ textField.setNullRepresentation(null);
+ textField.setValue(null);
+ addComponent(textField);
+
+ TextField textField2 = new TextField(
+ "TextField with null data source value");
+ textField2.setInputPrompt("Me is input prompt");
+ textField2.setNullRepresentation(null);
+ BeanItem<Pojo> beanItem = new BeanItem<Pojo>(new Pojo());
+ textField2.setPropertyDataSource(beanItem.getItemProperty("string"));
+ addComponent(textField2);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Input prompt should be shown when data source provides null";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11021;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/treetable/TreeTableExtraScrollBarWithChildren.html b/uitest/src/com/vaadin/tests/components/treetable/TreeTableExtraScrollBarWithChildren.html
new file mode 100644
index 0000000000..611e7a5994
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/treetable/TreeTableExtraScrollBarWithChildren.html
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>TreeTableExtraScrollbar</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">TreeTableExtraScrollbar</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.treetable.TreeTableExtraScrollbarWithChildren?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>button</td>
+ <td></td>
+</tr>
+<tr>
+ <td>pause</td>
+ <td>300</td>
+ <td></td>
+</tr>
+<!-- screenCapture should not have a horizontal scrollbar, and the columns should be the same width in body and headers -->
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>expanded</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>button</td>
+ <td></td>
+</tr>
+<tr>
+ <td>pause</td>
+ <td>300</td>
+ <td></td>
+</tr>
+<!-- screenCapture should not have a horizontal scrollbar, the columns should be back to original width in body and headers, and vertical scrollbar shouldn't have left an empty space -->
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>collapsed</td>
+</tr>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.treetable.TreeTableExtraScrollbarWithChildren</td>
+ <td></td>
+</tr>
+<tr>
+ <td>pause</td>
+ <td>300</td>
+ <td></td>
+</tr>
+<!-- screenCapture should not have changed -->
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>refreshed</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/treetable/TreeTableExtraScrollbarWithChildren.java b/uitest/src/com/vaadin/tests/components/treetable/TreeTableExtraScrollbarWithChildren.java
new file mode 100644
index 0000000000..cad33e242f
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/treetable/TreeTableExtraScrollbarWithChildren.java
@@ -0,0 +1,92 @@
+package com.vaadin.tests.components.treetable;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TreeTable;
+
+public class TreeTableExtraScrollbarWithChildren extends TestBase {
+
+ @Override
+ protected String getDescription() {
+ return "Arrow calculation should not cause a horizontal scrollbar"
+ + " if there is enough space for the final contents.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 10513;
+ }
+
+ @Override
+ protected void setup() {
+ HorizontalLayout layout = new HorizontalLayout();
+ layout.setWidth("300px");
+ layout.setHeight("300px");
+
+ final TreeTable table = new TreeTable();
+ table.setSizeFull();
+
+ table.addGeneratedColumn("parameterId", new HierarchyColumnGenerator());
+ table.addGeneratedColumn("wordingTextId", new TypeColumnGenerator());
+ table.addGeneratedColumn("parameterTypeId", new TypeColumnGenerator());
+
+ table.setColumnWidth("parameterId", 26);
+
+ table.addItem(new TestObject("name 1", "value 1"));
+ table.addItem(new TestObject("name 2", "value 2"));
+ table.addItem(new TestObject("name 3", "value 3"));
+ table.addItem(new TestObject("name 4", "value 4"));
+ table.addItem(new TestObject("name 5", "value 5"));
+ final TestObject parent = new TestObject("name 6", "value 6");
+ table.addItem(parent);
+ table.setFooterVisible(true);
+ for (int i = 1; i <= 10; ++i) {
+ TestObject child = new TestObject("name 6-" + i, "value 6-" + i);
+ table.addItem(child);
+ table.setParent(child, parent);
+ }
+ table.setVisibleColumns(new Object[] { "wordingTextId", "parameterId",
+ "parameterTypeId" });
+ table.setColumnHeaders(new String[] { "", "", "" });
+ table.setHierarchyColumn("parameterId");
+
+ layout.addComponent(table);
+
+ Button button = new Button("Toggle");
+ button.setId("button");
+ button.addClickListener(new ClickListener() {
+
+ public void buttonClick(ClickEvent event) {
+ table.setCollapsed(parent, !table.isCollapsed(parent));
+ Notification.show("collapsed: " + table.isCollapsed(parent));
+ }
+ });
+
+ addComponent(layout);
+ addComponent(button);
+ }
+
+ private class HierarchyColumnGenerator implements Table.ColumnGenerator {
+ public Object generateCell(Table table, Object itemId, Object columnId) {
+ Label label = new Label("this should be mostly hidden");
+ label.setSizeUndefined();
+ return label;
+ }
+ }
+
+ private class TypeColumnGenerator implements Table.ColumnGenerator {
+ public Object generateCell(Table table, Object itemId, Object columnId) {
+ if (itemId instanceof TestObject) {
+ return new Label(((TestObject) itemId).getValue());
+ }
+ return null;
+ }
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/debug/HierarchyAfterAnalyzeLayouts.html b/uitest/src/com/vaadin/tests/debug/HierarchyAfterAnalyzeLayouts.html
new file mode 100644
index 0000000000..03d8f34651
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/debug/HierarchyAfterAnalyzeLayouts.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.debug.HierarchyAfterAnalyzeLayouts?restartApplication&amp;debug</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestsdebugHierarchyAfterAnalyzeLayouts::Root/VDebugConsole[0]/FlowPanel[0]/HorizontalPanel[0]/domChild[0]/domChild[0]/domChild[3]/domChild[0]</td>
+ <td>18,9</td>
+</tr>
+<tr>
+ <td>assertTextPresent</td>
+ <td>Layouts analyzed on server, total top level problems: 0</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertElementPresent</td>
+ <td>vaadin=runcomvaadintestsdebugHierarchyAfterAnalyzeLayouts::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VLabel[0]</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/debug/HierarchyAfterAnalyzeLayouts.java b/uitest/src/com/vaadin/tests/debug/HierarchyAfterAnalyzeLayouts.java
new file mode 100644
index 0000000000..6f55e050c0
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/debug/HierarchyAfterAnalyzeLayouts.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2000-2013 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.tests.debug;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Label;
+
+public class HierarchyAfterAnalyzeLayouts extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ addComponent(new Label("This is a label"));
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "The connector hierarchy should be in order after clicking AL in the debug console";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return Integer.valueOf(11067);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/minitutorials/v7a1/CreatingPreserveState.java b/uitest/src/com/vaadin/tests/minitutorials/v7a1/CreatingPreserveState.java
index ecca98b884..48ccd217ca 100644
--- a/uitest/src/com/vaadin/tests/minitutorials/v7a1/CreatingPreserveState.java
+++ b/uitest/src/com/vaadin/tests/minitutorials/v7a1/CreatingPreserveState.java
@@ -18,6 +18,7 @@ package com.vaadin.tests.minitutorials.v7a1;
import com.vaadin.annotations.PreserveOnRefresh;
import com.vaadin.server.VaadinRequest;
+import com.vaadin.ui.CssLayout;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
@@ -31,13 +32,12 @@ import com.vaadin.ui.UI;
*/
@PreserveOnRefresh
public class CreatingPreserveState extends UI {
- private static int windowCounter = 0;
+ private static int instanceCounter = 0;
@Override
public void init(VaadinRequest request) {
- TextField tf = new TextField("Window #" + (++windowCounter));
+ TextField tf = new TextField("Instance #" + (++instanceCounter));
tf.setImmediate(true);
- setContent(tf);
+ setContent(new CssLayout(tf));
}
-
}