You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2017/02/01 16:47:53 UTC

svn commit: r1781270 [1/6] - in /myfaces/tobago/branches/tobago-3.0.x: ./ tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/ tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/ tobago-core/src/main/java...

Author: lofwyr
Date: Wed Feb  1 16:47:52 2017
New Revision: 1781270

URL: http://svn.apache.org/viewvc?rev=1781270&view=rev
Log:
Merged from trunk
Bug TOBAGO-1684 	Button converts to dropdown button when adding an event within its tag
Bug TOBAGO-1687 	After a Download/Non Faces Response no AJAX is possible
Bug TOBAGO-1679 	Suggestions aren't displayed correctly if <tc:suggest> is within <tc:sheet>

Added:
    myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/24-non-faces-response/x-sample.txt
      - copied unchanged from r1780418, myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/24-non-faces-response/x-sample.txt
Modified:
    myfaces/tobago/branches/tobago-3.0.x/   (props changed)
    myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUICommand.java
    myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PageRenderer.java
    myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/TobagoRenderKit.java
    myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
    myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetFilterController.java
    myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/bestpractice/BestPracticeController.java
    myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/010-input/20-suggest/suggest.test.js
    myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/010-input/20-suggest/suggest.xhtml
    myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/080-sheet/50-filter/sheet-filter.xhtml
    myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/24-non-faces-response/non-faces-response.xhtml
    myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/35-deprecated/15-suggest-method/suggest-method.test.js
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.css
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.css.map
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css.map
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/scss/_tobago.scss
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-richmond/src/main/resources/META-INF/resources/tobago/richmond/bootstrap/4.0.0-alpha.5/css/bootstrap.css
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-richmond/src/main/resources/META-INF/resources/tobago/richmond/bootstrap/4.0.0-alpha.5/css/bootstrap.css.map
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-richmond/src/main/resources/META-INF/resources/tobago/richmond/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-richmond/src/main/resources/META-INF/resources/tobago/richmond/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css.map
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-richmond/src/main/scss/_tobago.scss
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/bootstrap/4.0.0-alpha.5/css/bootstrap.css
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/bootstrap/4.0.0-alpha.5/css/bootstrap.css.map
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-scarborough/src/main/resources/META-INF/resources/tobago/scarborough/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css.map
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-scarborough/src/main/scss/_tobago.scss
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/bootstrap/4.0.0-alpha.5/css/bootstrap.css
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/bootstrap/4.0.0-alpha.5/css/bootstrap.css.map
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-speyside/src/main/resources/META-INF/resources/tobago/speyside/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css.map
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-speyside/src/main/scss/_tobago.scss
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/bootstrap/4.0.0-alpha.5/css/bootstrap.css
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/bootstrap/4.0.0-alpha.5/css/bootstrap.css.map
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css.map
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/script/   (props changed)
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/script/tobago-suggest.js
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/script/tobago.js   (contents, props changed)
    myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-standard/src/main/scss/_tobago.scss   (contents, props changed)

Propchange: myfaces/tobago/branches/tobago-3.0.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Feb  1 16:47:52 2017
@@ -1,3 +1,3 @@
 /myfaces/tobago/branches/tobago-1.5.x:1356585,1357124
 /myfaces/tobago/branches/tobago-tree-table:1226794-1341423
-/myfaces/tobago/trunk:1571193,1571804,1571816,1571941,1571945,1571962,1571966,1576730,1589960,1591854,1600239,1600818,1601860,1602151,1602154,1602343,1604224,1606201,1607642,1609696-1609697,1609718,1610942,1610948,1610970,1610989,1611011,1611259,1611264,1611276,1611329,1611338-1611339,1611571,1613015,1613032,1614827,1614853,1615053,1615114,1615121,1617310,1619789,1621101,1621107,1621134,1621156,1621264,1621282,1621332,1622222,1622243,1622508,1623934,1624033,1625968,1625972,1626270,1628899,1628953,1636842,1636911,1640117,1640147,1640541,1640548,1640638,1640761,1640917,1641575,1641635,1641772,1641775,1641777,1656502,1656507,1657180,1657269,1657276,1657279,1658343,1658909,1658912,1659026,1659031,1660696,1660699,1660708,1660714,1665486,1665521,1665549,1665569-1665570,1666464,1667304,1667306-1667307,1667309,1668147,1668153,1668249,1675330,1675565,1675584,1675588-1675589,1675636,1676030,1676035,1676038,1679031,1680197,1681981,1682187,1682448,1682545,1682548,1683231,1683306,1683373,1683664
 ,1686204,1687354,1693426,1696720,1698292,1698297,1700742,1700795,1701249,1701251,1701256,1701980,1709006,1725894,1726691,1726986,1727161,1731050-1731051,1731054,1731057,1731218-1731219
+/myfaces/tobago/trunk:1571193,1571804,1571816,1571941,1571945,1571962,1571966,1576730,1589960,1591854,1600239,1600818,1601860,1602151,1602154,1602343,1604224,1606201,1607642,1609696-1609697,1609718,1610942,1610948,1610970,1610989,1611011,1611259,1611264,1611276,1611329,1611338-1611339,1611571,1613015,1613032,1614827,1614853,1615053,1615114,1615121,1617310,1619789,1621101,1621107,1621134,1621156,1621264,1621282,1621332,1622222,1622243,1622508,1623934,1624033,1625968,1625972,1626270,1628899,1628953,1636842,1636911,1640117,1640147,1640541,1640548,1640638,1640761,1640917,1641575,1641635,1641772,1641775,1641777,1656502,1656507,1657180,1657269,1657276,1657279,1658343,1658909,1658912,1659026,1659031,1660696,1660699,1660708,1660714,1665486,1665521,1665549,1665569-1665570,1666464,1667304,1667306-1667307,1667309,1668147,1668153,1668249,1675330,1675565,1675584,1675588-1675589,1675636,1676030,1676035,1676038,1679031,1680197,1681981,1682187,1682448,1682545,1682548,1683231,1683306,1683373,1683664
 ,1686204,1687354,1693426,1696720,1698292,1698297,1700742,1700795,1701249,1701251,1701256,1701980,1709006,1725894,1726691,1726986,1727161,1731050-1731051,1731054,1731057,1731218-1731219,1780251,1780345,1780393,1780418,1780421,1780519,1781211,1781244

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUICommand.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUICommand.java?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUICommand.java (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUICommand.java Wed Feb  1 16:47:52 2017
@@ -21,6 +21,7 @@ package org.apache.myfaces.tobago.intern
 
 import org.apache.myfaces.tobago.component.SupportFieldId;
 import org.apache.myfaces.tobago.component.SupportsAccessKey;
+import org.apache.myfaces.tobago.component.UIEvent;
 import org.apache.myfaces.tobago.component.Visual;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.slf4j.Logger;
@@ -48,7 +49,9 @@ public abstract class AbstractUICommand
     if (parentOfCommands == null) {
       parentOfCommands = false;
       for (UIComponent child : getChildren()) {
-        if (child instanceof UICommand || child instanceof UIInput) {
+        if (child.isRendered()
+            && !(child instanceof UIEvent)
+            && (child instanceof UICommand || child instanceof UIInput)) {
           parentOfCommands = true;
           break;
         }

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PageRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PageRenderer.java?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PageRenderer.java (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/PageRenderer.java Wed Feb  1 16:47:52 2017
@@ -351,6 +351,11 @@ public class PageRenderer extends Render
     final Application application = facesContext.getApplication();
     final ViewHandler viewHandler = application.getViewHandler();
 
+    // placeholder for menus
+    writer.startElement(HtmlElements.DIV);
+    writer.writeClassAttribute(TobagoClass.PAGE__MENU_STORE);
+    writer.endElement(HtmlElements.DIV);
+
     writer.startElement(HtmlElements.SPAN);
     writer.writeIdAttribute(clientId + ComponentUtils.SUB_SEPARATOR + "jsf-state-container");
     writer.flush();

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/TobagoRenderKit.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/TobagoRenderKit.java?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/TobagoRenderKit.java (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/TobagoRenderKit.java Wed Feb  1 16:47:52 2017
@@ -55,9 +55,8 @@ public class TobagoRenderKit extends Ren
     RenderKitFactory rkFactory = (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
     htmlBasicRenderKit =
         rkFactory.getRenderKit(FacesContext.getCurrentInstance(), RenderKitFactory.HTML_BASIC_RENDER_KIT);
-    LOG.error("Creating TobagoRenderKit with base: {}", htmlBasicRenderKit);
     if (LOG.isDebugEnabled()) {
-      LOG.debug("Creating TobagoRenderKit");
+      LOG.debug("Creating TobagoRenderKit with base: {}", htmlBasicRenderKit);
     }
   }
 

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java Wed Feb  1 16:47:52 2017
@@ -71,6 +71,7 @@ public enum TobagoClass implements CssIt
   INPUT_GROUP_OUTER(INPUT__GROUP__OUTER.getName()),
   LABEL("tobago-label"),
   MESSAGES("tobago-messages"),
+  PAGE__MENU_STORE("tobago-page-menuStore"),
   PANEL("tobago-panel"),
   POPUP("tobago-popup"),
   SECTION__HEADER("tobago-section-header"),

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetFilterController.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetFilterController.java?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetFilterController.java (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetFilterController.java Wed Feb  1 16:47:52 2017
@@ -59,6 +59,8 @@ public class SheetFilterController exten
   private Integer minYear;
   private Integer maxYear;
 
+  private String nameSuggestionQuery;
+
   public SheetFilterController() {
     distanceItems = new SelectItem[]{
         new SelectItem(new DistanceRange(-1, Integer.MAX_VALUE), "any"),
@@ -204,6 +206,27 @@ public class SheetFilterController exten
     this.maxYear = maxYear;
   }
 
+  public String getNameSuggestionQuery() {
+    return nameSuggestionQuery;
+  }
+
+  public void setNameSuggestionQuery(String nameSuggestionQuery) {
+    this.nameSuggestionQuery = nameSuggestionQuery;
+  }
+
+  public List<String> getSuggestionSolarList() {
+    final String substring = nameSuggestionQuery != null ? nameSuggestionQuery : "";
+    LOG.info("Creating items for substring: '" + substring + "'");
+    final List<String> result = new ArrayList<String>();
+    for (final SolarObject solarObject : getSolarList()) {
+      String name = solarObject.getName();
+      if (StringUtils.containsIgnoreCase(name, substring)) {
+        result.add(name);
+      }
+    }
+    return result;
+  }
+
   private class DistanceRange {
 
     private int min;

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/bestpractice/BestPracticeController.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/bestpractice/BestPracticeController.java?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/bestpractice/BestPracticeController.java (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/bestpractice/BestPracticeController.java Wed Feb  1 16:47:52 2017
@@ -43,32 +43,32 @@ public class BestPracticeController {
   }
 
   public String viewPdfInBrowser() {
-    return viewPdf(false);
+    return viewFile(false, true);
   }
 
   public String viewPdfOutsideOfBrowser() {
-    return viewPdf(true);
+    return viewFile(true, true);
   }
 
-  private String viewPdf(final boolean outside) {
+  public String viewFile(final boolean outside, final boolean pdf) {
 
     final FacesContext facesContext = FacesContext.getCurrentInstance();
 
     InputStream inputStream = null;
     try {
-      final String path = "content/30-concept/24-non-faces-response/x-sample.pdf";
+      final String path = "content/30-concept/24-non-faces-response/x-sample." + (pdf ? "pdf" : "txt");
       inputStream = facesContext.getExternalContext().getResourceAsStream(path);
       if (inputStream == null) {
         inputStream = facesContext.getExternalContext().getResourceAsStream("/" + path);
       }
       final HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
-      response.setContentType("application/pdf");
+      response.setContentType(pdf ? "application/pdf" : "text/plain");
       if (outside) {
-        response.setHeader("Content-Disposition", "attachment; filename=x-sample.pdf");
+        response.setHeader("Content-Disposition", "attachment; filename=x-sample." + (pdf ? "pdf" : "txt"));
       }
       IOUtils.copy(inputStream, response.getOutputStream());
     } catch (final IOException e) {
-      LOG.warn("Cannot deliver pdf", e);
+      LOG.warn("Cannot deliver " + (pdf ? "pdf" : "txt"), e);
       return "error"; // response via faces
     } finally {
       IOUtils.closeQuietly(inputStream);

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/010-input/20-suggest/suggest.test.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/010-input/20-suggest/suggest.test.js?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/010-input/20-suggest/suggest.test.js (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/010-input/20-suggest/suggest.test.js Wed Feb  1 16:47:52 2017
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-QUnit.test("Basics: 'C'", function (assert) {
+QUnit.test("Basics: 'C'", function(assert) {
   var inputString = "C";
   var expectedLength = 10;
 
@@ -23,14 +23,14 @@ QUnit.test("Basics: 'C'", function (asse
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -42,7 +42,8 @@ QUnit.test("Basics: 'C'", function (asse
   });
 });
 
-QUnit.test("Basics: 'Ch'", function (assert) {
+
+QUnit.test("Basics: 'Ch'", function(assert) {
   var inputString = "Ch";
   var expectedLength = 10;
 
@@ -50,14 +51,14 @@ QUnit.test("Basics: 'Ch'", function (ass
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -69,7 +70,7 @@ QUnit.test("Basics: 'Ch'", function (ass
   });
 });
 
-QUnit.test("Basics: 'Chi'", function (assert) {
+QUnit.test("Basics: 'Chi'", function(assert) {
   var inputString = "Chi";
   var expectedLength = 10;
 
@@ -77,14 +78,14 @@ QUnit.test("Basics: 'Chi'", function (as
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -96,7 +97,7 @@ QUnit.test("Basics: 'Chi'", function (as
   });
 });
 
-QUnit.test("Basics: 'Chil'", function (assert) {
+QUnit.test("Basics: 'Chil'", function(assert) {
   var inputString = "Chil";
   var expectedLength = 10;
 
@@ -104,14 +105,14 @@ QUnit.test("Basics: 'Chil'", function (a
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -123,7 +124,7 @@ QUnit.test("Basics: 'Chil'", function (a
   });
 });
 
-QUnit.test("Basics: 'Chile'", function (assert) {
+QUnit.test("Basics: 'Chile'", function(assert) {
   var inputString = "Chile";
   var expectedLength = 7;
 
@@ -131,14 +132,14 @@ QUnit.test("Basics: 'Chile'", function (
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -150,7 +151,7 @@ QUnit.test("Basics: 'Chile'", function (
   });
 });
 
-QUnit.test("Basics: 'Chile '", function (assert) {
+QUnit.test("Basics: 'Chile '", function(assert) {
   var inputString = "Chile ";
   var expectedLength = 7;
 
@@ -158,14 +159,14 @@ QUnit.test("Basics: 'Chile '", function
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -177,7 +178,7 @@ QUnit.test("Basics: 'Chile '", function
   });
 });
 
-QUnit.test("Basics: 'Chile ('", function (assert) {
+QUnit.test("Basics: 'Chile ('", function(assert) {
   var inputString = "Chile (";
   var expectedLength = 7;
 
@@ -185,14 +186,14 @@ QUnit.test("Basics: 'Chile ('", function
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -204,7 +205,7 @@ QUnit.test("Basics: 'Chile ('", function
   });
 });
 
-QUnit.test("Basics: 'Chile (e'", function (assert) {
+QUnit.test("Basics: 'Chile (e'", function(assert) {
   var inputString = "Chile (e";
   var expectedLength = 3;
 
@@ -212,14 +213,14 @@ QUnit.test("Basics: 'Chile (e'", functio
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -231,7 +232,7 @@ QUnit.test("Basics: 'Chile (e'", functio
   });
 });
 
-QUnit.test("Basics: 'Chile (es'", function (assert) {
+QUnit.test("Basics: 'Chile (es'", function(assert) {
   var inputString = "Chile (es";
   var expectedLength = 3;
 
@@ -239,14 +240,14 @@ QUnit.test("Basics: 'Chile (es'", functi
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -258,7 +259,7 @@ QUnit.test("Basics: 'Chile (es'", functi
   });
 });
 
-QUnit.test("Basics: 'Chile (esp'", function (assert) {
+QUnit.test("Basics: 'Chile (esp'", function(assert) {
   var inputString = "Chile (esp";
   var expectedLength = 3;
 
@@ -266,14 +267,14 @@ QUnit.test("Basics: 'Chile (esp'", funct
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -285,7 +286,7 @@ QUnit.test("Basics: 'Chile (esp'", funct
   });
 });
 
-QUnit.test("Basics: 'Chile (espa'", function (assert) {
+QUnit.test("Basics: 'Chile (espa'", function(assert) {
   var inputString = "Chile (espa";
   var expectedLength = 3;
 
@@ -293,14 +294,14 @@ QUnit.test("Basics: 'Chile (espa'", func
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -312,7 +313,7 @@ QUnit.test("Basics: 'Chile (espa'", func
   });
 });
 
-QUnit.test("Basics: 'Chile (espan'", function (assert) {
+QUnit.test("Basics: 'Chile (espan'", function(assert) {
   var inputString = "Chile (espan";
   var expectedLength = 2;
 
@@ -320,14 +321,14 @@ QUnit.test("Basics: 'Chile (espan'", fun
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -339,7 +340,7 @@ QUnit.test("Basics: 'Chile (espan'", fun
   });
 });
 
-QUnit.test("Basics: 'Chile (espanj'", function (assert) {
+QUnit.test("Basics: 'Chile (espanj'", function(assert) {
   var inputString = "Chile (espanj";
   var expectedLength = 1;
 
@@ -347,14 +348,14 @@ QUnit.test("Basics: 'Chile (espanj'", fu
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -366,7 +367,7 @@ QUnit.test("Basics: 'Chile (espanj'", fu
   });
 });
 
-QUnit.test("Basics: 'Chile (espanja'", function (assert) {
+QUnit.test("Basics: 'Chile (espanja'", function(assert) {
   var inputString = "Chile (espanja";
   var expectedLength = 1;
 
@@ -374,14 +375,14 @@ QUnit.test("Basics: 'Chile (espanja'", f
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -393,7 +394,7 @@ QUnit.test("Basics: 'Chile (espanja'", f
   });
 });
 
-QUnit.test("Basics: 'Chile (espanja)'", function (assert) {
+QUnit.test("Basics: 'Chile (espanja)'", function(assert) {
   var inputString = "Chile (espanja)";
   var expectedLength = 1;
 
@@ -401,14 +402,14 @@ QUnit.test("Basics: 'Chile (espanja)'",
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
 
   $in.val(inputString).trigger('input');
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == expectedLength;
-  }, function () {
+  }, function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     assert.equal($suggestions.length, expectedLength);
@@ -420,23 +421,23 @@ QUnit.test("Basics: 'Chile (espanja)'",
   });
 });
 
-QUnit.test("Basics: Add 'Belgiu' and click first entry.", function (assert) {
+QUnit.test("Basics: Add 'Belgiu' and click first entry.", function(assert) {
   assert.expect(12);
   var done = assert.async();
 
   assert.equal(1, 1);
   var $in = jQueryFrame("#page\\:mainForm\\:inBasic\\:\\:field");
   assert.equal(1, 1);
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inBasic .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inBasic");
   assert.equal(1, 1);
 
   $in.val("Belgiu").trigger('input');
   assert.equal($in.val(), "Belgiu");
 
-  waitForAjax(function () {
+  waitForAjax(function() {
     $suggestions = jQueryFrame($suggestions.selector);
     return $suggestions.length == 2;
-  }, function () {
+  }, function() {
     assert.equal(1, 1);
     $in = jQueryFrame($in.selector);
     assert.equal(1, 1);
@@ -456,21 +457,21 @@ QUnit.test("Basics: Add 'Belgiu' and cli
   });
 });
 
-QUnit.test("Advanced: 'H'", function (assert) {
+QUnit.test("Advanced: 'H'", function(assert) {
   assert.expect(1);
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:inAdvanced\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inAdvanced .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inAdvanced");
   var suggestionDelay = 2000;
 
   $in.val("H").trigger('input');
 
-  setTimeout(function () {
-    waitForAjax(function () {
+  setTimeout(function() {
+    waitForAjax(function() {
       $suggestions = jQueryFrame($suggestions.selector);
       return $suggestions.length == 0;
-    }, function () {
+    }, function() {
       $suggestions = jQueryFrame($suggestions.selector);
       assert.equal($suggestions.length, 0);
       done();
@@ -478,17 +479,17 @@ QUnit.test("Advanced: 'H'", function (as
   }, suggestionDelay);
 });
 
-QUnit.test("Advanced: 'Ho'", function (assert) {
+QUnit.test("Advanced: 'Ho'", function(assert) {
   assert.expect(4);
   var done = assert.async(2);
 
   var $in = jQueryFrame("#page\\:mainForm\\:inAdvanced\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inAdvanced .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inAdvanced");
   var suggestionDelay = 2000;
 
   $in.val("Ho").trigger('input');
 
-  setTimeout(function () {
+  setTimeout(function() {
     $suggestions = jQueryFrame($suggestions.selector);
 
     // Nothing happen, because the delay is greater than the default delay.
@@ -497,15 +498,15 @@ QUnit.test("Advanced: 'Ho'", function (a
     done();
   }, 200); // default suggestion delay
 
-  setTimeout(function () {
-    waitForAjax(function () {
+  setTimeout(function() {
+    waitForAjax(function() {
       $in = jQueryFrame($in.selector);
       $suggestions = jQueryFrame($suggestions.selector);
 
       return $suggestions.length == 2
           && $suggestions.eq(0).find("strong").text() == "ho"
           && $suggestions.eq(1).find("strong").text() == "ho";
-    }, function () {
+    }, function() {
       $in = jQueryFrame($in.selector);
       $suggestions = jQueryFrame($suggestions.selector);
 
@@ -518,11 +519,11 @@ QUnit.test("Advanced: 'Ho'", function (a
   }, suggestionDelay);
 });
 
-QUnit.test("Client sided: 'Korean'", function (assert) {
+QUnit.test("Client sided: 'Korean'", function(assert) {
   assert.expect(5);
 
   var $in = jQueryFrame("#page\\:mainForm\\:inClient\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:inClient .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:inClient");
 
   $in.val("Korean").trigger('input');
 
@@ -533,3 +534,8 @@ QUnit.test("Client sided: 'Korean'", fun
   assert.equal($suggestions.eq(2).find("strong").text(), "Korean");
   assert.equal($suggestions.eq(3).find("strong").text(), "Korean");
 });
+
+function getSuggestions(id) {
+  return jQueryFrame(Tobago.Utils.escapeClientId(
+          jQueryFrame(id + " .tobago-suggest").attr("id") + "::popup") + " .tt-suggestion");
+}

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/010-input/20-suggest/suggest.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/010-input/20-suggest/suggest.xhtml?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/010-input/20-suggest/suggest.xhtml (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/010-input/20-suggest/suggest.xhtml Wed Feb  1 16:47:52 2017
@@ -45,7 +45,7 @@
     &lt;tc:selectItems value="\#{suggestController.languages}" var="language" itemValue="\#{language}"/>
   &lt;/tc:suggest>
 &lt;/tc:in></code></pre>
-    <tc:in id="inBasic" label="Language">
+    <tc:in id="inBasic" >
       <tc:suggest totalCount="10" query="#{suggestController.query}">
         <tc:selectItems value="#{suggestController.languages}" var="language" itemValue="#{language}"/>
       </tc:suggest>

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/080-sheet/50-filter/sheet-filter.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/080-sheet/50-filter/sheet-filter.xhtml?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/080-sheet/50-filter/sheet-filter.xhtml (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/080-sheet/50-filter/sheet-filter.xhtml Wed Feb  1 16:47:52 2017
@@ -43,7 +43,11 @@
           <tc:panel>
             <tc:out value="Name"/>
             <tc:in value="#{sheetFilterController.name}">
-              <f:ajax execute=":::sheet" render=":::sheet" listener="#{sheetFilterController.filter}"/>
+              <tc:suggest totalCount="10" query="#{sheetFilterController.nameSuggestionQuery}">
+                <tc:selectItems value="#{sheetFilterController.suggestionSolarList}" var="name" itemValue="#{name}"/>
+              </tc:suggest>
+              <!-- XXX using blur instead of change for event, because of TOBAGO-1689 -->
+              <f:ajax event="blur" execute=":::sheet" render=":::sheet" listener="#{sheetFilterController.filter}"/>
             </tc:in>
           </tc:panel>
           <tc:panel>

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/24-non-faces-response/non-faces-response.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/24-non-faces-response/non-faces-response.xhtml?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/24-non-faces-response/non-faces-response.xhtml (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/24-non-faces-response/non-faces-response.xhtml Wed Feb  1 16:47:52 2017
@@ -25,11 +25,17 @@
 
   <tc:segmentLayout large="10;2">
 
-    <tc:out value="A faces request to a non-faces-response. Inside of the Browser." id="o"/>
-    <tc:button action="#{bestPracticeController.viewPdfInBrowser}" label="View PDF"/>
+    <tc:out value="A faces request to a non-faces-response. Inside of the Browser."/>
+    <tc:button action="#{bestPracticeController.viewFile(false, true)}" label="View PDF"/>
 
     <tc:out value="A faces request to a non-faces-response. Outside of the Browser."/>
-    <tc:button action="#{bestPracticeController.viewPdfOutsideOfBrowser}" label="View PDF" transition="false"/>
+    <tc:button action="#{bestPracticeController.viewFile(true, true)}" label="View PDF" transition="false"/>
+
+    <tc:out value="A faces request to a non-faces-response. Inside of the Browser."/>
+    <tc:button action="#{bestPracticeController.viewFile(false, false)}" label="View TXT"/>
+
+    <tc:out value="A faces request to a non-faces-response. Outside of the Browser."/>
+    <tc:button action="#{bestPracticeController.viewFile(true, false)}" label="View TXT" transition="false"/>
   </tc:segmentLayout>
 
   Problems:
@@ -41,8 +47,12 @@
     <li>
       BUG: Currently after a download the next AJAX is broken:
       <tc:button label="test">
-        <f:ajax render="o" execute="o"/>
+        <f:ajax render="millis"/>
       </tc:button>
+
+      <tc:out label="Current SS:MMM" id="millis" value="#{partialReloadController.currentDate}">
+        <f:convertDateTime pattern="ss:SSS"/>
+      </tc:out>
     </li>
   </ul>
 

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/35-deprecated/15-suggest-method/suggest-method.test.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/35-deprecated/15-suggest-method/suggest-method.test.js?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/35-deprecated/15-suggest-method/suggest-method.test.js (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-example/tobago-example-demo/src/main/webapp/content/35-deprecated/15-suggest-method/suggest-method.test.js Wed Feb  1 16:47:52 2017
@@ -23,7 +23,7 @@ QUnit.test("Deprecated: 'Chile'", functi
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:deprecated\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:deprecated .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:deprecated");
 
   $in.val(inputString).trigger('input');
 
@@ -50,7 +50,7 @@ QUnit.test("Replacement: 'Chile'", funct
   var done = assert.async();
 
   var $in = jQueryFrame("#page\\:mainForm\\:replacement\\:\\:field");
-  var $suggestions = jQueryFrame("#page\\:mainForm\\:replacement .tt-suggestion");
+  var $suggestions = getSuggestions("#page\\:mainForm\\:replacement");
 
   $in.val(inputString).trigger('input');
 
@@ -68,3 +68,8 @@ QUnit.test("Replacement: 'Chile'", funct
     done();
   });
 });
+
+function getSuggestions(id) {
+  return jQueryFrame(Tobago.Utils.escapeClientId(
+          jQueryFrame(id + " .tobago-suggest").attr("id") + "::popup") + " .tt-suggestion");
+}

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.css
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.css?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.css (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.css Wed Feb  1 16:47:52 2017
@@ -824,6 +824,9 @@ th.tobago-sheet-headerCell .tobago-out {
 }
 
 .tt-menu {
+  display: none;
+  position: absolute;
+  z-index: 100;
   background-color: #FFFFFF;
   border: 1px solid rgba(0, 0, 0, 0.2);
   border-radius: 3px;
@@ -831,7 +834,14 @@ th.tobago-sheet-headerCell .tobago-out {
           box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
   margin-top: 1px;
   padding: 8px 0;
-  min-width: 100%;
+}
+
+.tt-open {
+  display: block;
+}
+
+.tt-empty {
+  display: none;
 }
 
 .tt-suggestion {

Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.css.map
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.css.map?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.css.map (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.css.map Wed Feb  1 16:47:52 2017
@@ -1 +1 @@

[... 5 lines stripped ...]
Modified: myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css
URL: http://svn.apache.org/viewvc/myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css?rev=1781270&r1=1781269&r2=1781270&view=diff
==============================================================================
--- myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css (original)
+++ myfaces/tobago/branches/tobago-3.0.x/tobago-theme/tobago-theme-charlotteville/src/main/resources/META-INF/resources/tobago/charlotteville/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css Wed Feb  1 16:47:52 2017
@@ -3,5 +3,5 @@
  * Copyright 2011-2016 The Bootstrap Authors
  * Copyright 2011-2016 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

[... 5 lines stripped ...]