gatein SVN: r4974 - in epp/portal/branches/EPP_5_1_Branch/webui: eXo/src/main/java/org/exoplatform/webui/organization/account and 1 other directory.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-11-09 03:18:59 -0500 (Tue, 09 Nov 2010)
New Revision: 4974
Modified:
epp/portal/branches/EPP_5_1_Branch/webui/core/src/main/java/org/exoplatform/webui/core/UIPageIterator.java
epp/portal/branches/EPP_5_1_Branch/webui/eXo/src/main/java/org/exoplatform/webui/organization/account/UIUserSelector.java
Log:
JBEPP-546: User selection is removed when adding users to group
Modified: epp/portal/branches/EPP_5_1_Branch/webui/core/src/main/java/org/exoplatform/webui/core/UIPageIterator.java
===================================================================
--- epp/portal/branches/EPP_5_1_Branch/webui/core/src/main/java/org/exoplatform/webui/core/UIPageIterator.java 2010-11-09 07:31:07 UTC (rev 4973)
+++ epp/portal/branches/EPP_5_1_Branch/webui/core/src/main/java/org/exoplatform/webui/core/UIPageIterator.java 2010-11-09 08:18:59 UTC (rev 4974)
@@ -19,15 +19,17 @@
package org.exoplatform.webui.core;
+import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.commons.utils.EmptySerializablePageList;
import org.exoplatform.commons.utils.PageList;
-import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
/**
* A component that allows pagination, with an iterator to change pages
@@ -42,6 +44,8 @@
*/
private PageList pageList_ = EmptySerializablePageList.get();
+ private Set<String> selectedItems = new HashSet<String>();
+
public UIPageIterator()
{
}
@@ -95,6 +99,28 @@
{
pageList_.getPage(page);
}
+
+ public void setSelectedItem(String key, boolean value)
+ {
+ if (value == false && this.selectedItems.contains(key))
+ {
+ selectedItems.remove(key);
+ }
+ else if (value)
+ {
+ selectedItems.add(key);
+ }
+ }
+
+ public Set<String> getSelectedItems()
+ {
+ return selectedItems;
+ }
+
+ public boolean isSelectedItem(String key)
+ {
+ return selectedItems.contains(key);
+ }
@SuppressWarnings("unused")
static public class ShowPageActionListener extends EventListener<UIPageIterator>
Modified: epp/portal/branches/EPP_5_1_Branch/webui/eXo/src/main/java/org/exoplatform/webui/organization/account/UIUserSelector.java
===================================================================
--- epp/portal/branches/EPP_5_1_Branch/webui/eXo/src/main/java/org/exoplatform/webui/organization/account/UIUserSelector.java 2010-11-09 07:31:07 UTC (rev 4973)
+++ epp/portal/branches/EPP_5_1_Branch/webui/eXo/src/main/java/org/exoplatform/webui/organization/account/UIUserSelector.java 2010-11-09 08:18:59 UTC (rev 4974)
@@ -41,18 +41,20 @@
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.core.model.SelectItemOption;
import org.exoplatform.webui.event.Event;
+import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.event.EventListener;
-import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormCheckBoxInput;
import org.exoplatform.webui.form.UIFormSelectBox;
import org.exoplatform.webui.form.UIFormStringInput;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -119,7 +121,7 @@
uiIterator_ = new UIPageIterator();
uiIterator_.setPageList(objPageList);
uiIterator_.setId("UISelectUserPage");
-
+
// create group selector
UIPopupWindow uiPopup = addChild(UIPopupWindow.class, null, "UIPopupGroupSelector");
uiPopup.setWindowSize(540, 0);
@@ -138,8 +140,14 @@
for (Object obj : uiIterator_.getCurrentPageData())
{
User user = (User)obj;
- if (getUIFormCheckBoxInput(user.getUserName()) == null)
- addUIFormInput(new UIFormCheckBoxInput<Boolean>(user.getUserName(), user.getUserName(), false));
+ UIFormCheckBoxInput<Boolean> uiFormCheckBoxInput = getUIFormCheckBoxInput(user.getUserName());
+ if (uiFormCheckBoxInput == null)
+ {
+ uiFormCheckBoxInput = new UIFormCheckBoxInput<Boolean>(user.getUserName(), user.getUserName(), false);
+ addUIFormInput(uiFormCheckBoxInput);
+ }
+
+ uiFormCheckBoxInput.setChecked(uiIterator_.isSelectedItem(user.getUserName()));
}
}
return new ArrayList<User>(uiIterator_.getCurrentPageData());
@@ -315,31 +323,32 @@
static public class AddActionListener extends EventListener<UIUserSelector>
{
- @SuppressWarnings("unchecked")
public void execute(Event<UIUserSelector> event) throws Exception
{
UIUserSelector uiForm = event.getSource();
StringBuilder sb = new StringBuilder();
- int count = 0;
- for (Object o : uiForm.uiIterator_.getCurrentPageData())
+
+ uiForm.setSelectedItem();
+
+ // get item from selected item map
+ Set<String> items = uiForm.uiIterator_.getSelectedItems();
+ if (items.size() == 0)
{
- User u = (User)o;
- UIFormCheckBoxInput input = uiForm.getUIFormCheckBoxInput(u.getUserName());
- if (input != null && input.isChecked())
- {
- count++;
- if (sb.toString() != null && sb.toString().trim().length() != 0)
- sb.append(",");
- sb.append(u.getUserName());
- }
- }
- if (count == 0)
- {
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
uiApp.addMessage(new ApplicationMessage("UIUserSelector.msg.user-required", null));
event.getRequestContext().addUIComponentToUpdateByAjax(uiApp.getUIPopupMessages());
return;
}
+ String[] arrItems = items.toArray(new String[items.size()]);
+ Arrays.sort(arrItems);
+
+ for (String key : arrItems)
+ {
+ if (sb.toString() != null && sb.toString().trim().length() != 0)
+ sb.append(",");
+ sb.append(key);
+ }
+
uiForm.setSelectedUsers(sb.toString());
uiForm.<UIComponent> getParent().broadcast(event, event.getExecutionPhase());
}
@@ -379,6 +388,19 @@
{
getUIStringInput(FIELD_KEYWORD).setValue(value);
}
+
+ private void setSelectedItem() throws Exception
+ {
+ for (Object o : this.uiIterator_.getCurrentPageData())
+ {
+ User u = (User) o;
+ UIFormCheckBoxInput input = this.getUIFormCheckBoxInput(u.getUserName());
+ if (input != null)
+ {
+ this.uiIterator_.setSelectedItem(u.getUserName(), input.isChecked());
+ }
+ }
+ }
static public class SelectGroupActionListener extends EventListener<UIGroupSelector>
{
@@ -457,6 +479,8 @@
public void execute(Event<UIUserSelector> event) throws Exception
{
UIUserSelector uiSelectUserForm = event.getSource();
+ uiSelectUserForm.setSelectedItem();
+
int page = Integer.parseInt(event.getRequestContext().getRequestParameter(OBJECTID));
uiSelectUserForm.updateCurrentPage(page);
event.getRequestContext().addUIComponentToUpdateByAjax(uiSelectUserForm);
14 years, 2 months
gatein SVN: r4973 - epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US.
by do-not-reply@jboss.org
Author: smumford
Date: 2010-11-09 02:31:07 -0500 (Tue, 09 Nov 2010)
New Revision: 4973
Modified:
epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Book_Info.xml
Log:
Updated Book_Info.xml
Modified: epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Book_Info.xml
===================================================================
--- epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Book_Info.xml 2010-11-09 07:30:31 UTC (rev 4972)
+++ epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Book_Info.xml 2010-11-09 07:31:07 UTC (rev 4973)
@@ -7,7 +7,7 @@
<title>5.1.0 Release Notes</title>
<subtitle>For use with JBoss Enterprise Portal Platform 5.1.0</subtitle>
<edition>1</edition>
- <pubsnumber>1.2</pubsnumber>
+ <pubsnumber>1.3</pubsnumber>
<productname>JBoss Enterprise Portal Platform</productname>
<productnumber>5</productnumber>
<abstract>
14 years, 2 months
gatein SVN: r4972 - epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US.
by do-not-reply@jboss.org
Author: smumford
Date: 2010-11-09 02:30:31 -0500 (Tue, 09 Nov 2010)
New Revision: 4972
Modified:
epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/5.1.0_Release_Notes.xml
epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Revision_History.xml
Log:
JBEPP-603: Added more JIRA descriptions. Split Issues Fixed into Product, Upstream and New Features
Modified: epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/5.1.0_Release_Notes.xml
===================================================================
--- epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/5.1.0_Release_Notes.xml 2010-11-08 18:26:14 UTC (rev 4971)
+++ epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/5.1.0_Release_Notes.xml 2010-11-09 07:30:31 UTC (rev 4972)
@@ -17,9 +17,9 @@
</section>
<section id="sect-Release_Notes-New_Features_and_Components">
- <title>New Features and Component Upgrades</title>
+ <title>New and Upgraded Components</title>
<variablelist id="vari-Release_Notes-New_Features_and_Components-New_Features">
- <title>New Features</title>
+ <title>New Components</title>
<varlistentry>
<term>Site Publisher extension</term>
<listitem>
@@ -33,7 +33,7 @@
</varlistentry>
</variablelist>
<variablelist id="vari-Release_Notes-New_Features_and_Components-Component_Upgrades_in_VERSION_MICRO">
- <title><emphasis role="bold">Component Upgrades</emphasis></title>
+ <title><emphasis role="bold">Upgraded Components</emphasis></title>
<varlistentry>
<term>WSRP</term>
<listitem>
@@ -239,6 +239,17 @@
<variablelist>
<title><emphasis role="bold">Issues fixed in the product:</emphasis></title>
<varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-508" /></term>
+ <listitem>
+ <para>
+ A naming duplication in the pre-packaged "Simplest Hello World" and "IDM Hello World" portlet examples caused an Illegal Argument Exception when both of the portlet examples were deployed.
+ </para>
+ <para>
+ The isses was resolved by renaming the xxxx portlet to yyyy.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-513"></ulink></term>
<listitem>
<para>
@@ -326,9 +337,86 @@
</para>
</listitem>
</varlistentry>
- </variablelist>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-533"></ulink></term>
+ <listitem>
+ <para>
+ Prior to this release, running &PRODUCT;, configured with LDAP, in a clustered configuration (using the startup parameter <command>-Dexo.profiles=cluster</command>) would produce <literal>NotSerializableExceptions</literal> within the OrganizationManagement portlet.
+ </para>
+ <para>
+ A number of java files in the product have been patched to resolve this issue.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-523"></ulink></term>
+ <listitem>
+ <para>
+ The JCR Lock Manager in previous releases of &PRODUCT; was configured to use the same channel name in all workspaces.
+ </para>
+ <para>
+ For example: The 'portal-system' channel name was:
+ </para>
+<programlisting role="XML" language="XML"><![CDATA[<property name="jbosscache-cluster-name" value="jcrlock-${container.name.suffix}-system" />
+]]></programlisting>
+ <para>
+ Instead of:
+ </para>
+<programlisting role="XML" language="XML"><![CDATA[<property name="jbosscache-cluster-name" value="jcrlock-${container.name.suffix}-portal-system" />
+]]></programlisting>
+ <para>
+ This naming convention could allow data changes to affect the incorrect workspace.
+ </para>
+ <para>
+ The <filename>repository-configuration.xml</filename> file has been updated to resolve this issue.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-501"></ulink></term>
+ <listitem>
+ <para>
+ Previous versions of &PRODUCT; contained a bug that caused new Dashboard tabs with names that contained language-specific special characters to redirect to the Homepage. These characters prevented the new URI from parsing correctly, resulting in the redirect.
+ </para>
+ <para>
+ This release ensures that node URIs parse correctly, resolving the issue.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist> <!--Close list: Fixed in Product-->
<variablelist>
+ <title>New Features</title>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-494"></ulink></term>
+ <listitem>
+ <para>
+ A confirmation message has been added to the User Interface to warn users when they are closing a page that has been edited if the changes have not been saved.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-528"></ulink></term>
+ <listitem>
+ <para>
+ Changes to javascript path handling (defined in gatein-resource.xml) in this release allow users to link to external Javascript sources.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-530"></ulink></term>
+ <listitem>
+ <para>
+ Users of previous versions of &PRODUCT; encountered minor issues when portlet webapp sessions outlived the user session.
+ </para>
+ <para>
+ This behaviour has been addressed in this release and portlet webapp sessions are now cleaned when a new user signs into the portal.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist> <!--Close list: New Features-->
+
+ <variablelist>
<title>Issues fixed upstream:</title>
<varlistentry>
<term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-454"></ulink></term>
@@ -338,7 +426,7 @@
</para>
</listitem>
</varlistentry>
- </variablelist>
+ </variablelist><!--Close list: Fixed Upstream-->
</section> <!-- Close Section: Issues Fixed-->
<section id="sect-Release_Notes-_Known_Issues_with_this_release_">
@@ -347,15 +435,8 @@
The following is a list of known issues in this release:
</para>
<variablelist>
+
<varlistentry>
- <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-508" /></term>
- <listitem>
- <para>
- A naming duplication in pre-packaged "Hello World" portlet examples causes an exception when both of the portlet examples are deployed.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
<term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-546"></ulink></term>
<listitem>
<para>
@@ -400,7 +481,7 @@
<term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-554"></ulink></term>
<listitem>
<para>
- Safari 4.0.4 users may experience problems adding gadgets to Dashboard pages. JavaScript errors appear when dropping a gadget onto a page and an empty space appears where the gadget was placed.
+ Safari (specifically version 4.0.4) users may experience problems adding gadgets to Dashboard pages. JavaScript errors appear when dropping a gadget onto a page and empty space appears where the gadget was placed.
</para>
</listitem>
</varlistentry>
@@ -427,7 +508,7 @@
A <emphasis role="bold">NullPointerException</emphasis> can be seen in a server log stacktrace after a user authenticated with the SPNEGO Single Sign-On method is automatically evicted after the set time-out period has elapsed.
</para>
<para>
- This issue does not produce any flow-on effects.
+ This issue does not produce any other effects.
</para>
</listitem>
</varlistentry>
@@ -494,7 +575,7 @@
This add-on is available for download from the <ulink type="http" url="https://support.redhat.com/jbossnetwork/restricted/softwareDetail.html?so...">Red Hat Customer Support Portal</ulink>.
</para>
<para>
- Documentation for this extension is available at <ulink type="http" url="http://docs.redhat.com/docs/en-US/JBoss_Site_Publisher/5/html/User_Guide/...">http://docs.redhat.com</ulink>
+ Documentation for this extension is available at <ulink type="http" url="http://docs.redhat.com/docs/en-US/JBoss_Site_Publisher/index.html">http://docs.redhat.com</ulink>
</para>
</section>
@@ -502,7 +583,7 @@
<section id="sect-Release_Notes-_Documentation_">
<title>Documentation</title>
<para>
- Visit <ulink type="http" url="http://docs.redhat.com/docs/en-US/index.html">http://docs.redhat.com</ulink> for further documentation regarding &PRODUCT;.
+ Visit <ulink type="http" url="http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Portal_Platform/index....">http://docs.redhat.com</ulink> for further documentation regarding &PRODUCT;.
</para>
<para>
This documentation includes:
Modified: epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Revision_History.xml
===================================================================
--- epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Revision_History.xml 2010-11-08 18:26:14 UTC (rev 4971)
+++ epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Revision_History.xml 2010-11-09 07:30:31 UTC (rev 4972)
@@ -8,6 +8,20 @@
<simpara>
<revhistory>
<revision>
+ <revnumber>1-1.3</revnumber>
+ <date>Tue Nov 09 2010</date>
+ <author>
+ <firstname>Scott</firstname>
+ <surname>Mumford</surname>
+ <email>smumford(a)redhat.com</email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member>Added more JIRA descriptions. Split 'Issues Fixed' into Product, Upstream and New Features lists</member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ <revision>
<revnumber>1-1.2</revnumber>
<date>Mon Nov 08 2010</date>
<author>
14 years, 2 months
gatein SVN: r4971 - in epp/examples/branches/EPP_5_1_Branch/portlets/idmhelloworld: src/main/webapp/WEB-INF and 1 other directory.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-11-08 13:26:14 -0500 (Mon, 08 Nov 2010)
New Revision: 4971
Removed:
epp/examples/branches/EPP_5_1_Branch/portlets/idmhelloworld/bin/
Modified:
epp/examples/branches/EPP_5_1_Branch/portlets/idmhelloworld/src/main/webapp/WEB-INF/portlet.xml
Log:
JBEPP-508: Duplicate portlet name between simplest-helloworld and idm-helloworld
Modified: epp/examples/branches/EPP_5_1_Branch/portlets/idmhelloworld/src/main/webapp/WEB-INF/portlet.xml
===================================================================
--- epp/examples/branches/EPP_5_1_Branch/portlets/idmhelloworld/src/main/webapp/WEB-INF/portlet.xml 2010-11-08 18:26:05 UTC (rev 4970)
+++ epp/examples/branches/EPP_5_1_Branch/portlets/idmhelloworld/src/main/webapp/WEB-INF/portlet.xml 2010-11-08 18:26:14 UTC (rev 4971)
@@ -5,7 +5,7 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">
<portlet>
- <portlet-name>SimplestHelloWorldPortlet</portlet-name>
+ <portlet-name>IDMHelloWorldPortlet</portlet-name>
<portlet-class>
org.jboss.portal.portlet.samples.IDMHelloWorldPortlet
</portlet-class>
@@ -13,7 +13,7 @@
<mime-type>text/html</mime-type>
</supports>
<portlet-info>
- <title>Simplest Hello World Portlet</title>
+ <title>IDM Hello World Portlet</title>
</portlet-info>
</portlet>
-</portlet-app>
\ No newline at end of file
+</portlet-app>
14 years, 2 months
gatein SVN: r4970 - in epp/examples/branches/EPP_5_0_Branch/portlets/idmhelloworld: src/main/webapp/WEB-INF and 1 other directory.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-11-08 13:26:05 -0500 (Mon, 08 Nov 2010)
New Revision: 4970
Removed:
epp/examples/branches/EPP_5_0_Branch/portlets/idmhelloworld/bin/
Modified:
epp/examples/branches/EPP_5_0_Branch/portlets/idmhelloworld/src/main/webapp/WEB-INF/portlet.xml
Log:
JBEPP-508: Duplicate portlet name between simplest-helloworld and idm-helloworld
Fixing for fixing
Modified: epp/examples/branches/EPP_5_0_Branch/portlets/idmhelloworld/src/main/webapp/WEB-INF/portlet.xml
===================================================================
--- epp/examples/branches/EPP_5_0_Branch/portlets/idmhelloworld/src/main/webapp/WEB-INF/portlet.xml 2010-11-08 18:19:33 UTC (rev 4969)
+++ epp/examples/branches/EPP_5_0_Branch/portlets/idmhelloworld/src/main/webapp/WEB-INF/portlet.xml 2010-11-08 18:26:05 UTC (rev 4970)
@@ -5,7 +5,7 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">
<portlet>
- <portlet-name>SimplestHelloWorldPortlet</portlet-name>
+ <portlet-name>IDMHelloWorldPortlet</portlet-name>
<portlet-class>
org.jboss.portal.portlet.samples.IDMHelloWorldPortlet
</portlet-class>
@@ -13,7 +13,7 @@
<mime-type>text/html</mime-type>
</supports>
<portlet-info>
- <title>Simplest Hello World Portlet</title>
+ <title>IDM Hello World Portlet</title>
</portlet-info>
</portlet>
-</portlet-app>
\ No newline at end of file
+</portlet-app>
14 years, 2 months
gatein SVN: r4969 - epp/examples/branches.
by do-not-reply@jboss.org
Author: thomas.heute(a)jboss.com
Date: 2010-11-08 13:19:33 -0500 (Mon, 08 Nov 2010)
New Revision: 4969
Added:
epp/examples/branches/EPP_5_1_Branch/
Log:
Preparing Branch 5.1
Copied: epp/examples/branches/EPP_5_1_Branch (from rev 4968, epp/examples/branches/EPP_5_0_Branch)
14 years, 2 months
gatein SVN: r4968 - portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application.
by do-not-reply@jboss.org
Author: mwringe
Date: 2010-11-08 09:17:48 -0500 (Mon, 08 Nov 2010)
New Revision: 4968
Modified:
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java
Log:
GTNPORTAL-1638: if the UpdateNavigationalStateResponse returns null values for WindowState or PortletMode then use the current values, not default values. The UpdateNavigationalStateResponse should only have values when the properties change.
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java 2010-11-08 10:41:13 UTC (rev 4967)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletActionListener.java 2010-11-08 14:17:48 UTC (rev 4968)
@@ -183,13 +183,23 @@
* If the current node is displaying a usual layout page, also tells the
* page which portlet to render or not when the state is maximized
*/
- WindowState state = new WindowState(getWindowStateOrDefault(navStateResponse));
- setNextState(uiPortlet, state);
+ // Note: we should only update the WindowState if the UpdateNavigationalStateResponse.getWindowState is not null,
+ // otherwise it means the WindowState has not changed and we should use the current value.
+ if (navStateResponse.getWindowState() != null)
+ {
+ WindowState state = new WindowState(getWindowStateOrDefault(navStateResponse));
+ setNextState(uiPortlet, state);
+ }
// update the portlet with the next mode to display
- PortletMode mode = new PortletMode(getPortletModeOrDefault(navStateResponse));
- setNextMode(uiPortlet, mode);
-
+ // Note: we should only update the Mode if the UpdateNavigationalStateResponse.getMode is not null,
+ // otherwise it means the mode has not changed and we should use the current value.
+ if (navStateResponse.getMode() != null)
+ {
+ PortletMode mode = new PortletMode(getPortletModeOrDefault(navStateResponse));
+ setNextMode(uiPortlet, mode);
+ }
+
/*
* Cache the render parameters in the UI portlet component to handle the
* navigational state. Each time a portlet is rendered (except using
14 years, 2 months
gatein SVN: r4967 - portal/branches/navcontroller/web/portal/src/main/webapp/WEB-INF/conf.
by do-not-reply@jboss.org
Author: julien_viet
Date: 2010-11-08 05:41:13 -0500 (Mon, 08 Nov 2010)
New Revision: 4967
Modified:
portal/branches/navcontroller/web/portal/src/main/webapp/WEB-INF/conf/default-router.xml
Log:
fix incorrect routing table
Modified: portal/branches/navcontroller/web/portal/src/main/webapp/WEB-INF/conf/default-router.xml
===================================================================
--- portal/branches/navcontroller/web/portal/src/main/webapp/WEB-INF/conf/default-router.xml 2010-11-08 10:19:24 UTC (rev 4966)
+++ portal/branches/navcontroller/web/portal/src/main/webapp/WEB-INF/conf/default-router.xml 2010-11-08 10:41:13 UTC (rev 4967)
@@ -39,11 +39,13 @@
<!-- The group access -->
<route path="/groups">
<route-param name="gtn:access" value="private"/>
+<!--
<route path="/">
<route-param name="gtn:sitetype" value="portal"/>
<route-param name="gtn:sitename" value="classic"/>
<route-param name="gtn:path" value="/groupnavigation"/>
</route>
+-->
<route path="/{gtn:sitename}{gtn:path}">
<route-param name="gtn:sitetype" value="group"/>
<path-param name="gtn:path" pattern=".*" encoding="preserve-path"/>
14 years, 2 months
gatein SVN: r4966 - epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US.
by do-not-reply@jboss.org
Author: smumford
Date: 2010-11-08 05:19:24 -0500 (Mon, 08 Nov 2010)
New Revision: 4966
Modified:
epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/5.1.0_Release_Notes.xml
epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Book_Info.xml
epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Revision_History.xml
Log:
JBEPP-603: Added further JIRA descriptions to Known and Resolved Isses sections, and added 'Resolved Upstream' section.
Modified: epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/5.1.0_Release_Notes.xml
===================================================================
--- epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/5.1.0_Release_Notes.xml 2010-11-08 03:40:16 UTC (rev 4965)
+++ epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/5.1.0_Release_Notes.xml 2010-11-08 10:19:24 UTC (rev 4966)
@@ -17,7 +17,7 @@
</section>
<section id="sect-Release_Notes-New_Features_and_Components">
- <title>New Features and Components</title>
+ <title>New Features and Component Upgrades</title>
<variablelist id="vari-Release_Notes-New_Features_and_Components-New_Features">
<title>New Features</title>
<varlistentry>
@@ -31,10 +31,9 @@
</para>
</listitem>
</varlistentry>
-
</variablelist>
<variablelist id="vari-Release_Notes-New_Features_and_Components-Component_Upgrades_in_VERSION_MICRO">
- <title><emphasis role="bold">Component Upgrades in &VERSION_MICRO;</emphasis></title>
+ <title><emphasis role="bold">Component Upgrades</emphasis></title>
<varlistentry>
<term>WSRP</term>
<listitem>
@@ -49,11 +48,8 @@
<para>
The JBoss Cache component has been upgraded to version 3.2.6.
</para>
-
</listitem>
-
</varlistentry>
-
</variablelist>
</section>
@@ -212,7 +208,7 @@
</table>
- </section>
+ </section> <!--Close Section: Component Versions-->
<section id="sect-Release_Notes-Installation">
<title>Installation</title>
@@ -228,7 +224,7 @@
<section id="sect-Release_Notes-Issues_fixed_in_this_release">
<title> Issues fixed in this release </title>
<para>
- Following is a list of issues fixed in this release:
+ The following is a list of issues fixed in this release:
</para>
<!-- Commented out for current release. Retaining the text to be reused in future release drafts. -->
<warning>
@@ -239,9 +235,9 @@
<para>
<emphasis role="bold">They are likely not technically correct at the moment</emphasis>, but they will serve as a basis and will be corrected in subsequent iterations after technical and QE reviews.
</para>
-
</warning>
<variablelist>
+ <title><emphasis role="bold">Issues fixed in the product:</emphasis></title>
<varlistentry>
<term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-513"></ulink></term>
<listitem>
@@ -256,96 +252,221 @@
</para>
</listitem>
</varlistentry>
- <varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-589"></ulink></term>
+ <listitem>
+ <para>
+ The RSS reader gadget was displaying incorrect publication dates for items fetched from feed sources.
+ </para>
+ <para>
+ Each item was being displayed with a publish date of <emphasis>less than a minute ago</emphasis>, regardless of when it was published by the feed.
+ </para>
+ <para>
+ The RSS aggregator has been patched to fetch and display the correct publication date.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-587"></ulink></term>
+ <listitem>
+ <para>
+ Some gadgets that do not have configurable preferences were displaying an unusable edit icon.
+ </para>
+ <para>
+ The gadget UI has been amended to remove the edit icon in gadgets that do not have configurable preferences.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-585"></ulink></term>
+ <listitem>
+ <para>
+ A bug was found that prevented administrators from changing the permissions of a category in the <emphasis role="bold">Application Registry</emphasis> from <emphasis>Public</emphasis> to a restricted group.
+ </para>
+ <para>
+ The Application Registry <emphasis role="bold">UIPermissionForm</emphasis> java code has been patched to correct his behaviour.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-584"></ulink></term>
+ <listitem>
+ <para>
+ An ambiguous error message returned when a URL referenced in a gadget does not exist has been revised and clarified.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-571"></ulink></term>
+ <listitem>
+ <para>
+ A bug that caused user preferences to be lost when the ToDo gadget was dragged and dropped on a Dashboard has been resolved.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-534"></ulink></term>
+ <listitem>
+ <para>
+ Users may have previously encountered errors when trying to add a remote gadget to a portal instance running on a HTTPS domain.
+ </para>
+ <para>
+ The error stated that the URL was invalid even when correct. This was because the Application Registry was expecting a valid certificate signed by a CA to verify the URL.
+ </para>
+ <para>
+ This error can be avoided by adding the certificate to the JRE CA with the command:
+ </para>
+<programlisting>keytool -import -alias toto -keystore /home/<replaceable>USER</replaceable>/Tools/Java/<replaceable>JDK_VERSION</replaceable>/jre/lib/security/cacerts -file ~/<replaceable>mycertificate</replaceable>
+</programlisting>
+ <para>
+ (Where <emphasis role="bold">mycertificate</emphasis> is the certificate created for SSL)
+ </para>
+ <para>
+ This information has also been added to the &PRODUCT; User Guide.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <variablelist>
+ <title>Issues fixed upstream:</title>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-454"></ulink></term>
+ <listitem>
+ <para>
+ This release includes numerous fixes for issues reported upstream. Follow the link above to review a tracking ticket listing these issues and fixes.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section> <!-- Close Section: Issues Fixed-->
+
+ <section id="sect-Release_Notes-_Known_Issues_with_this_release_">
+ <title> Known Issues with this release (Issues open as at 08 Nov 2010)</title>
+ <para>
+ The following is a list of known issues in this release:
+ </para>
+ <variablelist>
+ <varlistentry>
<term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-508" /></term>
<listitem>
<para>
- A naming duplication in pre-packaged "Hello World" portlet examples would cause an exception when both of the portlet examples were deployed. This issues has been resolved by renaming the <replaceable>Original_name</replaceable> portlet to <replaceable>New_name</replaceable>.
- </para>
- <para>
- Refer to the source commit logs in the above JIRA for specific code changes in this fix.
- </para>
- <important>
- <title><emphasis role="bold">DOC NOTE:</emphasis></title>
- <para>
- This JIRA, although slated for fix in EPP 5.1.0.ER04, was still open at the time of writing this Release Note.
- </para>
- </important>
+ A naming duplication in pre-packaged "Hello World" portlet examples causes an exception when both of the portlet examples are deployed.
+ </para>
</listitem>
- </varlistentry>
+ </varlistentry>
<varlistentry>
<term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-546"></ulink></term>
<listitem>
<para>
- A bug was found that affected the selection of users to add to a group. User selections made on the first page of the user list were lost when navigating to subsequent pages of the list.
+ A bug has been found that affects the selection of users being added to a group. User selections made on the first page of the user list, should the list span multiple pages, are lost when navigating to subsequent pages.
</para>
<para>
- The relevant code has been refined and now user selections are persistent across pages. Refer to the source commit logs in the above JIRA for specific code changes in this fix.
+ The user selections should be persistent across pages.
</para>
- <important>
- <title><emphasis role="bold">DOC NOTE:</emphasis></title>
- <para>
- This JIRA, although slated for fix in EPP 5.1.0.ER04, was still open at the time of writing this Release Note.
- </para>
- </important>
</listitem>
</varlistentry>
<varlistentry>
<term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-579"></ulink></term>
<listitem>
<para>
- A <emphasis role="bold">NullPointerException</emphasis> would be encountered if no <filename>navigation.xml</filename> file had been created for an LDAP user. A change to code in <filename>UIUserToolBarDashboardPortlet.gtmpl</filename> has corrected this issue by including a clause for this circumstance.
+ A <emphasis role="bold">NullPointerException</emphasis> is encountered if no <filename>navigation.xml</filename> file has been created for an LDAP user.
</para>
- <important>
- <title><emphasis role="bold">DOC NOTE:</emphasis></title>
- <para>
- This JIRA, although slated for fix in EPP 5.1.0.ER04, was still open at the time of writing this Release Note.
- </para>
- </important>
</listitem>
</varlistentry>
- </variablelist>
- <important>
- <title><emphasis role="bold">DOCS NOTE:</emphasis></title>
- <para>
- Do the <ulink type="http" url="https://jira.jboss.org/browse/JBEPP/component/12312983">EPP5 Requirements</ulink> and <ulink type="http" url="https://jira.jboss.org/browse/JBEPP/component/12313444">SP Integration</ulink> JIRAs need Release Notes?
- </para>
- <para>
- All the <emphasis role="bold">EPP51-###</emphasis> JIRAs seem to pertain to features in SP, which will be documented elsewhere (although probably not as Release Notes).
- </para>
- </important>
- </section>
-
- <section id="sect-Release_Notes-_Known_Issues_with_this_release_">
- <title> Known Issues with this release </title>
- <section id="sect-Release_Notes-_Known_Issues_with_this_release_-General_Known_Issues">
- <title>General Known Issues</title>
- <para>
- A list of general issues in this release can be found at:
- </para>
- <para>
- <ulink type="http" url="https://jira.jboss.org/secure/IssueNavigator.jspa?mode=hide&requestId..." />
- </para>
-
- </section>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-600"></ulink></term>
+ <listitem>
+ <para>
+ Creating new portals with names that contain all or part of the word 'portal' (such as: "por", "port", "porta" and "portal") will result in an incorrect URL writing to the Site links section of the main portal. This, in turn, will produce '404: Page not found' HTTP response errors when using these links.
+ </para>
+ <para>
+ Customers are advised to avoid using the problematic character sequences in new portal names until this issue is resolved.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-599"></ulink></term>
+ <listitem>
+ <para>
+ If a portal is deleted from its own Site management page (that is; if a user deletes the portal they are currently logged into), the resultant redirect returns the user to the public mode of the default portal (<emphasis>/portal/public/classic</emphasis>).
+ </para>
+ <para>
+ The user should be redirected to the private mode of the default portal (<emphasis>/portal/private/classic</emphasis>).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-554"></ulink></term>
+ <listitem>
+ <para>
+ Safari 4.0.4 users may experience problems adding gadgets to Dashboard pages. JavaScript errors appear when dropping a gadget onto a page and an empty space appears where the gadget was placed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-592"></ulink></term>
+ <listitem>
+ <para>
+ Editing the <emphasis role="bold">Template</emphasis> field of the banner or footer portlet preferences to any non-default value can result in changes not being validated as the portlets, by default, require a groovy template.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-570"></ulink></term>
+ <listitem>
+ <para>
+ &PRODUCT; &VERSION_MAJOR; does not start when used in conjunction with Oracle 11g R2 RAC. An error will occur when attempting to start the JCR connected to this type of database.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-562"></ulink></term>
+ <listitem>
+ <para>
+ A <emphasis role="bold">NullPointerException</emphasis> can be seen in a server log stacktrace after a user authenticated with the SPNEGO Single Sign-On method is automatically evicted after the set time-out period has elapsed.
+ </para>
+ <para>
+ This issue does not produce any flow-on effects.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </section> <!-- Close Section: Known Issues-->
-<!-- <section>
+ <section>
<title>Security Issues</title>
<variablelist>
<varlistentry>
- <term>No issues</term>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-610"></ulink></term>
<listitem>
<para>
- Any security related JIRA issues that need to go in here? JIRA says no.
+ Customers should be aware that passwords entered into the portal login form and submitted with the <emphasis>Remember me</emphasis> option are stored in the JCR database in plain text. This presents a possible security vulnerability.
</para>
- <para>
- If there aren't any JIRAs that need to be documented here, I'll remove this section.
- </para>
+ <important>
+ <title><emphasis role="bold">DOC NOTE</emphasis></title>
+ <para>
+ As yet there is no workaround/solution to this security issue.
+ </para>
+ </important>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><ulink type="http" url="https://jira.jboss.org/browse/JBEPP-593"></ulink></term>
+ <listitem>
+ <para>
+ Safari and Firefox 3.6 users are advised that the 'captcha' security device may not refresh when registering new users, meaning that the same alphanumeric code will be presented when adding another user.
+ </para>
+ <important>
+ <title><emphasis role="bold">DOC NOTE</emphasis></title>
+ <para>
+ As yet there is no workaround/solution to this security issue.
+ </para>
+ </important>
+ </listitem>
+ </varlistentry>
</variablelist>
- </section> -->
- </section>
+ </section> <!-- Close Section: Security Issues-->
<section id="sect-Release_Notes-Migration_from_Enterprise_Portal_Platform_4.3">
<title>Migration from Enterprise Portal Platform 4.3</title>
@@ -379,7 +500,7 @@
</section>
<section id="sect-Release_Notes-_Documentation_">
- <title> Documentation </title>
+ <title>Documentation</title>
<para>
Visit <ulink type="http" url="http://docs.redhat.com/docs/en-US/index.html">http://docs.redhat.com</ulink> for further documentation regarding &PRODUCT;.
</para>
Modified: epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Book_Info.xml
===================================================================
--- epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Book_Info.xml 2010-11-08 03:40:16 UTC (rev 4965)
+++ epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Book_Info.xml 2010-11-08 10:19:24 UTC (rev 4966)
@@ -7,12 +7,12 @@
<title>5.1.0 Release Notes</title>
<subtitle>For use with JBoss Enterprise Portal Platform 5.1.0</subtitle>
<edition>1</edition>
- <pubsnumber>1.0</pubsnumber>
+ <pubsnumber>1.2</pubsnumber>
<productname>JBoss Enterprise Portal Platform</productname>
<productnumber>5</productnumber>
<abstract>
<para>
- These release notes contain important information related to JBoss Enterprise Portal Platform 5.1.0 that may not be currently available in the Product Manuals. You should read these Release Notes in their entirety before installing JBoss Enterprise Portal Platform 5.1.0.
+ These release notes contain important information related to &PRODUCT; &VERSION_MICRO; that may not be currently available in the Product Manuals. You should read these Release Notes in their entirety before installing the product.
</para>
</abstract>
Modified: epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Revision_History.xml
===================================================================
--- epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Revision_History.xml 2010-11-08 03:40:16 UTC (rev 4965)
+++ epp/docs/branches/EPP_5_1_Branch/Release_Notes/en-US/Revision_History.xml 2010-11-08 10:19:24 UTC (rev 4966)
@@ -7,6 +7,34 @@
<title>Revision History</title>
<simpara>
<revhistory>
+ <revision>
+ <revnumber>1-1.2</revnumber>
+ <date>Mon Nov 08 2010</date>
+ <author>
+ <firstname>Scott</firstname>
+ <surname>Mumford</surname>
+ <email>smumford(a)redhat.com</email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member>Added further JIRA descriptions to Known and Resolved Issues sections and added 'Resolved Upstream' section.</member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ <revision>
+ <revnumber>1-1.1</revnumber>
+ <date>Thur Nov 04 2010</date>
+ <author>
+ <firstname>Scott</firstname>
+ <surname>Mumford</surname>
+ <email>smumford(a)redhat.com</email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member>Added draft issues descriptions.</member>
+ </simplelist>
+ </revdescription>
+ </revision>
<revision>
<revnumber>1-1.0</revnumber>
<date>Tues Oct 26 2010</date>
@@ -27,7 +55,7 @@
<email>theute(a)redhat.com</email>
</author> --> <revdescription>
<simplelist>
- <member>Release Notes created for Enterprise Portal Platform 5.1.0 release.</member>
+ <member>Release Notes created for &PRODUCT; &VERSION_MICRO; release.</member>
</simplelist>
14 years, 2 months
gatein SVN: r4965 - in portal/trunk: component/common/src/main/java/org/exoplatform/resolver and 38 other directories.
by do-not-reply@jboss.org
Author: trong.tran
Date: 2010-11-07 22:40:16 -0500 (Sun, 07 Nov 2010)
New Revision: 4965
Added:
portal/trunk/server/jboss/patch-ear/src/main/jboss/bin/exokey.pem
portal/trunk/server/jboss/patch-ear/src/main/jboss/bin/oauthkey.pem
portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPortalComponent/background/ArrowDown.gif
portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/container/UIColumnContainer.gtmpl
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/container/UIColumnContainer.java
Modified:
portal/trunk/component/common/src/main/java/org/exoplatform/commons/xml/DOMSerializer.java
portal/trunk/component/common/src/main/java/org/exoplatform/resolver/ResourceResolver.java
portal/trunk/component/common/src/test/java/org/exoplatform/commons/xml/TestDOMSerializer.java
portal/trunk/component/web/api/src/main/java/org/exoplatform/web/GenericHttpListener.java
portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/ErrorLoginServlet.java
portal/trunk/examples/portal/war/src/main/webapp/WEB-INF/web.xml
portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/toolbar/webui/component/UIUserToolBarSitePortlet.java
portal/trunk/portlet/exoadmin/src/main/webapp/groovy/applicationregistry/webui/component/UIGadgetInfo.gtmpl
portal/trunk/portlet/exoadmin/src/main/webapp/skin/applicationregistry/webui/component/UIApplicationRegistryPortlet/DefaultStylesheet.css
portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/core/DOMUtil.js
portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/core/DragDrop.js
portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalDragDrop.js
portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalHttpRequest.js
portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/UIPortal.js
portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIItemSelector.js
portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIPopup.js
portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIPopupWindow.js
portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIVerticalSlideTabs.js
portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPage/Stylesheet.css
portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPortalComponent/Stylesheet.css
portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIForms/UIForm/Stylesheet.css
portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIPopup/UIPopupCategory/Stylesheet.css
portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UISelector/UIItemSelector/Stylesheet.css
portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UISelector/UIItemSelector/background/TemplateContainer.jpg
portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UITabSystem/UIVerticalSlideTabs/Stylesheet.css
portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_ar.xml
portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_en.properties
portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_fr.properties
portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_vi.properties
portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/uiconf/portal/webui/container/ContainerConfigOption.groovy
portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml
portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/UILoginForm.gtmpl
portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/application/UIApplicationList.gtmpl
portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/container/UITableColumnContainer.gtmpl
portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/page/UIPageSelector2.gtmpl
portal/trunk/web/portal/src/main/webapp/groovy/webui/core/UIPopupWindow.gtmpl
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/core/UIPageIterator.java
portal/trunk/webui/eXo/src/main/java/org/exoplatform/webui/organization/account/UIUserSelector.java
portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/application/ConfigurationManager.java
portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/config/Component.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletLifecycle.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/login/UILoginForm.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageForm.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageSelector2.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java
portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java
Log:
GTNPORTAL-1592 Merge the works from branch into trunk
Modified: portal/trunk/component/common/src/main/java/org/exoplatform/commons/xml/DOMSerializer.java
===================================================================
--- portal/trunk/component/common/src/main/java/org/exoplatform/commons/xml/DOMSerializer.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/component/common/src/main/java/org/exoplatform/commons/xml/DOMSerializer.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -21,7 +21,9 @@
import org.gatein.common.logging.Logger;
import org.gatein.common.logging.LoggerFactory;
+import org.gatein.common.text.EntityEncoder;
import org.w3c.dom.Attr;
+import org.w3c.dom.CDATASection;
import org.w3c.dom.CharacterData;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
@@ -145,10 +147,14 @@
for (int i = 0;i < length;i++)
{
Node child = children.item(i);
- if (child instanceof CharacterData)
+ if(child instanceof CDATASection)
{
- writer.writeCData(((CharacterData)child).getData());
+ writer.writeCData(((CDATASection)child).getData());
}
+ else if (child instanceof CharacterData)
+ {
+ writeTextData(writer, ((CharacterData)child).getData());
+ }
else if (child instanceof Element)
{
serialize((Element)child, writer);
@@ -159,4 +165,26 @@
writer.writeEndElement();
}
}
+
+ private static void writeTextData(XMLStreamWriter writer, String data) throws XMLStreamException
+ {
+ StringBuilder builder = new StringBuilder();
+
+ for(int i = 0; i < data.length(); i++)
+ {
+ char c = data.charAt(i);
+ String encodedValue = EntityEncoder.FULL.lookup(c);
+
+ if(encodedValue == null)
+ {
+ builder.append(c);
+ }
+ else
+ {
+ builder.append(encodedValue);
+ }
+ }
+
+ writer.writeCharacters(builder.toString());
+ }
}
Modified: portal/trunk/component/common/src/main/java/org/exoplatform/resolver/ResourceResolver.java
===================================================================
--- portal/trunk/component/common/src/main/java/org/exoplatform/resolver/ResourceResolver.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/component/common/src/main/java/org/exoplatform/resolver/ResourceResolver.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -26,21 +26,60 @@
import java.util.List;
/**
+ * This abstract class provide an abstract way to retrieve different resources in different contexts (war, jar....) <br/>
+ * For example, to retrieve resource from an portlet, we implement <br/>
+ * {@link org.exoplatform.resolver.PortletResourceResolver} <br/>
+ * <br/>
+ * In gatein, we have caching machanism which use {@link org.exoplatform.resolver.ResourceKey} <br/>
+ * as key to determine cached resource, ResourceKey is generated by ResourceResolver.createResourceKey method <br/>
+ * <br/>
+ * By default, createResourceKey method return difference ResourceKey<br/>
+ * if we call that method on difference ResourceResolver instances (even with the same resource url)<br/>
+ * <br/>
+ * To make our caching machanism work properly,please make sure you use the same ResourceResolver<br/>
+ * or override the createResourceKey method of abstract class ResourceResolver<br/>
+ * and return the same ResourceKey for the same resource url<br/>
+ * <br/>
* Created by The eXo Platform SAS
* Mar 15, 2006
*/
abstract public class ResourceResolver
{
+ /**
+ * Return URL object to resource
+ * @param url - String path (specific to certain context) to resource
+ * @throws Exception
+ */
abstract public URL getResource(String url) throws Exception;
+ /**
+ * Return InputStream object to resource
+ * @param url - String path (specific to certain context) to resource
+ * @throws Exception
+ */
abstract public InputStream getInputStream(String url) throws Exception;
+ /**
+ * Return List of URL object to resource
+ * @param url - String path (specific to certain context) to resource
+ * @throws Exception
+ */
abstract public List<URL> getResources(String url) throws Exception;
+ /**
+ * Return List of InputStream object to resource
+ * @param url - String path (specific to certain context) to resource
+ * @throws Exception
+ */
abstract public List<InputStream> getInputStreams(String url) throws Exception;
@SuppressWarnings("unused")
+ /**
+ * Return web path to resource (/context/pathToResource)
+ * You should overidde this method in case of web context
+ * @param url - String path (specific to certain context) to resource
+ */
public String getWebAccessPath(String url)
{
throw new RuntimeException("This method is not supported");
@@ -54,21 +93,44 @@
throw new RuntimeException("unsupported method");
}
+ /**
+ * Return {@link org.exoplatform.resolver.ResourceKey} object<br/>
+ * <br/>
+ * Default implementation will return difference ResourceKey instance<br/>
+ * if we call that method on difference ResourceResolver instances (even with the same resource url)<br/>
+ * <br/>
+ * If you create new ResourceResolver each time you need access to a resource, please overidde this method<br/>
+ * and return the same ResourceKey for the same url<br/>
+ * @param url - String path (specific to certain context) to resource
+ */
public ResourceKey createResourceKey(String url)
{
return new ResourceKey(hashCode(), url);
}
+ /**
+ * Return resource id
+ * @param url - String path (specific to certain context) to resource
+ */
public String createResourceId(String url)
{
return hashCode() + ":" + url;
}
+ /**
+ * Return if this can resolve resource with specific url
+ * @param url String path to resource
+ */
public boolean isResolvable(String url)
{
return url.startsWith(getResourceScheme());
}
+ /**
+ * Return resource as array of bytes
+ * @param url - String path (specific to certain context) to resource
+ * @throws Exception
+ */
public byte[] getResourceContentAsBytes(String url) throws Exception
{
InputStream is = getInputStream(url);
@@ -83,6 +145,11 @@
return output.toByteArray();
}
+ /**
+ * Return if resource has been modified since specific time
+ * @param url- String path (specific to certain context) to resource
+ * @param lastAccess
+ */
abstract public boolean isModified(String url, long lastAccess);
protected String removeScheme(String url)
Modified: portal/trunk/component/common/src/test/java/org/exoplatform/commons/xml/TestDOMSerializer.java
===================================================================
--- portal/trunk/component/common/src/test/java/org/exoplatform/commons/xml/TestDOMSerializer.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/component/common/src/test/java/org/exoplatform/commons/xml/TestDOMSerializer.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -58,6 +58,16 @@
{
assertSerialization("<meta http-equiv=\"Content-Type\"/>", "<meta http-equiv='Content-Type'></meta>");
}
+
+ public void testOrdinaryTextElement() throws Exception
+ {
+ assertSerialization("<div>Blah Blah</div>", "<div>Blah Blah</div>");
+ }
+
+ public void testCDATaElement() throws Exception
+ {
+ assertSerialization("<div><![CDATA[Test Content]]></div>", "<div><![CDATA[Test Content]]></div>");
+ }
private void assertSerialization(String expectedMarkup, String markup) throws Exception
{
Modified: portal/trunk/component/web/api/src/main/java/org/exoplatform/web/GenericHttpListener.java
===================================================================
--- portal/trunk/component/web/api/src/main/java/org/exoplatform/web/GenericHttpListener.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/component/web/api/src/main/java/org/exoplatform/web/GenericHttpListener.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -19,6 +19,7 @@
package org.exoplatform.web;
+import org.exoplatform.commons.utils.PropertyManager;
import org.exoplatform.container.ExoContainer;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.container.PortalContainer;
@@ -140,7 +141,19 @@
PortalContainer.setInstance(portalContainer);
hasBeenSet = true;
}
- broadcast(portalContainer, CONTEXT_DESTROYED, event);
+ final String ctxName = event.getServletContext().getServletContextName();
+ if (!PortalContainer.isPortalContainerNameDisabled(ctxName) && portalContainer instanceof PortalContainer)
+ {
+ // The portal container corresponding to the current servlet context could be found
+ broadcast(portalContainer, CONTEXT_DESTROYED, event);
+ }
+ else if (PropertyManager.isDevelopping())
+ {
+ log.info("The portal environment could not be set for the webapp '" + ctxName
+ + "' because this servlet context has not been defined as a "
+ + "dependency of any portal container or it is a disabled portal"
+ + " container, the contextDestroyed event will be ignored");
+ }
}
catch (Exception ex)
{
Modified: portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/ErrorLoginServlet.java
===================================================================
--- portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/ErrorLoginServlet.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/component/web/security/src/main/java/org/exoplatform/web/login/ErrorLoginServlet.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -65,6 +65,11 @@
unregisterTokenCookie(req);
// Clear the token cookie
clearTokenCookie(req, resp);
+
+ //nguyenanhkien2a(a)gmail.com: We set content-type here for using RequestDispatcher.include() method below
+ //We can't use RequestDispatcher.forward() if we want to use some response information for output such as clearing cookies, etc
+ resp.setContentType("text/html; charset=UTF-8");
+
// This allows the customer to define another login page without changing the portal
context.getRequestDispatcher("/login/jsp/login.jsp").include(req, resp);
}
Modified: portal/trunk/examples/portal/war/src/main/webapp/WEB-INF/web.xml
===================================================================
--- portal/trunk/examples/portal/war/src/main/webapp/WEB-INF/web.xml 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/examples/portal/war/src/main/webapp/WEB-INF/web.xml 2010-11-08 03:40:16 UTC (rev 4965)
@@ -73,6 +73,16 @@
<filter-name>CacheUserProfileFilter</filter-name>
<filter-class>org.exoplatform.web.CacheUserProfileFilter</filter-class>
</filter>
+
+ <filter>
+ <filter-name>PortalContainerFilter</filter-name>
+ <filter-class>org.exoplatform.container.web.PortalContainerFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>PortalContainerFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
<filter-mapping>
<filter-name>GenericFilter</filter-name>
Modified: portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/toolbar/webui/component/UIUserToolBarSitePortlet.java
===================================================================
--- portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/toolbar/webui/component/UIUserToolBarSitePortlet.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/portlet/exoadmin/src/main/java/org/exoplatform/toolbar/webui/component/UIUserToolBarSitePortlet.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -60,7 +60,8 @@
public String getPortalURI(String portalName)
{
- return Util.getPortalRequestContext().getPortalURI().replace(getCurrentPortal(), portalName);
+ String currentPortalURI = Util.getPortalRequestContext().getPortalURI();
+ return currentPortalURI.substring(0, currentPortalURI.lastIndexOf(getCurrentPortal())) + portalName + "/";
}
public PageNavigation getCurrentPortalNavigation() throws Exception
Modified: portal/trunk/portlet/exoadmin/src/main/webapp/groovy/applicationregistry/webui/component/UIGadgetInfo.gtmpl
===================================================================
--- portal/trunk/portlet/exoadmin/src/main/webapp/groovy/applicationregistry/webui/component/UIGadgetInfo.gtmpl 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/portlet/exoadmin/src/main/webapp/groovy/applicationregistry/webui/component/UIGadgetInfo.gtmpl 2010-11-08 03:40:16 UTC (rev 4965)
@@ -21,7 +21,7 @@
<div class="Refresh16x16Icon ControlIcon" title="<%=_ctx.appRes("UIGadgetInfo.title.refresh")%>" onclick="<%= uicomponent.event("Refresh") %>"><span></span></div>
<div class="ClearBoth"><span></span></div>
</div>
- <div class="Application">
+ <div class="Application ClearFix">
<div class="PortletIcons">
<img src="$gadgetThumbnail" onError="src='$srcBGError'" alt=""/>
</div>
Modified: portal/trunk/portlet/exoadmin/src/main/webapp/skin/applicationregistry/webui/component/UIApplicationRegistryPortlet/DefaultStylesheet.css
===================================================================
--- portal/trunk/portlet/exoadmin/src/main/webapp/skin/applicationregistry/webui/component/UIApplicationRegistryPortlet/DefaultStylesheet.css 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/portlet/exoadmin/src/main/webapp/skin/applicationregistry/webui/component/UIApplicationRegistryPortlet/DefaultStylesheet.css 2010-11-08 03:40:16 UTC (rev 4965)
@@ -17,505 +17,514 @@
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
-/**
- * Created by The eXo Platform SARL
- * Modifile : Nguyen Ngoc Thuy
- * May 8, 2007
- * version: $Id$
- */
-
-.UIWindow .UIApplicationRegistryPortlet {
- overflow: visible;
-}
-
-.UIApplicationRegistryPortlet {
- overflow: auto;
- background: white;
-}
-
-.UIApplicationRegistryPortlet .CategoryContainer .EditIcon {
- float: none;
-}
-
-.UIApplicationRegistryPortlet .UIControlbar {
- background: url('DefaultSkin/background/ControlIcon.gif') repeat-x center -222px;
- border: 1px solid #b7b7b7;
- height: 23px; line-height: 23px;
- padding: 0px 10px;
- margin: 5px 0px;
-}
-
-.UIApplicationRegistryPortlet .UIControlbar .IconControl {
- float: left; /* orientation=lt */
- float: right; /* orientation=rt */
- cursor: pointer;
- background-image: url('DefaultSkin/background/ControlIcon.gif'); /* orientation=lt */
- background-image: url('DefaultSkin/background/ControlIcon-rt.gif'); /* orientation=rt */
- background-repeat: no-repeat;
- padding-left: 25px; /* orientation=lt */
- padding-right: 25px; /* orientation=rt */
- line-height: 23px;
- margin: 0px 15px 0px 7px; /* orientation=lt */
- margin: 0px 7px 0px 15px; /* orientation=rt */
- width: auto;
- height: auto;
-}
-
-.UIApplicationRegistryPortlet .UIControlbar .AddNewIcon {
- background-position: left top; /* orientation=lt */
- background-position: right top; /* orientation=rt */
-}
-
-.UIApplicationRegistryPortlet .AddIcon {
- background: url('DefaultSkin/background/ControlIcon.gif') no-repeat left -247px; /* orientation=lt */
- background: url('DefaultSkin/background/ControlIcon-rt.gif') no-repeat right -247px; /* orientation=rt */
- width: 19px;
- height: 20px;
-}
-
-.UIApplicationRegistryPortlet .ReloadIcon {
- background: url('DefaultSkin/background/ControlIcon.gif') no-repeat left -273px; /* orientation=lt */
- background: url('DefaultSkin/background/ControlIcon-rt.gif') no-repeat right -273px; /* orientation=rt */
- width: 19px;
- height: 20px;
-}
-
-.UIApplicationRegistryPortlet .UIControlbar .AddCategoryIcon {
- background-position: left -46px; /* orientation=lt */
- background-position: right -46px; /* orientation=rt */
-}
-
-.UIApplicationRegistryPortlet .CreateNewIcon {
- background: url('DefaultSkin/background/ControlIcon.gif') no-repeat left -25px; /* orientation=lt */
- background: url('DefaultSkin/background/ControlIcon-rt.gif') no-repeat right -25px; /* orientation=rt */
- width: 19px;
- height: 20px;
-}
-
-.UIApplicationRegistryPortlet .UIControlbar .ImportIcon {
- background-position: left -69px; /* orientation=lt */
- background-position: right -69px; /* orientation=rt */
- float: right; /* orientation=lt */
- float: left; /* orientation=rt */
-}
-
-.UIApplicationRegistryPortlet .CopyGadgetIcon {
- background: url('DefaultSkin/background/ControlIcon.gif') repeat-x left -69px; /* orientation=lt */
- background: url('DefaultSkin/background/ControlIcon-rt.gif') repeat-x right -69px; /* orientation=rt */
- width: 23px;
- height: 22px;
-}
-
-.UIApplicationRegistryPortlet .AppRegistryContainer {
- height: 100%;
- border: 1px solid #b7b7b7;
- background: url('DefaultSkin/background/Repeat-Y16x2.gif') repeat-y left top; /* orientation=lt */
- background: url('DefaultSkin/background/Repeat-Y16x2-rt.gif') repeat-y right top; /* orientation=rt */
-}
-
-.UIApplicationRegistryPortlet .AppRegistryContainer .AppRegistryControl {
- float: left; /* orientation=lt */
- float: right; /* orientation=rt */
- width: 239px;
-}
-
-.UIApplicationRegistryPortlet .AppRegistryContainer .ControlArea {
- padding: 5px 2px 5px 5px; /* orientation=lt */
- padding: 5px 5px 5px 2px; /* orientation=rt */
-}
-
-.UIApplicationRegistryPortlet .AppRegistryControl .CategoryContent {
- padding: 1px;
- background: white;
- border: 1px solid #d7d7d7;
-}
-
-.UIApplicationRegistryPortlet .AppRegistryControl .Border {
- border: 1px solid #d7d7d7;
- padding: 1px; margin: 1px;
-}
-
-.UIApplicationRegistryPortlet .AppRegistryControl .TitleCategory {
- background: url('DefaultSkin/background/AppRegistryControl.gif') repeat-x left top;
- height: 17px;
- padding: 10px 5px 0px 5px;
- color: white;
- font-weight: bold;
- letter-spacing: 2px;
- text-transform: uppercase;
-}
-
-.UIApplicationRegistryPortlet .CategoryContent .ListContent {
- border: 1px solid #d7d7d7;
- margin: 5px;
-}
-
-.UIApplicationRegistryPortlet .CategoryContent .ItemContent {
- line-height: 26px;
- height: 26px;
- background: url('DefaultSkin/background/AppRegistryControl.gif') no-repeat -453px bottom;
- padding: 0px 5px;
-}
-
-.UIApplicationRegistryPortlet .CategoryContent a.TabLabel:hover {
- color: #058ee6;
-}
-
-.UIApplicationRegistryPortlet .CategoryContent .SelectedItem .TabLabel {
- color: #058ee6;
-}
-
-.UIApplicationRegistryPortlet .CategoryContent a.TabLabel {
- display: block;
- float: left; /* orientation=lt */
- float: right; /* orientation=rt */
- background: url('DefaultSkin/background/ControlIcon.gif') repeat-y left -92px; /* orientation=lt */
- background: url('DefaultSkin/background/ControlIcon-rt.gif') repeat-y right -92px; /* orientation=rt */
- padding: 0px 0px 0px 20px; /* orientation=lt */
- padding: 0px 20px 0px 0px; /* orientation=rt */
- cursor: pointer;
- width: 160px;
- overflow: hidden;
- white-space: nowrap;
-}
-
-.UIApplicationRegistryPortlet .CategoryContent .ControlIcon {
- display: block;
- float: right; /* orientation=lt */
- float: left; /* orientation=rt */
- margin: 3px;
- filter: alpha(opacity=30);
- -moz-opacity: 0.3;
-}
-
-.UIApplicationRegistryPortlet .ListItem .SelectedItem a.TabLabel {
- font-weight: bold;
- padding-left: 3px; /* orientation=lt */
- padding-right: 3px; /* orientation=rt */
-}
-
-.UIApplicationRegistryPortlet .CategoryContent .ItemContent:hover {
- background-color: #9d9d9d;
-}
-
-.UIApplicationRegistryPortlet .CategoryContent .ItemContent:hover a {
- color: white;
-}
-
-.UIApplicationRegistryPortlet .UIVerticalSlideTabs {
- margin: 1px 1px 1px 0px;
-}
-
-.UIApplicationRegistryPortlet .UIVerticalSlideTabs a:hover {
- color: #058ee6;
-}
-
-.UIApplicationRegistryPortlet .UIVerticalSlideTabs .NormalTab a.TabLabel {
- background: url('DefaultSkin/background/BlueNextArrow.gif') no-repeat left center; /* orientation=lt */
- background: url('DefaultSkin/background/BlueNextArrow-rt.gif') no-repeat right center; /* orientation=rt */
- padding: 0 0 0 18px; /* orientation=lt */
- padding: 0 18px 0 0; /* orientation=rt */
- display: block;
-}
-
-.UIApplicationRegistryPortlet .UIVerticalSlideTabs .SelectedTab a.TabLabel {
- background: url('DefaultSkin/background/BlueDownArrow.gif') no-repeat left center;
- padding: 0 0 0 18px; /* orientation=lt */
- padding: 0 18px 0 0; /* orientation=rt */
- display: block;
- width: 120px; overflow: hidden;
- color: #626262;
-}
-
-.UIApplicationRegistryPortlet .UIVerticalSlideTabs .NormalTab .ControlIcon {
- float: right; /* orientation=lt */
- float: left; /* orientation=rt */
-}
-
-.UIApplicationRegistryPortlet .UIVerticalSlideTabs .SelectedTab .ControlIcon {
- float: right; /* orientation=lt */
- float: left; /* orientation=rt */
- filter: alpha(opacity=100);
- -moz-opacity: 1.0;
-}
-
-.UIApplicationRegistryPortlet .UIVerticalSlideTabs .UIVTabContent .ItemLabel {
- background: url('DefaultSkin/background/ControlIcon.gif') no-repeat left -170px; /* orientation=lt */
- background: url('DefaultSkin/background/ControlIcon-rt.gif') no-repeat right -170px; /* orientation=rt */
- padding-left: 10px; /* orientation=lt */
- padding-right: 10px; /* orientation=rt */
- display: block;
- float: left; /* orientation=lt */
- float: right; /* orientation=rt */
- cursor: pointer;
- width: 160px;
- overflow: hidden;
- white-space: nowrap;
-}
-
-.UIApplicationRegistryPortlet .UIVerticalSlideTabs .VTabSimpleStyle .UIVTabContent {
- padding: 5px;
- margin: 0px;
-}
-
-.UIApplicationRegistryPortlet .UIVTabContent .SelectedItem .ItemLabel {
- background: url('DefaultSkin/background/ControlIcon.gif') no-repeat left -196px; /* orientation=lt */
- background: url('DefaultSkin/background/ControlIcon-rt.gif') no-repeat right -196px; /* orientation=rt */
- display: block;
- color: #898989;
-}
-
-.UIApplicationRegistryPortlet .UIVerticalSlideTabs .UIVTabContent .ControlIcon {
- float: right; /* orientation=lt */
+/**
+ * Created by The eXo Platform SARL
+ * Modifile : Nguyen Ngoc Thuy
+ * May 8, 2007
+ * version: $Id$
+ */
+
+.UIWindow .UIApplicationRegistryPortlet {
+ overflow: visible;
+}
+
+.UIApplicationRegistryPortlet {
+ overflow: auto;
+ background: white;
+}
+
+.UIApplicationRegistryPortlet .CategoryContainer .EditIcon {
+ float: none;
+}
+
+.UIApplicationRegistryPortlet .UIControlbar {
+ background: url('DefaultSkin/background/ControlIcon.gif') repeat-x center -222px;
+ border: 1px solid #b7b7b7;
+ height: 23px; line-height: 23px;
+ padding: 0px 10px;
+ margin: 5px 0px;
+}
+
+.UIApplicationRegistryPortlet .UIControlbar .IconControl {
+ float: left; /* orientation=lt */
+ float: right; /* orientation=rt */
+ cursor: pointer;
+ background-image: url('DefaultSkin/background/ControlIcon.gif'); /* orientation=lt */
+ background-image: url('DefaultSkin/background/ControlIcon-rt.gif'); /* orientation=rt */
+ background-repeat: no-repeat;
+ padding-left: 25px; /* orientation=lt */
+ padding-right: 25px; /* orientation=rt */
+ line-height: 23px;
+ margin: 0px 15px 0px 7px; /* orientation=lt */
+ margin: 0px 7px 0px 15px; /* orientation=rt */
+ width: auto;
+ height: auto;
+}
+
+.UIApplicationRegistryPortlet .UIControlbar .AddNewIcon {
+ background-position: left top; /* orientation=lt */
+ background-position: right top; /* orientation=rt */
+}
+
+.UIApplicationRegistryPortlet .AddIcon {
+ background: url('DefaultSkin/background/ControlIcon.gif') no-repeat left -247px; /* orientation=lt */
+ background: url('DefaultSkin/background/ControlIcon-rt.gif') no-repeat right -247px; /* orientation=rt */
+ width: 19px;
+ height: 20px;
+}
+
+.UIApplicationRegistryPortlet .ReloadIcon {
+ background: url('DefaultSkin/background/ControlIcon.gif') no-repeat left -273px; /* orientation=lt */
+ background: url('DefaultSkin/background/ControlIcon-rt.gif') no-repeat right -273px; /* orientation=rt */
+ width: 19px;
+ height: 20px;
+}
+
+.UIApplicationRegistryPortlet .UIControlbar .AddCategoryIcon {
+ background-position: left -46px; /* orientation=lt */
+ background-position: right -46px; /* orientation=rt */
+}
+
+.UIApplicationRegistryPortlet .CreateNewIcon {
+ background: url('DefaultSkin/background/ControlIcon.gif') no-repeat left -25px; /* orientation=lt */
+ background: url('DefaultSkin/background/ControlIcon-rt.gif') no-repeat right -25px; /* orientation=rt */
+ width: 19px;
+ height: 20px;
+}
+
+.UIApplicationRegistryPortlet .UIControlbar .ImportIcon {
+ background-position: left -69px; /* orientation=lt */
+ background-position: right -69px; /* orientation=rt */
+ float: right; /* orientation=lt */
float: left; /* orientation=rt */
- cursor: pointer;
-}
-
-/**************************** AppWorkingArea *****************************/
-
-.UIApplicationRegistryPortlet .AppWorkingArea {
- margin-left: 260px; /* orientation=lt */
- margin-right: 260px; /* orientation=rt */
- padding: 10px;
-}
-
-.UIApplicationRegistryPortlet .UIBreadcumb {
- padding: 0px 10px;
- border-bottom: 1px solid #b7b7b7;
- height: 19px;
- color: #4b4b4b;
- font-weight: bold;
-}
-
-.UIApplicationRegistryPortlet .UIBreadcumb .BreadcumbInfo {
- width: 90%;
- overflow: hidden;
- height: 16px;
- line-height: 16px;
-}
-
-.UIApplicationRegistryPortlet .UIBreadcumb .RightBlackGridArrow16x16Icon {
- background-position: center;
- float: left; /* orientation=lt */
- float: right; /* orientation=rt */
- height: 6px;
- margin: 5px 0px 0px;
-}
-
-.UIApplicationRegistryPortlet .UIBreadcumb .Selected {
- float: left; /* orientation=lt */
- float: right; /* orientation=rt */
- color: #535353;
-}
-
-.UIApplicationRegistryPortlet .UIBreadcumb .ControlIcon {
- float: right; /* orientation=lt */
- float: left; /* orientation=rt */
+}
+
+.UIApplicationRegistryPortlet .CopyGadgetIcon {
+ background: url('DefaultSkin/background/ControlIcon.gif') repeat-x left -69px; /* orientation=lt */
+ background: url('DefaultSkin/background/ControlIcon-rt.gif') repeat-x right -69px; /* orientation=rt */
+ width: 23px;
+ height: 22px;
+}
+
+.UIApplicationRegistryPortlet .AppRegistryContainer {
+ height: 100%;
+ border: 1px solid #b7b7b7;
+ background: url('DefaultSkin/background/Repeat-Y16x2.gif') repeat-y left top; /* orientation=lt */
+ background: url('DefaultSkin/background/Repeat-Y16x2-rt.gif') repeat-y right top; /* orientation=rt */
+}
+
+.UIApplicationRegistryPortlet .AppRegistryContainer .AppRegistryControl {
+ float: left; /* orientation=lt */
+ float: right; /* orientation=rt */
+ width: 239px;
+}
+
+.UIApplicationRegistryPortlet .AppRegistryContainer .ControlArea {
+ padding: 5px 2px 5px 5px; /* orientation=lt */
+ padding: 5px 5px 5px 2px; /* orientation=rt */
+}
+
+.UIApplicationRegistryPortlet .AppRegistryControl .CategoryContent {
+ padding: 1px;
+ background: white;
+ border: 1px solid #d7d7d7;
+}
+
+.UIApplicationRegistryPortlet .AppRegistryControl .Border {
+ border: 1px solid #d7d7d7;
+ padding: 1px; margin: 1px;
+}
+
+.UIApplicationRegistryPortlet .AppRegistryControl .TitleCategory {
+ background: url('DefaultSkin/background/AppRegistryControl.gif') repeat-x left top;
+ height: 17px;
+ padding: 10px 5px 0px 5px;
+ color: white;
+ font-weight: bold;
+ letter-spacing: 2px;
+ text-transform: uppercase;
+}
+
+.UIApplicationRegistryPortlet .CategoryContent .ListContent {
+ border: 1px solid #d7d7d7;
+ margin: 5px;
+}
+
+.UIApplicationRegistryPortlet .CategoryContent .ItemContent {
+ line-height: 26px;
+ height: 26px;
+ background: url('DefaultSkin/background/AppRegistryControl.gif') no-repeat -453px bottom;
+ padding: 0px 5px;
+}
+
+.UIApplicationRegistryPortlet .CategoryContent a.TabLabel:hover {
+ color: #058ee6;
+}
+
+.UIApplicationRegistryPortlet .CategoryContent .SelectedItem .TabLabel {
+ color: #058ee6;
+}
+
+.UIApplicationRegistryPortlet .CategoryContent a.TabLabel {
+ display: block;
+ float: left; /* orientation=lt */
+ float: right; /* orientation=rt */
+ background: url('DefaultSkin/background/ControlIcon.gif') repeat-y left -92px; /* orientation=lt */
+ background: url('DefaultSkin/background/ControlIcon-rt.gif') repeat-y right -92px; /* orientation=rt */
+ padding: 0px 0px 0px 20px; /* orientation=lt */
+ padding: 0px 20px 0px 0px; /* orientation=rt */
+ cursor: pointer;
+ width: 160px;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.UIApplicationRegistryPortlet .CategoryContent .ControlIcon {
+ display: block;
+ float: right; /* orientation=lt */
+ float: left; /* orientation=rt */
+ margin: 3px;
+ filter: alpha(opacity=30);
+ -moz-opacity: 0.3;
+}
+
+.UIApplicationRegistryPortlet .ListItem .SelectedItem a.TabLabel {
+ font-weight: bold;
+ padding-left: 3px; /* orientation=lt */
+ padding-right: 3px; /* orientation=rt */
+}
+
+.UIApplicationRegistryPortlet .CategoryContent .ItemContent:hover {
+ background-color: #9d9d9d;
+}
+
+.UIApplicationRegistryPortlet .CategoryContent .ItemContent:hover a {
+ color: white;
+}
+
+.UIApplicationRegistryPortlet .UIVerticalSlideTabs {
+ margin: 1px 1px 1px 0px;
+}
+
+.UIApplicationRegistryPortlet .UIVerticalSlideTabs a:hover {
+ color: #058ee6;
+}
+
+.UIApplicationRegistryPortlet .UIVerticalSlideTabs .NormalTab a.TabLabel {
+ background: url('DefaultSkin/background/BlueNextArrow.gif') no-repeat left center; /* orientation=lt */
+ background: url('DefaultSkin/background/BlueNextArrow-rt.gif') no-repeat right center; /* orientation=rt */
+ padding: 0 0 0 18px; /* orientation=lt */
+ padding: 0 18px 0 0; /* orientation=rt */
+ display: block;
+}
+
+.UIApplicationRegistryPortlet .UIVerticalSlideTabs .SelectedTab a.TabLabel {
+ background: url('DefaultSkin/background/BlueDownArrow.gif') no-repeat left center;
+ padding: 0 0 0 18px; /* orientation=lt */
+ padding: 0 18px 0 0; /* orientation=rt */
+ display: block;
+ width: 120px; overflow: hidden;
+ color: #626262;
+}
+
+.UIApplicationRegistryPortlet .UIVerticalSlideTabs .NormalTab .ControlIcon {
+ float: right; /* orientation=lt */
+ float: left; /* orientation=rt */
+}
+
+.UIApplicationRegistryPortlet .UIVerticalSlideTabs .SelectedTab .ControlIcon {
+ float: right; /* orientation=lt */
+ float: left; /* orientation=rt */
+ filter: alpha(opacity=100);
+ -moz-opacity: 1.0;
+}
+
+.UIApplicationRegistryPortlet .UIVerticalSlideTabs .UIVTabContent .ItemLabel {
+ background: url('DefaultSkin/background/ControlIcon.gif') no-repeat left -170px; /* orientation=lt */
+ background: url('DefaultSkin/background/ControlIcon-rt.gif') no-repeat right -170px; /* orientation=rt */
+ padding-left: 10px; /* orientation=lt */
+ padding-right: 10px; /* orientation=rt */
+ display: block;
+ float: left; /* orientation=lt */
+ float: right; /* orientation=rt */
+ cursor: pointer;
+ width: 160px;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.UIApplicationRegistryPortlet .UIVerticalSlideTabs .VTabSimpleStyle .UIVTabContent {
+ padding: 5px;
+ margin: 0px;
+}
+
+.UIApplicationRegistryPortlet .UIVTabContent .SelectedItem .ItemLabel {
+ background: url('DefaultSkin/background/ControlIcon.gif') no-repeat left -196px; /* orientation=lt */
+ background: url('DefaultSkin/background/ControlIcon-rt.gif') no-repeat right -196px; /* orientation=rt */
+ display: block;
+ color: #898989;
+}
+
+.UIApplicationRegistryPortlet .UIVerticalSlideTabs .UIVTabContent .ControlIcon {
+ float: right; /* orientation=lt */
+ float: left; /* orientation=rt */
+ cursor: pointer;
+}
+
+/**************************** AppWorkingArea *****************************/
+
+.UIApplicationRegistryPortlet .AppWorkingArea {
+ margin-left: 260px; /* orientation=lt */
+ margin-right: 260px; /* orientation=rt */
+ padding: 10px;
+}
+
+.UIApplicationRegistryPortlet .UIBreadcumb {
+ padding: 0px 10px;
+ border-bottom: 1px solid #b7b7b7;
+ height: 19px;
+ color: #4b4b4b;
+ font-weight: bold;
+}
+
+.UIApplicationRegistryPortlet .UIBreadcumb .BreadcumbInfo {
+ width: 90%;
+ overflow: hidden;
+ height: 16px;
+ line-height: 16px;
+}
+
+.UIApplicationRegistryPortlet .UIBreadcumb .RightBlackGridArrow16x16Icon {
+ background-position: center;
+ float: left; /* orientation=lt */
+ float: right; /* orientation=rt */
+ height: 6px;
+ margin: 5px 0px 0px;
+}
+
+.UIApplicationRegistryPortlet .UIBreadcumb .Selected {
+ float: left; /* orientation=lt */
+ float: right; /* orientation=rt */
+ color: #535353;
+}
+
+.UIApplicationRegistryPortlet .UIBreadcumb .ControlIcon {
+ float: right; /* orientation=lt */
+ float: left; /* orientation=rt */
margin: 0px 5px;
- cursor: pointer;
-}
-
-.UIApplicationRegistryPortlet .ApplicationContainer {
- padding: 10px 0px;
-}
-
-.UIApplicationRegistryPortlet .ApplicationContent {
- margin-left: 90px; /* orientation=lt */
- margin-right: 90px; /* orientation=rt */
- padding: 15px 15px 15px 0px; /* orientation=lt */
- padding: 15px 0px 15px 15px; /* orientation=rt */
-}
-
-.UIApplicationRegistryPortlet .ApplicationContent table {
- table-layout: fixed;
- width: 99%;
- line-height: 18px;
-}
-
-.UIApplicationRegistryPortlet .ApplicationContent .RightLabel {
- width: 78%;
- overflow: hidden;
- padding: 0px 4px;
- vertical-align: middle;
-}
-
-.UIApplicationRegistryPortlet .TitleBarApplication {
- background: none;
- font-weight: bold; font-size: 12px; color: #535353;
-}
-
-.UIApplicationRegistryPortlet .ApplicationContentLabel {
- line-height: 16px;
- margin: auto;
-}
-
-.UIApplicationRegistryPortlet .ApplicationContent .LeftLabel {
- font-weight: bold;
- font-size: 11px;
- color: black;
- text-align: right; /* orientation=lt */
- text-align: left; /* orientation=rt */
-}
-
-.UIApplicationRegistryPortlet .ApplicationContentLabel .RightLabel {
- padding: 0px 5px;
-}
-
-.UIApplicationRegistryPortlet .PortletIcons {
- float: left; /* orientation=lt */
- float: right; /* orientation=rt */
- width: 80px;
- height: 80px;
- cursor: pointer;
- margin-top: 2px;
-}
-
-.UIApplicationRegistryPortlet .UIFormWithTitle {
- width: 480px;
-}
+ cursor: pointer;
+}
+.UIApplicationRegistryPortlet .ApplicationContainer {
+ padding: 10px 0px;
+}
+
+.UIApplicationRegistryPortlet .ApplicationContent {
+ margin-left: 90px; /* orientation=lt */
+ margin-right: 90px; /* orientation=rt */
+ padding: 15px 15px 15px 0px; /* orientation=lt */
+ padding: 15px 0px 15px 15px; /* orientation=rt */
+}
+
+.UIApplicationRegistryPortlet .ApplicationContent table {
+ table-layout: fixed;
+ width: 99%;
+ line-height: 18px;
+}
+
+.UIApplicationRegistryPortlet .ApplicationContent .RightLabel {
+ width: 78%;
+ overflow: hidden;
+ padding: 0px 4px;
+ vertical-align: middle;
+}
+
+.UIApplicationRegistryPortlet .TitleBarApplication {
+ background: none;
+ font-weight: bold; font-size: 12px; color: #535353;
+}
+
+.UIApplicationRegistryPortlet .ApplicationContentLabel {
+ line-height: 16px;
+ margin: auto;
+}
+
+.UIApplicationRegistryPortlet .ApplicationContent .LeftLabel {
+ font-weight: bold;
+ font-size: 11px;
+ color: black;
+ text-align: right; /* orientation=lt */
+ text-align: left; /* orientation=rt */
+ word-wrap: break-word;
+}
+
+.UIApplicationRegistryPortlet .ApplicationContentLabel .RightLabel {
+ padding: 0px 5px;
+}
+
+.UIApplicationRegistryPortlet .PortletIcons {
+ float: left; /* orientation=lt */
+ float: right; /* orientation=rt */
+ width: 80px;
+ height: 80px;
+ cursor: pointer;
+ margin-top: 2px;
+}
+
+.UIApplicationRegistryPortlet .UIFormWithTitle {
+ width: 480px;
+}
+
.UIApplicationRegistryPortlet .UIFormWithTitle .HintMessage {
font-style:italic;
padding:10px;
text-align:center;
-}
-/*******************************UIAcessPermissions******************************/
-
-.UIApplicationRegistryPortlet .UIAcessPermissions {
- margin: 20px 0px;
- width: auto;
- height: 100%;
-}
-
-.UIApplicationRegistryPortlet .UIAcessPermissions .UIForm .HorizontalLayout {
- padding: 0px;
- border: none;
- background: none;
-}
-
-.UIApplicationRegistryPortlet .UIAcessPermissions .UIFormGrid {
- width: 100%;
-}
-
-.UIApplicationRegistryPortlet .UIAcessPermissions .PublicCheck .UIFormGrid {
- width: auto;
-}
-
-/**************************** UIOrganizerManagement ***************************/
-
-.UIApplicationRegistryPortlet .UIAddApplicationForm .UIFormGrid {
- width: 99%;
-}
-
-.UIOrganizerManagement .UIFormInputSet .UIFormGrid {
- width: 99%;
-}
-
-.UIOrganizerManagement .UIFormInputSet .PublicCheck .UIFormGrid {
- width: auto;
-}
-
-.UIOrganizerManagement .UIAddApplicationForm .UIFormGrid td.text {
- white-space: normal;
-}
-/***************************** UIPortletManagement ***************************/
-
-.UIPortletManagement .ListCategory .CategoryLable {
- background: url(DefaultSkin/background/ControlIcon.gif) no-repeat scroll 5px -170px; /* orientation=lt */
- background: url(DefaultSkin/background/ControlIcon-rt.gif) no-repeat scroll right -170px; /* orientation=rt */
- padding: 0px 0px 0px 15px; /* orientation=lt */
- padding: 0px 15px 0px 0px; /* orientation=rt */
- display: block;
- line-height: 25px;
- border-bottom: 1px solid #dddddd;
-}
-
-.UIPortletManagement .SelectedCategory .CategoryLable {
- background: #b7b7b7 url(DefaultSkin/background/ControlIcon.gif) no-repeat scroll 5px -196px; /* orientation=lt */
- background: #b7b7b7 url(DefaultSkin/background/ControlIcon-rt.gif) no-repeat scroll right -196px; /* orientation=rt */
- color: white;
+}
+/*******************************UIAcessPermissions******************************/
+
+.UIApplicationRegistryPortlet .UIAcessPermissions {
+ margin: 20px 0px;
+ width: auto;
+ height: 100%;
+}
+
+.UIApplicationRegistryPortlet .UIAcessPermissions .UIForm .HorizontalLayout {
+ padding: 0px;
+ border: none;
+ background: none;
+}
+
+.UIApplicationRegistryPortlet .UIAcessPermissions .UIFormGrid {
+ width: 100%;
+}
+
+.UIApplicationRegistryPortlet .UIAcessPermissions .PublicCheck .UIFormGrid {
+ width: auto;
+}
+
+/**************************** UIOrganizerManagement ***************************/
+
+.UIApplicationRegistryPortlet .UIAddApplicationForm .UIFormGrid {
+ width: 99%;
+}
+
+.UIOrganizerManagement .UIFormInputSet .UIFormGrid {
+ width: 99%;
+}
+
+.UIOrganizerManagement .UIFormInputSet .PublicCheck .UIFormGrid {
+ width: auto;
+}
+
+.UIOrganizerManagement .UIAddApplicationForm .UIFormGrid td.text {
+ white-space: normal;
+}
+/***************************** UIPortletManagement ***************************/
+
+.UIPortletManagement .ListCategory .CategoryLable {
+ background: url(DefaultSkin/background/ControlIcon.gif) no-repeat scroll 5px -170px; /* orientation=lt */
+ background: url(DefaultSkin/background/ControlIcon-rt.gif) no-repeat scroll right -170px; /* orientation=rt */
+ padding: 0px 0px 0px 15px; /* orientation=lt */
+ padding: 0px 15px 0px 0px; /* orientation=rt */
+ display: block;
+ line-height: 25px;
+ border-bottom: 1px solid #dddddd;
+}
+
+.UIPortletManagement .SelectedCategory .CategoryLable {
+ background: #b7b7b7 url(DefaultSkin/background/ControlIcon.gif) no-repeat scroll 5px -196px; /* orientation=lt */
+ background: #b7b7b7 url(DefaultSkin/background/ControlIcon-rt.gif) no-repeat scroll right -196px; /* orientation=rt */
+ color: white;
font-weight: bold;
white-space: nowrap;
- overflow: hidden;
-}
-
-.UIPortletManagement .ListCategory .ListItem {
- background: #f7f7f7;
- border-bottom: 1px solid #dddddd;
-}
-
-.UIPortletManagement .ListCategory .Item {
- display: block;
- background: url('DefaultSkin/background/ControlIcon.gif') repeat-y left -92px; /* orientation=lt */
- background: url('DefaultSkin/background/ControlIcon.gif') repeat-y right -92px; /* orientation=rt */
- padding-left: 20px; /* orientation=lt */
- padding-right: 20px; /* orientation=rt */
- cursor: pointer;
- width: 160px; overflow: hidden;
- white-space: nowrap;
- line-height: 25px;
-}
-
-.UIPortletManagement .UIVerticalSlideTabs .VTabSimpleStyle .UIVTabContent {
- background: none;
-}
-
-.UIPortletManagement .BoxContent {
- padding: 1px;
- border: 1px solid #d7d7d7;
- margin: 1px;
-}
-
-.UIPortletManagement .BoxContent .TitleCategory {
- cursor: pointer;
- text-transform: capitalize;
-}
-
-.UIPortletManagement .UIGrid .FieldLable {
- width: 30%;
- text-align: right;
-}
-
-.UIPortletManagement .UIGrid .FieldComponent {
- padding: 4px 0px;
-}
-
-/******************************** UIGadgetManagement ******************************/
-.UIApplicationRegistryPortlet .UIGadgetManagement .PortletIcons {
- width: 150px; height: 120px;
- padding-top: 20px; text-align: center;
-}
-
-.UIApplicationRegistryPortlet .UIGadgetManagement .ApplicationContent {
- margin-left: 150px; /* orientation=lt */
- margin-right: 150px; /* orientation=rt */
-}
-
-.UIApplicationRegistryPortlet .UIGadgetManagement .URL table {
- width: 99%;
- table-layout: fixed;
-}
-
-.UIApplicationRegistryPortlet .UIGadgetManagement .URL .RightLabel {
- overflow: hidden;
-}
-
-.UIGadgetManagement .UIGadgetEditor table.UIFormGrid {
- width: 99%;
- table-layout: fixed;
-}
-
-.UIGadgetManagement .UIGadgetEditor .HorizontalLayout textarea {
- height: 250px;
- padding: 0px;
- width: 97%;
- overflow: auto;
-}
-
-.UIGadgetManagement .UIGadgetEditor td.FieldComponent {
- width: 90%;
-}
-
-.UIGadgetManagement .UIGadgetEditor .HorizontalLayout input {
- width: 97%;
-}
\ No newline at end of file
+ overflow: hidden;
+}
+
+.UIPortletManagement .ListCategory .ListItem {
+ background: #f7f7f7;
+ border-bottom: 1px solid #dddddd;
+}
+
+.UIPortletManagement .ListCategory .Item {
+ display: block;
+ background: url('DefaultSkin/background/ControlIcon.gif') repeat-y left -92px; /* orientation=lt */
+ background: url('DefaultSkin/background/ControlIcon.gif') repeat-y right -92px; /* orientation=rt */
+ padding-left: 20px; /* orientation=lt */
+ padding-right: 20px; /* orientation=rt */
+ cursor: pointer;
+ width: 160px; overflow: hidden;
+ white-space: nowrap;
+ line-height: 25px;
+}
+
+.UIPortletManagement .UIVerticalSlideTabs .VTabSimpleStyle .UIVTabContent {
+ background: none;
+}
+
+.UIPortletManagement .BoxContent {
+ padding: 1px;
+ border: 1px solid #d7d7d7;
+ margin: 1px;
+}
+
+.UIPortletManagement .BoxContent .TitleCategory {
+ cursor: pointer;
+ text-transform: capitalize;
+}
+
+.UIPortletManagement .UIGrid .FieldLable {
+ width: 30%;
+ text-align: right;
+}
+
+.UIPortletManagement .UIGrid .FieldComponent {
+ padding: 4px 0px;
+}
+
+/******************************** UIGadgetManagement ******************************/
+.UIApplicationRegistryPortlet .UIGadgetManagement .PortletIcons {
+ width: 150px; height: 120px;
+ padding-top: 20px; text-align: center;
+}
+
+.UIApplicationRegistryPortlet .UIGadgetManagement .ApplicationContent {
+ margin-left: 150px; /* orientation=lt */
+ margin-right: 150px; /* orientation=rt */
+}
+
+.UIApplicationRegistryPortlet .UIGadgetManagement .URL table {
+ width: 99%;
+ table-layout: fixed;
+}
+
+.UIApplicationRegistryPortlet .UIGadgetManagement .URL .RightLabel {
+ overflow: hidden;
+}
+
+.UIGadgetManagement .UIGadgetEditor table.UIFormGrid {
+ width: 99%;
+ table-layout: fixed;
+}
+
+.UIGadgetManagement .UIGadgetEditor .HorizontalLayout textarea {
+ height: 250px;
+ padding: 0px;
+ width: 97%;
+ overflow: auto;
+}
+
+.UIGadgetManagement .UIGadgetEditor td.FieldComponent {
+ width: 90%;
+}
+
+.UIGadgetManagement .GadgetCategory .UIFormGrid {
+ width: 100%;
+}
+
+.UIGadgetManagement .UIGadgetEditor .HorizontalLayout input {
+ width: 97%;
+}
+
+.UIGadgetManagement .GadgetCategory .UIFormGrid {
+ width: 100%;
+}
Copied: portal/trunk/server/jboss/patch-ear/src/main/jboss/bin/exokey.pem (from rev 4964, portal/branches/branch-GTNPORTAL-1592/server/jboss/patch-ear/src/main/jboss/bin/exokey.pem)
===================================================================
--- portal/trunk/server/jboss/patch-ear/src/main/jboss/bin/exokey.pem (rev 0)
+++ portal/trunk/server/jboss/patch-ear/src/main/jboss/bin/exokey.pem 2010-11-08 03:40:16 UTC (rev 4965)
@@ -0,0 +1,29 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDMYzu2ZJb6Mt89RxjYcPb01clMna7PJTm+UneDYELKjG6EZ4Nu
++v8Di7e2PxpNlW4cCwUiEkiWBrZH8S1caz4CYIAG+VmKXZXBgmNCINgRVzNtj0/E
+4xi5Yz+G1uGCkaB+1mheJWke1rO6SgL6tJ5LmEYCGGu0mj+vxD8W2i4nBwIDAQAB
+AoGAJS1zwiSf9djlFI9nLI+3zCdLG32fO5zI2R7FEIek/pT20WzG0pwjYPC8NRFb
+Zntk8QLsJxtuSqPj6kgreSEkwRR/YGVIo/xIr46vwl/WydMLKJljvu+E7Y4yjYHb
+X4+FDRSL+huOMNNrHgnMy8WnplvtuW5LNV4kD3izU37jxQECQQD15re+8J3C8O6m
+wt8+5Ed6a+1+BIdFggFFpV4oC2AKE11+dnwxD5ZyB77sg6sCbcWbLTXOyp/CCAY8
+bkp9ZbOBAkEA1MgP7ZKUUrtrIIg0VYaTTH24iMWTOsPbgNWg9DlLzmIagHHmmmLC
+O6gFT05bsNPcFv5a25m+jT1yfvjuKLN+hwJBAJHD544/UjWZ3s5p3C6K4bg3PDwk
+cQ+KBjkD0zHHtHGkkxqBIBNxGwyTfOD1GC1DZw0amrfvsw4w9YljE7ML04ECQHrX
+IPLrm3uDvZ3jZCs37RPMxNsZDR1w8ukW67vy1APK+TfMCfB5MV8VajNVrnOQa9BO
+eY+r26lYnyAUgBG5RkMCQHW5qFDYmgJjb38+uwxd53zGy6m+Jd7kdnGms9V4pPd1
+b21WA/5ncxrpFaz5OFPLtv2zrKYVBAj0tros5hs8Fwk=
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIICGzCCAYSgAwIBAgIJAJ/PJcjrAB25MA0GCSqGSIb3DQEBBAUAMBQxEjAQBgNV
+BAMTCW15dGVzdGtleTAeFw0wOTAxMDgwNzUwMjlaFw0xMDAxMDgwNzUwMjlaMBQx
+EjAQBgNVBAMTCW15dGVzdGtleTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+zGM7tmSW+jLfPUcY2HD29NXJTJ2uzyU5vlJ3g2BCyoxuhGeDbvr/A4u3tj8aTZVu
+HAsFIhJIlga2R/EtXGs+AmCABvlZil2VwYJjQiDYEVczbY9PxOMYuWM/htbhgpGg
+ftZoXiVpHtazukoC+rSeS5hGAhhrtJo/r8Q/FtouJwcCAwEAAaN1MHMwHQYDVR0O
+BBYEFB6QdOIZawuedUjT4F+bK9RG8+sMMEQGA1UdIwQ9MDuAFB6QdOIZawuedUjT
+4F+bK9RG8+sMoRikFjAUMRIwEAYDVQQDEwlteXRlc3RrZXmCCQCfzyXI6wAduTAM
+BgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAAE/6mmd8/mMyzzFozblp04e
+TonwNrUB7TldXj+0WnYP04u0hNJuFJ/KD29gHdMnYDdOiVdmK/WS6a7Mn+7HVDT7
+wytizzu/Jfvlrr3yMQYCZssvNIbXPTmr+MjLErjkRxYi4quAnkankTNCDxa4mxN3
+WNlNt2SavfSi3d60wd5o
+-----END CERTIFICATE-----
Copied: portal/trunk/server/jboss/patch-ear/src/main/jboss/bin/oauthkey.pem (from rev 4964, portal/branches/branch-GTNPORTAL-1592/server/jboss/patch-ear/src/main/jboss/bin/oauthkey.pem)
===================================================================
--- portal/trunk/server/jboss/patch-ear/src/main/jboss/bin/oauthkey.pem (rev 0)
+++ portal/trunk/server/jboss/patch-ear/src/main/jboss/bin/oauthkey.pem 2010-11-08 03:40:16 UTC (rev 4965)
@@ -0,0 +1,16 @@
+-----BEGIN PRIVATE KEY-----
+MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMxjO7Zklvoy3z1H
+GNhw9vTVyUydrs8lOb5Sd4NgQsqMboRng276/wOLt7Y/Gk2VbhwLBSISSJYGtkfx
+LVxrPgJggAb5WYpdlcGCY0Ig2BFXM22PT8TjGLljP4bW4YKRoH7WaF4laR7Ws7pK
+Avq0nkuYRgIYa7SaP6/EPxbaLicHAgMBAAECgYAlLXPCJJ/12OUUj2csj7fMJ0sb
+fZ87nMjZHsUQh6T+lPbRbMbSnCNg8Lw1EVtme2TxAuwnG25Ko+PqSCt5ISTBFH9g
+ZUij/Eivjq/CX9bJ0wsomWO+74TtjjKNgdtfj4UNFIv6G44w02seCczLxaemW+25
+bks1XiQPeLNTfuPFAQJBAPXmt77wncLw7qbC3z7kR3pr7X4Eh0WCAUWlXigLYAoT
+XX52fDEPlnIHvuyDqwJtxZstNc7Kn8IIBjxuSn1ls4ECQQDUyA/tkpRSu2sgiDRV
+hpNMfbiIxZM6w9uA1aD0OUvOYhqAceaaYsI7qAVPTluw09wW/lrbmb6NPXJ++O4o
+s36HAkEAkcPnjj9SNZnezmncLorhuDc8PCRxD4oGOQPTMce0caSTGoEgE3EbDJN8
+4PUYLUNnDRqat++zDjD1iWMTswvTgQJAetcg8uube4O9neNkKzftE8zE2xkNHXDy
+6Rbru/LUA8r5N8wJ8HkxXxVqM1Wuc5Br0E55j6vbqVifIBSAEblGQwJAdbmoUNia
+AmNvfz67DF3nfMbLqb4l3uR2caaz1Xik93VvbVYD/mdzGukVrPk4U8u2/bOsphUE
+CPS2uizmGzwXCQ==
+-----END PRIVATE KEY-----
Modified: portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/core/DOMUtil.js
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/core/DOMUtil.js 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/core/DOMUtil.js 2010-11-08 03:40:16 UTC (rev 4965)
@@ -411,8 +411,7 @@
return [];
}
- var nodes = [],
- elements = root.getElementsByTagName(tag);
+ var nodes = [], elements = root.getElementsByTagName(tag);
for (var i = 0, len = elements.length; i < len; ++i) {
if ( method(elements[i]) ) {
Modified: portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/core/DragDrop.js
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/core/DragDrop.js 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/core/DragDrop.js 2010-11-08 03:40:16 UTC (rev 4965)
@@ -101,19 +101,20 @@
} ;
DragDrop.prototype.onDrop = function(evt) {
- /* should not remove this or move this line to destroy since the onMouseMove method keep calling */
- if(eXo.core.DragDrop.dropCallback != null) {
- var dndEvent = eXo.core.DragDrop.dndEvent ;
- dndEvent.backupMouseEvent = evt ;
- var dragObject = dndEvent.dragObject ;
+ if(!evt) evt = window.event ;
+ /* should not remove this or move this line to destroy since the onMouseMove method keep calling */
+ if(eXo.core.DragDrop.dropCallback != null) {
+ var dndEvent = eXo.core.DragDrop.dndEvent ;
+ dndEvent.backupMouseEvent = evt ;
+ var dragObject = dndEvent.dragObject ;
- var foundTarget = eXo.core.DragDrop.findDropableTarget(dndEvent, eXo.core.DragDrop.dropableTargets, evt) ;
- var junkMove = eXo.core.DragDrop.isJunkMove(dragObject, foundTarget) ;
+ var foundTarget = eXo.core.DragDrop.findDropableTarget(dndEvent, eXo.core.DragDrop.dropableTargets, evt) ;
+ var junkMove = eXo.core.DragDrop.isJunkMove(dragObject, foundTarget) ;
- dndEvent.update(foundTarget, junkMove) ;
- eXo.core.DragDrop.dropCallback (dndEvent) ;
- }
- eXo.core.DragDrop.destroy() ;
+ dndEvent.update(foundTarget, junkMove) ;
+ eXo.core.DragDrop.dropCallback (dndEvent) ;
+ }
+ eXo.core.DragDrop.destroy() ;
} ;
DragDrop.prototype.onCancel = function(evt) {
Modified: portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalDragDrop.js
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalDragDrop.js 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalDragDrop.js 2010-11-08 03:40:16 UTC (rev 4965)
@@ -86,9 +86,12 @@
dndEvent.dragObject = cloneObject ;
dndEvent.dragObject.isAddingNewly = isAddingNewly;
} else {
+ var componentBlockWidth = 300;
+
previewBlock = PortalDragDrop.createPreview();
+ previewBlock.style.height = dragObject.offsetHeight + "px";
dragObject.parentNode.insertBefore(previewBlock, dragObject);
- dragObject.style.width = "300px";
+ dragObject.style.width = componentBlockWidth + "px";
var componentBlock = eXo.core.DOMUtil.findFirstDescendantByClass(dragObject, "div", "UIComponentBlock") ;
var editBlock = eXo.core.DOMUtil.findFirstChildByClass(componentBlock, "div", "EDITION-BLOCK");
if(editBlock) {
@@ -99,10 +102,20 @@
dragObject.isAddingNewly = isAddingNewly;
dragObject = dndEvent.dragObject;
dragObject.style.position = "absolute" ;
- if(eXo.core.I18n.isLT()) dragObject.style.left = originalDragObjectLeft + "px" ;
- else dragObject.style.right = (PortalDragDrop.positionRootObj.offsetWidth - originalDragObjectLeft - dragObject.offsetWidth) + "px" ;
dragObject.style.top = originalDragObjectTop + "px" ;
+ var dragObjectLeft = originalDragObjectLeft;
+ if (PortalDragDrop.deltaXDragObjectAndMouse > componentBlockWidth/2) {
+ if ((PortalDragDrop.backupDragObjectWidth - PortalDragDrop.deltaXDragObjectAndMouse) > componentBlockWidth/2) {
+ dragObjectLeft = originalDragObjectLeft + PortalDragDrop.deltaXDragObjectAndMouse - componentBlockWidth/2;
+ } else {
+ dragObjectLeft = originalDragObjectLeft + PortalDragDrop.backupDragObjectWidth - componentBlockWidth;
+ }
+ }
+
+ if (eXo.core.I18n.isLT()) dragObject.style.left = dragObjectLeft + "px";
+ else dragObject.style.right = PortalDragDrop.positionRootObj.offsetWidth - dragObject.offsetWidth - dragObjectLeft + "px";
+
eXo.portal.isInDragging = true;
}
@@ -110,7 +123,14 @@
var dragObject = dndEvent.dragObject ;
/* Control Scroll */
eXo.portal.PortalDragDrop.scrollOnDrag(dndEvent) ;
- if(!dndEvent.foundTargetObject) return;
+ if(!dndEvent.foundTargetObject) {
+ if (!dndEvent.lastFoundTargetObject) {
+ return;
+ } else {
+ dndEvent.foundTargetObject = dndEvent.lastFoundTargetObject;
+ }
+ }
+
var uiComponentLayout ;
if(dndEvent.foundTargetObject.className == "UIPage") {
uiComponentLayout = DOMUtil.findFirstDescendantByClass(dndEvent.foundTargetObject, "div", "VIEW-PAGE");
@@ -149,7 +169,7 @@
}
dndEvent.foundTargetObject.listComponentInTarget = listComponent ;
- var insertPosition = eXo.portal.PortalDragDrop.findInsertPosition(listComponent, dragObject, "row") ;
+ var insertPosition = eXo.portal.PortalDragDrop.findInsertPosition(listComponent, "row", dndEvent.backupMouseEvent) ;
dndEvent.foundTargetObject.foundIndex = insertPosition ;
/* Insert preview block */
@@ -179,7 +199,7 @@
}
dndEvent.foundTargetObject.listComponentInTarget = listComponent ;
- var insertPosition = eXo.portal.PortalDragDrop.findInsertPosition(listComponent, dragObject, "column") ;
+ var insertPosition = eXo.portal.PortalDragDrop.findInsertPosition(listComponent, "column", dndEvent.backupMouseEvent) ;
dndEvent.foundTargetObject.foundIndex = insertPosition ;
/* Insert preview block */
@@ -192,6 +212,10 @@
trContainer.appendChild(previewTD) ;
}
}
+ var dragParent = dragObject.parentNode;
+ if (eXo.core.DOMUtil.getChildrenByTagName(dragParent, "div").length === 1 && !eXo.core.DOMUtil.hasClass(dragParent, "EmptyContainer")) {
+ eXo.core.DOMUtil.addClass(dragParent, "EmptyContainer");
+ }
} ;
DragDrop.dropCallback = function(dndEvent) {
@@ -203,11 +227,15 @@
hasChanged = false;
}
//When dragObject is outside
- var targetElement = dndEvent.foundTargetObject;
- if(!targetElement || targetElement.foundIndex == null) {
- hasChanged = false;
- }
- //When dragobject is next to preview object (position is not changed)
+ if (!dndEvent.foundTargetObject) {
+ dndEvent.foundTargetObject = dndEvent.lastFoundTargetObject;
+ }
+
+ var targetElement = dndEvent.foundTargetObject;
+ if(!targetElement || targetElement.foundIndex == null) {
+ hasChanged = false;
+ }
+ //When dragobject is next to preview object (position is not changed)
if(!dndEvent.dragObject.isAddingNewly) {
var DOMUtil = eXo.core.DOMUtil;
var previewClass = "DragAndDropPreview";
@@ -229,7 +257,7 @@
}
}
- if(dndEvent.foundTargetObject != null || (dndEvent.backupMouseEvent && dndEvent.backupMouseEvent.keyCode != 27)) {
+ if(dndEvent.backupMouseEvent && dndEvent.backupMouseEvent.keyCode != 27) {
eXo.portal.PortalDragDrop.doDropCallback(dndEvent) ;
} else {
if(dndEvent.dragObject.parentNode.nodeName.toLowerCase() == "td") {
@@ -330,10 +358,15 @@
* @param the dragging object
*/
PortalDragDrop.prototype.findDropableTargets = function(dragBlock) {
- var DOMUtil = eXo.core.DOMUtil;
+ var DOMUtil = eXo.core.DOMUtil;
var dropableTargets = new Array() ;
+
+ if (dragBlock && DOMUtil.hasClass(dragBlock, "UIColumnContainer")) {
+ var uiTableContainer = eXo.core.DOMUtil.findAncestorByClass(dragBlock, "UITableColumnContainer");
+ dropableTargets.push(uiTableContainer);
+ return dropableTargets;
+ }
var uiWorkingWorkspace = document.getElementById("UIWorkingWorkspace") ;
-
var pagebody = document.getElementById("UIPageBody");
if(eXo.portal.portalMode && pagebody) {
var uiPortal = DOMUtil.findFirstDescendantByClass(uiWorkingWorkspace, "div", "UIPortal") ;
@@ -347,6 +380,7 @@
for(var i = 0; i < uiContainers.length; i++) {
if(DOMUtil.hasAncestor(uiContainers[i], dragBlock)) continue;
if(DOMUtil.hasClass(uiContainers[i], "ProtectedContainer")) continue;
+ if (DOMUtil.hasClass(uiContainers[i], "UITableColumnContainer")) continue;
dropableTargets.push(uiContainers[i]) ;
}
return dropableTargets ;
@@ -359,13 +393,18 @@
var mouseY = eXo.core.Browser.findMouseYInClient(dndEvent.backupMouseEvent) ;
var deltaTop = mouseY - (Math.round(browserHeight * 5/6)) ;
var deltaBottom = mouseY - (Math.round(browserHeight/6)) ;
+ var currentDragObjPos = parseInt(dndEvent.dragObject.style.top);
if(deltaTop > 0) {
- document.documentElement.scrollTop += deltaTop - 5 ;
+ document.documentElement.scrollTop += deltaTop - 5;
+ currentDragObjPos += deltaTop - 5;
}
if(deltaBottom < 0 && document.documentElement.scrollTop > 0) {
document.documentElement.scrollTop += deltaBottom ;
+ currentDragObjPos += deltaBottom;
}
+
+ dndEvent.dragObject.style.top = currentDragObjPos + "px";
};
/**
@@ -374,29 +413,29 @@
*
* @param layout {string} the layout type which is "row" or "column"
*/
-PortalDragDrop.prototype.findInsertPosition = function(components, dragObject, layout) {
- if(layout == "row") {
- for(var i = 0; i < components.length; i++) {
- var componentTop = eXo.core.Browser.findPosY(components[i]) ;
- var dragObjectTop = eXo.core.Browser.findPosY(dragObject) ;
- var componentMiddle = componentTop + Math.round(components[i].offsetHeight / 2) ;
-
- if(dragObjectTop > componentMiddle) continue ;
- else return i;
- }
- return -1 ;
-
- } else {
- var dragObjectX = eXo.core.Browser.findPosX(dragObject) ;
- for(var i = 0; i < components.length; i++) {
- var componentInTD = eXo.core.DOMUtil.getChildrenByTagName(components[i] ,"div")[0] ;
- var componentX = eXo.core.Browser.findPosX(components[i]) ;
+PortalDragDrop.prototype.findInsertPosition = function(components, layout, mouseEvent) {
+ var Browser = eXo.core.Browser;
+ if (layout == "row") {
+ for (var i = 0; i < components.length; i++) {
+ var componentTop = Browser.findPosY(components[i]);
+ var mouseYInPage = Browser.findMouseYInPage(mouseEvent);
+ var componentMIddle = componentTop + Math.round(components[i].offsetHeight / 2);
+ if (mouseYInPage > componentMIddle) continue;
+ else return i;
+ }
- if(dragObjectX > componentX) continue ;
- else return i ;
- }
- return -1 ;
- }
+ return -1;
+ } else {
+ for (var i = 0; i < components.length; i++) {
+ var mouseXInPage = Browser.findMouseXInPage(mouseEvent);
+ var componentInTD = eXo.core.DOMUtil.getChildrenByTagName(components[i], "div")[0];
+ var componentX = Browser.findPosX(components[i]);
+ if (mouseXInPage > componentX) continue;
+ else return i
+ }
+
+ return -1
+ }
};
/**
@@ -424,6 +463,8 @@
} else {
uiRowContainer.appendChild(srcElement) ;
}
+
+ eXo.core.DOMUtil.removeClass(uiRowContainer, "EmptyContainer");
if(parentNode.nodeName.toLowerCase() == "td") {
eXo.core.DOMUtil.removeElement(parentNode) ;
Modified: portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalHttpRequest.js
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalHttpRequest.js 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/PortalHttpRequest.js 2010-11-08 03:40:16 UTC (rev 4965)
@@ -133,6 +133,8 @@
this.blocksToUpdate[j].scripts = eXo.core.DOMUtil.findDescendantsByTagName(dataBlocks[1], "script") ;
}
+ } else if(div[i].className == "MarkupHeadElements") {
+ this.markupHeadElements = new MarkupHeadElements(div[i]);
} else if(div[i].className == "PortalResponseScript") {
this.script = div[i].innerHTML ;
div[i].style.display = "none" ;
@@ -140,6 +142,16 @@
}
};
+function MarkupHeadElements(fragment) {
+ var DOMUtil = eXo.core.DOMUtil ;
+ this.titles = DOMUtil.findDescendantsByTagName(fragment, "title");
+ this.bases = DOMUtil.findDescendantsByTagName(fragment, "base") ;
+ this.links = DOMUtil.findDescendantsByTagName(fragment, "link") ;
+ this.metas = DOMUtil.findDescendantsByTagName(fragment, "meta") ;
+ this.scripts = DOMUtil.findDescendantsByTagName(fragment, "script") ;
+ this.styles = DOMUtil.findDescendantsByTagName(fragment, "style") ;
+}
+
/*
* This function is used to dynamically append a script to the head tag
* of the page
@@ -158,7 +170,7 @@
//check if contains source attribute
if(scriptElement.src) {
- script.src = scriptElement.src
+ script.src = scriptElement.src;
} else {
script.text = scriptElement.innerHTML;
}
@@ -409,6 +421,89 @@
}
}
} ;
+
+ instance.updateHtmlHead = function(response) {
+ cleanHtmlHead(response);
+
+ var DOMUtil = eXo.core.DOMUtil;
+ var head = document.getElementsByTagName("head")[0];
+ var markupHeadElements = response.markupHeadElements;
+
+ if (markupHeadElements.titles.length != 0) {
+ var oldTitle = DOMUtil.getChildrenByTagName(head, "title")[0];
+ var newTitle = markupHeadElements.titles[markupHeadElements.titles.length - 1];
+ if (oldTitle) {
+ head.replaceChild(newTitle, oldTitle);
+ } else {
+ head.appendChild(newTitle);
+ }
+ }
+
+ appendElementsToHead(markupHeadElements.metas);
+ appendElementsToHead(markupHeadElements.bases);
+ appendElementsToHead(markupHeadElements.links);
+ appendElementsToHead(markupHeadElements.styles);
+ appendElementsToHead(markupHeadElements.scripts);
+ };
+
+ function cleanHtmlHead(response) {
+ var DOMUtil = eXo.core.DOMUtil;
+ var head = document.getElementsByTagName("head")[0];
+
+ var portletResponses = response.portletResponses;
+ if (portletResponses != null) {
+ for (var i = 0; i < portletResponses.length; i++) {
+ removeExtraHead(portletResponses[i].portletId);
+ }
+ }
+
+ var portletFragments = DOMUtil.findDescendantsByClass(response.data, "div", "PORTLET-FRAGMENT");
+ for (var i = 0; i < portletFragments.length; i++) {
+ removeExtraHead(portletFragments[i].parentNode.id);
+ }
+
+ var uiWorkingWorkspace = document.getElementById("UIWorkingWorkspace") ;
+ var portletFragsInWS = DOMUtil.findDescendantsByClass(uiWorkingWorkspace, "div", "PORTLET-FRAGMENT");
+ var exHeads = DOMUtil.getElementsBy(function(elem) {
+ return elem.tagName != "TITLE" && elem.className.indexOf("ExHead-") == 0;
+ }, "*", head);
+
+ for (var i = 0; i < exHeads.length; i++) {
+ var portletId = exHeads[i].className.substring(7);
+ var del = true;
+ for (var j = 0; j < portletFragsInWS.length; j++) {
+ if (portletId == portletFragsInWS[j].parentNode.id) {
+ del = false;
+ break;
+ }
+ }
+ if (del) {
+ head.removeChild(exHeads[i]);
+ }
+ }
+ }
+
+ function removeExtraHead(portletId) {
+ var DOMUtil = eXo.core.DOMUtil;
+ var head = document.getElementsByTagName("head")[0];
+
+ var elemsToRemove = DOMUtil.getElementsBy(function(elem) {
+ return elem.tagName != "TITLE" && elem.className == "ExHead-" + portletId;
+ }, "*", head);
+
+ for (var i = 0; i < elemsToRemove.length; i++) {
+ head.removeChild(elemsToRemove[i]);
+ }
+ }
+
+ function appendElementsToHead(elements) {
+ var head = document.getElementsByTagName("head")[0];
+
+ for (var i = 0; i < elements.length; i++) {
+ head.appendChild(elements[i]);
+ }
+ }
+
/*
* This methods will replace some block content by new one.
* This is the important concept in any AJAX call where JS is used to dynamically
@@ -460,7 +555,7 @@
eXo.portal.AjaxRequest.maskLayer = null ;
eXo.portal.CurrentRequest = null ;
window.location.reload() ;
- }
+ };
/*
* This method is called when the AJAX call is completed and that the request.responseText
@@ -520,6 +615,7 @@
}
//Handle the portal responses
instance.updateBlocks(response.blocksToUpdate) ;
+ instance.updateHtmlHead(response);
instance.executeScript(response.script) ;
/**
* Clears the instance.to timeout if the request takes less time than expected to get response
@@ -548,7 +644,6 @@
* Modified by Truong LE to avoid double click problem
*/
- Browser = eXo.core.Browser;
if(eXo.portal.AjaxRequest.maskLayer == null ){
eXo.portal.AjaxRequest.maskLayer = eXo.core.UIMaskLayer.createTransparentMask();
}
@@ -557,7 +652,7 @@
eXo.core.UIMaskLayer.showAjaxLoading(eXo.portal.AjaxRequest.maskLayer);
}
}, 2000);
- }
+ };
return instance ;
} ;
Modified: portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/UIPortal.js
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/UIPortal.js 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/portal/UIPortal.js 2010-11-08 03:40:16 UTC (rev 4965)
@@ -513,14 +513,17 @@
*/
UIPortal.prototype.findUIComponentOf = function(element) {
var DOMUtil = eXo.core.DOMUtil;
- var parent = element.parentNode ;
- while(parent != null) {
- if(DOMUtil.hasClass(parent,'UIPortlet') || DOMUtil.hasClass(parent,'UIContainer') ||
- DOMUtil.hasClass(parent,'UIPageBody') || DOMUtil.hasClass(parent,'UIPortal')) {
- return parent ;
- }
- parent = parent.parentNode ;
+ var parent;
+ if (parent = DOMUtil.findAncestorByClass(element, "UIPortlet")) {
+ return parent;
+ } else if (parent = DOMUtil.findAncestorByClass(element, "UIContainer")) {
+ return parent;
+ } else if (parent = DOMUtil.findAncestorByClass(element, "UIPageBody")) {
+ return parent;
+ } else if (parent = DOMUtil.findAncestorByClass(element, "UIPortal")) {
+ return parent;
}
+
return null ;
};
/**
Modified: portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIItemSelector.js
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIItemSelector.js 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIItemSelector.js 2010-11-08 03:40:16 UTC (rev 4965)
@@ -114,7 +114,7 @@
/*TODO: Review This Function (Ha's comment)*/
UIItemSelector.prototype.beforeActionHappen = function(selectedItem) {
- DOMUtil = eXo.core.DOMUtil;
+ var DOMUtil = eXo.core.DOMUtil;
this.uiItemSelector = DOMUtil.findAncestorByClass(selectedItem, "UIItemSelector");
this.itemList = DOMUtil.findAncestorByClass(selectedItem, "ItemList");
this.itemListContainer = DOMUtil.findAncestorByClass(selectedItem, "ItemListContainer") ;
Modified: portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIPopup.js
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIPopup.js 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIPopup.js 2010-11-08 03:40:16 UTC (rev 4965)
@@ -72,7 +72,7 @@
var uiMaskWS = document.getElementById("UIMaskWorkspace");
if(uiMaskWS) {
- uiMaskWSzIndex = eXo.core.DOMUtil.getStyle(uiMaskWS, "zIndex");
+ var uiMaskWSzIndex = eXo.core.DOMUtil.getStyle(uiMaskWS, "zIndex");
if(uiMaskWSzIndex && (uiMaskWSzIndex > eXo.webui.UIPopup.zIndex)) {
eXo.webui.UIPopup.zIndex = uiMaskWSzIndex;
}
Modified: portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIPopupWindow.js
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIPopupWindow.js 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIPopupWindow.js 2010-11-08 03:40:16 UTC (rev 4965)
@@ -69,17 +69,20 @@
UIPopupWindow.prototype.showMask = function(popup, isShowPopup) {
var mask = popup.previousSibling;
+ //Make sure mask is not TextNode because of previousSibling property
+ if (mask && mask.className != "MaskLayer") {
+ mask = null;
+ }
if(isShowPopup) {
//Modal if popup is portal component
if (eXo.core.DOMUtil.findAncestorByClass(popup, "PORTLET-FRAGMENT") == null) {
- eXo.core.UIMaskLayer.createMask(popup.parentNode, popup, 1) ;
+ if(!mask) eXo.core.UIMaskLayer.createMask(popup.parentNode, popup, 1) ;
} else {
- //If popup is portlet's component, modal with just its parent
- eXo.core.UIMaskLayer.createMaskForFrame(popup.parentNode, popup, 1) ;
+ //If popup is portlet's component, modal with just its parent
+ if(!mask) eXo.core.UIMaskLayer.createMaskForFrame(popup.parentNode, popup, 1) ;
}
- } else {
- //Make sure mask is not TextNode because of previousSibling property
- if(mask != null && mask.className == "MaskLayer") eXo.core.UIMaskLayer.removeMask(mask) ;
+ } else {
+ if(mask) eXo.core.UIMaskLayer.removeMask(mask) ;
}
} ;
Modified: portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIVerticalSlideTabs.js
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIVerticalSlideTabs.js 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/javascript/eXo/webui/UIVerticalSlideTabs.js 2010-11-08 03:40:16 UTC (rev 4965)
@@ -102,7 +102,7 @@
var controlArea = eXo.core.DOMUtil.findFirstDescendantByClass(uiVTab, "div", "ControlArea");
var controlAreaHeight = 0 ;
if(controlArea != null) controlAreaHeight = controlArea.offsetHeight ;
- scrollArea = eXo.core.DOMUtil.findFirstDescendantByClass(uiVTab, "div", "ScrollArea");
+ var scrollArea = eXo.core.DOMUtil.findFirstDescendantByClass(uiVTab, "div", "ScrollArea");
if(scrollArea != null) {
scrollArea.style.height = (height - controlAreaHeight - totalTabHeight - 35) + "px" ;
}
Modified: portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPage/Stylesheet.css
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPage/Stylesheet.css 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPage/Stylesheet.css 2010-11-08 03:40:16 UTC (rev 4965)
@@ -25,7 +25,8 @@
.UIPageBody .PageLayoutDecorator {
padding: 0px;
- margin: 0px 2px auto 2px;
+ margin: 0px 2px auto 2px;
+ overflow: hidden;
}
.UIPageBody .PageLayoutDecorator .MiddlePageBG {
Modified: portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPortalComponent/Stylesheet.css
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPortalComponent/Stylesheet.css 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPortalComponent/Stylesheet.css 2010-11-08 03:40:16 UTC (rev 4965)
@@ -189,8 +189,8 @@
float: right; /* orientation=rt */
width: 22px; height: 16px;
background: url('background/Pen.gif') no-repeat top;
- margin: 4px 2px 0px 0px; /* orientation=lt */
- margin: 4px 0px 0px 2px; /* orientation=rt */
+ margin: 4px 0px 0px 2px; /* orientation=lt */
+ margin: 4px 2px 0px 0px; /* orientation=rt */
}
.UIContainer .DeleteContainerIcon {
@@ -213,6 +213,29 @@
background: url('background/DefaultContainerIcon.png') no-repeat;
}
+.UIColumnContainer .ControlIcon {
+ float: right;/* orientation=lt */
+ float: left;/* orientation=rt */
+ width: 28px;
+ height: 20px;
+ cursor: pointer;
+ background: url('/eXoResources/skin/PortletThemes/background/DefaultTheme.png') no-repeat center;
+}
+
+.UIColumnContainer .EditContainerIcon {
+ margin-left: 0px; /* orientation=lt */
+ margin-right: 0px; /* orientation=rt */
+}
+
+.UIColumnContainer .ArrowDownIcon {
+ float: left; /* orientation=lt */
+ float: right; /* orientation=rt */
+ width: 22px; height: 16px;
+ background: url('background/ArrowDown.gif') no-repeat center top;
+ margin: 4px 0px 0px 2px; /* orientation=lt */
+ margin: 4px 2px 0px 0px; /* orientation=rt */
+}
+
.UIPortal .LAYOUT-PORTAL {
/* background: url('background/PortalBackground4x4.gif');*/
background: white;
Copied: portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPortalComponent/background/ArrowDown.gif (from rev 4964, portal/branches/branch-GTNPORTAL-1592/web/eXoResources/src/main/webapp/skin/DefaultSkin/portal/webui/component/view/UIPortalComponent/background/ArrowDown.gif)
===================================================================
(Binary files differ)
Modified: portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIForms/UIForm/Stylesheet.css
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIForms/UIForm/Stylesheet.css 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIForms/UIForm/Stylesheet.css 2010-11-08 03:40:16 UTC (rev 4965)
@@ -1,22 +1,22 @@
-/**
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * 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.
- */
-
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * 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.
+ */
+
/*####################- HorizontalLayout -#################*/
.UIForm .HorizontalLayout {
Modified: portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIPopup/UIPopupCategory/Stylesheet.css
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIPopup/UIPopupCategory/Stylesheet.css 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UIPopup/UIPopupCategory/Stylesheet.css 2010-11-08 03:40:16 UTC (rev 4965)
@@ -121,7 +121,8 @@
padding-left: 18px; /* orientation=lt */
padding-right: 18px; /* orientation=rt */
height: 22px;
- line-height: 22px;
+ line-height: 22px;
+ overflow: hidden;
background: url('/eXoResources/skin/DefaultSkin/skinIcons/16x16/icons/GrayNextArrow.gif') no-repeat left center; /* orientation=lt */
background: url('/eXoResources/skin/DefaultSkin/skinIcons/16x16/icons/GrayNextArrow-rt.gif') no-repeat right center; /* orientation=rt */
}
\ No newline at end of file
Modified: portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UISelector/UIItemSelector/Stylesheet.css
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UISelector/UIItemSelector/Stylesheet.css 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UISelector/UIItemSelector/Stylesheet.css 2010-11-08 03:40:16 UTC (rev 4965)
@@ -56,7 +56,7 @@
.UIItemSelector .ItemDetailList .TemplateContainer .BasicPortalImage {
height: 222px;
- background: url('background/TemplateContainer.jpg') no-repeat center -392px;
+ background: url('background/TemplateContainer.jpg') no-repeat center -1059px;
margin-top: 9px;
}
Modified: portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UISelector/UIItemSelector/background/TemplateContainer.jpg
===================================================================
(Binary files differ)
Modified: portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UITabSystem/UIVerticalSlideTabs/Stylesheet.css
===================================================================
--- portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UITabSystem/UIVerticalSlideTabs/Stylesheet.css 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/eXoResources/src/main/webapp/skin/DefaultSkin/webui/component/UITabSystem/UIVerticalSlideTabs/Stylesheet.css 2010-11-08 03:40:16 UTC (rev 4965)
@@ -225,7 +225,7 @@
}
.UIVerticalSlideTabs .VTabStyle4 .SelectedTab {
- background: transparent url(background/VTabStyle4.gif) repeat-x left top;
+ background: #dadada url(background/VTabStyle4.gif) repeat-x left top;
line-height: 21px;
padding: 0px 0px 0px 8px;
cursor: pointer;
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_ar.xml
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_ar.xml 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_ar.xml 2010-11-08 03:40:16 UTC (rev 4965)
@@ -84,13 +84,13 @@
<UITestForm>
<label>وجهات إضافة التطبيقات </label>
</UITestForm>
- <StringLengthValidator>
- <msg>
- <length-invalid> "{2}" يجب أن يكون لحصل "{0}" طوله بين "{1}" و
- </length-invalid>
- </msg>
- </StringLengthValidator>
</EmptyFieldValidator>
+ <StringLengthValidator>
+ <msg>
+ <length-invalid> "{2}" يجب أن يكون لحصل "{0}" طوله بين "{1}" و
+ </length-invalid>
+ </msg>
+ </StringLengthValidator>
<!--
#############################################################################
# Email Address Validator #
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_en.properties
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_en.properties 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_en.properties 2010-11-08 03:40:16 UTC (rev 4965)
@@ -974,6 +974,30 @@
UIContainer.tooltip.drag=Drag Container here
############################################################################
+ # org.exoplatform.portal.webui.container.UIColumnContainer #
+ ############################################################################
+
+UIColumnContainer.title.Container=Column
+UIColumnContainer.title.DragControlArea=Hold this area to drag this column to other place
+UIColumnContainer.deleteColumnContainer=Are you sure you want to delete this column ?
+UIColumnContainer.tooltip.insertLeft=Insert column left
+UIColumnContainer.tooltip.insertRight=Insert column right
+UIColumnContainer.tooltip.insertColumn=Insert new column
+UIColumnContainer.tooltip.closeContainer=Delete Column
+UIColumnContainer.tooltip.editContainer=Edit Column
+UIColumnContainer.label.insertLeft=Insert left
+UIColumnContainer.label.insertRight=Insert right
+
+ ############################################################################
+ # org.exoplatform.portal.webui.container.UITableColumnContainer#
+ ############################################################################
+
+UITableColumnContainer.title.Container=Table container
+UITableColumnContainer.title.DragControlArea=Hold this area to drag this table
+UITableColumnContainer.tooltip.closeContainer=Delete Table
+UITableColumnContainer.tooltip.editContainer=Edit Table
+
+ ############################################################################
# org.exoplatform.portal.component.view.UIPage #
############################################################################
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_fr.properties
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_fr.properties 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_fr.properties 2010-11-08 03:40:16 UTC (rev 4965)
@@ -926,6 +926,28 @@
UIContainer.tooltip.drag=Glisser le conteneur ici
############################################################################
+ # org.exoplatform.portal.webui.container.UIColumnContainer #
+ ############################################################################
+
+UIColumnContainer.title.Container=Colonne
+UIColumnContainer.title.DragControlArea=Cliquer cette partie sans relâcher le bouton pour faire glisser cete colonne à d'autre place
+UIColumnContainer.deleteColumnContainer=Are you sure you want to delete this column ?
+UIColumnContainer.tooltip.insertLeft=Insérer une colonne à gauche
+UIColumnContainer.tooltip.insertRight=Insérer une colonne à droit
+UIColumnContainer.tooltip.insertColumn=Insérer une nouvelle colonne
+UIColumnContainer.tooltip.closeContainer=Supprimer cette colonne
+UIColumnContainer.tooltip.editContainer=Editer cette colonne
+
+ ############################################################################
+ # org.exoplatform.portal.webui.container.UITableColumnContainer#
+ ############################################################################
+
+UITableColumnContainer.title.Container=Conteneur de navigation
+UITableColumnContainer.title.DragControlArea=Cliquer cette partie sans relâcher le bouton pour faire glisser ce tableau
+UITableColumnContainer.tooltip.closeContainer=Supprimer ce tableau
+UITableColumnContainer.tooltip.editContainer=Editer ce tableau
+
+ ############################################################################
# org.exoplatform.portal.component.view.UIPage #
############################################################################
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_vi.properties
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_vi.properties 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/classes/locale/portal/webui_vi.properties 2010-11-08 03:40:16 UTC (rev 4965)
@@ -930,6 +930,30 @@
UIContainer.tooltip.drag=Vùng kéo Container.
############################################################################
+ # org.exoplatform.portal.webui.container.UIColumnContainer #
+ ############################################################################
+
+UIColumnContainer.title.Container=Cột
+UIColumnContainer.title.DragControlArea=Giữ vùng này để kéo cột
+UIColumnContainer.deleteColumnContainer=Bạn có chắc chắn muốn xóa cột này không ?
+UIColumnContainer.tooltip.insertLeft=Chèn cột mới vào bên trái
+UIColumnContainer.tooltip.insertRight=Chèn cột mới vào bên phải
+UIColumnContainer.tooltip.insertColumn=Chèn thêm cột mới
+UIColumnContainer.tooltip.closeContainer=Xóa cột
+UIColumnContainer.tooltip.editContainer=Sửa thuộc tính của cột
+UIColumnContainer.label.insertLeft=Chèn cột vào bên trái
+UIColumnContainer.label.insertRight=Chèn cột vào bên phải
+
+ ############################################################################
+ # org.exoplatform.portal.webui.container.UITableColumnContainer#
+ ############################################################################
+
+UITableColumnContainer.title.Container=Bảng
+UITableColumnContainer.title.DragControlArea=Giữ vùng này để kéo bảng
+UITableColumnContainer.tooltip.closeContainer=Xóa bảng
+UITableColumnContainer.tooltip.editContainer=Sửa thuộc tính của bảng
+
+ ############################################################################
# org.exoplatform.portal.component.view.UIPage #
############################################################################
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/uiconf/portal/webui/container/ContainerConfigOption.groovy
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/uiconf/portal/webui/container/ContainerConfigOption.groovy 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/conf/uiconf/portal/webui/container/ContainerConfigOption.groovy 2010-11-08 03:40:16 UTC (rev 4965)
@@ -46,22 +46,22 @@
column.addSelectItemOption(new SelectItemOption("oneColumns","" +
"<container template=\"system:/groovy/portal/webui/container/UITableColumnContainer.gtmpl\">" +
" <factory-id>TableColumnContainer</factory-id>" +
- " <container template=\"system:/groovy/portal/webui/container/UIContainer.gtmpl\"></container>" +
+ " <container template=\"system:/groovy/portal/webui/container/UIColumnContainer.gtmpl\"><factory-id>ColumnContainer</factory-id></container>" +
"</container>",
"OneRowContainerLayout")) ;
column.addSelectItemOption(new SelectItemOption("twoColumns",
"<container template=\"system:/groovy/portal/webui/container/UITableColumnContainer.gtmpl\">" +
" <factory-id>TableColumnContainer</factory-id>" +
- " <container template=\"system:/groovy/portal/webui/container/UIContainer.gtmpl\"></container>" +
- " <container template=\"system:/groovy/portal/webui/container/UIContainer.gtmpl\"></container>" +
+ " <container template=\"system:/groovy/portal/webui/container/UIColumnContainer.gtmpl\"><factory-id>ColumnContainer</factory-id></container>" +
+ " <container template=\"system:/groovy/portal/webui/container/UIColumnContainer.gtmpl\"><factory-id>ColumnContainer</factory-id></container>" +
"</container>",
"TwoColumnContainerLayout")) ;
column.addSelectItemOption(new SelectItemOption("threeColumns",
"<container template=\"system:/groovy/portal/webui/container/UITableColumnContainer.gtmpl\">" +
" <factory-id>TableColumnContainer</factory-id>" +
- " <container template=\"system:/groovy/portal/webui/container/UIContainer.gtmpl\"></container>" +
- " <container template=\"system:/groovy/portal/webui/container/UIContainer.gtmpl\"></container>" +
- " <container template=\"system:/groovy/portal/webui/container/UIContainer.gtmpl\"></container>" +
+ " <container template=\"system:/groovy/portal/webui/container/UIColumnContainer.gtmpl\"><factory-id>ColumnContainer</factory-id></container>" +
+ " <container template=\"system:/groovy/portal/webui/container/UIColumnContainer.gtmpl\"><factory-id>ColumnContainer</factory-id></container>" +
+ " <container template=\"system:/groovy/portal/webui/container/UIColumnContainer.gtmpl\"><factory-id>ColumnContainer</factory-id></container>" +
"</container>",
"ThreeColumnContainerLayout")) ;
templates.add(column);
Modified: portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml
===================================================================
--- portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/WEB-INF/web.xml 2010-11-08 03:40:16 UTC (rev 4965)
@@ -94,6 +94,16 @@
<filter-name>ClusteredSSOFilter</filter-name>
<filter-class>org.exoplatform.web.login.ClusteredSSOFilter</filter-class>
</filter>
+
+ <filter>
+ <filter-name>PortalContainerFilter</filter-name>
+ <filter-class>org.exoplatform.container.web.PortalContainerFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>PortalContainerFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
<filter-mapping>
<filter-name>RememberMeFilter</filter-name>
Modified: portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/UILoginForm.gtmpl
===================================================================
--- portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/UILoginForm.gtmpl 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/UILoginForm.gtmpl 2010-11-08 03:40:16 UTC (rev 4965)
@@ -22,22 +22,20 @@
<div class="MiddleRightLoginDecorator">
<div class="LoginDecoratorBackground">
<div class="LoginDetailBox">
- <% uiform.begin(); %>
- <!--<form class="UIForm" id="$uicomponent.id" name="loginForm" action="<%= rcontext.getRequestContextPath() + "/login"%>" method="post" style="margin: 0px;">
- <input type="hidden" name="<%= uiform.ACTION %>" value=""/>-->
+ <form class="UIForm" id="$uicomponent.id" name="loginForm" action="<%= rcontext.getRequestContextPath() + "/login"%>" method="post" style="margin: 0px;">
<input type="hidden" name="initialURI" value="<%=session.getAttribute("initialURI"); %>"/>
<div class="VerticalLayout">
<table class="UIFormGrid">
<tr class="UserNameField">
<td class="FieldLabel"><%=_ctx.appRes("UILoginForm.label.UserName")%></td>
- <td><% uiform.renderChild(0)%></td>
+ <td><input class="UserName" name="username"/></td>
</tr>
<tr class="PasswordField" id="UIPortalLoginFormControl" onkeypress="eXo.portal.UIPortalControl.onEnterPress(event)">
<td class="FieldLabel"><%=_ctx.appRes("UILoginForm.label.password")%></td>
- <td><% uiform.renderChild(1)%></td>
+ <td><input class="Password" type="password" name="password"/></td>
</tr>
<tr class="RememberField" onkeypress="eXo.portal.UIPortalControl.onEnterPress(event)">
- <td class="FieldLabel"><% uiform.renderChild(2)%></td>
+ <td class="FieldLabel"><input type="checkbox" class="checkbox" value="true" name="rememberme"/></td>
<td><%=_ctx.appRes("UILoginForm.label.RememberOnComputer")%></td>
</tr>
</table>
@@ -69,7 +67,7 @@
</table>
</div>
</div>
- <%uiform.end()%>
+ </form>
</div>
</div>
</div>
@@ -84,7 +82,6 @@
<script>
function login(ele) {
var formEle = eXo.core.DOMUtil.findAncestorByTagName(ele,'form');
- formEle.action = eXo.env.portal.context + "/login";
formEle.submit();
}
</script>
Modified: portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/application/UIApplicationList.gtmpl
===================================================================
--- portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/application/UIApplicationList.gtmpl 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/application/UIApplicationList.gtmpl 2010-11-08 03:40:16 UTC (rev 4965)
@@ -39,7 +39,6 @@
<%
for(application in uicomponent.getApplications()) {
String applicationLabel = application.getDisplayName();
- if(applicationLabel.length() > 30) applicationLabel = applicationLabel.substring(0, 27) + "...";
String srcBG = application.getIconURL();
String srcBGError = "/eXoResources/skin/sharedImages/Icon80x80/DefaultPortlet.png";
%>
Copied: portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/container/UIColumnContainer.gtmpl (from rev 4964, portal/branches/branch-GTNPORTAL-1592/web/portal/src/main/webapp/groovy/portal/webui/container/UIColumnContainer.gtmpl)
===================================================================
--- portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/container/UIColumnContainer.gtmpl (rev 0)
+++ portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/container/UIColumnContainer.gtmpl 2010-11-08 03:40:16 UTC (rev 4965)
@@ -0,0 +1,131 @@
+<%
+ import org.exoplatform.commons.utils.ExpressionUtil;
+ import org.exoplatform.portal.webui.workspace.UIPortalApplication;
+ import org.exoplatform.webui.core.UIComponent;
+ //import org.exoplatform.webui.config.Event;
+
+ def rcontext = _ctx.getRequestContext();
+ ResourceBundle res = rcontext.getApplicationResourceBundle();
+
+ UIPortalApplication uiPortalApp = rcontext.getUIApplication();
+ boolean hasPermission = uicomponent.hasPermission();
+ if(!uiPortalApp.isEditing() && !hasPermission) return;
+
+ String cssStyle = "";
+ String uiComponentWidth = uicomponent.getWidth();
+ String uiComponentHeight = uicomponent.getHeight();
+ if(uiComponentWidth != null || uiComponentHeight != null) cssStyle = "style=\"";
+ if(uiComponentHeight != null) cssStyle += "height: "+uiComponentHeight+";"
+ if(cssStyle.length() > 0) cssStyle += "\"";
+
+ /** Trim the prefix UIContainer- if any, this hardcoded part is needed to update nested container via Ajax */
+ String componentId = uicomponent.getId();
+ if(componentId.startsWith("UIContainer-")){
+ uicomponent.setId(componentId.substring("UIContainer-".length()));
+ }
+%>
+
+<div class="UIContainer UIColumnContainer <%=uiPortalApp.isEditing()?"EdittingContainer":""%> <%=hasPermission?"": "ProtectedContainer"%>"
+ id="${uicomponent.id}" ${cssStyle}
+ onmouseover="eXo.portal.UIPortal.blockOnMouseOver(event, this, true);"
+ onmouseout="eXo.portal.UIPortal.blockOnMouseOver(event, this, false);">
+ <div class="NormalContainerBlock">
+ <div class="LeftContainerBlock">
+ <div class="RightContainerBlock UIComponentBlock">
+
+ <%
+ int portalMode = uiPortalApp.getModeState();
+ if(portalMode == uiPortalApp.CONTAINER_BLOCK_EDIT_MODE || portalMode == UIPortalApplication.APP_BLOCK_EDIT_MODE){
+ %>
+ <div class="LAYOUT-CONTAINER LAYOUT-BLOCK">
+ <%} else {%>
+ <div class="VIEW-CONTAINER VIEW-BLOCK">
+ <%} %>
+ <%if(hasPermission) {%>
+ <div class="UIRowContainer <%=(portalMode != UIPortalApplication.NORMAL_MODE && uicomponent.getChildren().size() == 0) ? "EmptyContainer" : ""%>">
+ <div>
+ <%uicomponent.renderChildren();%>
+ </div>
+ </div>
+ <%} else out.print("<div class='ProtectedContent'>"+_ctx.appRes("UIPortlet.label.protectedContent")+"</div>");%>
+ </div>
+
+ <%if(portalMode != UIPortalApplication.NORMAL_MODE){%>
+ <div class="EDITION-BLOCK EDITION-CONTAINER" style="display: none;">
+ <div style="position: relative;">
+ <div style="position: absolute; top: -86px;">
+
+ <div class="NewLayer" style="display: none; visibility: hidden;"><span></span></div>
+ <div class="CONTROL-CONTAINER CONTROL-BLOCK" style="position: absolute; top: -6px;">
+ <%/*Begin InfoBar*/%>
+ <div class="UIInfoBar">
+ <div class="BlueRoundedStyle">
+ <div class="LeftBar">
+ <div class="RightBar">
+ <div class="MiddleBar">
+ <div class="FixHeight ClearFix">
+ <div class="DragControlArea" title="<%=_ctx.appRes("UIColumnContainer.title.DragControlArea")%>" onmousedown="eXo.portal.PortalDragDrop.init.call(this,event);"><span></span></div>
+ <%
+ String showCategory = "eXo.webui.UIPopupSelectCategory.show(this, event)";
+ String strTitle = uicomponent.getTitle() != null ?
+ ExpressionUtil.getExpressionValue(res, uicomponent.getTitle()) :
+ _ctx.appRes("UIColumnContainer.title.Container");
+ %>
+ <div class="ContainerIcon"><%=hasPermission ? strTitle : _ctx.appRes("UIPortlet.label.protectedContent")%></div>
+ <%if(hasPermission) {%>
+ <div class="ControlIcon ArrowDownIcon" onclick="$showCategory" title="<%= _ctx.appRes("UIColumnContainer.tooltip.insertColumn") %>">
+ <% /*Begin Popup Menu*/ %>
+ <div style="position: relative; width: 100%">
+ <div class="UIPopupCategory" style="display: none;">
+ <div class="PopupCategoryDecorator">
+ <div class="PopupCategoryTL">
+ <div class="PopupCategoryTR">
+ <div class="PopupCategoryTC"><span></span></div>
+ </div>
+ </div>
+ <div class="PopupCategoryML">
+ <div class="PopupCategoryMR">
+ <div class="PopupCategoryMC">
+ <a class="CategoryItem" href="<%= uicomponent.event("InsertColumn", org.exoplatform.portal.webui.container.UIColumnContainer.INSERT_BEFORE) %>" title="<%= _ctx.appRes("UIColumnContainer.tooltip.insertLeft") %>">
+ <div class="CategoryItemLabel"><%= _ctx.appRes("UIColumnContainer.label.insertLeft") %></div>
+ </a>
+ <a class="CategoryItem" href="<%= uicomponent.event("InsertColumn", org.exoplatform.portal.webui.container.UIColumnContainer.INSERT_AFTER) %>" title="<%= _ctx.appRes("UIColumnContainer.tooltip.insertRight") %>">
+ <div class="CategoryItemLabel"><%= _ctx.appRes("UIColumnContainer.label.insertRight") %></div>
+ </a>
+ </div>
+ </div>
+ </div>
+ <div class="PopupCategoryBL">
+ <div class="PopupCategoryBR">
+ <div class="PopupCategoryBC"><span></span></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <% /*End Popup Menu*/ %>
+ </div>
+ <a href="<%=uicomponent.event("EditContainer")%>;eXo.portal.UIPortal.changeComposerSaveButton()" class="EditContainerIcon" title="<%=_ctx.appRes("UIColumnContainer.tooltip.editContainer")%>"><span></span></a>
+ <a href="<%=uicomponent.event("DeleteComponent")%>" class="DeleteContainerIcon" title="<%=_ctx.appRes("UIColumnContainer.tooltip.closeContainer")%>"><span></span></a>
+
+ <%}%>
+
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <%/*End InfoBar*/ %>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <%} %>
+
+ </div>
+ </div>
+ </div>
+</div>
+
Modified: portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/container/UITableColumnContainer.gtmpl
===================================================================
--- portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/container/UITableColumnContainer.gtmpl 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/container/UITableColumnContainer.gtmpl 2010-11-08 03:40:16 UTC (rev 4965)
@@ -16,7 +16,7 @@
}
%>
-<div class="UIContainer <%=uiPortalApp.isEditing()?"EdittingContainer":""%> <%=hasPermission?"":"ProtectedContainer"%>"
+<div class="UIContainer UITableColumnContainer <%=uiPortalApp.isEditing()?"EdittingContainer":""%> <%=hasPermission?"":"ProtectedContainer"%>"
id="${uicomponent.id}"
onmouseover="eXo.portal.UIPortal.blockOnMouseOver(event, this, true);"
onmouseout="eXo.portal.UIPortal.blockOnMouseOver(event, this, false);">
@@ -39,10 +39,10 @@
<%} %>
<div>
<%if(hasPermission) {%>
- <table class="UITableColumnContainer" style="table-layout: fixed; margin: 0px auto; $style">
+ <table class="UITableColumn" style="table-layout: fixed; margin: 0px auto; $style">
<tr class="TRContainer">
<% for(uiChild in uicomponent.getChildren()) {%>
- <td class="${uiChild.id}TDContainer TDContainer"><% uicomponent.renderUIComponent(uiChild) %></td>
+ <td class="${uiChild.id}TDContainer TDContainer" width="<%= uiChild.getWidth(); %>"><% uicomponent.renderUIComponent(uiChild) %></td>
<% } %>
</tr>
</table>
@@ -65,16 +65,16 @@
<div class="RightBar">
<div class="MiddleBar">
<div class="FixHeight ClearFix">
- <div class="DragControlArea" title="<%=_ctx.appRes("UIContainer.tooltip.drag")%>" onmousedown="eXo.portal.PortalDragDrop.init.call(this,event);"><span></span></div>
+ <div class="DragControlArea" title="<%=_ctx.appRes("UITableColumnContainer.title.DragControlArea")%>" onmousedown="eXo.portal.PortalDragDrop.init.call(this,event);"><span></span></div>
<%
String strTitle = uicomponent.getTitle() != null ?
ExpressionUtil.getExpressionValue(res, uicomponent.getTitle()) :
- _ctx.appRes("UIContainer.title.Container");
+ _ctx.appRes("UITableColumnContainer.title.Container");
%>
<div class="ContainerIcon DefaultContainer16x16Icon"><%=hasPermission ? strTitle : _ctx.appRes("UIPortlet.label.protectedContent")%></div>
<%if(hasPermission) {%>
- <a href="<%=uicomponent.event("EditContainer","$uicomponent.id")%>" class="EditContainerIcon" title="<%=_ctx.appRes("UIContainer.tooltip.editContainer")%>"><span></span></a>
- <a href="<%=uicomponent.event("DeleteComponent","$uicomponent.id")%>" class="DeleteContainerIcon" title="<%=_ctx.appRes("UIContainer.tooltip.closeContainer")%>"><span></span></a>
+ <a href="<%=uicomponent.event("EditContainer","$uicomponent.id")%>" class="EditContainerIcon" title="<%=_ctx.appRes("UITableColumnContainer.tooltip.editContainer")%>"><span></span></a>
+ <a href="<%=uicomponent.event("DeleteComponent","$uicomponent.id")%>" class="DeleteContainerIcon" title="<%=_ctx.appRes("UITableColumnContainer.tooltip.closeContainer")%>"><span></span></a>
<%}%>
</div>
</div>
Modified: portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/page/UIPageSelector2.gtmpl
===================================================================
--- portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/page/UIPageSelector2.gtmpl 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/groovy/portal/webui/page/UIPageSelector2.gtmpl 2010-11-08 03:40:16 UTC (rev 4965)
@@ -108,7 +108,7 @@
</div>
<% } %>
- <div class="ActionButton SimpleStyle" onclick="javascript: eXo.webui.UIPopupWindow.show('<%=uicomponent.getChild(UIPopupWindow.class).getId();%>');">
+ <div class="ActionButton SimpleStyle" onclick="javascript: eXo.webui.UIPopupWindow.show('<%=uicomponent.getChild(UIPopupWindow.class).getId();%>', true);">
<div class="ButtonLeft">
<div class="ButtonRight">
<div class="ButtonMiddle">
Modified: portal/trunk/web/portal/src/main/webapp/groovy/webui/core/UIPopupWindow.gtmpl
===================================================================
--- portal/trunk/web/portal/src/main/webapp/groovy/webui/core/UIPopupWindow.gtmpl 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/web/portal/src/main/webapp/groovy/webui/core/UIPopupWindow.gtmpl 2010-11-08 03:40:16 UTC (rev 4965)
@@ -39,7 +39,7 @@
<div class="TopCenterDecorator">
<div class="OverflowContainer">
<div class="PopupTitleIcon"><span></span></div>
- <%if( true) {%>
+ <%if (showCloseButton) {%>
<!-- <div class="CloseButton" title="Close Window" onclick="<%=uicomponent.event("ClosePopup")%>"><span></span></div> -->
<div class="CloseButton" title="<%=_ctx.appRes("UIPopupWindow.Close")%>" onclick="<%=uicomponent.event(uicomponent.getCloseEvent())%>"><span></span></div>
<% } else { %>
Modified: portal/trunk/webui/core/src/main/java/org/exoplatform/webui/core/UIPageIterator.java
===================================================================
--- portal/trunk/webui/core/src/main/java/org/exoplatform/webui/core/UIPageIterator.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/core/src/main/java/org/exoplatform/webui/core/UIPageIterator.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -19,15 +19,17 @@
package org.exoplatform.webui.core;
+import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.commons.utils.EmptySerializablePageList;
import org.exoplatform.commons.utils.PageList;
-import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
/**
* A component that allows pagination, with an iterator to change pages
@@ -42,6 +44,8 @@
*/
private PageList pageList_ = EmptySerializablePageList.get();
+ private Set<String> selectedItems = new HashSet<String>();
+
public UIPageIterator()
{
}
@@ -95,6 +99,28 @@
{
pageList_.getPage(page);
}
+
+ public void setSelectedItem(String key, boolean value)
+ {
+ if (value == false && this.selectedItems.contains(key))
+ {
+ selectedItems.remove(key);
+ }
+ else if (value)
+ {
+ selectedItems.add(key);
+ }
+ }
+
+ public Set<String> getSelectedItems()
+ {
+ return selectedItems;
+ }
+
+ public boolean isSelectedItem(String key)
+ {
+ return selectedItems.contains(key);
+ }
@SuppressWarnings("unused")
static public class ShowPageActionListener extends EventListener<UIPageIterator>
Modified: portal/trunk/webui/eXo/src/main/java/org/exoplatform/webui/organization/account/UIUserSelector.java
===================================================================
--- portal/trunk/webui/eXo/src/main/java/org/exoplatform/webui/organization/account/UIUserSelector.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/eXo/src/main/java/org/exoplatform/webui/organization/account/UIUserSelector.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -41,18 +41,20 @@
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.core.model.SelectItemOption;
import org.exoplatform.webui.event.Event;
+import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.event.EventListener;
-import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormCheckBoxInput;
import org.exoplatform.webui.form.UIFormSelectBox;
import org.exoplatform.webui.form.UIFormStringInput;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
/**
@@ -119,7 +121,7 @@
uiIterator_ = new UIPageIterator();
uiIterator_.setPageList(objPageList);
uiIterator_.setId("UISelectUserPage");
-
+
// create group selector
UIPopupWindow uiPopup = addChild(UIPopupWindow.class, null, "UIPopupGroupSelector");
uiPopup.setWindowSize(540, 0);
@@ -138,8 +140,14 @@
for (Object obj : uiIterator_.getCurrentPageData())
{
User user = (User)obj;
- if (getUIFormCheckBoxInput(user.getUserName()) == null)
- addUIFormInput(new UIFormCheckBoxInput<Boolean>(user.getUserName(), user.getUserName(), false));
+ UIFormCheckBoxInput<Boolean> uiFormCheckBoxInput = getUIFormCheckBoxInput(user.getUserName());
+ if (uiFormCheckBoxInput == null)
+ {
+ uiFormCheckBoxInput = new UIFormCheckBoxInput<Boolean>(user.getUserName(), user.getUserName(), false);
+ addUIFormInput(uiFormCheckBoxInput);
+ }
+
+ uiFormCheckBoxInput.setChecked(uiIterator_.isSelectedItem(user.getUserName()));
}
}
return new ArrayList<User>(uiIterator_.getCurrentPageData());
@@ -315,31 +323,32 @@
static public class AddActionListener extends EventListener<UIUserSelector>
{
- @SuppressWarnings("unchecked")
public void execute(Event<UIUserSelector> event) throws Exception
{
UIUserSelector uiForm = event.getSource();
StringBuilder sb = new StringBuilder();
- int count = 0;
- for (Object o : uiForm.uiIterator_.getCurrentPageData())
+
+ uiForm.setSelectedItem();
+
+ // get item from selected item map
+ Set<String> items = uiForm.uiIterator_.getSelectedItems();
+ if (items.size() == 0)
{
- User u = (User)o;
- UIFormCheckBoxInput input = uiForm.getUIFormCheckBoxInput(u.getUserName());
- if (input != null && input.isChecked())
- {
- count++;
- if (sb.toString() != null && sb.toString().trim().length() != 0)
- sb.append(",");
- sb.append(u.getUserName());
- }
- }
- if (count == 0)
- {
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class);
uiApp.addMessage(new ApplicationMessage("UIUserSelector.msg.user-required", null));
event.getRequestContext().addUIComponentToUpdateByAjax(uiApp.getUIPopupMessages());
return;
}
+ String[] arrItems = items.toArray(new String[items.size()]);
+ Arrays.sort(arrItems);
+
+ for (String key : arrItems)
+ {
+ if (sb.toString() != null && sb.toString().trim().length() != 0)
+ sb.append(",");
+ sb.append(key);
+ }
+
uiForm.setSelectedUsers(sb.toString());
uiForm.<UIComponent> getParent().broadcast(event, event.getExecutionPhase());
}
@@ -379,6 +388,19 @@
{
getUIStringInput(FIELD_KEYWORD).setValue(value);
}
+
+ private void setSelectedItem() throws Exception
+ {
+ for (Object o : this.uiIterator_.getCurrentPageData())
+ {
+ User u = (User) o;
+ UIFormCheckBoxInput input = this.getUIFormCheckBoxInput(u.getUserName());
+ if (input != null)
+ {
+ this.uiIterator_.setSelectedItem(u.getUserName(), input.isChecked());
+ }
+ }
+ }
static public class SelectGroupActionListener extends EventListener<UIGroupSelector>
{
@@ -457,6 +479,8 @@
public void execute(Event<UIUserSelector> event) throws Exception
{
UIUserSelector uiSelectUserForm = event.getSource();
+ uiSelectUserForm.setSelectedItem();
+
int page = Integer.parseInt(event.getRequestContext().getRequestParameter(OBJECTID));
uiSelectUserForm.updateCurrentPage(page);
event.getRequestContext().addUIComponentToUpdateByAjax(uiSelectUserForm);
Modified: portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/application/ConfigurationManager.java
===================================================================
--- portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/application/ConfigurationManager.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/application/ConfigurationManager.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -40,6 +40,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
/**
* May 10, 2006
@@ -55,8 +56,16 @@
* <p/>
* The components of which we manage the configuration
*/
- private Map<String, Component> configs_ = new HashMap<String, Component>();
+ //private Map<String, Component> configs_ = new HashMap<String, Component>();
+ /**
+ * Minh Hoang TO: First attempt to synchronize the map, we simply replace HashMap with ConcurrentHashMap
+ * and default values for load factor, initial capacity and concurrentcyLevel
+ *
+ * TODO: Need to examine the performance influence in the future for a better synchronizing
+ */
+ private Map<String, Component> configs_ = new ConcurrentHashMap<String, Component>();
+
/** The logger. */
private final Logger log;
Modified: portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/config/Component.java
===================================================================
--- portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/config/Component.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/framework/src/main/java/org/exoplatform/webui/config/Component.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -176,21 +176,33 @@
public Event getUIComponentEventConfig(String eventName) throws Exception
{
- if (eventMap != null)
+ if(eventMap == null)
{
- return eventMap.get(eventName);
+ synchronized(this)
+ {
+ if(eventMap == null)
+ {
+ eventMap = new HashMap<String, Event>();
+
+ if (events == null)
+ {
+ return null;
+ }
+
+ for (Event event : events)
+ {
+ createCachedEventListeners(event);
+ eventMap.put(event.getName(), event);
+ }
+ }
+
+ return eventMap.get(eventName);
+ }
}
- eventMap = new HashMap<String, Event>();
- if (events == null)
+ else
{
- return null;
+ return eventMap.get(eventName);
}
- for (Event event : events)
- {
- createCachedEventListeners(event);
- eventMap.put(event.getName(), event);
- }
- return eventMap.get(eventName);
}
public List<EventListener> getUIComponentEventListeners(String eventName) throws Exception
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/application/PortalRequestContext.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -450,9 +450,11 @@
/**
* Add an extra markup to the head of the html page.
* @param element The element to add
+ * @param portletWindowId The ID of portlet window contributing markup header
*/
- public void addExtraMarkupHeader(Element element)
+ public void addExtraMarkupHeader(Element element, String portletWindowId)
{
+ element.setAttribute("class", "ExHead-" + portletWindowId);
if (this.extraMarkupHeaders == null)
{
this.extraMarkupHeaders = new ArrayList<Element>();
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletLifecycle.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletLifecycle.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/application/UIPortletLifecycle.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -256,7 +256,7 @@
{
for (Element element : markupElements)
{
- if ("title".equals(element.getNodeName().toLowerCase())
+ if (!context.useAjax() && "title".equals(element.getNodeName().toLowerCase())
&& element.getFirstChild() != null)
{
String title = element.getFirstChild().getTextContent();
@@ -264,7 +264,7 @@
}
else
{
- prcontext.addExtraMarkupHeader(element);
+ prcontext.addExtraMarkupHeader(element, uicomponent.getId());
}
}
}
Copied: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/container/UIColumnContainer.java (from rev 4964, portal/branches/branch-GTNPORTAL-1592/webui/portal/src/main/java/org/exoplatform/portal/webui/container/UIColumnContainer.java)
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/container/UIColumnContainer.java (rev 0)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/container/UIColumnContainer.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -0,0 +1,108 @@
+/**
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * 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.exoplatform.portal.webui.container;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.exoplatform.portal.application.PortalRequestContext;
+import org.exoplatform.portal.webui.container.UIContainerActionListener.EditContainerActionListener;
+import org.exoplatform.portal.webui.portal.UIPortalComponent;
+import org.exoplatform.portal.webui.portal.UIPortalComponentActionListener.DeleteComponentActionListener;
+import org.exoplatform.portal.webui.util.Util;
+import org.exoplatform.portal.webui.workspace.UIPortalApplication;
+import org.exoplatform.portal.webui.workspace.UIWorkingWorkspace;
+import org.exoplatform.webui.config.annotation.ComponentConfig;
+import org.exoplatform.webui.config.annotation.EventConfig;
+import org.exoplatform.webui.core.UIComponent;
+import org.exoplatform.webui.event.Event;
+import org.exoplatform.webui.event.EventListener;
+
+/**
+ * Created by The eXo Platform SAS
+ * Author : Nguyen Duc Khoi
+ * khoi.nguyen(a)exoplatform.com
+ * Jul 29, 2010
+ */
+
+@ComponentConfig(template = "system:/groovy/portal/webui/container/UIColumnContainer.gtmpl", events =
+{
+ @EventConfig(listeners = UIColumnContainer.InsertColumnActionListener.class),
+ @EventConfig(listeners = DeleteComponentActionListener.class, confirm = "UIColumnContainer.deleteColumnContainer"),
+ @EventConfig(listeners = EditContainerActionListener.class)})
+public class UIColumnContainer extends UIContainer
+{
+ public static final String COLUMN_CONTAINER = "ColumnContainer";
+
+ public static final String INSERT_AFTER = "insertColumnAfter";
+
+ public static final String INSERT_BEFORE = "insertColumnBefore";
+
+ public UIColumnContainer()
+ {
+ super();
+ }
+
+ public static class InsertColumnActionListener extends EventListener<UIColumnContainer>
+ {
+ @Override
+ public void execute(Event<UIColumnContainer> event) throws Exception
+ {
+ String insertPosition = event.getRequestContext().getRequestParameter(UIComponent.OBJECTID);
+ UIColumnContainer uiSelectedColumn = event.getSource();
+ UIPortalComponent uiParent = (UIPortalComponent) uiSelectedColumn.getParent();
+ if (insertPosition.equals(INSERT_AFTER))
+ {
+ UIColumnContainer.insertColumn(uiSelectedColumn, true);
+ }
+ else if (insertPosition.equals(INSERT_BEFORE))
+ {
+ UIColumnContainer.insertColumn(uiSelectedColumn, false);
+ }
+
+ Util.showComponentLayoutMode(uiSelectedColumn.getClass());
+
+ PortalRequestContext pcontext = (PortalRequestContext) event.getRequestContext();
+ UIPortalApplication uiPortalApp = uiParent.getAncestorOfType(UIPortalApplication.class);
+ UIWorkingWorkspace uiWorkingWS = uiPortalApp.getChildById(UIPortalApplication.UI_WORKING_WS_ID);
+ pcontext.addUIComponentToUpdateByAjax(uiWorkingWS);
+ pcontext.setFullRender(true);
+ }
+
+ }
+
+ private static void insertColumn(UIColumnContainer selectedColumn, boolean isInsertAfter) throws Exception
+ {
+ UIContainer uiParent = selectedColumn.getParent();
+ UIColumnContainer uiNewColumn = uiParent.addChild(UIColumnContainer.class, null, null);
+
+ uiNewColumn.setTemplate(selectedColumn.getTemplate());
+ uiNewColumn.setFactoryId(selectedColumn.getFactoryId());
+ uiNewColumn.setId(String.valueOf(uiNewColumn.hashCode()));
+
+ List<UIComponent> listColumn = uiParent.getChildren();
+ int position = listColumn.indexOf(selectedColumn);
+ if (isInsertAfter)
+ {
+ position += 1;
+ }
+ Collections.rotate(listColumn.subList(position, listColumn.size()), 1);
+ }
+
+}
\ No newline at end of file
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/login/UILoginForm.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/login/UILoginForm.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/login/UILoginForm.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -20,17 +20,13 @@
package org.exoplatform.portal.webui.login;
import org.exoplatform.portal.webui.workspace.UIMaskWorkspace;
-import org.exoplatform.web.login.InitiateLoginServlet;
+import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
-import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
+import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.event.Event.Phase;
-import org.exoplatform.webui.form.UIForm;
-import org.exoplatform.webui.form.UIFormCheckBoxInput;
-import org.exoplatform.webui.form.UIFormStringInput;
-import org.exoplatform.webui.form.validator.MandatoryValidator;
/**
* Created by The eXo Platform SARL
@@ -38,58 +34,16 @@
* nhudinhthuan(a)exoplatform.com
* Jul 11, 2006
*/
-@ComponentConfig(lifecycle = UIFormLifecycle.class, template = "system:/groovy/portal/webui/UILoginForm.gtmpl", events = {
- // @EventConfig(listeners = UILoginForm.SigninActionListener.class),
+@ComponentConfig(template = "system:/groovy/portal/webui/UILoginForm.gtmpl", events = {
@EventConfig(phase = Phase.DECODE, listeners = UIMaskWorkspace.CloseActionListener.class),
@EventConfig(phase = Phase.DECODE, listeners = UILoginForm.ForgetPasswordActionListener.class)})
-public class UILoginForm extends UIForm
+public class UILoginForm extends UIComponent
{
- final static String USER_NAME = "username";
- final static String PASSWORD = "password";
-
public UILoginForm() throws Exception
{
- addUIFormInput(new UIFormStringInput(USER_NAME, USER_NAME, null).addValidator(MandatoryValidator.class))
- .addUIFormInput(
- new UIFormStringInput(PASSWORD, PASSWORD, null).setType(UIFormStringInput.PASSWORD_TYPE).addValidator(
- MandatoryValidator.class));
- addUIFormInput(new UIFormCheckBoxInput<String>(InitiateLoginServlet.COOKIE_NAME,
- InitiateLoginServlet.COOKIE_NAME, Boolean.TRUE.toString()));
}
- static public class SigninActionListener extends EventListener<UILoginForm>
- {
-
- public void execute(Event<UILoginForm> event) throws Exception
- {
- // UILoginForm uiForm = event.getSource();
- // String username = uiForm.getUIStringInput(USER_NAME).getValue();
- // String password = uiForm.getUIStringInput(PASSWORD).getValue();
- // OrganizationService orgService = uiForm.getApplicationComponent(OrganizationService.class);
- // boolean authentication = orgService.getUserHandler().authenticate(username, password);
- // if(!authentication){
- // throw new MessageException(new ApplicationMessage("UILoginForm.msg.Invalid-account", null));
- // }
- // PortalRequestContext prContext = Util.getPortalRequestContext();
- // HttpServletRequest request = prContext.getRequest();
- // HttpSession session = request.getSession();
- // session.setAttribute("authentication.username", username);
- // session.setAttribute("authentication.password", password);
- // UIPortal uiPortal = Util.getUIPortal();
- // prContext.setResponseComplete(true);
- // String portalName = uiPortal.getName() ;
- // HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(request) ;
- // wrapper.getParameterMap().put("username", username) ;
- // wrapper.getParameterMap().put("password", password) ;
- // portalName = URLEncoder.encode(portalName, "UTF-8") ;
- // String redirect = request.getContextPath() + "/private/" + portalName + "/";
- // prContext.getResponse().sendRedirect(redirect);
- }
-
- }
-
- //TODO: dang.tung - forget password
static public class ForgetPasswordActionListener extends EventListener<UILoginForm>
{
public void execute(Event<UILoginForm> event) throws Exception
@@ -100,4 +54,18 @@
event.getRequestContext().addUIComponentToUpdateByAjax(uiLogin);
}
}
+
+ @Override
+ public void processDecode(WebuiRequestContext context) throws Exception
+ {
+ super.processDecode(context);
+ String action = context.getRequestParameter(context.getActionParameterName());
+ Event<UIComponent> event = createEvent(action, Event.Phase.DECODE, context);
+ if (event != null)
+ {
+ event.broadcast();
+ }
+ }
+
+
}
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageForm.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageForm.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageForm.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -32,6 +32,7 @@
import org.exoplatform.portal.config.model.PortalConfig;
import org.exoplatform.portal.webui.application.UIPortlet;
import org.exoplatform.portal.webui.container.UIContainer;
+import org.exoplatform.portal.webui.portal.UIPortal;
import org.exoplatform.portal.webui.portal.UIPortalComponent;
import org.exoplatform.portal.webui.portal.UIPortalComposer;
import org.exoplatform.portal.webui.util.PortalDataMapper;
@@ -90,6 +91,8 @@
protected UIFormInputSet uiPermissionSetting;
protected UIFormSelectBox groupIdSelectBox = null;
+
+ protected UIFormSelectBox portalIdSelectBox = null;
protected UIFormStringInput ownerIdInput = null;
@@ -106,14 +109,6 @@
List<SelectItemOption<String>> ownerTypes = new ArrayList<SelectItemOption<String>>();
ownerTypes.add(new SelectItemOption<String>(PortalConfig.USER_TYPE));
- UserPortalConfig userPortalConfig =
- configService.getUserPortalConfig(pcontext.getPortalOwner(), pcontext.getRemoteUser());
- ExoContainer container = ExoContainerContext.getCurrentContainer();
- UserACL acl = (UserACL)container.getComponentInstanceOfType(UserACL.class);
- if (acl.hasEditPermission(userPortalConfig.getPortalConfig()))
- {
- ownerTypes.add(new SelectItemOption<String>(PortalConfig.PORTAL_TYPE));
- }
ownerIdInput = new UIFormStringInput(OWNER_ID, OWNER_ID, null);
ownerIdInput.setEditable(false).setValue(pcontext.getRemoteUser());
@@ -153,6 +148,27 @@
//TODO: This following line is fixed for bug PORTAL-2127
uiListPermissionSelector.getChild(UIFormPopupWindow.class).setId("UIPageFormPopupGroupMembershipSelector");
+ List<String> portals = configService.getAllPortalNames();
+ Collections.sort(portals);
+ List<SelectItemOption<String>> portalsItem = new ArrayList<SelectItemOption<String>>();
+ ExoContainer container = ExoContainerContext.getCurrentContainer();
+ UserACL acl = (UserACL)container.getComponentInstanceOfType(UserACL.class);
+ for (String p : portals)
+ {
+ UserPortalConfig userPortalConfig = configService.getUserPortalConfig(p, pcontext.getRemoteUser());
+ if (acl.hasEditPermission(userPortalConfig.getPortalConfig()))
+ {
+ portalsItem.add(new SelectItemOption<String>(p));
+ }
+ }
+ if(portalsItem.size() > 0)
+ {
+ ownerTypes.add(new SelectItemOption<String>(PortalConfig.PORTAL_TYPE));
+ portalIdSelectBox = new UIFormSelectBox(OWNER_ID, OWNER_ID, portalsItem);
+ portalIdSelectBox.setOnChange("ChangeOwnerId");
+ portalIdSelectBox.setParent(uiSettingSet);
+ }
+
List<String> groups = configService.getMakableNavigations(pcontext.getRemoteUser(), true);
if (groups.size() > 0)
{
@@ -167,6 +183,7 @@
groupIdSelectBox.setOnChange("ChangeOwnerId");
groupIdSelectBox.setParent(uiSettingSet);
}
+
setActions(new String[]{"Save", "Close"});
}
@@ -208,11 +225,6 @@
uiTemplate.setValue(uiPage.getFactoryId());
}
- public void setEditPermission(String per)
- {
-
- }
-
public void invokeSetBindingBean(Object bean) throws Exception
{
String ownerType = getUIFormSelectBox("ownerType").getValue();
@@ -306,15 +318,9 @@
page.setChildren(applications);
PortalDataMapper.toUIPage(uiPage, page);
- // if(page.getTemplate() == null) page.setTemplate(uiPage.getTemplate()) ;
if (page.getChildren() == null)
page.setChildren(new ArrayList<ModelObject>());
- // uiEditBar.setUIPage(uiPage);
- // Class<?> [] childrenToRender = {UIPageEditBar.class,
- // UIPageNodeSelector.class, UIPageNavigationControlBar.class};
- // uiManagement.setRenderedChildrenOfTypes(childrenToRender);
-
pcontext.setFullRender(true);
UIWorkingWorkspace uiWorkingWS = uiPortalApp.getChildById(UIPortalApplication.UI_WORKING_WS_ID);
pcontext.addUIComponentToUpdateByAjax(uiWorkingWS);
@@ -328,7 +334,6 @@
page.setChildren(applications);
PortalDataMapper.toUIPage(uiPage, page);
- // if(page.getTemplate() == null) page.setTemplate(uiPage.getTemplate()) ;
if (page.getChildren() == null)
page.setChildren(new ArrayList<ModelObject>());
@@ -372,7 +377,6 @@
}
uiPage.setStorageId(storageId);
- // if(page.getTemplate() == null) page.setTemplate(uiPage.getTemplate()) ;
if (page.getChildren() == null)
page.setChildren(new ArrayList<ModelObject>());
}
@@ -418,12 +422,28 @@
if (PortalConfig.PORTAL_TYPE.equals(ownerType))
{
list.remove(2);
- list.add(2, uiForm.ownerIdInput);
- uiForm.ownerIdInput.setValue(prContext.getPortalOwner());
- uiForm.findFirstComponentOfType(UIListPermissionSelector.class).setValue(
- Util.getUIPortal().getAccessPermissions());
- uiForm.findFirstComponentOfType(UIPermissionSelector.class).setValue(
- Util.getUIPortal().getEditPermission());
+ list.add(2, uiForm.portalIdSelectBox);
+ String portalIdSelected = uiForm.portalIdSelectBox.getValue();
+ String[] accessPermissions = {};
+ String editPermission = "";
+
+ UserPortalConfigService service = uiForm.getApplicationComponent(UserPortalConfigService.class);
+ UserPortalConfig userConfig = service.getUserPortalConfig(portalIdSelected, prContext.getRemoteUser());
+ if (userConfig != null)
+ {
+ PortalConfig config = userConfig.getPortalConfig();
+ accessPermissions = config.getAccessPermissions();
+ editPermission = config.getEditPermission();
+ }
+ else
+ {
+ UIPortal uiPortal = Util.getUIPortalApplication().getCachedUIPortal(ownerType, portalIdSelected);
+ accessPermissions = uiPortal.getAccessPermissions();
+ editPermission = uiPortal.getEditPermission();
+ }
+
+ uiForm.findFirstComponentOfType(UIListPermissionSelector.class).setValue(accessPermissions);
+ uiForm.findFirstComponentOfType(UIPermissionSelector.class).setValue(editPermission);
}
else
{
@@ -447,13 +467,33 @@
public void execute(Event<UIPageForm> event) throws Exception
{
UIPageForm uiForm = event.getSource();
- String groupIdSelected = uiForm.groupIdSelectBox.getValue();
- groupIdSelected = groupIdSelected.startsWith("/") ? groupIdSelected : "/" + groupIdSelected;
- String permission = "*:" + groupIdSelected;
- uiForm.findFirstComponentOfType(UIListPermissionSelector.class).setValue(new String[]{permission});
- UserACL userACL = uiForm.getApplicationComponent(UserACL.class);
- permission = userACL.getMakableMT() + ":" + groupIdSelected;
- uiForm.findFirstComponentOfType(UIPermissionSelector.class).setValue(permission);
+ UIFormSelectBox uiSelectBox = uiForm.getUIFormSelectBox(OWNER_TYPE);
+ String ownerType = uiSelectBox.getValue();
+ if(PortalConfig.PORTAL_TYPE.equals(ownerType)) {
+ String[] accessPermissions = {};
+ String editPermission = "";
+ String portalIdSelected = uiForm.portalIdSelectBox.getValue();
+ UserPortalConfigService service = uiForm.getApplicationComponent(UserPortalConfigService.class);
+ UserPortalConfig userConfig = service.getUserPortalConfig(portalIdSelected, Util.getPortalRequestContext().getRemoteUser());
+ if (userConfig != null)
+ {
+ PortalConfig config = userConfig.getPortalConfig();
+ accessPermissions = config.getAccessPermissions();
+ editPermission = config.getEditPermission();
+ uiForm.findFirstComponentOfType(UIListPermissionSelector.class).setValue(accessPermissions);
+ uiForm.findFirstComponentOfType(UIPermissionSelector.class).setValue(editPermission);
+ }
+ }
+ else
+ {
+ String groupIdSelected = uiForm.groupIdSelectBox.getValue();
+ groupIdSelected = groupIdSelected.startsWith("/") ? groupIdSelected : "/" + groupIdSelected;
+ String permission = "*:" + groupIdSelected;
+ uiForm.findFirstComponentOfType(UIListPermissionSelector.class).setValue(new String[]{permission});
+ UserACL userACL = uiForm.getApplicationComponent(UserACL.class);
+ permission = userACL.getMakableMT() + ":" + groupIdSelected;
+ uiForm.findFirstComponentOfType(UIPermissionSelector.class).setValue(permission);
+ }
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
@@ -463,13 +503,6 @@
public void execute(Event<UIGroupMembershipSelector> event) throws Exception
{
UIPageForm uiForm = event.getSource().getAncestorOfType(UIPageForm.class);
- /*if (!uiForm.getUIStringInput(OWNER_TYPE).getValue().equals(PortalConfig.GROUP_TYPE))
- return;
- String editPer = uiForm.findFirstComponentOfType(UIPermissionSelector.class).getValue();
- if (editPer == null || editPer.length() < 1)
- return;
- String group = editPer.substring(editPer.indexOf("/") + 1);
- uiForm.ownerIdInput.setValue(group);*/
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageSelector2.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageSelector2.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/page/UIPageSelector2.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -65,6 +65,7 @@
super("UIPageSelector2", null);
UIFormPopupWindow uiPopup = addChild(UIFormPopupWindow.class, null, "PopupPageSelector2");
uiPopup.setWindowSize(900, 400);
+ uiPopup.setShowMask(true);
uiPopup.setRendered(false);
UIPageBrowser uiPageBrowser = createUIComponent(UIPageBrowser.class, "SelectPage", null);
uiPopup.setUIComponent(uiPageBrowser);
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/util/PortalDataMapper.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -33,6 +33,7 @@
import org.exoplatform.portal.webui.application.PortletState;
import org.exoplatform.portal.webui.application.UIGadget;
import org.exoplatform.portal.webui.application.UIPortlet;
+import org.exoplatform.portal.webui.container.UIColumnContainer;
import org.exoplatform.portal.webui.container.UIContainer;
import org.exoplatform.portal.webui.container.UITabContainer;
import org.exoplatform.portal.webui.page.UIPage;
@@ -412,6 +413,10 @@
{
uiTempContainer = uiContainer.createUIComponent(context, UITabContainer.class, null, null);
}
+ else if (UIColumnContainer.COLUMN_CONTAINER.equals(container.getFactoryId()))
+ {
+ uiTempContainer = uiContainer.createUIComponent(context, UIColumnContainer.class, null, null);
+ }
else
{
uiTempContainer = uiContainer.createUIComponent(context, UIContainer.class, null, null);
Modified: portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java
===================================================================
--- portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java 2010-11-06 16:11:39 UTC (rev 4964)
+++ portal/trunk/webui/portal/src/main/java/org/exoplatform/portal/webui/workspace/UIPortalApplication.java 2010-11-08 03:40:16 UTC (rev 4965)
@@ -596,7 +596,13 @@
w.write("</div>");
}
}
-
+ w.write("<div class=\"MarkupHeadElements\">");
+ List<String> headElems = ((PortalRequestContext)context).getExtraMarkupHeadersAsStrings();
+ for (String elem : headElems)
+ {
+ w.write(elem);
+ }
+ w.write("</div>");
w.write("<div class=\"PortalResponseScript\">");
pcontext.getJavascriptManager().writeJavascript(w);
w.write("eXo.core.Browser.onLoad();\n");
14 years, 2 months