Author: nbelaevski
Date: 2010-09-18 19:11:09 -0400 (Sat, 18 Sep 2010)
New Revision: 19255
Added:
trunk/examples/output-demo/src/main/webapp/qunit/tab.xhtml
trunk/examples/output-demo/src/main/webapp/resources/tests/richfaces-accordion-item-qunit.js
trunk/examples/output-demo/src/main/webapp/resources/tests/richfaces-tab-qunit.js
trunk/ui/output/ui/src/main/java/org/richfaces/component/AbstractTabPanel.java
trunk/ui/output/ui/src/main/java/org/richfaces/component/html/HtmlTab.java
trunk/ui/output/ui/src/main/java/org/richfaces/component/html/HtmlTabPanel.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabPanelRenderer.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabRenderer.java
trunk/ui/output/ui/src/test/java/org/richfaces/component/UICollapsiblePanelTest.java
trunk/ui/output/ui/src/test/java/org/richfaces/component/UITogglePanelTitledItemTest.java
Modified:
trunk/
Log:
Merged revisions 19109-19110,19113,19160,19199 via svnmerge from
https://svn.jboss.org/repos/richfaces/branches/RF-7944
Property changes on: trunk
___________________________________________________________________
Name: svnmerge-integrated
- /branches/RF-7944:1-18996
+ /branches/RF-7944:1-19249
Copied: trunk/examples/output-demo/src/main/webapp/qunit/tab.xhtml (from rev 19199,
branches/RF-7944/examples/output-demo/src/main/webapp/qunit/tab.xhtml)
===================================================================
--- trunk/examples/output-demo/src/main/webapp/qunit/tab.xhtml
(rev 0)
+++ trunk/examples/output-demo/src/main/webapp/qunit/tab.xhtml 2010-09-18 23:11:09 UTC
(rev 19255)
@@ -0,0 +1,259 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html
xmlns="http://www.w3.org/1999/xhtml"
+
xmlns:h="http://java.sun.com/jsf/html"
+
xmlns:f="http://java.sun.com/jsf/core"
+
xmlns:ui="http://java.sun.com/jsf/facelets"
+
xmlns:pn="http://richfaces.org/output">
+
+<body>
+<ui:composition template="/templates/template.xhtml">
+
+ <ui:define name="scripts">
+ <h:outputScript name="qunit/qunit.js" />
+ <h:outputScript name="qunit/richfaces-qunit.js" />
+
+ <h:outputScript name="Tab.js" />
+ <h:outputScript name="TabPanel.js" />
+
+ <h:outputStylesheet name="qunit/qunit.css" />
+ </ui:define>
+
+ <ui:define name="title">Tab Example</ui:define>
+ <ui:define name="body_head">Tab Example</ui:define>
+
+ <ui:define name="body">
+ <p>Page</p>
+
+ <h:form id="f" style="border:blue solid thin;">
+ <pn:accordion >
+ <pn:accordionItem></pn:accordionItem>
+ </pn:accordion>
+
+ <div id="f:panel" style="width: 100%;">
+ <input type="hidden" name="f:panel-value"
id="f:panel-value" value="name1" />
+ <script type="text/javascript">
+ new RichFaces.ui.TabPanel(
+ "f:panel",
+ {
+
"onbeforeitemchange":function(event){RichFaces.ajax("f:panel",event,{"incId":"1"}
)},
+
"onitemchange":function(event){RichFaces.ajax("f:panel",event,{"incId":"1"}
)},
+ "activeItem":"name1",
+ "ajax":{"incId":"1"} ,
+ "cycledSwitching":false,
+ "isKeepHeight":true
+ }
+ )
+
+ </script>
+
+ <div id="f:panel:header"
class="rftp_toptab_tabline_vis">
+ <div class="rftp_toptab_tabs">
+ <div style="display: table-row;">
+ <div style="padding-left: 5px;"
class="rftp_toptab_spacer" ></div>
+
+ <div id="f:name1:header">
+ <div id="f:name1:header:active"
class="rftp_toptab rftp_active_top">
+ <div style="display: table;">
+ <div style="display:
table-row;">
+ <div class="rftp_icon">
+ <img width="16"
height="16" src="ico.gif" alt=""/>
+ </div>
+ <div class="rftp_label">Tab
name 1 Active</div>
+ <div class="rftp_close">
+ <img width="16"
height="16" src="close.gif" alt=""/>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="f:name1:header:inactive"
style="display:none" class="rftp_toptab rftp_active_top">
+ <div style="display: table;">
+ <div style="display:
table-row;">
+ <div class="rftp_icon">
+ <img width="16"
height="16" src="ico.gif" alt=""/>
+ </div>
+ <div class="rftp_label">Tab
name 1 Inactive</div>
+ <div class="rftp_close">
+ <img width="16"
height="16" src="close.gif" alt=""/>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="f:name1:header:disabled"
style="display:none" class="rftp_toptab rftp_active_top">
+ <div style="display: table;">
+ <div style="display:
table-row;">
+ <div class="rftp_icon">
+ <img width="16"
height="16" src="ico.gif" alt=""/>
+ </div>
+ <div class="rftp_label">Tab
name 1 Disabled</div>
+ <div class="rftp_close">
+ <img width="16"
height="16" src="close.gif" alt=""/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="rftp_toptab_spacer
rftp_horizonttab_tabspacer_width"></div>
+
+ <div id="f:name2:header">
+ <div id="f:name2:header:active"
style="display:none" class="rftp_toptab">
+ <div style="display: table;">
+ <div style="display:
table-row;">
+ <div class="rftp_icon">
+ <img width="16"
height="16" src="ico.gif" alt="" />
+ </div>
+ <div class="rftp_label">Tab
name 2 Active</div>
+ <div class="rftp_close">
+ <img width="16"
height="16" src="close_act.gif" alt="" />
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="f:name2:header:inactive"
class="rftp_toptab">
+ <div style="display: table;">
+ <div style="display:
table-row;">
+ <div class="rftp_icon">
+ <img width="16"
height="16" src="ico.gif" alt="" />
+ </div>
+ <div class="rftp_label">Tab
name 2 Inactive</div>
+ <div class="rftp_close">
+ <img width="16"
height="16" src="close_act.gif" alt="" />
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="f:name2:header:disabled"
style="display:none" class="rftp_toptab">
+ <div style="display: table;">
+ <div style="display:
table-row;">
+ <div class="rftp_icon">
+ <img width="16"
height="16" src="ico.gif" alt="" />
+ </div>
+ <div class="rftp_label">Tab
name 2 Disabled</div>
+ <div class="rftp_close">
+ <img width="16"
height="16" src="close_act.gif" alt="" />
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="rftp_toptab_spacer
rftp_horizonttab_tabspacer_width"></div>
+
+ <div id="f:name3:header">
+ <div id="f:name3:header:active"
style="display:none" class="rftp_toptab">
+ <div style="display: table;">
+ <div style="display:
table-row;">
+ <div class="rftp_icon">
+ <img width="16"
height="16" src="ico.gif" alt="" />
+ </div>
+ <div class="rftp_label">Tab
name 3 Active</div>
+ <div class="rftp_close">
+ <img width="16"
height="16" src="close_act.gif" alt="" />
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="f:name3:header:inactive"
class="rftp_toptab">
+ <div style="display: table;">
+ <div style="display:
table-row;">
+ <div class="rftp_icon">
+ <img width="16"
height="16" src="ico.gif" alt="" />
+ </div>
+ <div class="rftp_label">Tab
name 3 Inactive</div>
+ <div class="rftp_close">
+ <img width="16"
height="16" src="close_act.gif" alt="" />
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="f:name3:header:disabled"
style="display:none" class="rftp_toptab">
+ <div style="display: table;">
+ <div style="display:
table-row;">
+ <div class="rftp_icon">
+ <img width="16"
height="16" src="ico.gif" alt="" />
+ </div>
+ <div class="rftp_label">Tab
name 3 Disabled</div>
+ <div class="rftp_close">
+ <img width="16"
height="16" src="close_act.gif" alt="" />
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="rftp_toptab_spacer
rftp_horizonttab_tabspacer_width"></div>
+
+ <div style="padding-right: 5px; width: 100%;"
class="rftp_toptab_spacer"></div>
+ </div>
+ </div>
+
+ <div class="rftp_toptab_scroll_left
rftp_hidden">«</div>
+ <div class="rftp_toptab_tabslist
rftp_hidden">↓</div>
+ <div class="rftp_toptab_scroll_right
rftp_hidden">»</div>
+ </div>
+
+ <div class="rftp_toptab_border"></div>
+
+ <div id="f:panel:content" >
+ <div id="f:name1" class="rftp_toptab_content"
>
+ <script type="text/javascript">
+ new RichFaces.ui.Tab(
+ "f:name1",
+ {
+
"onleave":function(event){RichFaces.ajax("f:name1",event,{"incId":"1"}
)},
+
"onenter":function(event){RichFaces.ajax("f:name1",event,{"incId":"1"}
)},
+ "index":0,
+ "togglePanelId":"f:panel",
+ "switchMode":"client",
+ "name":"name1"
+ }
+ )
+ </script>
+ Content 01 will be here.
+ </div>
+ <div id="f:name2" class="rftp_toptab_content"
style="display:none;">
+ <script type="text/javascript">
+ new RichFaces.ui.Tab(
+ "f:name2",
+ {
+
"onleave":function(event){RichFaces.ajax("f:name2",event,{"incId":"1"}
)},
+
"onenter":function(event){RichFaces.ajax("f:name2",event,{"incId":"1"}
)},
+ "index":1,
+ "togglePanelId":"f:panel",
+ "switchMode":"client",
+ "name":"name2"
+ }
+ )
+ </script>
+ Content 02 will be here.
+ </div>
+ <div id="f:name3" class="rftp_toptab_content"
style="display:none;">
+ <script type="text/javascript">
+ new RichFaces.ui.Tab(
+ "f:name3",
+ {
+
"onleave":function(event){RichFaces.ajax("f:name3",event,{"incId":"1"}
)},
+
"onenter":function(event){RichFaces.ajax("f:name3",event,{"incId":"1"}
)},
+ "index":2,
+ "togglePanelId":"f:panel",
+ "switchMode":"client",
+ "name":"name3"
+ }
+ )
+ </script>
+ Content 03 will be here.
+ </div>
+ </div>
+ </div>
+
+ </h:form>
+
+ <p>Result</p>
+ <div>
+ <ol id="qunit-tests"></ol>
+
+ <div id="testDiv" style="margin-top:10px; border:1px solid
#a0a0a0">Main Test Div</div>
+ </div>
+ <h:outputScript name="tests/richfaces-tab-qunit.js" />
+ </ui:define>
+</ui:composition>
+</body>
+</html>
+
Copied:
trunk/examples/output-demo/src/main/webapp/resources/tests/richfaces-accordion-item-qunit.js
(from rev 19199,
branches/RF-7944/examples/output-demo/src/main/webapp/resources/tests/richfaces-accordion-item-qunit.js)
===================================================================
---
trunk/examples/output-demo/src/main/webapp/resources/tests/richfaces-accordion-item-qunit.js
(rev 0)
+++
trunk/examples/output-demo/src/main/webapp/resources/tests/richfaces-accordion-item-qunit.js 2010-09-18
23:11:09 UTC (rev 19255)
@@ -0,0 +1,76 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+RichFaces.QUnit.run(function() {
+ module("richfaces-accordion-item");
+
+ var ACCORDION_ITEM_ID = "f:panel";
+
+ test("RichFaces.ui.AccordionItem test constructor", function () {
+ var c = RichFaces.$(ACCORDION_ITEM_ID);
+
+ ok(c instanceof RichFaces.ui.AccordionItem, "inctance of
RichFaces.ui.AccordionItem");
+ equals(c.id, ACCORDION_ITEM_ID, "id");
+ // TODO other params
+
+ });
+
+ test("RichFaces.ui.AccordionItem test public api", function () {
+ var c = RichFaces.$(ACCORDION_ITEM_ID);
+
+ var PUBLIC_API = [/* ... */];
+
+ for (i in PUBLIC_API) {
+ var funcName = PUBLIC_API[i];
+ ok(c.[funcName], funcName + "present in component")
+ // TODO check other functions + check is it function
+ }
+ });
+
+ test("RichFaces.ui.AccordionItem test events", function () {
+ var componentId = ACCORDION_ITEM_ID;
+ var c = RichFaces.$(componentId);
+
+ expect(5);
+ var beforeitemchngeHandler = function (event, comp, data) {
+ ok(true, "beforeitemchnge handler invouked");
+
+ same(data.id, componentId, "component id");
+ same(data.oldItem.getName(), c.items[0].getName(), "old item");
+ same(data.newItem.getName(), c.items[1].getName(), "new item");
+
+ return true;
+ };
+
+ var beforeitemchngeHandlerWrapper = RichFaces.Event.bindById(componentId,
"beforeitemchange", beforeitemchngeHandler);
+
+ var itemchangeHandler = handler("itemchnge handler invouked",
undefined);
+ var itemchangeHandlerWrapper = RichFaces.Event.bindById(componentId,
"itemchange", itemchangeHandler);
+
+ c.switchToItem("name2");
+
+ RichFaces.Event.unbindById(componentId, "beforeitemchange",
beforeitemchngeHandlerWrapper);
+ RichFaces.Event.unbindById(componentId, "itemchange",
itemchangeHandlerWrapper);
+
+ c.switchToItem("name1");
+ });
+});
Added: trunk/examples/output-demo/src/main/webapp/resources/tests/richfaces-tab-qunit.js
===================================================================
--- trunk/examples/output-demo/src/main/webapp/resources/tests/richfaces-tab-qunit.js
(rev 0)
+++
trunk/examples/output-demo/src/main/webapp/resources/tests/richfaces-tab-qunit.js 2010-09-18
23:11:09 UTC (rev 19255)
@@ -0,0 +1,76 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+RichFaces.QUnit.run(function() {
+ module("richfaces-tab");
+
+ var TAB_ID = "f:panel";
+
+ test("RichFaces.ui.Tab test constructor", function () {
+ var c = RichFaces.$(TAB_ID);
+
+ ok(c instanceof RichFaces.ui.Tab, "inctance of RichFaces.ui.Tab");
+ equals(c.id, TAB_ID, "id");
+ // TODO other params
+
+ });
+
+ test("RichFaces.ui.Tab test public api", function () {
+ var c = RichFaces.$(TAB_ID);
+
+ var PUBLIC_API = [/* ... */];
+
+ for (var i in PUBLIC_API) {
+ var funcName = PUBLIC_API[i];
+ ok(c.[funcName], funcName + "present in component");
+ // TODO check other functions + check is it function
+ }
+ });
+
+ test("RichFaces.ui.Tab test events", function () {
+ var componentId = TAB_ID;
+ var c = RichFaces.$(componentId);
+
+ expect(5);
+ var beforeitemchngeHandler = function (event, comp, data) {
+ ok(true, "beforeitemchnge handler invouked");
+
+ same(data.id, componentId, "component id");
+ same(data.oldItem.getName(), c.items[0].getName(), "old item");
+ same(data.newItem.getName(), c.items[1].getName(), "new item");
+
+ return true;
+ };
+
+ var beforeitemchngeHandlerWrapper = RichFaces.Event.bindById(componentId,
"beforeitemchange", beforeitemchngeHandler);
+
+ var itemchangeHandler = handler("itemchnge handler invouked",
undefined);
+ var itemchangeHandlerWrapper = RichFaces.Event.bindById(componentId,
"itemchange", itemchangeHandler);
+
+ c.switchToItem("name2");
+
+ RichFaces.Event.unbindById(componentId, "beforeitemchange",
beforeitemchngeHandlerWrapper);
+ RichFaces.Event.unbindById(componentId, "itemchange",
itemchangeHandlerWrapper);
+
+ c.switchToItem("name1");
+ });
+});
Added: trunk/ui/output/ui/src/main/java/org/richfaces/component/AbstractTabPanel.java
===================================================================
--- trunk/ui/output/ui/src/main/java/org/richfaces/component/AbstractTabPanel.java
(rev 0)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/component/AbstractTabPanel.java 2010-09-18
23:11:09 UTC (rev 19255)
@@ -0,0 +1,48 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.richfaces.component;
+
+
+
+/**
+ * @author akolonitsky
+ * @since 2010-08-24
+ */
+public abstract class AbstractTabPanel extends UITogglePanel {
+
+ public static final String COMPONENT_TYPE = "org.richfaces.TabPanel";
+
+ public static final String COMPONENT_FAMILY = "org.richfaces.TabPanel";
+
+ protected AbstractTabPanel() {
+ setRendererType("org.richfaces.TabPanel");
+ }
+
+ @Override
+ public String getFamily() {
+ return COMPONENT_FAMILY;
+ }
+
+
+
+}
Added: trunk/ui/output/ui/src/main/java/org/richfaces/component/html/HtmlTab.java
===================================================================
--- trunk/ui/output/ui/src/main/java/org/richfaces/component/html/HtmlTab.java
(rev 0)
+++ trunk/ui/output/ui/src/main/java/org/richfaces/component/html/HtmlTab.java 2010-09-18
23:11:09 UTC (rev 19255)
@@ -0,0 +1,304 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.richfaces.component.html;
+
+import org.richfaces.component.UITogglePanelTitledItem;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * @author akolonitsky
+ * @since 2010-08-27
+ */
+public class HtmlTab extends UITogglePanelTitledItem implements ClientBehaviorHolder {
+
+ public static final String COMPONENT_TYPE =
"org.richfaces.TogglePanelTitledItem";
+
+ public static final String COMPONENT_FAMILY =
"org.richfaces.TogglePanelTitledItem";
+
+ private static final Collection<String> EVENT_NAMES =
Collections.unmodifiableCollection(Arrays.asList(
+ "headerclick",
+ "headerdblclick",
+ "headermousedown",
+ "headermousemove",
+ "headermouseup",
+ "enter",
+ "leave",
+ "click",
+ "dblclick",
+ "mousedown",
+ "mousemove",
+ "mouseout",
+ "mouseover",
+ "mouseup"
+ ));
+
+
+ public enum PropertyKeys {
+ headerClassActive,
+ headerClassDisabled,
+ headerClassInactive,
+ headerClass,
+ headerStyle,
+ contentClass,
+ onheaderclick,
+ onheaderdblclick,
+ onheadermousedown,
+ onheadermousemove,
+ onheadermouseup,
+ onenter,
+ onleave,
+ lang,
+ title,
+ style,
+ styleClass,
+ dir,
+ onclick,
+ ondblclick,
+ onmousedown,
+ onmousemove,
+ onmouseout,
+ onmouseover,
+ onmouseup
+ }
+
+ public HtmlTab() {
+ setRendererType("org.richfaces.Tab");
+ }
+
+ @Override
+ public String getFamily() {
+ return COMPONENT_FAMILY;
+ }
+
+ public String getHeaderClassActive() {
+ return (String) getStateHelper().eval(PropertyKeys.headerClassActive);
+ }
+
+ public void setHeaderClassActive(String headerClassActive) {
+ getStateHelper().put(PropertyKeys.headerClassActive, headerClassActive);
+ }
+
+ public String getHeaderClassDisabled() {
+ return (String) getStateHelper().eval(PropertyKeys.headerClassDisabled);
+ }
+
+ public void setHeaderClassDisabled(String headerClassDisabled) {
+ getStateHelper().put(PropertyKeys.headerClassDisabled, headerClassDisabled);
+ }
+
+ public String getHeaderClassInactive() {
+ return (String) getStateHelper().eval(PropertyKeys.headerClassInactive);
+ }
+
+ public void setHeaderClassInactive(String headerClassInactive) {
+ getStateHelper().put(PropertyKeys.headerClassInactive, headerClassInactive);
+ }
+
+ public String getHeaderClass() {
+ return (String) getStateHelper().eval(PropertyKeys.headerClass);
+ }
+
+ public void setHeaderClass(String headerClass) {
+ getStateHelper().put(PropertyKeys.headerClass, headerClass);
+ }
+
+ public String getHeaderStyle() {
+ return (String) getStateHelper().eval(PropertyKeys.headerStyle);
+ }
+
+ public void setHeaderStyle(String headerStyle) {
+ getStateHelper().put(PropertyKeys.headerStyle, headerStyle);
+ }
+
+ public String getContentClass() {
+ return (String) getStateHelper().eval(PropertyKeys.contentClass);
+ }
+
+ public void setContentClass(String contentClass) {
+ getStateHelper().put(PropertyKeys.contentClass, contentClass);
+ }
+
+ public String getOnheaderclick() {
+ return (String) getStateHelper().eval(PropertyKeys.onheaderclick);
+ }
+
+ public void setOnheaderclick(String onheaderclick) {
+ getStateHelper().put(PropertyKeys.onheaderclick, onheaderclick);
+ }
+
+ public String getOnheaderdblclick() {
+ return (String) getStateHelper().eval(PropertyKeys.onheaderdblclick);
+ }
+
+ public void setOnheaderdblclick(String onheaderdblclick) {
+ getStateHelper().put(PropertyKeys.onheaderdblclick, onheaderdblclick);
+ }
+
+ public String getOnheadermousedown() {
+ return (String) getStateHelper().eval(PropertyKeys.onheadermousedown);
+ }
+
+ public void setOnheadermousedown(String onheadermousedown) {
+ getStateHelper().put(PropertyKeys.onheadermousedown, onheadermousedown);
+ }
+
+ public String getOnheadermousemove() {
+ return (String) getStateHelper().eval(PropertyKeys.onheadermousemove);
+ }
+
+ public void setOnheadermousemove(String onheadermousemove) {
+ getStateHelper().put(PropertyKeys.onheadermousemove, onheadermousemove);
+ }
+
+ public String getOnheadermouseup() {
+ return (String) getStateHelper().eval(PropertyKeys.onheadermouseup);
+ }
+
+ public void setOnheadermouseup(String onheadermouseup) {
+ getStateHelper().put(PropertyKeys.onheadermouseup, onheadermouseup);
+ }
+
+ public String getOnenter() {
+ return (String) getStateHelper().eval(PropertyKeys.onenter);
+ }
+
+ public void setOnenter(String onenter) {
+ getStateHelper().put(PropertyKeys.onenter, onenter);
+ }
+
+ public String getOnleave() {
+ return (String) getStateHelper().eval(PropertyKeys.onleave);
+ }
+
+ public void setOnleave(String onleave) {
+ getStateHelper().put(PropertyKeys.onleave, onleave);
+ }
+
+ public String getLang() {
+ return (String) getStateHelper().eval(PropertyKeys.lang);
+ }
+
+ public void setLang(String lang) {
+ getStateHelper().put(PropertyKeys.lang, lang);
+ }
+
+ public String getTitle() {
+ return (String) getStateHelper().eval(PropertyKeys.title);
+ }
+
+ public void setTitle(String title) {
+ getStateHelper().put(PropertyKeys.title, title);
+ }
+
+ public String getStyle() {
+ return (String) getStateHelper().eval(PropertyKeys.style);
+ }
+
+ public void setStyle(String style) {
+ getStateHelper().put(PropertyKeys.style, style);
+ }
+
+ public String getStyleClass() {
+ return (String) getStateHelper().eval(PropertyKeys.styleClass);
+ }
+
+ public void setStyleClass(String styleClass) {
+ getStateHelper().put(PropertyKeys.styleClass, styleClass);
+ }
+
+ public String getDir() {
+ return (String) getStateHelper().eval(PropertyKeys.dir);
+ }
+
+ public void setDir(String dir) {
+ getStateHelper().put(PropertyKeys.dir, dir);
+ }
+
+ public String getOnclick() {
+ return (String) getStateHelper().eval(PropertyKeys.onclick);
+ }
+
+ public void setOnclick(String onclick) {
+ getStateHelper().put(PropertyKeys.onclick, onclick);
+ }
+
+ public String getOndblclick() {
+ return (String) getStateHelper().eval(PropertyKeys.ondblclick);
+ }
+
+ public void setOndblclick(String ondblclick) {
+ getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+ }
+
+ public String getOnmousedown() {
+ return (String) getStateHelper().eval(PropertyKeys.onmousedown);
+ }
+
+ public void setOnmousedown(String onmousedown) {
+ getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+ }
+
+ public String getOnmousemove() {
+ return (String) getStateHelper().eval(PropertyKeys.onmousemove);
+ }
+
+ public void setOnmousemove(String onmousemove) {
+ getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+ }
+
+ public String getOnmouseout() {
+ return (String) getStateHelper().eval(PropertyKeys.onmouseout);
+ }
+
+ public void setOnmouseout(String onmouseout) {
+ getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+ }
+
+ public String getOnmouseover() {
+ return (String) getStateHelper().eval(PropertyKeys.onmouseover);
+ }
+
+ public void setOnmouseover(String onmouseover) {
+ getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+ }
+
+ public String getOnmouseup() {
+ return (String) getStateHelper().eval(PropertyKeys.onmouseup);
+ }
+
+ public void setOnmouseup(String onmouseup) {
+ getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+ }
+
+
+
+ @Override
+ public Collection<String> getEventNames() {
+ return EVENT_NAMES;
+ }
+}
+
Added: trunk/ui/output/ui/src/main/java/org/richfaces/component/html/HtmlTabPanel.java
===================================================================
--- trunk/ui/output/ui/src/main/java/org/richfaces/component/html/HtmlTabPanel.java
(rev 0)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/component/html/HtmlTabPanel.java 2010-09-18
23:11:09 UTC (rev 19255)
@@ -0,0 +1,265 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.richfaces.component.html;
+
+import org.richfaces.HeaderPosition;
+import org.richfaces.HeaderAlignment;
+import org.richfaces.component.AbstractTabPanel;
+import javax.faces.component.behavior.ClientBehaviorHolder;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * @author akolonitsky
+ * @since 2010-08-27
+ */
+public class HtmlTabPanel extends AbstractTabPanel implements ClientBehaviorHolder {
+
+ public static final String COMPONENT_TYPE = "org.richfaces.TabPanel";
+
+ public static final String COMPONENT_FAMILY = "org.richfaces.TabPanel";
+
+ private static final Collection<String> EVENT_NAMES =
Collections.unmodifiableCollection(Arrays.asList(
+ "itemchange",
+ "beforeitemchange",
+ "click",
+ "dblclick",
+ "mousedown",
+ "mousemove",
+ "mouseout",
+ "mouseover",
+ "mouseup"
+ ));
+
+
+ public enum PropertyKeys {
+ headerPosition,
+ headerAlignment,
+ tabHeaderClassActive,
+ tabHeaderClassDisabled,
+ tabHeaderClassInactive,
+ tabContentClass,
+ tabHeaderClass,
+ onitemchange,
+ onbeforeitemchange,
+ lang,
+ title,
+ style,
+ styleClass,
+ dir,
+ onclick,
+ ondblclick,
+ onmousedown,
+ onmousemove,
+ onmouseout,
+ onmouseover,
+ onmouseup
+ }
+
+ public HtmlTabPanel() {
+ setRendererType("org.richfaces.TabPanel");
+ }
+
+ @Override
+ public String getFamily() {
+ return COMPONENT_FAMILY;
+ }
+
+ public HeaderPosition getHeaderPosition() {
+ return (HeaderPosition) getStateHelper().eval(PropertyKeys.headerPosition);
+ }
+
+ public void setHeaderPosition(HeaderPosition headerPosition) {
+ getStateHelper().put(PropertyKeys.headerPosition, headerPosition);
+ }
+
+ public HeaderAlignment getHeaderAlignment() {
+ return (HeaderAlignment) getStateHelper().eval(PropertyKeys.headerAlignment);
+ }
+
+ public void setHeaderAlignment(HeaderAlignment headerAlignment) {
+ getStateHelper().put(PropertyKeys.headerAlignment, headerAlignment);
+ }
+
+ public String getTabHeaderClassActive() {
+ return (String) getStateHelper().eval(PropertyKeys.tabHeaderClassActive);
+ }
+
+ public void setTabHeaderClassActive(String tabHeaderClassActive) {
+ getStateHelper().put(PropertyKeys.tabHeaderClassActive, tabHeaderClassActive);
+ }
+
+ public String getTabHeaderClassDisabled() {
+ return (String) getStateHelper().eval(PropertyKeys.tabHeaderClassDisabled);
+ }
+
+ public void setTabHeaderClassDisabled(String tabHeaderClassDisabled) {
+ getStateHelper().put(PropertyKeys.tabHeaderClassDisabled,
tabHeaderClassDisabled);
+ }
+
+ public String getTabHeaderClassInactive() {
+ return (String) getStateHelper().eval(PropertyKeys.tabHeaderClassInactive);
+ }
+
+ public void setTabHeaderClassInactive(String tabHeaderClassInactive) {
+ getStateHelper().put(PropertyKeys.tabHeaderClassInactive,
tabHeaderClassInactive);
+ }
+
+ public String getTabContentClass() {
+ return (String) getStateHelper().eval(PropertyKeys.tabContentClass);
+ }
+
+ public void setTabContentClass(String tabContentClass) {
+ getStateHelper().put(PropertyKeys.tabContentClass, tabContentClass);
+ }
+
+ public String getTabHeaderClass() {
+ return (String) getStateHelper().eval(PropertyKeys.tabHeaderClass);
+ }
+
+ public void setTabHeaderClass(String tabHeaderClass) {
+ getStateHelper().put(PropertyKeys.tabHeaderClass, tabHeaderClass);
+ }
+
+ public String getOnitemchange() {
+ return (String) getStateHelper().eval(PropertyKeys.onitemchange);
+ }
+
+ public void setOnitemchange(String onitemchange) {
+ getStateHelper().put(PropertyKeys.onitemchange, onitemchange);
+ }
+
+ public String getOnbeforeitemchange() {
+ return (String) getStateHelper().eval(PropertyKeys.onbeforeitemchange);
+ }
+
+ public void setOnbeforeitemchange(String onbeforeitemchange) {
+ getStateHelper().put(PropertyKeys.onbeforeitemchange, onbeforeitemchange);
+ }
+
+ public String getLang() {
+ return (String) getStateHelper().eval(PropertyKeys.lang);
+ }
+
+ public void setLang(String lang) {
+ getStateHelper().put(PropertyKeys.lang, lang);
+ }
+
+ public String getTitle() {
+ return (String) getStateHelper().eval(PropertyKeys.title);
+ }
+
+ public void setTitle(String title) {
+ getStateHelper().put(PropertyKeys.title, title);
+ }
+
+ public String getStyle() {
+ return (String) getStateHelper().eval(PropertyKeys.style);
+ }
+
+ public void setStyle(String style) {
+ getStateHelper().put(PropertyKeys.style, style);
+ }
+
+ public String getStyleClass() {
+ return (String) getStateHelper().eval(PropertyKeys.styleClass);
+ }
+
+ public void setStyleClass(String styleClass) {
+ getStateHelper().put(PropertyKeys.styleClass, styleClass);
+ }
+
+ public String getDir() {
+ return (String) getStateHelper().eval(PropertyKeys.dir);
+ }
+
+ public void setDir(String dir) {
+ getStateHelper().put(PropertyKeys.dir, dir);
+ }
+
+ public String getOnclick() {
+ return (String) getStateHelper().eval(PropertyKeys.onclick);
+ }
+
+ public void setOnclick(String onclick) {
+ getStateHelper().put(PropertyKeys.onclick, onclick);
+ }
+
+ public String getOndblclick() {
+ return (String) getStateHelper().eval(PropertyKeys.ondblclick);
+ }
+
+ public void setOndblclick(String ondblclick) {
+ getStateHelper().put(PropertyKeys.ondblclick, ondblclick);
+ }
+
+ public String getOnmousedown() {
+ return (String) getStateHelper().eval(PropertyKeys.onmousedown);
+ }
+
+ public void setOnmousedown(String onmousedown) {
+ getStateHelper().put(PropertyKeys.onmousedown, onmousedown);
+ }
+
+ public String getOnmousemove() {
+ return (String) getStateHelper().eval(PropertyKeys.onmousemove);
+ }
+
+ public void setOnmousemove(String onmousemove) {
+ getStateHelper().put(PropertyKeys.onmousemove, onmousemove);
+ }
+
+ public String getOnmouseout() {
+ return (String) getStateHelper().eval(PropertyKeys.onmouseout);
+ }
+
+ public void setOnmouseout(String onmouseout) {
+ getStateHelper().put(PropertyKeys.onmouseout, onmouseout);
+ }
+
+ public String getOnmouseover() {
+ return (String) getStateHelper().eval(PropertyKeys.onmouseover);
+ }
+
+ public void setOnmouseover(String onmouseover) {
+ getStateHelper().put(PropertyKeys.onmouseover, onmouseover);
+ }
+
+ public String getOnmouseup() {
+ return (String) getStateHelper().eval(PropertyKeys.onmouseup);
+ }
+
+ public void setOnmouseup(String onmouseup) {
+ getStateHelper().put(PropertyKeys.onmouseup, onmouseup);
+ }
+
+
+
+ @Override
+ public Collection<String> getEventNames() {
+ return EVENT_NAMES;
+ }
+}
+
Added:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabPanelRenderer.java
===================================================================
--- trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabPanelRenderer.java
(rev 0)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabPanelRenderer.java 2010-09-18
23:11:09 UTC (rev 19255)
@@ -0,0 +1,244 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.richfaces.renderkit.html;
+
+import org.ajax4jsf.javascript.JSObject;
+import org.richfaces.component.AbstractTabPanel;
+import org.richfaces.component.AbstractTogglePanel;
+import org.richfaces.component.AbstractTogglePanelItem;
+import org.richfaces.component.AbstractTogglePanelTitledItem;
+import org.richfaces.component.html.HtmlTab;
+import org.richfaces.component.util.HtmlUtil;
+import org.richfaces.renderkit.HtmlConstants;
+import org.richfaces.renderkit.RenderKitUtils;
+
+import javax.faces.application.ResourceDependencies;
+import javax.faces.application.ResourceDependency;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+import java.util.Map;
+
+import static org.richfaces.component.AbstractTogglePanelTitledItem.HeaderStates.*;
+import static org.richfaces.component.AbstractTogglePanelTitledItem.HeaderStates.active;
+import static org.richfaces.component.html.HtmlAccordion.PropertyKeys.height;
+import static org.richfaces.component.util.HtmlUtil.concatClasses;
+import static org.richfaces.component.util.HtmlUtil.concatStyles;
+import static org.richfaces.renderkit.RenderKitUtils.renderPassThroughAttributes;
+
+/**
+ * @author akolonitsky
+ * @since 2010-08-24
+ */
+@ResourceDependencies( { // TODO review
+ @ResourceDependency(library = "javax.faces", name = "jsf.js"),
+ @ResourceDependency(name = "jquery.js"),
+ @ResourceDependency(name = "richfaces.js"),
+ @ResourceDependency(name = "richfaces-event.js"),
+ @ResourceDependency(name = "richfaces-base-component.js"),
+ @ResourceDependency(library = "org.richfaces", name =
"tabPanel.ecss"),
+ @ResourceDependency(library = "org.richfaces", name =
"TogglePanel.js"),
+ @ResourceDependency(library = "org.richfaces", name =
"TabPanel.js")
+})
+public class TabPanelRenderer extends TogglePanelRenderer {
+
+ private static final RenderKitUtils.Attributes HEADER_ATTRIBUTES =
RenderKitUtils.attributes()
+ .generic("style", HtmlTab.PropertyKeys.headerStyle.toString())
+ .generic("onclick", HtmlTab.PropertyKeys.onheaderclick.toString(),
"headerclick")
+ .generic("ondblclick",
HtmlTab.PropertyKeys.onheaderdblclick.toString(), "headerdblclick")
+ .generic("onmousedown",
HtmlTab.PropertyKeys.onheadermousedown.toString(), "headermousedown")
+ .generic("onmousemove",
HtmlTab.PropertyKeys.onheadermousemove.toString(), "headermousemove")
+ .generic("onmouseup", HtmlTab.PropertyKeys.onheadermouseup.toString(),
"headermouseup");
+
+ private static final String DIV = "div";
+ private static final String STYLE = "style";
+ private static final String CLASS = "class";
+
+ @Override
+ protected void doEncodeBegin(ResponseWriter w, FacesContext context, UIComponent
comp) throws IOException {
+ super.doEncodeBegin(w, context, comp);
+ writeJavaScript(w, context, comp);
+
+ writeTabsLine(w, context, comp);
+ writeTabsLineSeparator(w);
+ }
+
+ private void writeTabsLineSeparator(ResponseWriter writer) throws IOException {
+ writer.write("<div
class='rf-tb-hdr_border'></div>");
+ }
+
+ private void writeTabsLine(ResponseWriter w, FacesContext context, UIComponent comp)
throws IOException {
+ w.startElement(DIV, comp);
+ w.writeAttribute(CLASS, "rf-tb-hdr_tabline_vis", null);
+
+ w.startElement("table", comp);
+ w.writeAttribute("class", "rf-tb-hdr_tabs", null);
+ w.writeAttribute("cellspacing", "0", null);
+ w.startElement("tbody", comp);
+ w.startElement("tr", comp);
+
+ writeTopTabFirstSpacer(w, comp);
+
+ for (AbstractTogglePanelItem item : ((AbstractTogglePanel)
comp).getRenderedItems()) {
+ AbstractTogglePanelTitledItem tab = (AbstractTogglePanelTitledItem) item;
+ writeTopTabHeader(context, w, tab);
+ writeTopTabSpacer(w, comp);
+ }
+
+ writeTopTabLastSpacer(w, comp);
+
+ w.endElement("tr");
+ w.endElement("tbody");
+ w.endElement("table");
+
+ writeTopTabsControl(w, comp, "rf-tb-hdr_scroll_left rftp_hidden",
"«");
+ writeTopTabsControl(w, comp, "rf-tb-hdr_tabslist rftp_hidden",
"↓");
+ writeTopTabsControl(w, comp, "rf-tb-hdr_scroll_right rftp_hidden",
"»");
+
+ w.endElement("div");
+ }
+
+ @Override
+ protected String getStyle(UIComponent component) {
+ return concatStyles(attributeAsString(component, "style"), "width:
100%;");
+ }
+
+ @Override
+ protected String getStyleClass(UIComponent component) {
+ return HtmlUtil.concatClasses("rf-tbp", attributeAsString(component,
"styleClass"));
+ }
+
+
+ private void writeTopTabHeader(FacesContext context, ResponseWriter writer,
AbstractTogglePanelTitledItem tab) throws IOException {
+ writer.startElement("td", tab);
+ writer.writeAttribute("id", tab.getClientId() + ":header",
null);
+ writer.writeAttribute("class", concatClasses("rf-tb-hdr",
attributeAsString(tab, HtmlTab.PropertyKeys.headerClass)), null);
+ renderPassThroughAttributes(context, tab, HEADER_ATTRIBUTES);
+
+ boolean isActive = tab.isActive();
+ boolean isDisabled = tab.isDisabled();
+ encodeTabHeader(context, tab, writer, inactive, !isActive &&
!isDisabled);
+ encodeTabHeader(context, tab, writer, active, isActive && !isDisabled);
+ encodeTabHeader(context, tab, writer, disable, isDisabled);
+
+ writer.endElement("td");
+ }
+
+ private void encodeTabHeader(FacesContext context, AbstractTogglePanelTitledItem tab,
ResponseWriter writer,
+ AbstractTogglePanelTitledItem.HeaderStates state, Boolean
isDisplay) throws IOException {
+
+ writer.startElement("div", tab);
+ writer.writeAttribute("id", tab.getClientId() + ":header:" +
state, null);
+ writer.writeAttribute("style", concatStyles("white-space:
nowrap", isDisplay ? "" : "display : none"), null);
+
+ String name = "headerClass" + capitalize(state.toString());
+ writer.writeAttribute("class", concatClasses("rf-tb-hdr-" +
state.abbreviation(), attributeAsString(tab, name)), null);
+
+ writeTopTabIcon(context, tab, writer, "rftp_icon",
"ico.gif");
+
+ writer.startElement("span", tab);
+ writer.writeAttribute("class", "rftp_label", null);
+
+ UIComponent headerFacet = tab.getHeaderFacet(state);
+ if (headerFacet != null && headerFacet.isRendered()) {
+ headerFacet.encodeAll(context);
+ } else {
+ Object headerText = tab.getAttributes().get("header");
+ if (headerText != null && !headerText.equals("")) {
+ writer.writeText(headerText, null);
+ }
+ }
+
+ writer.endElement("span");
+
+ writeTopTabIcon(context, tab, writer, "rftp_close",
"close_act.gif");
+
+ writer.endElement("div");
+ }
+
+
+
+ private void writeTopTabsControl(ResponseWriter w, UIComponent comp, String styles,
String text) throws IOException {
+ w.startElement("div", comp);
+ w.writeAttribute("class", styles, null);
+ w.writeText(text, null);
+ w.endElement("div");
+ }
+
+ private void writeTopTabIcon(FacesContext context, UIComponent comp, ResponseWriter
writer, String styleClass, String image) throws IOException {
+ writer.startElement("img", comp);
+ writer.writeAttribute("width", 16, null);
+ writer.writeAttribute("height", 16, null);
+ writer.writeAttribute("class", styleClass, null);
+
+ String imagePath =
context.getApplication().getResourceHandler().createResource("org.richfaces/" +
image).getRequestPath();
+ writer.writeAttribute("src", imagePath, null);
+ }
+
+ private void writeTopTabFirstSpacer(ResponseWriter w, UIComponent comp) throws
IOException {
+ writeTopTabSpacer(w, comp, "padding-left: 5px;",
"rf-tb-hdr_spacer");
+ }
+
+ private void writeTopTabSpacer(ResponseWriter w, UIComponent comp) throws IOException
{
+ writeTopTabSpacer(w, comp, "", "rf-tb-hdr_spacer
rftp_horizonttab_tabspacer_width");
+ }
+
+ private void writeTopTabLastSpacer(ResponseWriter w, UIComponent comp) throws
IOException {
+ writeTopTabSpacer(w, comp, "padding-right: 5px; width: 100%;",
"rf-tb-hdr_spacer");
+ }
+
+ private void writeTopTabSpacer(ResponseWriter w, UIComponent comp, String style,
String classStyle) throws IOException {
+ w.startElement("td", comp);
+ w.writeAttribute(STYLE, style, null);
+ w.writeAttribute(CLASS, classStyle, null);
+ w.startElement("br", comp);
+ w.endElement("td");
+ }
+
+ @Override
+ protected void doEncodeEnd(ResponseWriter writer, FacesContext context, UIComponent
component) throws IOException {
+ writer.endElement(HtmlConstants.DIV_ELEM);
+ }
+
+ @Override
+ protected JSObject getScriptObject(FacesContext context, UIComponent component) {
+ return new JSObject("RichFaces.ui.TabPanel",
+ component.getClientId(), getScriptObjectOptions(context, component));
+ }
+
+ @Override
+ protected Map<String, Object> getScriptObjectOptions(FacesContext context,
UIComponent component) {
+ Map<String, Object> options = super.getScriptObjectOptions(context,
component);
+ options.put("isKeepHeight", !attributeAsString(component,
height).isEmpty());
+ options.remove("items");
+
+ return options;
+ }
+
+ @Override
+ protected Class<? extends UIComponent> getComponentClass() {
+ return AbstractTabPanel.class;
+ }
+}
+
Added: trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabRenderer.java
===================================================================
--- trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabRenderer.java
(rev 0)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/TabRenderer.java 2010-09-18
23:11:09 UTC (rev 19255)
@@ -0,0 +1,120 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.richfaces.renderkit.html;
+
+import org.ajax4jsf.javascript.JSObject;
+import org.richfaces.component.AbstractTogglePanelTitledItem;
+import org.richfaces.renderkit.HtmlConstants;
+
+import javax.faces.application.ResourceDependencies;
+import javax.faces.application.ResourceDependency;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import java.io.IOException;
+import java.util.Map;
+
+import static org.richfaces.component.util.HtmlUtil.concatClasses;
+
+/**
+ * @author akolonitsky
+ * @since 2010-08-24
+ */
+@ResourceDependencies( { // TODO review
+ @ResourceDependency(library = "javax.faces", name = "jsf.js"),
+ @ResourceDependency(name = "jquery.js"),
+ @ResourceDependency(name = "richfaces.js"),
+ @ResourceDependency(name = "richfaces-event.js"),
+ @ResourceDependency(name = "richfaces-base-component.js"),
+ @ResourceDependency(library = "org.richfaces", name =
"TogglePanelItem.js"),
+ @ResourceDependency(library = "org.richfaces", name = "Tab.js")
+})
+public class TabRenderer extends TogglePanelItemRenderer {
+
+ @Override
+ protected void doEncodeBegin(ResponseWriter writer, FacesContext context, UIComponent
component) throws IOException {
+ super.doEncodeBegin(writer, context, component);
+
+ encodeContentBegin(component, writer);
+ }
+
+ @Override
+ protected String getStyleClass(UIComponent component) {
+ return concatClasses("rf-tb", attributeAsString(component,
"styleClass"));
+ }
+
+ @Override
+ protected void doEncodeEnd(ResponseWriter writer, FacesContext context, UIComponent
component) throws IOException {
+ encodeContentEnd(component, writer);
+
+ super.doEncodeEnd(writer, context, component);
+ }
+
+ @Override
+ protected void writeJavaScript(ResponseWriter writer, FacesContext context,
UIComponent component) throws IOException {
+ Object script = getScriptObject(context, component);
+ if (script == null) {
+ return;
+ }
+
+ writer.startElement(HtmlConstants.SCRIPT_ELEM, component);
+ writer.writeAttribute(HtmlConstants.TYPE_ATTR, "text/javascript",
"type");
+ writer.writeText(script, null);
+ writer.endElement(HtmlConstants.SCRIPT_ELEM);
+ }
+
+ private void encodeContentBegin(UIComponent component, ResponseWriter writer) throws
IOException {
+ writer.startElement("div", component);
+ writer.writeAttribute("class", concatClasses("rf-tb-cnt",
attributeAsString(component, "contentClass")), null);
+ writer.writeAttribute("id", component.getClientId() +
":content", null);
+
+ AbstractTogglePanelTitledItem item = (AbstractTogglePanelTitledItem) component;
+ if (!item.isActive() || item.isDisabled()) {
+ writer.writeAttribute("style", "display: none", null);
+ }
+ }
+
+ private void encodeContentEnd(UIComponent component, ResponseWriter responseWriter)
throws IOException {
+ responseWriter.endElement("div");
+ }
+
+ @Override
+ protected JSObject getScriptObject(FacesContext context, UIComponent component) {
+ return new JSObject("RichFaces.ui.Tab", component.getClientId(),
+ getScriptObjectOptions(context, component));
+ }
+
+ @Override
+ protected Map<String, Object> getScriptObjectOptions(FacesContext context,
UIComponent component) {
+ Map<String, Object> res = super.getScriptObjectOptions(context,
component);
+ res.put("disabled", ((AbstractTogglePanelTitledItem)
component).isDisabled());
+
+ return res;
+ }
+
+ @Override
+ protected Class<? extends UIComponent> getComponentClass() {
+ return AbstractTogglePanelTitledItem.class;
+ }
+}
+
Added:
trunk/ui/output/ui/src/test/java/org/richfaces/component/UICollapsiblePanelTest.java
===================================================================
--- trunk/ui/output/ui/src/test/java/org/richfaces/component/UICollapsiblePanelTest.java
(rev 0)
+++
trunk/ui/output/ui/src/test/java/org/richfaces/component/UICollapsiblePanelTest.java 2010-09-18
23:11:09 UTC (rev 19255)
@@ -0,0 +1,50 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.richfaces.component;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.faces.component.UIComponent;
+import java.util.List;
+
+/**
+ * @author akolonitsky
+ * @since 2010-08-27
+ */
+public class UICollapsiblePanelTest {
+
+ private UICollapsiblePanel collapsiblePanel;
+
+ @Before
+ public void setUp () {
+ collapsiblePanel = new UICollapsiblePanel();
+ }
+
+ @Test
+ public void testSomething() {
+ Assert.assertNotNull(collapsiblePanel);
+ }
+}
+
Added:
trunk/ui/output/ui/src/test/java/org/richfaces/component/UITogglePanelTitledItemTest.java
===================================================================
---
trunk/ui/output/ui/src/test/java/org/richfaces/component/UITogglePanelTitledItemTest.java
(rev 0)
+++
trunk/ui/output/ui/src/test/java/org/richfaces/component/UITogglePanelTitledItemTest.java 2010-09-18
23:11:09 UTC (rev 19255)
@@ -0,0 +1,50 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.richfaces.component;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.faces.component.UIComponent;
+import java.util.List;
+
+/**
+ * @author akolonitsky
+ * @since 2010-08-24
+ */
+public class UITogglePanelTitledItemTest {
+
+ private UITogglePanelTitledItem togglePanelTitledItem;
+
+ @Before
+ public void setUp () {
+ togglePanelTitledItem = new UITogglePanelTitledItem();
+ }
+
+ @Test
+ public void testSomething() {
+ Assert.assertNotNull(togglePanelTitledItem);
+ }
+}
+