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 2010/03/26 16:21:40 UTC

svn commit: r927912 - in /myfaces/tobago/trunk: example/demo/src/main/webapp/reference/ example/test/src/main/java/org/apache/myfaces/tobago/example/test/ example/test/src/main/webapp/WEB-INF/ example/test/src/main/webapp/tc/popup/ theme/scarborough/sr...

Author: lofwyr
Date: Fri Mar 26 15:21:39 2010
New Revision: 927912

URL: http://svn.apache.org/viewvc?rev=927912&view=rev
Log:
Rewriting of the client code for the Popup
Related issues: TOBAGO-134, TOBAGO-852
Added samples.

Added:
    myfaces/tobago/trunk/example/test/src/main/java/org/apache/myfaces/tobago/example/test/ZIndexController.java
Modified:
    myfaces/tobago/trunk/example/demo/src/main/webapp/reference/popup.xhtml
    myfaces/tobago/trunk/example/test/src/main/webapp/WEB-INF/faces-config.xml
    myfaces/tobago/trunk/example/test/src/main/webapp/tc/popup/z-index.xhtml
    myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DatePickerRenderer.java
    myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PopupRenderer.java
    myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/script/tobago-menu.js
    myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css
    myfaces/tobago/trunk/theme/speyside/src/main/resources/org/apache/myfaces/tobago/renderkit/html/speyside/standard/style/style.css
    myfaces/tobago/trunk/theme/standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js

Modified: myfaces/tobago/trunk/example/demo/src/main/webapp/reference/popup.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/example/demo/src/main/webapp/reference/popup.xhtml?rev=927912&r1=927911&r2=927912&view=diff
==============================================================================
--- myfaces/tobago/trunk/example/demo/src/main/webapp/reference/popup.xhtml (original)
+++ myfaces/tobago/trunk/example/demo/src/main/webapp/reference/popup.xhtml Fri Mar 26 15:21:39 2010
@@ -24,9 +24,12 @@
                 xmlns:ui="http://java.sun.com/jsf/facelets"
                 xmlns:f="http://java.sun.com/jsf/core">
   <ui:param name="title" value="#{overviewBundle.basic}"/>
+
+  <ui:debug/>
+
   <tc:box label="Popups">
     <f:facet name="layout">
-      <tc:gridLayout rows="fixed;fixed;fixed;fixed;fixed;fixed;fixed;fixed;*"/>
+      <tc:gridLayout rows="fixed;fixed;fixed;fixed;fixed;fixed;fixed;*"/>
     </f:facet>
 
     <tc:menuBar>
@@ -37,10 +40,6 @@
       </tc:menu>
     </tc:menuBar>
 
-    <ui:debug/>
-    
-    <tc:messages/>
-
     <tc:panel>
       <f:facet name="layout">
         <tc:gridLayout columns="fixed;fixed;fixed;fixed;*"/>

Added: myfaces/tobago/trunk/example/test/src/main/java/org/apache/myfaces/tobago/example/test/ZIndexController.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/example/test/src/main/java/org/apache/myfaces/tobago/example/test/ZIndexController.java?rev=927912&view=auto
==============================================================================
--- myfaces/tobago/trunk/example/test/src/main/java/org/apache/myfaces/tobago/example/test/ZIndexController.java (added)
+++ myfaces/tobago/trunk/example/test/src/main/java/org/apache/myfaces/tobago/example/test/ZIndexController.java Fri Mar 26 15:21:39 2010
@@ -0,0 +1,40 @@
+package org.apache.myfaces.tobago.example.test;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+public class ZIndexController {
+
+  private Boolean modal1 = true;
+  private Boolean modal2 = true;
+
+  public Boolean getModal1() {
+    return modal1;
+  }
+
+  public void setModal1(Boolean modal1) {
+    this.modal1 = modal1;
+  }
+
+  public Boolean getModal2() {
+    return modal2;
+  }
+
+  public void setModal2(Boolean modal2) {
+    this.modal2 = modal2;
+  }
+}

Modified: myfaces/tobago/trunk/example/test/src/main/webapp/WEB-INF/faces-config.xml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/example/test/src/main/webapp/WEB-INF/faces-config.xml?rev=927912&r1=927911&r2=927912&view=diff
==============================================================================
--- myfaces/tobago/trunk/example/test/src/main/webapp/WEB-INF/faces-config.xml (original)
+++ myfaces/tobago/trunk/example/test/src/main/webapp/WEB-INF/faces-config.xml Fri Mar 26 15:21:39 2010
@@ -101,6 +101,12 @@
     <managed-bean-scope>session</managed-bean-scope>
   </managed-bean>
 
+  <managed-bean>
+    <managed-bean-name>zIndex</managed-bean-name>
+    <managed-bean-class>org.apache.myfaces.tobago.example.test.ZIndexController</managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+  </managed-bean>
+
   <navigation-rule>
     <navigation-case>
       <from-outcome>navigation</from-outcome>

Modified: myfaces/tobago/trunk/example/test/src/main/webapp/tc/popup/z-index.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/example/test/src/main/webapp/tc/popup/z-index.xhtml?rev=927912&r1=927911&r2=927912&view=diff
==============================================================================
--- myfaces/tobago/trunk/example/test/src/main/webapp/tc/popup/z-index.xhtml (original)
+++ myfaces/tobago/trunk/example/test/src/main/webapp/tc/popup/z-index.xhtml Fri Mar 26 15:21:39 2010
@@ -7,333 +7,374 @@
     xmlns:ui="http://java.sun.com/jsf/facelets"
     xmlns:f="http://java.sun.com/jsf/core">
 
-  <tc:page width="800px" height="600px" id="page">
+<tc:page width="800px" height="600px" id="page">
 <f:facet xmlns:f="http://java.sun.com/jsf/core"
          xmlns:tc="http://myfaces.apache.org/tobago/component"
          xmlns:tx="http://myfaces.apache.org/tobago/extension"
          xmlns:tf="http://myfaces.apache.org/tobago/facelet-extension"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          name="menuBar">
-  <tc:menuBar>
-    <tc:menu label="space -> space -> space">
-    </tc:menu>
+<tc:menuBar>
+<tc:menu label="space -> space -> space">
+</tc:menu>
 
-    <tc:menu label="Help">
-      <tc:menu label="Help 1">
-        <tc:menu label="Help 1 1">
-        </tc:menu>
-        <tc:menuSeparator/>
-        <tc:menu label="Help 1 2">
-        </tc:menu>
-        <tc:menu label="Help 1 3">
-        </tc:menu>
-        <tc:menu label="Help 1 4">
-        </tc:menu>
-        <tc:menuSeparator/>
-        <tc:menu label="Help 1 5">
-        </tc:menu>
-        <tc:menu label="Help 1 6">
-        </tc:menu>
-        <tc:menu label="Help 1 7">
-        </tc:menu>
-        <tc:menuSeparator/>
-        <tc:menu label="Help 1 8">
-        </tc:menu>
-        <tc:menu label="Help 1 9">
-        </tc:menu>
-        <tc:menu label="Help 1 10">
-        </tc:menu>
-      </tc:menu>
-      <tc:menu label="Help 2">
-        <tc:menu label="Help 2 1">
-        </tc:menu>
-        <tc:menu label="Help 2 2">
-        </tc:menu>
-        <tc:menu label="Help 2 3">
-        </tc:menu>
-        <tc:menu label="Help 2 4">
-        </tc:menu>
-        <tc:menu label="Help 2 5">
-        </tc:menu>
-        <tc:menu label="Help 2 6">
-        </tc:menu>
-        <tc:menu label="Help 2 7">
-        </tc:menu>
-        <tc:menu label="Help 2 8">
-        </tc:menu>
-        <tc:menu label="Help 2 9">
-        </tc:menu>
-        <tc:menu label="Help 2 10">
-        </tc:menu>
-      </tc:menu>
-      <tc:menu label="Help 3">
-        <tc:menu label="Help 3 1">
-        </tc:menu>
-        <tc:menu label="Help 3 2">
-        </tc:menu>
-        <tc:menu label="Help 3 3">
-        </tc:menu>
-        <tc:menu label="Help 3 4">
-        </tc:menu>
-        <tc:menu label="Help 3 5">
-        </tc:menu>
-        <tc:menu label="Help 3 6">
-        </tc:menu>
-        <tc:menu label="Help 3 7">
-        </tc:menu>
-        <tc:menu label="Help 3 8">
-        </tc:menu>
-        <tc:menu label="Help 3 9">
-        </tc:menu>
-        <tc:menu label="Help 3 10">
-        </tc:menu>
-      </tc:menu>
-      <tc:menu label="Help 4">
-        <tc:menu label="Help 4 1">
-        </tc:menu>
-        <tc:menu label="Help 4 2">
-        </tc:menu>
-        <tc:menu label="Help 4 3">
-        </tc:menu>
-        <tc:menu label="Help 4 4">
-        </tc:menu>
-        <tc:menu label="Help 4 5">
-        </tc:menu>
-        <tc:menu label="Help 4 6">
-        </tc:menu>
-        <tc:menu label="Help 4 7">
-        </tc:menu>
-        <tc:menu label="Help 4 8">
-        </tc:menu>
-        <tc:menu label="Help 4 9">
-        </tc:menu>
-        <tc:menu label="Help 4 10">
-        </tc:menu>
-      </tc:menu>
-      <tc:menu label="Help 5">
-        <tc:menu label="Help 5 1">
-        </tc:menu>
-        <tc:menu label="Help 5 2">
-        </tc:menu>
-        <tc:menu label="Help 5 3">
-        </tc:menu>
-        <tc:menu label="Help 5 4">
-        </tc:menu>
-        <tc:menu label="Help 5 5">
-        </tc:menu>
-        <tc:menu label="Help 5 6">
-        </tc:menu>
-        <tc:menu label="Help 5 7">
-        </tc:menu>
-        <tc:menu label="Help 5 8">
-        </tc:menu>
-        <tc:menu label="Help 5 9">
-        </tc:menu>
-        <tc:menu label="Help 5 10">
-        </tc:menu>
-      </tc:menu>
-      <tc:menu label="Help 6">
-        <tc:menu label="Help 6 1">
-        </tc:menu>
-        <tc:menu label="Help 6 2">
-        </tc:menu>
-        <tc:menu label="Help 6 3">
-        </tc:menu>
-        <tc:menu label="Help 6 4">
-        </tc:menu>
-        <tc:menu label="Help 6 5">
-        </tc:menu>
-        <tc:menu label="Help 6 6">
-        </tc:menu>
-        <tc:menu label="Help 6 7">
-        </tc:menu>
-        <tc:menu label="Help 6 8">
-        </tc:menu>
-        <tc:menu label="Help 6 9">
-        </tc:menu>
-        <tc:menu label="Help 6 10">
-        </tc:menu>
-      </tc:menu>
-      <tc:menu label="Help 7">
-        <tc:menu label="Help 7 1">
-        </tc:menu>
-        <tc:menu label="Help 7 2">
-        </tc:menu>
-        <tc:menu label="Help 7 3">
-        </tc:menu>
-        <tc:menu label="Help 7 4">
-        </tc:menu>
-        <tc:menu label="Help 7 5">
-        </tc:menu>
-        <tc:menu label="Help 7 6">
-        </tc:menu>
-        <tc:menu label="Help 7 7">
-        </tc:menu>
-        <tc:menu label="Help 7 8">
-        </tc:menu>
-        <tc:menu label="Help 7 9">
-        </tc:menu>
-        <tc:menu label="Help 7 10">
-        </tc:menu>
-      </tc:menu>
-      <tc:menu label="Help 8">
-        <tc:menu label="Help 8 1">
-        </tc:menu>
-        <tc:menu label="Help 8 2">
-        </tc:menu>
-        <tc:menu label="Help 8 3">
-        </tc:menu>
-        <tc:menu label="Help 8 4">
-        </tc:menu>
-        <tc:menu label="Help 8 5">
-        </tc:menu>
-        <tc:menu label="Help 8 6">
-        </tc:menu>
-        <tc:menu label="Help 8 7">
-        </tc:menu>
-        <tc:menu label="Help 8 8">
-        </tc:menu>
-        <tc:menu label="Help 8 9">
-        </tc:menu>
-        <tc:menu label="Help 8 10">
-        </tc:menu>
-      </tc:menu>
-      <tc:menu label="Help 9">
-        <tc:menu label="Help 9 1">
-        </tc:menu>
-        <tc:menu label="Help 9 2">
-        </tc:menu>
-        <tc:menu label="Help 9 3">
-        </tc:menu>
-        <tc:menu label="Help 9 4">
-        </tc:menu>
-        <tc:menu label="Help 9 5">
-        </tc:menu>
-        <tc:menu label="Help 9 6">
-        </tc:menu>
-        <tc:menu label="Help 9 7">
-        </tc:menu>
-        <tc:menu label="Help 9 8">
-        </tc:menu>
-        <tc:menu label="Help 9 9">
-        </tc:menu>
-        <tc:menu label="Help 9 10">
-        </tc:menu>
-      </tc:menu>
-      <tc:menu label="Help 10">
-        <tc:menu label="Help 10 1">
-        </tc:menu>
-        <tc:menu label="Help 10 2">
-        </tc:menu>
-        <tc:menu label="Help 10 3">
-        </tc:menu>
-        <tc:menu label="Help 10 4">
-        </tc:menu>
-        <tc:menu label="Help 10 5">
-        </tc:menu>
-        <tc:menu label="Help 10 6">
-        </tc:menu>
-        <tc:menu label="Help 10 7">
-        </tc:menu>
-        <tc:menu label="Help 10 8">
-        </tc:menu>
-        <tc:menu label="Help 10 9">
-        </tc:menu>
-        <tc:menu label="Help 10 10">
-        </tc:menu>
-      </tc:menu>
-    </tc:menu>
-  </tc:menuBar>
+<tc:menu label="Help">
+<tc:menu label="Help 1">
+  <tc:menu label="Help 1 1">
+  </tc:menu>
+  <tc:menuSeparator/>
+  <tc:menu label="Help 1 2">
+  </tc:menu>
+  <tc:menu label="Help 1 3">
+  </tc:menu>
+  <tc:menu label="Help 1 4">
+  </tc:menu>
+  <tc:menuSeparator/>
+  <tc:menu label="Help 1 5">
+  </tc:menu>
+  <tc:menu label="Help 1 6">
+  </tc:menu>
+  <tc:menu label="Help 1 7">
+  </tc:menu>
+  <tc:menuSeparator/>
+  <tc:menu label="Help 1 8">
+  </tc:menu>
+  <tc:menu label="Help 1 9">
+  </tc:menu>
+  <tc:menu label="Help 1 10">
+  </tc:menu>
+</tc:menu>
+<tc:menu label="Help 2">
+  <tc:menu label="Help 2 1">
+  </tc:menu>
+  <tc:menu label="Help 2 2">
+  </tc:menu>
+  <tc:menu label="Help 2 3">
+  </tc:menu>
+  <tc:menu label="Help 2 4">
+  </tc:menu>
+  <tc:menu label="Help 2 5">
+  </tc:menu>
+  <tc:menu label="Help 2 6">
+  </tc:menu>
+  <tc:menu label="Help 2 7">
+  </tc:menu>
+  <tc:menu label="Help 2 8">
+  </tc:menu>
+  <tc:menu label="Help 2 9">
+  </tc:menu>
+  <tc:menu label="Help 2 10">
+  </tc:menu>
+</tc:menu>
+<tc:menu label="Help 3">
+  <tc:menu label="Help 3 1">
+  </tc:menu>
+  <tc:menu label="Help 3 2">
+  </tc:menu>
+  <tc:menu label="Help 3 3">
+  </tc:menu>
+  <tc:menu label="Help 3 4">
+  </tc:menu>
+  <tc:menu label="Help 3 5">
+  </tc:menu>
+  <tc:menu label="Help 3 6">
+  </tc:menu>
+  <tc:menu label="Help 3 7">
+  </tc:menu>
+  <tc:menu label="Help 3 8">
+  </tc:menu>
+  <tc:menu label="Help 3 9">
+  </tc:menu>
+  <tc:menu label="Help 3 10">
+  </tc:menu>
+</tc:menu>
+<tc:menu label="Help 4">
+  <tc:menu label="Help 4 1">
+  </tc:menu>
+  <tc:menu label="Help 4 2">
+  </tc:menu>
+  <tc:menu label="Help 4 3">
+  </tc:menu>
+  <tc:menu label="Help 4 4">
+  </tc:menu>
+  <tc:menu label="Help 4 5">
+  </tc:menu>
+  <tc:menu label="Help 4 6">
+  </tc:menu>
+  <tc:menu label="Help 4 7">
+  </tc:menu>
+  <tc:menu label="Help 4 8">
+  </tc:menu>
+  <tc:menu label="Help 4 9">
+  </tc:menu>
+  <tc:menu label="Help 4 10">
+  </tc:menu>
+</tc:menu>
+<tc:menu label="Help 5">
+  <tc:menu label="Help 5 1">
+  </tc:menu>
+  <tc:menu label="Help 5 2">
+  </tc:menu>
+  <tc:menu label="Help 5 3">
+  </tc:menu>
+  <tc:menu label="Help 5 4">
+  </tc:menu>
+  <tc:menu label="Help 5 5">
+  </tc:menu>
+  <tc:menu label="Help 5 6">
+  </tc:menu>
+  <tc:menu label="Help 5 7">
+  </tc:menu>
+  <tc:menu label="Help 5 8">
+  </tc:menu>
+  <tc:menu label="Help 5 9">
+  </tc:menu>
+  <tc:menu label="Help 5 10">
+  </tc:menu>
+</tc:menu>
+<tc:menu label="Help 6">
+  <tc:menu label="Help 6 1">
+  </tc:menu>
+  <tc:menu label="Help 6 2">
+  </tc:menu>
+  <tc:menu label="Help 6 3">
+  </tc:menu>
+  <tc:menu label="Help 6 4">
+  </tc:menu>
+  <tc:menu label="Help 6 5">
+  </tc:menu>
+  <tc:menu label="Help 6 6">
+  </tc:menu>
+  <tc:menu label="Help 6 7">
+  </tc:menu>
+  <tc:menu label="Help 6 8">
+  </tc:menu>
+  <tc:menu label="Help 6 9">
+  </tc:menu>
+  <tc:menu label="Help 6 10">
+  </tc:menu>
+</tc:menu>
+<tc:menu label="Help 7">
+  <tc:menu label="Help 7 1">
+  </tc:menu>
+  <tc:menu label="Help 7 2">
+  </tc:menu>
+  <tc:menu label="Help 7 3">
+  </tc:menu>
+  <tc:menu label="Help 7 4">
+  </tc:menu>
+  <tc:menu label="Help 7 5">
+  </tc:menu>
+  <tc:menu label="Help 7 6">
+  </tc:menu>
+  <tc:menu label="Help 7 7">
+  </tc:menu>
+  <tc:menu label="Help 7 8">
+  </tc:menu>
+  <tc:menu label="Help 7 9">
+  </tc:menu>
+  <tc:menu label="Help 7 10">
+  </tc:menu>
+</tc:menu>
+<tc:menu label="Help 8">
+  <tc:menu label="Help 8 1">
+  </tc:menu>
+  <tc:menu label="Help 8 2">
+  </tc:menu>
+  <tc:menu label="Help 8 3">
+  </tc:menu>
+  <tc:menu label="Help 8 4">
+  </tc:menu>
+  <tc:menu label="Help 8 5">
+  </tc:menu>
+  <tc:menu label="Help 8 6">
+  </tc:menu>
+  <tc:menu label="Help 8 7">
+  </tc:menu>
+  <tc:menu label="Help 8 8">
+  </tc:menu>
+  <tc:menu label="Help 8 9">
+  </tc:menu>
+  <tc:menu label="Help 8 10">
+  </tc:menu>
+</tc:menu>
+<tc:menu label="Help 9">
+  <tc:menu label="Help 9 1">
+  </tc:menu>
+  <tc:menu label="Help 9 2">
+  </tc:menu>
+  <tc:menu label="Help 9 3">
+  </tc:menu>
+  <tc:menu label="Help 9 4">
+  </tc:menu>
+  <tc:menu label="Help 9 5">
+  </tc:menu>
+  <tc:menu label="Help 9 6">
+  </tc:menu>
+  <tc:menu label="Help 9 7">
+  </tc:menu>
+  <tc:menu label="Help 9 8">
+  </tc:menu>
+  <tc:menu label="Help 9 9">
+  </tc:menu>
+  <tc:menu label="Help 9 10">
+  </tc:menu>
+</tc:menu>
+<tc:menu label="Help 10">
+  <tc:menu label="Help 10 1">
+  </tc:menu>
+  <tc:menu label="Help 10 2">
+  </tc:menu>
+  <tc:menu label="Help 10 3">
+  </tc:menu>
+  <tc:menu label="Help 10 4">
+  </tc:menu>
+  <tc:menu label="Help 10 5">
+  </tc:menu>
+  <tc:menu label="Help 10 6">
+  </tc:menu>
+  <tc:menu label="Help 10 7">
+  </tc:menu>
+  <tc:menu label="Help 10 8">
+  </tc:menu>
+  <tc:menu label="Help 10 9">
+  </tc:menu>
+  <tc:menu label="Help 10 10">
+  </tc:menu>
+</tc:menu>
+</tc:menu>
+</tc:menuBar>
 
-</f:facet>    <tc:box label="Page (z-index = 1 (TODO))">
-      <f:facet name="layout">
-        <tc:gridLayout rows="60px;fixed;*;fixed"/>
-      </f:facet>
-      <tc:out
-          value="This page is to check, if the layered presentation is corret. It will be usually defined by setting
+</f:facet>
+
+<tc:box label="Page (z-index = 0)">
+  <f:facet name="layout">
+    <tc:gridLayout rows="60px;auto;auto;*;auto;auto"/>
+  </f:facet>
+  <tc:out
+      value="This page is to check, if the layered presentation is corret. It will be usually defined by setting
            the z-index in CSS or by the order of rendering in the document. The footer and header of the sheet
            also have the z-index set in the common renderer."/>
-      <tx:date label="Date">
-        <f:convertDateTime pattern="dd/MM/yyyy"/>
-      </tx:date>
-      <tc:sheet var="v1" columns="*;*;*" showRowRange="left" showPageRange="right" showDirectLinks="center">
-        <tc:column label="Column 1"/>
-        <tc:column label="Column 2"/>
-        <tc:column label="Column 3"/>
-      </tc:sheet>
-      <tc:panel>
-        <f:facet name="layout">
-          <tc:gridLayout columns="3*;*"/>
-        </f:facet>
-        <tc:cell/>
-        <tc:button label="Open Popup">
-          <f:facet name="popup">
-            <tc:popup width="600px" height="470px" left="100px" top="100px" id="popup-2">
-              <tc:box label="Popup (z-index = 2 (TODO))" id="box-2">
-                <f:facet name="layout">
-                  <tc:gridLayout rows="auto;1*;auto"/>
+  <tc:panel>
+    <f:facet name="layout">
+      <tc:gridLayout columns="*;4*"/>
+    </f:facet>
+
+    <tc:link label="Link to Apache" link="http://www.apache.org/"/>
+    <tx:date label="Date">
+      <f:convertDateTime pattern="dd/MM/yyyy"/>
+    </tx:date>
+  </tc:panel>
+  <tc:selectOneChoice>
+    <tc:selectItem itemLabel="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" itemValue="A"/>
+    <tc:selectItem itemLabel="BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" itemValue="B"/>
+    <tc:selectItem itemLabel="CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" itemValue="C"/>
+  </tc:selectOneChoice>
+  <tc:sheet var="v1" columns="*;*;*" showRowRange="left" showPageRange="right" showDirectLinks="center">
+    <tc:column label="Column 1"/>
+    <tc:column label="Column 2"/>
+    <tc:column label="Column 3"/>
+  </tc:sheet>
+  <tc:panel>
+    <f:facet name="layout">
+      <tc:gridLayout columns="*;*"/>
+    </f:facet>
+  <tx:selectBooleanCheckbox label="1st Popup Modal" value="#{zIndex.modal1}" id="modal1st"/>
+  <tc:cell/>
+  <tx:selectBooleanCheckbox label="2nd Popup Modal" value="#{zIndex.modal2}"/>
+  <tc:cell/>
+  </tc:panel>
+  <tc:panel>
+    <f:facet name="layout">
+      <tc:gridLayout columns="auto;auto;auto;*"/>
+    </f:facet>
+    <tc:button label="Open Popup">
+      <f:facet name="popup">
+        <tc:popup width="600px" height="470px" left="100px" top="100px" id="popup-1" modal="#{zIndex.modal1}">
+          <tc:box label="Popup (z-index = 1 (TODO))" id="box-1">
+            <f:facet name="layout">
+              <tc:gridLayout rows="auto;auto;*;auto"/>
+            </f:facet>
+            <tx:date label="Date">
+              <f:convertDateTime pattern="dd/MM/yyyy"/>
+            </tx:date>
+            <tc:selectOneChoice>
+              <tc:selectItem itemLabel="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" itemValue="A"/>
+              <tc:selectItem itemLabel="BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" itemValue="B"/>
+              <tc:selectItem itemLabel="CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" itemValue="C"/>
+            </tc:selectOneChoice>
+            <tc:sheet var="v1" columns="*;*;*" showRowRange="left" showPageRange="right" showDirectLinks="center">
+              <tc:column label="Column 1"/>
+              <tc:column label="Column 2"/>
+              <tc:column label="Column 3"/>
+            </tc:sheet>
+            <tc:panel>
+              <f:facet name="layout">
+                <tc:gridLayout columns="*;*;*;*"/>
+              </f:facet>
+              <tc:button label="Open Sub Popup">
+                <f:facet name="popup">
+                  <tc:popup width="400px" height="500px" left="200px" top="50px" id="popup-2" modal="#{zIndex.modal2}">
+                    <tc:box label="Popup (z-index = 2 (TODO))" id="box-2">
+                      <f:facet name="layout">
+                        <tc:gridLayout rows="auto;auto;*;auto"/>
+                      </f:facet>
+                      <tx:date label="Date">
+                        <f:convertDateTime pattern="dd/MM/yyyy"/>
+                      </tx:date>
+                      <tc:selectOneChoice>
+                        <tc:selectItem itemLabel="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" itemValue="A"/>
+                        <tc:selectItem itemLabel="BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" itemValue="B"/>
+                        <tc:selectItem itemLabel="CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" itemValue="C"/>
+                      </tc:selectOneChoice>
+                      <tc:sheet var="v1" columns="*;*;*" showRowRange="left" showPageRange="right"
+                                showDirectLinks="center">
+                        <tc:column label="Column 1"/>
+                        <tc:column label="Column 2"/>
+                        <tc:column label="Column 3"/>
+                      </tc:sheet>
+                      <tc:panel>
+                        <f:facet name="layout">
+                          <tc:gridLayout columns="*;*;*"/>
+                        </f:facet>
+                        <tc:button label="Cancel">
+                          <tc:attribute name="popupClose" value="immediate"/>
+                        </tc:button>
+                        <tc:button label="Redisplay">
+                          <tc:attribute name="renderedPartially" value="box-2"/>
+                        </tc:button>
+                        <tc:button label="Ok">
+                          <tc:attribute name="popupClose" value="afterSubmit"/>
+                        </tc:button>
+                      </tc:panel>
+                    </tc:box>
+                  </tc:popup>
                 </f:facet>
-                <tx:date label="Date">
-                  <f:convertDateTime pattern="dd/MM/yyyy"/>
-                </tx:date>
-                <tc:sheet var="v1" columns="*;*;*" showRowRange="left" showPageRange="right" showDirectLinks="center">
-                  <tc:column label="Column 1"/>
-                  <tc:column label="Column 2"/>
-                  <tc:column label="Column 3"/>
-                </tc:sheet>
-                <tc:panel>
-                  <f:facet name="layout">
-                    <tc:gridLayout columns="*;*;*;*"/>
-                  </f:facet>
-                  <tc:button label="Open Sub Popup">
-                    <f:facet name="popup">
-                      <tc:popup width="400px" height="500px" left="200px" top="50px" id="popup-3">
-                        <tc:box label="Popup (z-index = 3 (TODO))" id="box-3">
-                          <f:facet name="layout">
-                            <tc:gridLayout rows="auto;1*;auto"/>
-                          </f:facet>
-                          <tx:date label="Date">
-                            <f:convertDateTime pattern="dd/MM/yyyy"/>
-                          </tx:date>
-                          <tc:sheet var="v1" columns="*;*;*" showRowRange="left" showPageRange="right"
-                                    showDirectLinks="center">
-                            <tc:column label="Column 1"/>
-                            <tc:column label="Column 2"/>
-                            <tc:column label="Column 3"/>
-                          </tc:sheet>
-                          <tc:panel>
-                            <f:facet name="layout">
-                              <tc:gridLayout columns="1*;1*;1*"/>
-                            </f:facet>
-                            <tc:button label="Cancel">
-                              <tc:attribute name="popupClose" value="immediate"/>
-                            </tc:button>
-                            <tc:button label="Redisplay">
-                              <tc:attribute name="renderedPartially" value="box-3"/>
-                            </tc:button>
-                            <tc:button label="Ok">
-                              <tc:attribute name="popupClose" value="afterSubmit"/>
-                            </tc:button>
-                          </tc:panel>
-                        </tc:box>
-                      </tc:popup>
-                    </f:facet>
-                  </tc:button>
-                  <tc:button label="Cancel">
-                    <tc:attribute name="popupClose" value="immediate"/>
-                  </tc:button>
-                  <tc:button label="Redisplay">
-                    <tc:attribute name="renderedPartially" value="box-2"/>
-                  </tc:button>
-                  <tc:button label="Ok">
-                    <tc:attribute name="popupClose" value="afterSubmit"/>
-                  </tc:button>
-                </tc:panel>
-              </tc:box>
-            </tc:popup>
-          </f:facet>
-        </tc:button>
-      </tc:panel>
-    </tc:box>
-  </tc:page>
+              </tc:button>
+              <tc:button label="Open Popup (AJAX)">
+                <tc:attribute name="renderedPartially" value="popup-2"/>
+                <tc:popupReference for="popup-2"/>
+              </tc:button>
+              <tc:button label="Cancel">
+                <tc:attribute name="popupClose" value="immediate"/>
+              </tc:button>
+              <tc:button label="Redisplay">
+                <tc:attribute name="renderedPartially" value="box-1"/>
+              </tc:button>
+              <tc:button label="Ok">
+                <tc:attribute name="popupClose" value="afterSubmit"/>
+              </tc:button>
+            </tc:panel>
+          </tc:box>
+        </tc:popup>
+      </f:facet>
+    </tc:button>
+    <tc:button label="Open Popup (AJAX)">
+      <tc:attribute name="renderedPartially" value="popup-1"/>
+      <tc:popupReference for="popup-1"/>
+    </tc:button>
+    <tc:button label="Update"/>
+  </tc:panel>
+</tc:box>
+</tc:page>
 </f:view>

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DatePickerRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DatePickerRenderer.java?rev=927912&r1=927911&r2=927912&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DatePickerRenderer.java (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DatePickerRenderer.java Fri Mar 26 15:21:39 2010
@@ -37,13 +37,11 @@ import org.apache.myfaces.tobago.compone
 import org.apache.myfaces.tobago.context.ResourceManagerUtil;
 import org.apache.myfaces.tobago.context.TobagoFacesContext;
 import org.apache.myfaces.tobago.event.PopupActionListener;
-import org.apache.myfaces.tobago.internal.component.AbstractUIPopup;
 import org.apache.myfaces.tobago.internal.util.DateFormatUtils;
 import org.apache.myfaces.tobago.layout.Measure;
 import org.apache.myfaces.tobago.renderkit.html.StyleClasses;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 
-import javax.faces.component.UICommand;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
@@ -52,14 +50,10 @@ import java.io.IOException;
 import java.util.Map;
 import java.util.TimeZone;
 
-import static javax.faces.convert.DateTimeConverter.CONVERTER_ID;
-
 public class DatePickerRenderer extends LinkRenderer {
 
   private static final Log LOG = LogFactory.getLog(DatePickerRenderer.class);
 
-  public static final String CLOSE_POPUP = "closePopup";
-
   @Override
   public void onComponentCreated(FacesContext context, UIComponent component) {
     preparePicker(context, (UIDatePicker) component);
@@ -70,127 +64,109 @@ public class DatePickerRenderer extends 
       picker.setFor("@auto");
     }
     picker.setImmediate(true);
-    String linkId = picker.getId();
+    final String linkId = picker.getId();
+
+    final String hiddenId = linkId != null ? linkId + "hidden" : facesContext.getViewRoot().createUniqueId();
     UIHidden hidden = (UIHidden)
-        CreateComponentUtils.createComponent(facesContext, UIHidden.COMPONENT_TYPE, RendererTypes.HIDDEN);
-    if (linkId != null) {
-      hidden.setId(linkId + "hidden");
-    } else {
-      hidden.setId(facesContext.getViewRoot().createUniqueId());
-    }
+        CreateComponentUtils.createComponent(facesContext, UIHidden.COMPONENT_TYPE, RendererTypes.HIDDEN, hiddenId);
     picker.getChildren().add(hidden);
 
     // create popup
-    final AbstractUIPopup popup =
-        (AbstractUIPopup) CreateComponentUtils.createComponent(facesContext, UIPopup.COMPONENT_TYPE,
-            RendererTypes.POPUP);
-    if (linkId != null) {
-      popup.setId(linkId + "popup");
-    } else {
-      popup.setId(facesContext.getViewRoot().createUniqueId());
-    }
+    final String popupId = linkId != null ? linkId + "popup" : facesContext.getViewRoot().createUniqueId();
+    final UIPopup popup = (UIPopup) CreateComponentUtils.createComponent(
+        facesContext, UIPopup.COMPONENT_TYPE, RendererTypes.POPUP, popupId);
     popup.getAttributes().put(Attributes.Z_INDEX, 10);
-
     picker.getFacets().put(Facets.PICKER_POPUP, popup);
 
     popup.setRendered(false);
+    popup.onComponentPopulated(facesContext);
 
-    final UIComponent box = CreateComponentUtils.createComponent(
-        facesContext, UIBox.COMPONENT_TYPE, RendererTypes.BOX);
+    final UIBox box = (UIBox) CreateComponentUtils.createComponent(
+        facesContext, UIBox.COMPONENT_TYPE, RendererTypes.BOX, "box");
     popup.getChildren().add(box);
-    box.setId("box");
     // TODO: set string resources in renderer
-    box.getAttributes().put(Attributes.LABEL, ResourceManagerUtil.getPropertyNotNull(
-        facesContext, "tobago", "datePickerTitle"));
-    UIComponent layout = CreateComponentUtils.createComponent(
-        facesContext, UIGridLayout.COMPONENT_TYPE, RendererTypes.GRID_LAYOUT);
-    box.getFacets().put(Facets.LAYOUT, layout);
-    layout.setId("layout");
-    layout.getAttributes().put(Attributes.ROWS, "*;fixed;fixed");
+    box.setLabel(ResourceManagerUtil.getPropertyNotNull(facesContext, "tobago", "datePickerTitle"));
+    final UIGridLayout layoutOfBox = (UIGridLayout) CreateComponentUtils.createComponent(
+        facesContext, UIGridLayout.COMPONENT_TYPE, RendererTypes.GRID_LAYOUT, "layout");
+    box.getFacets().put(Facets.LAYOUT, layoutOfBox);
+    layoutOfBox.setRows("*;fixed;fixed");
 
     final UIComponent calendar = CreateComponentUtils.createComponent(
-        facesContext, javax.faces.component.UIOutput.COMPONENT_TYPE,
-        RendererTypes.CALENDAR);
-
-    calendar.setId("calendar");
+        facesContext, javax.faces.component.UIOutput.COMPONENT_TYPE, RendererTypes.CALENDAR, "calendar");
     box.getChildren().add(calendar);
 
     // add time input
-    final UIComponent timePanel = CreateComponentUtils.createComponent(
-        facesContext, UIPanel.COMPONENT_TYPE, RendererTypes.PANEL);
-    timePanel.setId("timePanel");
+    final UIPanel timePanel = (UIPanel) CreateComponentUtils.createComponent(
+        facesContext, UIPanel.COMPONENT_TYPE, RendererTypes.PANEL, "timePanel");
     box.getChildren().add(timePanel);
-    layout = CreateComponentUtils.createComponent(
-        facesContext, UIGridLayout.COMPONENT_TYPE, RendererTypes.GRID_LAYOUT);
-    timePanel.getFacets().put(Facets.LAYOUT, layout);
-    layout.setId("timePanelLayout");
-    layout.getAttributes().put(Attributes.COLUMNS, "1*;fixed;1*");
-    UIComponent cell = CreateComponentUtils.createComponent(
-        facesContext, UIPanel.COMPONENT_TYPE, RendererTypes.PANEL);
-    cell.setId("cell1");
-    timePanel.getChildren().add(cell);
-
-    final UIComponent time = CreateComponentUtils.createComponent(
-        facesContext,
-        UITime.COMPONENT_TYPE,
-        RendererTypes.TIME);
+    final UIGridLayout layoutOfTime = (UIGridLayout) CreateComponentUtils.createComponent(
+        facesContext, UIGridLayout.COMPONENT_TYPE, RendererTypes.GRID_LAYOUT, "timePanelLayout");
+    timePanel.getFacets().put(Facets.LAYOUT, layoutOfTime);
+    layoutOfTime.setColumns("1*;fixed;1*");
+    final UIPanel cell1 = (UIPanel) CreateComponentUtils.createComponent(
+        facesContext, UIPanel.COMPONENT_TYPE, RendererTypes.PANEL, "cell1");
+    cell1.onComponentPopulated(facesContext);
+    timePanel.getChildren().add(cell1);
+
+    final UITime time = (UITime) CreateComponentUtils.createComponent(
+        facesContext, UITime.COMPONENT_TYPE, RendererTypes.TIME, "time");
     timePanel.getChildren().add(time);
-    time.setId("time");
 
-    cell = CreateComponentUtils.createComponent(
-        facesContext, UIPanel.COMPONENT_TYPE, RendererTypes.PANEL);
-    cell.setId("cell2");
-    timePanel.getChildren().add(cell);
-
-
-    UIComponent buttonPanel = CreateComponentUtils.createComponent(
-        facesContext, UIPanel.COMPONENT_TYPE, RendererTypes.PANEL);
-    buttonPanel.setId("buttonPanel");
-    layout = CreateComponentUtils.createComponent(
-        facesContext, UIGridLayout.COMPONENT_TYPE, RendererTypes.GRID_LAYOUT);
-    layout.setId("buttonPanelLayout");
-    buttonPanel.getFacets().put(Facets.LAYOUT, layout);
-    layout.getAttributes().put(Attributes.COLUMNS, "*;*");
-    layout.getAttributes().put(Attributes.ROWS, "fixed");
+    final UIPanel cell2 = (UIPanel) CreateComponentUtils.createComponent(
+        facesContext, UIPanel.COMPONENT_TYPE, RendererTypes.PANEL, "cell2");
+    cell2.onComponentPopulated(facesContext);
+    timePanel.getChildren().add(cell2);
+
+    timePanel.onComponentPopulated(facesContext);
+
+
+    final UIPanel buttonPanel = (UIPanel) CreateComponentUtils.createComponent(
+        facesContext, UIPanel.COMPONENT_TYPE, RendererTypes.PANEL, "buttonPanel");
+    final UIGridLayout layoutOfButtons = (UIGridLayout) CreateComponentUtils.createComponent(
+        facesContext, UIGridLayout.COMPONENT_TYPE, RendererTypes.GRID_LAYOUT, "buttonPanelLayout");
+    buttonPanel.setLayoutManager(layoutOfButtons);
+    layoutOfButtons.setColumns("*;*");
+    layoutOfButtons.setRows("fixed");
 
     box.getChildren().add(buttonPanel);
+    box.onComponentPopulated(facesContext);
 
-    final UIButton okButton = (UIButton)
-        CreateComponentUtils.createComponent(facesContext, UIButton.COMPONENT_TYPE, RendererTypes.BUTTON);
+    final UIButton okButton = (UIButton) CreateComponentUtils.createComponent(
+        facesContext, UIButton.COMPONENT_TYPE, RendererTypes.BUTTON, "ok");
     buttonPanel.getChildren().add(okButton);
-    okButton.setId("ok" + CLOSE_POPUP);
-    okButton.getAttributes().put(Attributes.LABEL, ResourceManagerUtil.getPropertyNotNull(
-        facesContext, "tobago", "datePickerOk"));
+    okButton.setLabel(ResourceManagerUtil.getPropertyNotNull(facesContext, "tobago", "datePickerOk"));
+    okButton.setOnclick("writeIntoField2(this);");
+    okButton.getAttributes().put(Attributes.POPUP_CLOSE, "afterSubmit");
 
-    final UIButton cancelButton = (UIButton)
-        CreateComponentUtils.createComponent(facesContext, UIButton.COMPONENT_TYPE, RendererTypes.BUTTON);
+    final UIButton cancelButton = (UIButton) CreateComponentUtils.createComponent(
+        facesContext, UIButton.COMPONENT_TYPE, RendererTypes.BUTTON, "cancel");
     buttonPanel.getChildren().add(cancelButton);
+    cancelButton.setLabel(ResourceManagerUtil.getPropertyNotNull(facesContext, "tobago", "datePickerCancel"));
+    cancelButton.setOnclick( "writeIntoField2(this);");
+    cancelButton.getAttributes().put(Attributes.POPUP_CLOSE, "immediate");
 
-    cancelButton.getAttributes().put(Attributes.LABEL, ResourceManagerUtil.getPropertyNotNull(
-        facesContext, "tobago", "datePickerCancel"));
-    cancelButton.setId(CLOSE_POPUP);
+    buttonPanel.onComponentPopulated(facesContext);
 
     // create image
-    UIImage image = (UIImage)
-        CreateComponentUtils.createComponent(facesContext, UIImage.COMPONENT_TYPE, RendererTypes.IMAGE);
+    // check the id: its might be better not calling createUniqueId
+    final String imageId = linkId != null ? linkId + "image" : facesContext.getViewRoot().createUniqueId();
+    final UIImage image = (UIImage) CreateComponentUtils.createComponent(
+        facesContext, UIImage.COMPONENT_TYPE, RendererTypes.IMAGE, imageId);
     image.setRendered(true);
-    if (linkId != null) {
-      image.setId(linkId + "image");
-    } else {
-      image.setId(facesContext.getViewRoot().createUniqueId());
-    }
     image.setValue("image/date.gif");
-    image.getAttributes().put(Attributes.ALT, ""); //TODO: i18n
+    image.setAlt(""); //TODO: i18n (write a text)
     StyleClasses.ensureStyleClasses(image).addFullQualifiedClass("tobago-input-picker"); // XXX not a standard name
     picker.getChildren().add(image);
   }
 
 
+  @Override
   public void prepareRender(FacesContext facesContext, UIComponent component) throws IOException {
     UIDatePicker picker = (UIDatePicker) component;
     // todo: use Measure instead of int
+    // todo: call setWidth ???
     picker.getAttributes().put(
-        Attributes.LAYOUT_WIDTH, 
+        Attributes.LAYOUT_WIDTH,
         getResourceManager().getThemeMeasure(facesContext, picker, "pickerWidth").getPixel());
     if (facesContext instanceof TobagoFacesContext) {
       UIPopup popup = (UIPopup) picker.getFacets().get(Facets.PICKER_POPUP);
@@ -203,6 +179,7 @@ public class DatePickerRenderer extends 
     super.prepareRender(facesContext, picker);
   }
 
+  @Override
   public void encodeBegin(FacesContext facesContext, UIComponent component) throws IOException {
     UIDatePicker picker = (UIDatePicker) component;
 //    DatePickerController datePickerController = new DatePickerController();
@@ -242,16 +219,6 @@ public class DatePickerRenderer extends 
       //    + converterPattern);
     }
 
-    UICommand okButton = (UICommand) popup.findComponent("ok" + CLOSE_POPUP);
-    attributes = okButton.getAttributes();
-    attributes.put(Attributes.ONCLICK, "writeIntoField2(this);");
-    attributes.put(Attributes.POPUP_CLOSE, "afterSubmit");
-
-    UICommand cancelButton = (UICommand) popup.findComponent(CLOSE_POPUP);
-    attributes = cancelButton.getAttributes();
-    attributes.put(Attributes.ONCLICK, "writeIntoField2(this);");
-    attributes.put(Attributes.POPUP_CLOSE, "immediate");
-
     applyConverterPattern(facesContext, popup, converterPattern);
 
     if (!ComponentUtils.containsPopupActionListener(picker)) {
@@ -269,7 +236,7 @@ public class DatePickerRenderer extends 
       popupHeight = popupHeight.add(getResourceManager().getThemeMeasure(facesContext, time, "preferredHeight"));
       popup.setHeight(popupHeight);
       DateTimeConverter dateTimeConverter
-          = (DateTimeConverter) facesContext.getApplication().createConverter(CONVERTER_ID);
+          = (DateTimeConverter) facesContext.getApplication().createConverter(DateTimeConverter.CONVERTER_ID);
       if (converterPattern.indexOf('s') > -1) {
         dateTimeConverter.setPattern("HH:mm:ss");
       } else {
@@ -282,6 +249,7 @@ public class DatePickerRenderer extends 
     }
   }
 
+  @Override
   public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException {
     UIDatePicker link = (UIDatePicker) component;
     UIDate dateInput = (UIDate) link.getForComponent();

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PopupRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PopupRenderer.java?rev=927912&r1=927911&r2=927912&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PopupRenderer.java (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PopupRenderer.java Fri Mar 26 15:21:39 2010
@@ -19,23 +19,19 @@ package org.apache.myfaces.tobago.render
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.tobago.component.Attributes;
-import org.apache.myfaces.tobago.component.UIPage;
 import org.apache.myfaces.tobago.component.UIPopup;
-import org.apache.myfaces.tobago.context.ResourceManagerUtil;
 import org.apache.myfaces.tobago.context.TobagoFacesContext;
 import org.apache.myfaces.tobago.internal.ajax.AjaxInternalUtils;
 import org.apache.myfaces.tobago.internal.ajax.AjaxRenderer;
+import org.apache.myfaces.tobago.internal.component.AbstractUIPage;
 import org.apache.myfaces.tobago.internal.layout.LayoutContext;
-import org.apache.myfaces.tobago.layout.Measure;
 import org.apache.myfaces.tobago.renderkit.LayoutComponentRendererBase;
-import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
+import org.apache.myfaces.tobago.renderkit.css.Style;
 import org.apache.myfaces.tobago.renderkit.html.HtmlConstants;
 import org.apache.myfaces.tobago.renderkit.html.StyleClasses;
 import org.apache.myfaces.tobago.renderkit.html.util.HtmlRendererUtils;
 import org.apache.myfaces.tobago.renderkit.util.RenderUtil;
 import org.apache.myfaces.tobago.util.ComponentUtils;
-import org.apache.myfaces.tobago.util.VariableResolverUtils;
 import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
 
 import javax.faces.component.UIComponent;
@@ -57,6 +53,11 @@ public class PopupRenderer extends Layou
     if (facesContext instanceof TobagoFacesContext) {
       ((TobagoFacesContext) facesContext).getPopups().add((UIPopup) component);
     }
+
+    // TODO: where to put this code, it is good here?
+    TobagoFacesContext tobagoContext = (TobagoFacesContext) facesContext;
+    tobagoContext.getScriptBlocks().add("jQuery(document).ready(function() {Tobago.setupPopup();});");
+
     super.prepareRender(facesContext, component);
   }
 
@@ -68,6 +69,7 @@ public class PopupRenderer extends Layou
 
 // LAYOUT Begin
 
+    // todo: remove time logging
     long begin = System.nanoTime();
     LayoutContext layoutContext = new LayoutContext(popup);
     layoutContext.layout();
@@ -76,111 +78,45 @@ public class PopupRenderer extends Layou
 // LAYOUT End
 
     final String clientId = popup.getClientId(facesContext);
-    final String contentDivId = clientId + ComponentUtils.SUB_SEPARATOR + "content";
-    //final String left = popup.getLeft();
-    //final String top = popup.getTop();
-    Integer zIndex = (Integer) popup.getAttributes().get(Attributes.Z_INDEX);
-    if (zIndex == null) {
-      zIndex = 0;
-    }
 
-    final StringBuilder contentStyle = new StringBuilder(32);
-    if (popup.getCurrentWidth() != null) {
-      contentStyle.append("width: ");
-      contentStyle.append(popup.getCurrentWidth().getPixel());
-      contentStyle.append("; ");
-    }
-    if (popup.getCurrentHeight() != null) {
-      contentStyle.append("height: ");
-      contentStyle.append(popup.getCurrentHeight().getPixel());
-      contentStyle.append("; ");
+    // XXX May be computed in the "Layout Manager Phase"
+    AbstractUIPage page = ComponentUtils.findPage(facesContext);
+    if (popup.getLeft() == null) {
+      popup.setLeft(page.getWidth().subtract(popup.getWidth()).divide(2));
     }
-    contentStyle.append("z-index: ");
-    contentStyle.append(zIndex + 3);
-    contentStyle.append("; ");
-    //contentStyle.append("left: ");
-    //contentStyle.append(left);
-    //contentStyle.append("; ");
-    //contentStyle.append("top: ");
-    //contentStyle.append(top);
-    //contentStyle.append("; ");
-    if (popup.isModal()) {
-      writer.startElement(HtmlConstants.DIV, popup);
-      writer.writeIdAttribute(clientId);
-      writer.writeStyleAttribute("z-index: " + (zIndex + 1) + ";");
-      writer.writeClassAttribute();
-      writer.writeAttribute(HtmlAttributes.ONCLICK, "Tobago.popupBlink('" + clientId + "')", null);
-      if (VariableResolverUtils.resolveClientProperties(facesContext).getUserAgent().isMsie()) {
-        String bgImage = ResourceManagerUtil.getImageWithPath(facesContext, "image/popupBg.png");
-        writer.writeAttribute(HtmlAttributes.STYLE, "background: none; "
-            + "filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
-          + bgImage + "', sizingMethod='scale');", false);
-      }
-      writer.endElement(HtmlConstants.DIV);
-    }
-    if (VariableResolverUtils.resolveClientProperties(facesContext).getUserAgent().isMsie()) {
-      writer.startElement(HtmlConstants.IFRAME, popup);
-      writer.writeIdAttribute(clientId + ComponentUtils.SUB_SEPARATOR + HtmlConstants.IFRAME);
-      writer.writeClassAttribute("tobago-popup-iframe tobago-popup-none");
-      writer.writeStyleAttribute("z-index: " + (zIndex + 2) + ";");
-      UIPage page = (UIPage) ComponentUtils.findPage(facesContext);
-      if (popup.isModal()) {
-        final StringBuilder frameSize = new StringBuilder(32);
-        // full client area
-        frameSize.append("width: ");
-        frameSize.append(page.getCurrentWidth().getPixel());
-        frameSize.append("; ");
-        frameSize.append("height: ");
-        frameSize.append(page.getCurrentHeight().getPixel());
-        frameSize.append("; ");
-        writer.writeAttribute(HtmlAttributes.STYLE, frameSize.toString(), false);
-      } else {
-        writer.writeAttribute(HtmlAttributes.STYLE, contentStyle.toString(), false); // size of the popup
-      }
-
-      writer.writeAttribute(HtmlAttributes.SRC, ResourceManagerUtil.getBlankPage(facesContext), false);
-      writer.writeAttribute(HtmlAttributes.FRAMEBORDER, "0", false);
-      writer.endElement(HtmlConstants.IFRAME);
+    if (popup.getTop() == null) {
+      popup.setTop(page.getHeight().subtract(popup.getWidth()).divide(2));
     }
+
     writer.startElement(HtmlConstants.DIV, popup);
-    writer.writeIdAttribute(contentDivId);
-    StyleClasses styleClasses = new StyleClasses();
-    styleClasses.addClass("popup", "content");
-    styleClasses.addClass("popup", "none");
+    writer.writeIdAttribute(clientId);
+    Style style = new Style(facesContext, popup);
+    Integer zIndex = popup.getZIndex();
+    if (zIndex == null) {
+      zIndex = 100;
+      LOG.warn("No z-index found for UIPopup. Set to " + zIndex);
+    }
+    style.setZIndex(zIndex);
+    writer.writeStyleAttribute(style);
+    StyleClasses styleClasses = StyleClasses.ensureStyleClasses(popup);
     if (popup.isModal()) {
       styleClasses.addClass("popup", "modal");
     }
     writer.writeClassAttribute(styleClasses);
-
-    writer.writeAttribute(HtmlAttributes.STYLE, contentStyle.toString(), false);
   }
 
   @Override
   public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException {
     TobagoResponseWriter writer = HtmlRendererUtils.getTobagoResponseWriter(facesContext);
-    UIPopup popup = (UIPopup) component;
-    final String clientId = popup.getClientId(facesContext);
-
     writer.endElement(HtmlConstants.DIV);
-
-    writer.startJavascript();
-    writer.write("Tobago.setupPopup('");
-    writer.write(clientId);
-    writer.write("', ");
-    final Measure left = popup.getLeft();
-    writer.write(left != null ? Integer.toString(left.getPixel()) : "null");
-    writer.write(", ");
-    final Measure top = popup.getTop();
-    writer.write(top != null ? Integer.toString(top.getPixel()) : "null");
-    writer.write(", ");
-    writer.write(String.valueOf(popup.isModal()));
-    writer.write(");");
-    writer.endJavascript();
   }
 
   public void encodeAjax(FacesContext facesContext, UIComponent component) throws IOException {
     AjaxInternalUtils.checkParamValidity(facesContext, component, UIPopup.class);
     RenderUtil.encode(facesContext, component);
+    TobagoResponseWriter writer = HtmlRendererUtils.getTobagoResponseWriter(facesContext);
+    writer.startJavascript();
+    writer.write("Tobago.setupPopup();");
+    writer.endJavascript();
   }
 }
-

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/script/tobago-menu.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/script/tobago-menu.js?rev=927912&r1=927911&r2=927912&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/script/tobago-menu.js (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/script/tobago-menu.js Fri Mar 26 15:21:39 2010
@@ -214,6 +214,10 @@ function xxx_tobagoMenuInit() {
     // a click on the top menu make the complete menu active or inactive respectively.
     jQuery(".tobago-menu-top").click(function(event) {
 
+      // e. g. disabled by a popup
+      if($(this).children("a").attr("disabled")) {
+        return;
+      }
       // register on click handlers
       var menuBar = jQuery(this).parent();
       var wasActive = 'true' == menuBar.attr('menu-active'); // read state

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css?rev=927912&r1=927911&r2=927912&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/resources/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/style/style.css Fri Mar 26 15:21:39 2010
@@ -561,21 +561,22 @@ label.tobago-label-inline {
   left: 0;
   overflow: auto;
   position: absolute;
+  z-index: 0;
 }
 
-/* popup-------------------------------------------------------------- */
+/* popup -------------------------------------------------------------- */
 
-.tobago-popup-default {
+.tobago-popup-shield {
   cursor: wait;
   width: 100%;
   height: 100%;
-  position: absolute;
+  position: fixed;
   top: 0;
-  left: 0; /*background: url(../../standard/image/popupBg.png);*/
+  left: 0;
+  z-index: -1;
   opacity: .40;
   background: url( ../image/popupBg.png );
   filter: alpha( opacity = 40 );
-  -moz-opacity: 0.4;
 }
 
 .tobago-popup-blink {
@@ -591,28 +592,6 @@ label.tobago-label-inline {
   filter: progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0);
 }
 
-.tobago-popup-content {
-  border-width: 0;
-  background: #bbccdd;
-  position: absolute;
-  cursor: default;
-  box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  -moz-background-clip: initial;
-  -moz-background-origin: initial;
-  -moz-background-inline-policy: initial;
-}
-
-.tobago-popup-none {
-  display: none;
-}
-
-.tobago-popup-parent {
-  position: absolute;
-  top: 0;
-  left: 0;
-}
-
 /* richTextEditor ---------------------------------------------------------- */
 
 .tobago-richTextEditor-default {
@@ -1101,7 +1080,6 @@ li.tobago-menu-selected {
   position: absolute;
   width: 100%;
   background-color: #aabbcc;
-/*  z-index: 1000; /* todo */
 }
 
 .tobago-page-menuStore {
@@ -1110,7 +1088,7 @@ li.tobago-menu-selected {
   width: 0;
   height: 0;
   position: absolute;
-/*  z-index: 1000; /* todo */
+  z-index: 1000;
 }
 
 .tobago-menuBar-default ol, 

Modified: myfaces/tobago/trunk/theme/speyside/src/main/resources/org/apache/myfaces/tobago/renderkit/html/speyside/standard/style/style.css
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/speyside/src/main/resources/org/apache/myfaces/tobago/renderkit/html/speyside/standard/style/style.css?rev=927912&r1=927911&r2=927912&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/speyside/src/main/resources/org/apache/myfaces/tobago/renderkit/html/speyside/standard/style/style.css (original)
+++ myfaces/tobago/trunk/theme/speyside/src/main/resources/org/apache/myfaces/tobago/renderkit/html/speyside/standard/style/style.css Fri Mar 26 15:21:39 2010
@@ -53,7 +53,7 @@ table {
 }
 
 /*-- Popup ------------------------------------------------------------------ */
-.tobago-popup-content  {
+.tobago-popup-default  {
   background: #E2E2E2;
 }
 

Modified: myfaces/tobago/trunk/theme/standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js?rev=927912&r1=927911&r2=927912&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js (original)
+++ myfaces/tobago/trunk/theme/standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago.js Fri Mar 26 15:21:39 2010
@@ -231,17 +231,6 @@ var Tobago = {
 
   isSubmit: false,
 
-
-  /**
-    * The id of a initially loaded popup (not by ajax)
-    */
-  initialPopupId: null,
-
-  /**
-    * Count of currently open popups
-    */
-  openPopups: new Array(),
-
   initMarker: false,
 
   // -------- Functions -------------------------------------------------------
@@ -306,11 +295,7 @@ var Tobago = {
       TbgTimer.endScriptLoaders = new Date();
     }
     Tobago.pageIsComplete = true;
-    if (Tobago.initialPopupId != null) {
-      Tobago.lockPopupPage(Tobago.initialPopupId);
-    } else {
-      Tobago.setFocus();
-    }
+    Tobago.setFocus();
     if (TbgTimer.endBody) {
       TbgTimer.endTotal = new Date();
       TbgTimer.log();
@@ -523,14 +508,7 @@ var Tobago = {
 
     Tobago.setActionPosition(source);
 
-    if (Tobago.openPopups.length > 0 ) {
-      // enable all elements on page when this is a submit from a popup
-      // (disabled input elements are not submitted)
-      for (i = 0; i < document.forms[0].elements.length; i++) {
-        var element = document.forms[0].elements[i];
-        element.disabled = false;
-      }
-    }
+    Tobago.unlockBehindPopup();
 
     Tobago.Transport.request(function() {
       if (!this.isSubmit) {
@@ -935,101 +913,80 @@ var Tobago = {
     // TODO move popup functions into Tobago.Popup object
 
   /**
-    * Setup popup size
-   *  @param id String
-   *  @param left int or null
-   *  @param top int or null
-   *  @param modal boolean or null
-    */
-  setupPopup: function(id, left, top, modal) {
-//    alert("tobagoSetupPopup('" + id + "', '" + left + "', '"+ top + "')");
-    var hidden = Tobago.element(id + Tobago.SUB_COMPONENT_SEP + "hidden");
-    if (hidden && hidden.type == "hidden") {
-      hidden.parentNode.removeChild(hidden);
-    }
-
-    // extend background into scrollable area
-    var background = this.element(id);
-    if (background) {
-      background.style.width = Math.max(document.body.scrollWidth, document.body.clientWidth) + 'px';
-      background.style.height = Math.max(document.body.scrollHeight, document.body.clientHeight) + 'px';
-      this.popupResizeStub = function() {Tobago.doResizePopupBackground(id);};
-      Tobago.addEventListener(window, "resize", this.popupResizeStub);
-    }
-    
-    var contentId = id + Tobago.SUB_COMPONENT_SEP + "content";
-    var div = jQuery(Tobago.escapeClientId(contentId));
-    if (div) {
+   * Setup popup size
+   */
+  setupPopup: function() {
 
-      // XXX removing the class would be better after setting the position, but
-      // XXX div.children().outerWidth() doesn't work in that case (which is used in the next lines).
-      div.removeClass("tobago-popup-none");
-      
-      // calculate left, if lack
-      if (left == null) {
-        left = (jQuery(window).width() - div.children().outerWidth()) / 2;
-      }
-  
-      // calculate top, if lack
-      if (top == null) {
-        top = (jQuery(window).height() - div.children().outerHeight()) / 2;
-      }
+    // TODO: remove later (after change AJAX, that they replace tags instead of fill them...)
+    jQuery(".tobago-popup-parent > .tobago-popup-default").unwrap();
 
-//      alert("Setting offset of popup: left to '" + left + "' and top to '" + top + "'");
-      div.offset({ left: left, top: top });
-      
-      // iframe is used in IE, because the <select> tags would shining through.
-      var iframeId = id + Tobago.SUB_COMPONENT_SEP + "iframe";
-      var iframe = jQuery(Tobago.escapeClientId(iframeId));
-      if (iframe) {
-        if (!modal) {
-          iframe.offset({ left: left, top: top });
-        }
-        iframe.removeClass("tobago-popup-none");
-      }
-    }
+    // The shield is a protection against clicking controls, which are not allowed to click in the modal case.
+    // The shield also makes an optical effect (alpha blending).
 
-    if (!Tobago.pageIsComplete) {
-      // Popup is loaded during page loading
-      Tobago.initialPopupId = id;
-    } else {
-      var contains = false;
-      for(var i = 0; i < Tobago.openPopups.length; i++) {
-        if (Tobago.openPopups[i] == id) {
-          contains = true;
-        }
-      }
-      if (!contains && modal) {
-        // Popup is loaded by ajax
-        Tobago.lockPopupPage(id);
+    // remove all old shields
+    jQuery(".tobago-popup-shield").remove();
+
+    // find highest modal popup
+    var maxZIndex = -Infinity;
+    var maxModalPopup = null;
+    jQuery(".tobago-popup-modal").each(function() {
+      var zIndex = jQuery(this).css("z-index");
+      if (zIndex >= maxZIndex) {
+        maxZIndex = zIndex;
+        maxModalPopup = jQuery(this);
+      }
+    });
+
+    // add the new shield to the highest modal popup
+    if (maxModalPopup != null && maxModalPopup.size() > 0) { // same as == 1
+
+      maxModalPopup.prepend("<div class='tobago-popup-shield' onclick='Tobago.popupBlink(this)'/>");
+      var shield = maxModalPopup.children(".tobago-popup-shield");
+      shield.attr("id", maxModalPopup.attr("id") + "::shield");
+
+      // IE6 doesn't support position:fixed
+      if (jQuery.browser.msie && parseInt(jQuery.browser.version) <= 6) {
+        shield.css({
+          position: "absolute",
+          left: -maxModalPopup.offset().left,
+          top: -maxModalPopup.offset().top,
+          width: jQuery(window).width(),
+          height: jQuery(window).height(),
+          background: "none",
+          filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
+              + Tobago.OVERLAY_BACKGROUND + "', sizingMethod='scale');"
+        });
+
+        // IE6 needs an iframe to protect the other controls and protect against select-tag shining through.
+        maxModalPopup.prepend("<iframe class='tobago-popup-iframe'/>");
+        var iframe = maxModalPopup.children(".tobago-popup-iframe");
+        iframe.css({
+          position: "absolute",
+          left: -maxModalPopup.offset().left,
+          top: -maxModalPopup.offset().top,
+          width: jQuery(window).width(),
+          height: jQuery(window).height()
+        })
       }
-    }
-    var contains = false;
-    for(var i = 0; i < Tobago.openPopups.length; i++) {
-      if (Tobago.openPopups[i] == id) {
-        contains = true;
-      }
-    }
-    if (!contains&& modal) {
-      Tobago.openPopups.push(id);
-    }
 
-    //LOG.info("OpenPopupCount " + Tobago.openPopups);
+      // disable the page and all popups behind the highest modal popup
+      Tobago.lockBehindPopup(maxModalPopup.get(0));
+    }
   },
 
   /**
     * Locks the parent page of a popup when it is opened
     */
-  lockPopupPage: function(id) {
+  lockBehindPopup: function(popup) {
     // disable all elements and anchors on page not initially disabled and
     // store their ids in a hidden field
+    var id = popup.id;
     var hidden = Tobago.element(id + Tobago.SUB_COMPONENT_SEP + "disabledElements");
     if (hidden == null) {
       hidden = document.createElement("input");
       hidden.id = id + Tobago.SUB_COMPONENT_SEP + "disabledElements";
-      hidden.name = id;
       hidden.type = "hidden";
-      document.forms[0].appendChild(hidden);
+      popup.appendChild(hidden);
     }
     hidden.value = ",";
     var firstPopupElement = null;
@@ -1037,7 +994,7 @@ var Tobago = {
       var element = document.forms[0].elements[i];
       if (element.type != "hidden" && !element.disabled) {
         if (element.id) {
-          if (element.id.indexOf(id + ":") != 0) {
+          if (element.id.indexOf(id + ":") != 0) { // not starts with
             element.disabled = true;
             hidden.value += element.id + ",";
           } else {
@@ -1048,11 +1005,12 @@ var Tobago = {
         }
       }
     }
-    for (i = 0; i < document.anchors.length; i++) {
-      var element = document.anchors[i];
+    var anchors = document.getElementsByTagName('a');
+    for (i = 0; i < anchors.length; i++) {
+      var element = anchors[i];
       if (!element.disabled) {
         if (element.id) {
-          if (element.id.indexOf(id + ":") != 0) {
+          if (element.id.indexOf(id + ":") != 0) { // not starts with
              element.disabled = true;
              hidden.value += element.id + ",";
           } else {
@@ -1071,100 +1029,48 @@ var Tobago = {
     }
   },
 
-  popupResizeStub: null,
-
-  doResizePopupBackground: function(id) {
-    var background = Tobago.element(id);
-    if (background) {
-      background.style.width = Math.max(document.body.scrollWidth, document.body.clientWidth) + 'px';
-      background.style.height = Math.max(document.body.scrollHeight, document.body.clientHeight) + 'px';
-    }
-  },
-
   /**
    * Make popup blink
    */
-  popupBlink: function(id) {
-    LOG.debug("popupId ist " + id);
+  popupBlink: function(element) {
+    var id = jQuery(element).attr("id");
+    LOG.debug("Blink: Popup id is '" + id + "'");
     Tobago.addCssClass(id, "tobago-popup-blink");
-    setTimeout("Tobago.removeCssClass('" + id + "', 'tobago-popup-blink')", 10);
+    setTimeout("Tobago.removeCssClass('" + id + "', 'tobago-popup-blink')", 30);
   },
 
   /**
    * remove a popup without request
    */
   closePopup: function(element) {
-    var div;
-    var id;
-    if (typeof element == "string") {
-      id = element;
-    } else if (typeof element == "object" && element.tagName) {
-      div = Tobago.findAnchestorWithTagName(element, "DIV");
-      while (div && div.className && div.className.indexOf("tobago-popup-content") == -1) {
-        div = Tobago.findAnchestorWithTagName(div.parentNode, "DIV");
-      }
-      if (div) {
-        var re = new RegExp(Tobago.SUB_COMPONENT_SEP + "content$");
-        id = div.id.replace(re, "");
-      }
-    }
-
-    div = Tobago.element(id + "parentDiv");
-    if (div) {
-      // created by ajax
-      div.parentNode.removeChild(div);
-    } else if (id) {
-      div = Tobago.element(id);
-      if (div) {
-        div.parentNode.removeChild(div);
-      }
-      div = Tobago.element(id + this.SUB_COMPONENT_SEP + "content");
-      if (div) {
-        div.parentNode.removeChild(div);
-      }
-      div = Tobago.element(id + this.SUB_COMPONENT_SEP + "iframe");
-      if (div) {
-        div.parentNode.removeChild(div);
-      }
-    } else {
-      LOG.error("Cannot close popup ");
-    }
-
-    var hidden = document.createElement("input");
-    hidden.id = id + Tobago.SUB_COMPONENT_SEP + "hidden";
-    hidden.name = id;
-    hidden.type = "hidden";
-    hidden.value = "closed";
-    Tobago.form.appendChild(hidden);
-
-    Tobago.removeEventListener(window, "resize", Tobago.popupResizeStub);
-    Tobago.popupResizeStub = null;
-    //LOG.info("unlockPopupPage " + id);
-    Tobago.unlockPopupPage(id);
-    Tobago.openPopups.pop();
-    //LOG.info("OpenPopupCount " + Tobago.openPopups);
-
-    // reset focus when last popup was closed
-    if (Tobago.openPopups.length == 0) {
-      Tobago.setFocus();
-    }
+    Tobago.unlockBehindPopup();
+    var popup = $(element).parents("div.tobago-popup-default:first");
+    popup.remove();
+    Tobago.setupPopup();
   },
 
   /**
     * Unlock the parent page of a popup when it is closed
     */
-  unlockPopupPage: function(id) {
+  unlockBehindPopup: function() {
+    var maxModalPopup = jQuery(".tobago-popup-shield").parent();
+    if (maxModalPopup.size() == 0) { // there is no modal popup
+      return;
+    }
+    var id = maxModalPopup.attr("id");
     // enable all elements and anchors on page stored in a hidden field
+    var element;
     var hidden = Tobago.element(id + Tobago.SUB_COMPONENT_SEP + "disabledElements");
     if (hidden != null && hidden.value != "") {
      for (var i = 0; i < document.forms[0].elements.length; i++) {
-       var element = document.forms[0].elements[i];
+       element = document.forms[0].elements[i];
        if (hidden.value.indexOf("," + element.id + ",") >= 0) {
          element.disabled = false;
        }
      }
-     for (i = 0; i < document.anchors.length; i++) {
-       var element = document.anchors[i];
+     var anchors = document.getElementsByTagName('a');
+     for (i = 0; i < anchors.length; i++) {
+       element = anchors[i];
        if (hidden.value.indexOf("," + element.id + ",") >= 0) {
          element.disabled = false;
        }
@@ -1192,10 +1098,6 @@ var Tobago = {
     }
 
     Tobago.addAjaxComponent(popupId, div.id);
-    var newOptions = {createOverlay: false}
-    if (options) {
-      Tobago.extend(newOptions, options);
-    }
     Tobago.reloadComponent(source, popupId, actionId, options);
   },
 
@@ -1745,7 +1647,7 @@ var Tobago = {
       if (typeof arg == 'string') {
 //        LOG.debug("arg is string ");
         return document.getElementById(arg);
-      } else if (typeof arg.currentTarget == 'object') {
+      } else if (typeof arg.currentjTarget == 'object') {
 //        LOG.debug("arg is DOM event ");
         return arg.currentTarget;
       } else if (typeof arg.srcElement == 'object') {
@@ -2454,6 +2356,7 @@ Tobago.Updater = {
     if (data.responseCode == Tobago.Updater.CODE_SUCCESS) {
       var container = Tobago.ajaxComponents[data.ajaxId];
       if (container) {
+// TODO: replace the object instead of replace the content, but for that we have to change the renderers.
         container = Tobago.element(container);
         container.innerHTML = data.html;
         try {
@@ -2512,8 +2415,6 @@ Tobago.Updater = {
       }
 
       Tobago.Updater.handleMissingResponses(requestOptions.ajaxComponentIds, doneIds);
-
-
     },
 
     handleMissingResponses: function(ids, doneIds) {