Author: cziegeler Date: Fri Jan 28 09:54:58 2005 New Revision: 148909 URL: http://svn.apache.org/viewcvs?view=rev&rev=148909 Log: <action dev="CZ" type="add" fixes-bug="33287" due-to="Jens Maukisch" due-to-email="[EMAIL PROTECTED]"> Portal Block: Add portal tools framework contribution. </action>
Added: cocoon/trunk/src/blocks/portal/WEB-INF/xconf/cocoon-portal-tools.xconf (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalTool.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolBuilder.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolCatalogue.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolComponent.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolFunction.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolManager.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/acting/ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/acting/CheckAccessAction.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/copletManagement/ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/copletManagement/LayoutActions.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/copletManagement/generation/ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/copletManagement/generation/XMLProfileGenerator.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/generation/ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/generation/I18nCatalogueGenerator.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/MultipleRoleMatcher.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/PortalObjects.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/RoleMatcher.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/SingleRoleMatcher.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/model/ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/model/User.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/ptm.js (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/service/ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/service/UserrightsService.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/CheckAccessTransformer.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/PortalToolsI18nTransformer.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/PortalToolsLayoutTransformer.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/ContextGrabber.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/ContextItem.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/UserBean.java (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/css/forms-calendar.css (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/css/forms.css (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/images/cal.gif (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/js/ cocoon/trunk/src/blocks/portal/samples/skins/basic/js/forms-lib.js (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/js/mattkruse-lib.js (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-advanced-field-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-calendar-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-field-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-htmlarea-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-page-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/css/forms-calendar.css (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/css/forms.css (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/images/cal.gif (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/js/ cocoon/trunk/src/blocks/portal/samples/skins/common/js/forms-lib.js (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/js/mattkruse-lib.js (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-advanced-field-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-calendar-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-field-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-htmlarea-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-page-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-styling.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/ cocoon/trunk/src/blocks/portal/samples/tools/auth.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/auth2.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/conf.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/flow.js (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/main/ cocoon/trunk/src/blocks/portal/samples/tools/main/functions.jx (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/main/menu.jx (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/main/noTools.jx (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/main/tools.jx (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/flow.js (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/binding.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/form.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/template.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addTab/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addTab/form.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addTab/template.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/binding.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/form.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/template.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/binding.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/form.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/template.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement_de.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement_en.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/jx/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/jx/selectSkin.jx (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/sitemap.xmap (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/styles/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/styles/createIndex.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/tool.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages_de.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages_en.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default_de.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default_en.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/tool.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/flow.js (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_binding.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_add.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_edit.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_readonly.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_style.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_template.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement_de.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement_en.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/sitemap.xmap (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/stylesheets/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/stylesheets/convertAbstractForm.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/tool.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/userImages/ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/userImages/1.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/portal-bottom.xml (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/sitemap.xmap (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/ cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/ cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/ cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addCol.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addCoplet.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addRow.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addTab.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/del.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/down.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/drillDown.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/edit.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/goUp.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/left.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/right.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/tabs.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/tools.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/up.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/styles/ cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/styles/function.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/styles/showTab.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/ cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/ cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/Thumbs.db (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addCol.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addCoplet.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addRow.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addTab.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/del.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/down.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/drillDown.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/edit.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/goUp.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/left.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/right.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/tabs.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/tools.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/up.jpg (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/styles/ cocoon/trunk/src/blocks/portal/samples/tools/skins/common/styles/function.xsl (contents, props changed) cocoon/trunk/src/blocks/portal/samples/tools/skins/common/styles/showTab.xsl (contents, props changed) Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/components/variables/DefaultVariableResolverFactory.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/environment/portlet/PortletSession.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/BookmarkAction.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/CopletSetDataAction.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/aspect/impl/AbstractAspectalizable.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/components/modules/input/AbstractModule.java (props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java (contents, props changed) cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletbasedata.xml cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletinstancedata.xml cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/CopletDataEvent.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/impl/PageLabelEventConverter.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Item.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Layout.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/layout.xml cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/AbstractCompositeAspect.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileLS.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AuthenticationProfileManager.java cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/NewEventLinkTransformer.java cocoon/trunk/src/blocks/portal/samples/coplets/basket/sitemap.xmap cocoon/trunk/src/blocks/portal/samples/resources/save-user-profile.xml cocoon/trunk/src/blocks/portal/samples/sitemap.xmap cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/portal-page.xsl cocoon/trunk/src/blocks/portal/samples/skins/common/styles/portal-page.xsl cocoon/trunk/status.xml Added: cocoon/trunk/src/blocks/portal/WEB-INF/xconf/cocoon-portal-tools.xconf Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/WEB-INF/xconf/cocoon-portal-tools.xconf?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/WEB-INF/xconf/cocoon-portal-tools.xconf Fri Jan 28 09:54:58 2005 @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!-- + Copyright 2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!--+ + | + | SVN $Id$ + +--> +<components> + + <!-- Include dependencies --> + <include src="context://WEB-INF/xconf/cocoon-portal.xconf"/> + + <component class="org.apache.cocoon.portal.tools.PortalToolManager" + role="org.apache.cocoon.portal.tools.PortalToolManager"> + <parameter name="root" value="context://samples/blocks/portal/tools/"/> + <parameter name="conf" value="conf.xml"/> + <parameter name="auth" value="auth.xml"/> + </component> + +</components> \ No newline at end of file Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/components/variables/DefaultVariableResolverFactory.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/components/variables/DefaultVariableResolverFactory.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/components/variables/DefaultVariableResolverFactory.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/components/variables/DefaultVariableResolverFactory.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/components/variables/DefaultVariableResolverFactory.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/components/variables/DefaultVariableResolverFactory.java Fri Jan 28 09:54:58 2005 @@ -59,7 +59,7 @@ throws PatternException { if ( this.needsResolve( expression ) ) { return new PreparedVariableResolver( expression, this.manager, this.context); - } + } return new NOPVariableResolver( expression ); } Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/environment/portlet/PortletSession.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/environment/portlet/PortletSession.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/environment/portlet/PortletSession.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/environment/portlet/PortletSession.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/environment/portlet/PortletSession.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/environment/portlet/PortletSession.java Fri Jan 28 09:54:58 2005 @@ -49,7 +49,7 @@ * Construct a new session from an PortletSession */ public PortletSession(javax.portlet.PortletSession session, int scope) { - this.scope = scope; + this.scope = scope; this.session = session; } Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/BookmarkAction.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/BookmarkAction.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/BookmarkAction.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/BookmarkAction.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/BookmarkAction.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/BookmarkAction.java Fri Jan 28 09:54:58 2005 @@ -77,14 +77,27 @@ protected String historyParameterName; + protected String configurationFile; + /* (non-Javadoc) * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters) */ public void parameterize(Parameters parameters) throws ParameterException { this.historyParameterName = parameters.getParameter("history-parameter-name", "history"); - final String configurationFile = parameters.getParameter("src", null); - if ( configurationFile == null ) return; + this.configurationFile = parameters.getParameter("src", null); + if ( this.configurationFile == null ) return; + + // The "lazy-load" parameter allows to defer loading of the config from "src" at + // the first call to act. This is for now undocumented until + // That was needed in the case of a dynamic source ("cocoon://blah") produced by the sitemap where + // the action is defined. Loading immediately in that case leads to an infinite loop where the sitemap + // is constantly reloaded. + if (!parameters.getParameterAsBoolean("lazy-load", false)) { + loadConfig(); + } + } + private void loadConfig() throws ParameterException { Configuration config; org.apache.excalibur.source.SourceResolver resolver = null; try { @@ -133,7 +146,7 @@ mapping.path = path; this.eventMap.put(id, mapping); } else { - throw new ParameterException("Unknown target type " + targetType); + throw new ParameterException("Unknown target type " + targetType); } } else if ( "fullscreen".equals(type) ) { if ( this.eventMap.containsKey(id)) { @@ -153,6 +166,9 @@ } } } + + // Nullify config filename so as not to reload it. + this.configurationFile = null; } public Map act(Redirector redirector, @@ -166,6 +182,10 @@ ", objectModel="+objectModel+ ", source="+source+ ", par="+par); + } + + if (this.configurationFile != null) { + loadConfig(); } Map result; Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/CopletSetDataAction.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/CopletSetDataAction.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/CopletSetDataAction.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/CopletSetDataAction.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/CopletSetDataAction.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/acting/CopletSetDataAction.java Fri Jan 28 09:54:58 2005 @@ -49,7 +49,7 @@ try { portalService = (PortalService)this.manager.lookup(PortalService.ROLE); - + // determine coplet id String copletId = null; Map context = (Map)objectModel.get(ObjectModelHelper.PARENT_CONTEXT); Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/aspect/impl/AbstractAspectalizable.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/aspect/impl/AbstractAspectalizable.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/aspect/impl/AbstractAspectalizable.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/aspect/impl/AbstractAspectalizable.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/aspect/impl/AbstractAspectalizable.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/aspect/impl/AbstractAspectalizable.java Fri Jan 28 09:54:58 2005 @@ -59,7 +59,7 @@ if (this.aspectDataHandler == null) { return this.persistentDatas; } - return this.aspectDataHandler.getPersistentAspectDatas(this); + return this.aspectDataHandler.getPersistentAspectDatas(this); } /** Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/components/modules/input/SkinModule.java Fri Jan 28 09:54:58 2005 @@ -31,7 +31,7 @@ /** * This input module provides information about the current selected skin * - * @version CVS $Id: SkinModule.java,v 1.4 2005/01/07 10:21:46 cziegeler Exp $ + * @version CVS $Id$ */ public class SkinModule extends AbstractModule @@ -90,9 +90,9 @@ // use the global module if ( skinName == null ) { skinName = (String)this.globalModule.getAttribute("skin", modeConf, objectModel); - if ( skinName == null ) { - skinName = "common"; - } + if ( skinName == null ) { + skinName = "common"; + } } // find the correct skin @@ -117,8 +117,8 @@ SkinDescription selected = (SkinDescription) it.next(); if(selected.getName().equals(selectedSkinName)) { return selected.getBasePath() + "/" + selected.getThumbnailPath(); - } - } + } + } } } return null; Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletbasedata.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletbasedata.xml?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletbasedata.xml&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletbasedata.xml&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletbasedata.xml (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletbasedata.xml Fri Jan 28 09:54:58 2005 @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> +<!-- SVN $Id:$ --> <mapping> <description>Coplet base data mapping file</description> Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletdata.xml Fri Jan 28 09:54:58 2005 @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> +<!-- SVN $Id:$ --> <mapping> <description>Coplet data mapping file</description> Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletinstancedata.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletinstancedata.xml?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletinstancedata.xml&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletinstancedata.xml&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletinstancedata.xml (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/coplet/copletinstancedata.xml Fri Jan 28 09:54:58 2005 @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> +<!-- SVN $Id:$ --> <mapping> <description>Coplet instance data mapping file</description> @@ -91,7 +92,7 @@ </class> <!-- If you prefer to specify the name and value as attributes of the attribute element - just add node="attribute" to the bind-xml elements --> + just add node="attribute" to the bind-xml elements --> <class name="org.apache.cocoon.portal.util.AttributedMapItem"> <field name="key" type="java.lang.String"> <bind-xml name="name"/> Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/CopletDataEvent.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/CopletDataEvent.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/CopletDataEvent.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/CopletDataEvent.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/CopletDataEvent.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/CopletDataEvent.java Fri Jan 28 09:54:58 2005 @@ -26,6 +26,6 @@ */ public interface CopletDataEvent extends ActionEvent { - + // just a marker interface } Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/impl/PageLabelEventConverter.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/impl/PageLabelEventConverter.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/impl/PageLabelEventConverter.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/impl/PageLabelEventConverter.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/impl/PageLabelEventConverter.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/event/impl/PageLabelEventConverter.java Fri Jan 28 09:54:58 2005 @@ -126,8 +126,8 @@ } /* (non-Javadoc) - * @see org.apache.cocoon.portal.event.EventConverter#isMarshallEvents() - */ + * @see org.apache.cocoon.portal.event.EventConverter#isMarshallEvents() + */ public boolean isMarshallEvents() { return this.labelManager.isMarshallEvents(); } Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java Fri Jan 28 09:54:58 2005 @@ -113,10 +113,10 @@ public boolean isSecure() { return ContextHelper.getRequest(this.context).isSecure(); } - + /* (non-Javadoc) - * @see org.apache.cocoon.portal.LinkService#encodeURL(String url). - */ + * @see org.apache.cocoon.portal.LinkService#encodeURL(String url). + */ public String encodeURL(String url) { return ContextHelper.getResponse(this.context).encodeURL(url); } Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Item.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Item.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Item.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Item.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Item.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Item.java Fri Jan 28 09:54:58 2005 @@ -44,9 +44,9 @@ public final void setLayout(Layout layout) { this.layout = layout; if(layout != null) { - layout.setParent(this); - } - } + layout.setParent(this); + } + } public final CompositeLayout getParent() { return this.parentLayout; Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Layout.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Layout.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Layout.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Layout.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Layout.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/Layout.java Fri Jan 28 09:54:58 2005 @@ -45,7 +45,7 @@ Item getParent(); void setParent(Item item); - + /** * Make a copy of this layout object and of all it's children. * This includes copies of items and copletinstancedatas. Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java Fri Jan 28 09:54:58 2005 @@ -125,7 +125,7 @@ public void setItemClassName(String value) { this.itemClassName = value; } - + /* (non-Javadoc) * @see java.lang.Object#clone() */ Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java Fri Jan 28 09:54:58 2005 @@ -170,7 +170,7 @@ desc.setClassName(layoutConf.getAttribute("class")); desc.setCreateId(layoutConf.getAttributeAsBoolean("create-id", false)); desc.setItemClassName(layoutConf.getAttribute("item-class", null)); - + // the renderers final String defaultRenderer = layoutConf.getChild("renderers").getAttribute("default"); desc.setDefaultRendererName(defaultRenderer); Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/layout.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/layout.xml?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/layout.xml&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/layout.xml&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/layout.xml (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/layout.xml Fri Jan 28 09:54:58 2005 @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> +<!-- SVN $Id:$ --> <mapping> <description>Portalprofile mapping file</description> Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/AbstractCompositeAspect.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/AbstractCompositeAspect.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/AbstractCompositeAspect.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/AbstractCompositeAspect.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/AbstractCompositeAspect.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/AbstractCompositeAspect.java Fri Jan 28 09:54:58 2005 @@ -85,7 +85,7 @@ final String rendererName = layout.getRendererName(); final Renderer renderer = service.getComponentManager().getRenderer(rendererName); renderer.toSAX(layout, service, handler); - } + } } } Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java Fri Jan 28 09:54:58 2005 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2002,2004 The Apache Software Foundation. + * Copyright 1999-2002,2004-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -49,7 +49,7 @@ * </composite> * </pre> * - * <h2>Example XML with sub-navigation:</h2> + * <h2>Example XML with sub-navigation (child-tag-name enabled):</h2> * <pre> * <composite> * <named-item name="..." parameter="link-event"/> @@ -66,6 +66,23 @@ * </composite> * </pre> * + * <h2>Example XML with sub-navigation (show-all-nav without child-tag-name enabled):</h2> + * <pre> + * <composite> + * <named-item name="..." parameter="link-event"/> + * <named-item name="..." selected="true"> + * <!-- output from processing layout --> + * </named-item> + * <named-item name="..." parameter="link-event"/> + * <named-item name="..." parameter="link-event"> + * <named-item name="..." parameter="link-event"/> + * <named-item name="..." parameter="link-event"/> + * </named-item> + * </composite> + * </pre> + + * + * * * <h2>Applicable to:</h2> * <ul> * <li>[EMAIL PROTECTED] org.apache.cocoon.portal.layout.CompositeLayout}</li> @@ -80,9 +97,12 @@ * <tr><th>root-tag</th><td>Should a tag enclosing the following output be generated?</td> * <td></td><td>boolean</td><td><code>true</code></td></tr> * <tr><th>child-tag-name</th><td>The name of the tag to enclose named items (i.e. the subnavigation) - * of non-selected items. If a value is not specified then no sub-navigation named items will be - * generated.</td> + * of non-selected (default) items. Setting this parameter will enable show-all-nav.</td> * <td></td><td>String</td><td><code>""</code></td></tr> + * <tr><th>show-all-nav</th><td>Setting this value to true will output the enclosed named-items</td> + * <td></td><td>boolean</td><td><code>false</code></td></tr> + * <tr><th>include-selected</th><td>Setting this value to true will output the enclosed named-items of the selected tab too.</td> + * <td></td><td>boolean</td><td><code>false</code></td></tr> * </tbody></table> * * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> @@ -141,6 +161,11 @@ XMLUtils.startElement(handler, "named-item", attributes); if (j == selected) { this.processLayout(tab.getLayout(), service, handler); + if (config.includeSelected) { + List events = new ArrayList(); + events.add(event); + this.processNav(context, tab.getLayout(), service, handler, events); + } } else if (config.showAllNav) { List events = new ArrayList(); events.add(event); @@ -207,7 +232,7 @@ // open named-item tag attributes.clear(); if (tab instanceof NamedItem) { - if (!subNav) { + if (!subNav && !config.childTagName.equals("")) { XMLUtils.startElement(handler, config.childTagName); subNav = true; } @@ -250,6 +275,7 @@ public String aspectName; public String store; public boolean showAllNav = false; + public boolean includeSelected = false; public String childTagName; public void takeValues(TabPreparedConfiguration from) { @@ -257,6 +283,7 @@ this.aspectName = from.aspectName; this.store = from.store; this.showAllNav = from.showAllNav; + this.includeSelected = from.includeSelected; this.childTagName = from.childTagName; } } @@ -273,7 +300,10 @@ pc.childTagName = configuration.getParameter("child-tag-name", ""); if (!pc.childTagName.equals("")) { pc.showAllNav = true; + } else { + pc.showAllNav = configuration.getParameterAsBoolean("show-all-nav", false); } + pc.includeSelected = configuration.getParameterAsBoolean("include-selected", false); return pc; } Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java Fri Jan 28 09:54:58 2005 @@ -258,4 +258,4 @@ this.variableFactory = null; } } -} +} \ No newline at end of file Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileLS.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileLS.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileLS.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileLS.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileLS.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileLS.java Fri Jan 28 09:54:58 2005 @@ -21,7 +21,7 @@ /** * This component is used for loading/saving of a profile. - * + * * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> * @author <a href="mailto:[EMAIL PROTECTED]">Volker Schmitt</a> * @author <a href="mailto:[EMAIL PROTECTED]">Björn Lütkemeier</a> Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AuthenticationProfileManager.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AuthenticationProfileManager.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AuthenticationProfileManager.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AuthenticationProfileManager.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AuthenticationProfileManager.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AuthenticationProfileManager.java Fri Jan 28 09:54:58 2005 @@ -193,7 +193,7 @@ try { adapter = (ProfileLS) this.manager.lookup(ProfileLS.ROLE); service = (PortalService) this.manager.lookup(PortalService.ROLE); - if (layoutKey == null) { + if ( layoutKey == null ) { layoutKey = service.getDefaultLayoutKey(); } Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalTool.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalTool.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalTool.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,122 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +/** + * Represents a PortalTool + * + * @version CVS $Id$ + */ +public class PortalTool { + + HashMap functions = new HashMap(); + + String toolName = ""; + String toolId = ""; + ArrayList i18n = new ArrayList(); + + /** + * Creates a new Portal Tool + * @param toolName + * @param toolId + * @param functions + * @param i18n + */ + public PortalTool(String toolName, String toolId, HashMap functions, ArrayList i18n) { + this.toolName = toolName; + this.toolId = toolId; + this.functions = functions; + this.i18n = i18n; + } + + /** + * returns a collection of available function + * @return + */ + public Collection getFunctions() { + return functions.values(); + } + + /** + * returns the function with the id id + * @param id + * @return + */ + public PortalToolFunction getFunction(String id) { + return (PortalToolFunction) functions.get(id); + } + + /** + * not in use! + * @return + */ + public Collection getInternalFunctions() { + ArrayList internal = new ArrayList(); + Collection funs = functions.values(); + for(Iterator it = funs.iterator(); it.hasNext(); ) { + PortalToolFunction ptf = (PortalToolFunction) it.next(); + if(ptf.isInternal()) { + internal.add(ptf); + } + } + return internal; + } + + /** + * return all public functions + */ + public Collection getPublicFunctions() { + ArrayList publik = new ArrayList(); + Collection funs = functions.values(); + for(Iterator it = funs.iterator(); it.hasNext(); ) { + PortalToolFunction ptf = (PortalToolFunction) it.next(); + if(!ptf.isInternal()) { + publik.add(ptf); + } + } + return publik; + } + + /** + * returns the id of the tools + * @return + */ + public String getId() { + return toolId; + } + + /** + * returns the name of the tool + * @return + */ + public String getName() { + return toolName; + } + + /** + * @return + */ + public List getI18n() { + return i18n; + } + +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolBuilder.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolBuilder.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolBuilder.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,69 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; +import org.xml.sax.SAXException; + +/** + * + * @version CVS $Id$ + */ +public class PortalToolBuilder { + + + public PortalTool buildTool(File confFile, String rootDir, String pluginDir, String i18nDir) { + PortalTool pTool = null; + try { + DefaultConfigurationBuilder dcb = new DefaultConfigurationBuilder(); + Configuration conf = dcb.buildFromFile(confFile); + String toolName = conf.getAttribute("name"); + String toolId = conf.getAttribute("id"); + HashMap functions = new HashMap(); + ArrayList i18n = new ArrayList(); + + Configuration[] funcs = conf.getChild("functions").getChildren(); + for(int i = 0; i < funcs.length; i++) { + PortalToolFunction ptf = new PortalToolFunction(); + ptf.setName(funcs[i].getAttribute("name")); + ptf.setFunction(funcs[i].getAttribute("pipeline")); + ptf.setId(funcs[i].getAttribute("id")); + ptf.setInternal(new Boolean(funcs[i].getAttribute("internal", "false")).booleanValue()); + functions.put(ptf.getName(), ptf); + } + Configuration[] i18ns = conf.getChild("i18n").getChildren(); + for(int i = 0; i < i18ns.length; i++) { + PortalToolCatalogue ptc = new PortalToolCatalogue(); + ptc.setId(i18ns[i].getAttribute("id")); + ptc.setLocation(rootDir + pluginDir + toolId + "/" + i18nDir); + ptc.setName(i18ns[i].getAttribute("name")); + i18n.add(ptc); + } + pTool = new PortalTool(toolName, toolId, functions, i18n); + } catch (ConfigurationException ece) { + } catch (SAXException esax) { + } catch (IOException eio) {} + return pTool; + } + +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolCatalogue.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolCatalogue.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolCatalogue.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,70 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools; + +/** + * Represents a i18n Catalogue for a tool + * + * @version CVS $Id$ + */ +public class PortalToolCatalogue { + + private String id = ""; + private String name = ""; + private String location = ""; + + /** + * @return + */ + public String getId() { + return id; + } + + /** + * @param id + */ + public void setId(String id) { + this.id = id; + } + + /** + * @return + */ + public String getLocation() { + return location; + } + + /** + * @param location + */ + public void setLocation(String location) { + this.location = location; + } + + /** + * @return + */ + public String getName() { + return name; + } + + /** + * @param name + */ + public void setName(String name) { + this.name = name; + } +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolComponent.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolComponent.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolComponent.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,47 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools; + + +/** + * + * @version CVS $Id$ + */ +public interface PortalToolComponent { + + /** + * Sets the id of the component + * @param id + */ + void setId(String id); + + /** + * Returns the id of the component + * @return + */ + String getId(); + + /** + * Sets the name of the component + * @param name + */ + void setName(String name); + /** + * Returns the name of the component + * @return + */ + String getName(); +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolFunction.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolFunction.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolFunction.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,106 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools; + +/** + * Represents a function the user can call via the ui or the ToolManager + * + * @version CVS $Id$ + */ +public class PortalToolFunction implements PortalToolComponent { + + // Function name (displayed to the user, maybe an i18n-key) + private String name =""; + // id to access the function + private String id =""; + // corresponding flow function + private String function=""; + + private boolean internal = false; + /** + * Constructor + */ + public PortalToolFunction() {} + + /** + * Constructor + * @param name Function-Name + * @param id Id + * @param function Corresponding flow functino + */ + public PortalToolFunction(String name, String id, String function) { + this.name = name; + this.id = id; + this.function = function; + } + + /* (non-Javadoc) + * @see org.apache.cocoon.portal.tools.PortalToolComponent#getId() + */ + public String getId() { + return id; + } + /* (non-Javadoc) + * @see org.apache.cocoon.portal.tools.PortalToolComponent#setId(java.lang.String) + */ + public void setId(String id) { + this.id = id; + } + /* (non-Javadoc) + * @see org.apache.cocoon.portal.tools.PortalToolComponent#getName() + */ + public String getName() { + return name; + } + /* (non-Javadoc) + * @see org.apache.cocoon.portal.tools.PortalToolComponent#setName(java.lang.String) + */ + public void setName(String name) { + this.name = name; + } + /** + * Returns the Functionname + * @return + */ + public String getFunction() { + return function; + } + + /** + * Sets the Functionname + * @param path + */ + public void setFunction(String path) { + this.function = path; + } + + + /** + * not in use! + * @return + */ + public boolean isInternal() { + return internal; + } + + /** + * not in use! + * @param internal + */ + public void setInternal(boolean internal) { + this.internal = internal; + } +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolManager.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolManager.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/PortalToolManager.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,321 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import org.apache.avalon.framework.activity.Disposable; +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; +import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer; +import org.apache.avalon.framework.parameters.ParameterException; +import org.apache.avalon.framework.parameters.Parameterizable; +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.service.Serviceable; +import org.apache.avalon.framework.thread.ThreadSafe; +import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.portal.PortalService; +import org.apache.cocoon.portal.tools.helper.PortalObjects; +import org.apache.cocoon.portal.tools.service.UserrightsService; +import org.apache.cocoon.webapps.session.ContextManager; +import org.apache.cocoon.webapps.session.context.SessionContext; +import org.apache.excalibur.source.ModifiableSource; +import org.apache.excalibur.source.Source; +import org.apache.excalibur.source.SourceException; +import org.apache.excalibur.source.SourceResolver; +import org.apache.excalibur.source.SourceUtil; +import org.w3c.dom.DocumentFragment; +import org.w3c.dom.Text; +import org.xml.sax.SAXException; + +/** + * + * @version CVS $Id$ + */ +public class PortalToolManager implements ThreadSafe, Parameterizable, Serviceable, Disposable { + + public static final String ROLE = PortalToolManager.class.getName(); + + private HashMap tools = new HashMap(); + + private ServiceManager manager; + + // parameters from the component-configuration + private Parameters para; + + private List i18n = new ArrayList(); + + + private String rootDir; + private String confFile; + private String authFile; + private static final String pluginDir = "plugins/"; + private static final String pluginConfFile = "tool.xml"; + private static final String i18nDir = "i18n/"; + + private Configuration configuration; + private UserrightsService userRightsService; + + private ContextManager contextManager; + + /** The source resolver */ + protected SourceResolver resolver; + + /** + * Constructor + */ + public PortalToolManager() {} + + /* (non-Javadoc) + * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters) + */ + public void parameterize(Parameters para) throws ParameterException { + this.para = para; + this.rootDir = para.getParameter("root", "/"); + this.confFile = para.getParameter("conf", "conf.xml"); + this.authFile = para.getParameter("auth", "auth.xml"); + + Source fSource = null; + try { + fSource = this.resolver.resolveURI(rootDir + confFile); + DefaultConfigurationBuilder confBuilder = new DefaultConfigurationBuilder(); + this.configuration = confBuilder.build(fSource.getInputStream()); + fSource = this.resolver.resolveURI(rootDir + authFile); + this.userRightsService = new UserrightsService(); + this.userRightsService.setLocation(fSource); + this.userRightsService.initialize(); + this.init(); + } catch (ProcessingException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } finally { + this.resolver.release(fSource); + } + } + + + /** + * Initializes the PortalToolManager. Reads the configuration of all plugins etc. + * @throws ProcessingException + * @throws IOException + */ + public void init() throws ProcessingException, IOException { + Source toolsDir = null; + PortalToolBuilder builder = new PortalToolBuilder(); + try { + toolsDir = this.resolver.resolveURI(rootDir + pluginDir); + + final File td = SourceUtil.getFile(toolsDir); + + if( td == null || !td.isDirectory() ) { + throw new ProcessingException("PortalToolManager: tool-dir must be a directory: " + toolsDir.getURI()); + } + final File[] dirs = td.listFiles(); + for(int i = 0; i< dirs.length; i++) { + final File f = dirs[i]; + if (f.isDirectory()) { + String path = f.getAbsolutePath().endsWith(File.separator) ? f.getAbsolutePath() : f.getAbsoluteFile() + File.separator; + File conf = new File(path + pluginConfFile); + if (conf.exists()) { + PortalTool pTool = builder.buildTool(conf, this.rootDir, pluginDir, i18nDir); + if(pTool != null) { + tools.put(pTool.getId(), pTool); + i18n.addAll(pTool.getI18n()); + } + } + } + } + } finally { + this.resolver.release(toolsDir); + } + } + + /** + * Returns a Collection of all Tools + * @return + */ + public Collection getTools() { + return tools.values(); + } + + /** + * Returns the tool with the id. + * @param id Tool-Id + * @return + */ + public PortalTool getTool(String id) { + return (PortalTool) tools.get(id); + } + + /** + * Returns a Collection of tools which offers functions + * @return + */ + public Collection getToolsWithFunctions() { + ArrayList tmp = new ArrayList(); + for(Iterator it = tools.values().iterator(); it.hasNext();) { + PortalTool pt; + if(((pt = (PortalTool) it.next())).getPublicFunctions().size() > 0) + tmp.add(pt); + } + return tmp; + } + + public List getI18n() { + return i18n; + } + + /* (non-Javadoc) + * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager) + */ + public void service(ServiceManager manager) throws ServiceException { + this.manager = manager; + this.resolver = (SourceResolver)this.manager.lookup(SourceResolver.ROLE); + this.contextManager = (ContextManager)this.manager.lookup(ContextManager.ROLE); + } + + /** + * Returns the Configuration for the plugins + * @return + */ + public Configuration getConfiguration() { + return configuration; + } + + /** + * Saves the configuration + */ + public synchronized void saveConfiguration() { + DefaultConfigurationSerializer confSer = new DefaultConfigurationSerializer(); + Source confSource = null; + try { + + confSource = this.resolver.resolveURI(rootDir + confFile); + if (confSource instanceof ModifiableSource) { + confSer.serialize(((ModifiableSource) confSource).getOutputStream(), configuration); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (SourceException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } finally { + this.resolver.release(confSource); + } + } + + public UserrightsService getUserRightsService() { + return this.userRightsService; + } + + /** + * Returns a value from the auth context + * @param key Path (e.g. /foo/bar) + * @return + */ + public String sGet(String key) { + SessionContext ctx; + try { + ctx = this.contextManager.getContext("authentication"); + } catch (Exception e) { + return null; + } + + if(!key.startsWith("/")) + key = "/" + key; + DocumentFragment node = null; + try { + node = ctx.getXML("/portalTools" + key); + } catch (Exception e) { + // TODO + } + return org.apache.cocoon.xml.dom.DOMUtil.getValueOfNode(node); + } + + /** + * Sets a value in the auth context + * @param key Path (e.g. /foo/bar) + * @param value Value + */ + public void sSet(String key, String value) { + SessionContext ctx; + try { + ctx = this.contextManager.getContext("authentication"); + } catch (Exception e) { + return; + } + + if(!key.startsWith("/")) + key = "/" + key; + DocumentFragment frag; + try { + frag = ctx.getXML("/"); + org.w3c.dom.Document doc = frag.getOwnerDocument(); + DocumentFragment newFrag = doc.createDocumentFragment(); + Text txt = doc.createTextNode(value); + newFrag.appendChild(txt); + ctx.setXML("/portalTools" + key, newFrag); + } catch (ProcessingException e) { + } + } + + /* (non-Javadoc) + * @see org.apache.avalon.framework.activity.Disposable#dispose() + */ + public void dispose() { + if ( this.manager != null ) { + this.manager.release(this.resolver); + this.manager.release(this.contextManager); + this.resolver = null; + this.contextManager = null; + this.manager = null; + } + } + + public PortalObjects getPortalObjects() { + try { + return new PortalObjects((PortalService) this.manager.lookup(org.apache.cocoon.portal.PortalService.ROLE)); + } catch (ServiceException e) { + return null; + } + + } + + public void releasePortalObjects(PortalObjects pObj) { + this.manager.release(pObj.getPortalService()); + } + +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/acting/CheckAccessAction.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/acting/CheckAccessAction.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/acting/CheckAccessAction.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,73 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.acting; + +import java.util.Map; + +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.avalon.framework.thread.ThreadSafe; +import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.acting.ServiceableAction; +import org.apache.cocoon.environment.Redirector; +import org.apache.cocoon.environment.SourceResolver; +import org.apache.cocoon.portal.tools.PortalToolManager; +import org.apache.cocoon.portal.tools.model.User; +import org.apache.cocoon.portal.tools.service.UserrightsService; + +/** + * Check whether the current user is allowed to access the given page. + * + * @version CVS $Id$ + */ +public class CheckAccessAction +extends ServiceableAction +implements ThreadSafe { + + /** + * The userrights service. + */ + private UserrightsService userrightsService; + + /** + * Overridden from superclass. + * + * @see org.apache.cocoon.acting.Action#act(org.apache.cocoon.environment.Redirector, org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters) + */ + public Map act( + Redirector redirector, + SourceResolver resolver, + Map objectModel, + String source, + Parameters parameters) + throws Exception + { + String name = parameters.getParameter("name", "anonymous"); + String role = parameters.getParameter("role", "guest"); + String url = parameters.getParameter("url"); + User user = new User(name, role); + PortalToolManager ptm = (PortalToolManager) this.manager.lookup(PortalToolManager.ROLE); + userrightsService = ptm.getUserRightsService(); + // FIXME: replace the throw with something else + if (!this.userrightsService.userIsAllowed(url, user)) { + this.manager.release(ptm); + throw new ProcessingException( + "You are not allowed to request this page."); + } + this.manager.release(ptm); + return EMPTY_MAP; + } + +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/copletManagement/LayoutActions.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/copletManagement/LayoutActions.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/copletManagement/LayoutActions.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,347 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.copletManagement; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + +import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.forms.formmodel.Repeater; +import org.apache.cocoon.forms.formmodel.Widget; +import org.apache.cocoon.forms.formmodel.Repeater.RepeaterRow; +import org.apache.cocoon.portal.coplet.CopletData; +import org.apache.cocoon.portal.coplet.CopletFactory; +import org.apache.cocoon.portal.coplet.CopletInstanceData; +import org.apache.cocoon.portal.layout.CompositeLayout; +import org.apache.cocoon.portal.layout.Item; +import org.apache.cocoon.portal.layout.Layout; +import org.apache.cocoon.portal.layout.LayoutFactory; +import org.apache.cocoon.portal.layout.NamedItem; +import org.apache.cocoon.portal.layout.impl.CopletLayout; +import org.apache.cocoon.portal.profile.ProfileManager; + +/** + * + * @version CVS $Id$ + */ +public class LayoutActions { + + private Layout layout = null; + private LayoutFactory lf = null; + private ProfileManager pm = null; + private CopletFactory cf = null; + + public LayoutActions(Layout layout, LayoutFactory lf, CopletFactory cf, ProfileManager pm) { + this.layout = layout; + this.lf = lf; + this.pm = pm; + this.cf = cf; + } + + public static int line = 1; + + /** + * Delets the Object with the id in the layout + * @param id + * @return + */ + public boolean del(String id) { + + // get layout element: + Object layoutObj = getLayoutElement (layout, id, "", 1); + if (layoutObj == null) return false; + + // do the job: + Layout lay; + if (layoutObj instanceof NamedItem) + lay = ((NamedItem)layoutObj).getLayout(); + else + lay = (Layout) layoutObj; + + try { + // an empty item can not be handled by the LayoutFactory, do the job manual: + if (lay == null) { + List items = ((NamedItem)layoutObj).getParent().getItems(); + for (ListIterator iter = items.listIterator(); iter.hasNext(); ) { + + Item itemElem = (Item) iter.next(); + + if(itemElem.equals(((NamedItem)layoutObj))) { + items.remove (iter.nextIndex()-1); + return true; + } + } + } else if(lay.getParent() instanceof NamedItem) { + // FIXME: Causes that only the contents inside a tab are deleted instead of the tab + NamedItem par = (NamedItem) lay.getParent(); + par.setLayout(null); + } else { + lf.remove(lay); + } + + } catch (ProcessingException e) { + e.printStackTrace(); + } + + return true; + } + + + /** + * Moves the object one position up or down + * @param id id of the element + * @param moveUp set 'true', to move the element up ('false' to move it down) + * @return + */ + public boolean move(String id, boolean moveUp) { + + // get layout element: + Object layoutObj = getLayoutElement (layout, id, "", 1); + if (layoutObj == null) return false; + + // do the job: + Layout lay; + Item item; + if (layoutObj instanceof NamedItem) { + lay = ((NamedItem)layoutObj).getLayout(); + if (lay == null) + item = (NamedItem) layoutObj; + else + item = lay.getParent(); + } + else { + lay = (Layout) layoutObj; + item = lay.getParent(); + } + + // find element in the list and move it: + List items = item.getParent().getItems(); + for (ListIterator iter = items.listIterator(); iter.hasNext(); ) { + + Item itemElem = (Item) iter.next(); + + if(itemElem.equals(item)) { + + int pos = iter.nextIndex()-1; + int newpos = pos; + if (moveUp) + newpos --; + else + newpos ++; + + if (newpos >= items.size()) newpos = 0; + if (newpos < 0) newpos = items.size()-1; + + Object obj = items.remove (pos); + items.add(newpos,obj); + + return true; + } + } + return false; + } + + /** + * Adds the object to the layout + * @param parent Object to which the new Object should be added + * @param type Type of the Object (row, col ...) + */ + public void add(String parent, String type) { + + Object layoutObj = getLayoutElement (layout, parent, "", 1); + if (layoutObj == null) return; + + Layout lay; + if (layoutObj instanceof NamedItem) + lay = ((NamedItem)layoutObj).getLayout(); + + else + lay = (Layout) layoutObj; + + try { + Layout nObj = lf.newInstance(type); + pm.register(nObj); + + Item e = new Item(); + nObj.setParent(e); + e.setLayout(nObj); + + if (lay != null) + ((CompositeLayout) lay).addItem(e); + else + { + NamedItem ni = (NamedItem)layoutObj; + nObj.setParent(ni); + ni.setLayout(nObj); + } + + } catch (ProcessingException e) { + e.printStackTrace(); + } + } + + /** + * Adds a new Tab + * @param parent Parent Object + * @param name Name of the Tab + */ + public void addTab(String parent, String name) { + + // get layout element: + Object layoutObj = getLayoutElement (layout, parent, "", 1); + if (layoutObj == null) return; + + Layout lay; + + if (layoutObj instanceof NamedItem) + lay = ((NamedItem)layoutObj).getLayout(); + else + lay = (Layout) layoutObj; + + // add tab: + if(lay != null && lay.getName().equals("tab")) { + + NamedItem tab = new NamedItem(); + tab.setName(name); + ((CompositeLayout) lay).addItem(tab); + + } else { + + try { + + Layout tab = lf.newInstance("tab"); + pm.register(tab); + + NamedItem e = new NamedItem(); + e.setName(name); + + ((CompositeLayout) tab).addItem(e); + + if (lay == null) { + + ((NamedItem)layoutObj).setLayout(tab); + } + else { + Item m = new Item(); + m.setParent((CompositeLayout) lay); + ((CompositeLayout) lay).addItem(m); + m.setLayout(tab); + } + + } catch (ProcessingException e) { + e.printStackTrace(); + } + } + } + + public Collection getSelectedCoplets(Repeater r, Collection lets, String parent) { + + // get layout element: + Object obj = getLayoutElement (layout, parent, "", 1); + if (obj == null) return null; + + ArrayList coplets = new ArrayList(); + ArrayList copletDatas = new ArrayList(); + + int size = r.getSize(); + for(int i = 0; i < size; i++) { + RepeaterRow row = r.getRow(i); + Widget widget = row.getChild("selected"); + Boolean val = (Boolean) widget.getValue(); + if(val.booleanValue()) { + coplets.add(row.getChild("coplet").getValue()); + } + } + for(Iterator it = lets.iterator(); it.hasNext();) { + CopletData cd = (CopletData) it.next(); + String cdid = cd.getId(); + for(Iterator it2 = coplets.iterator(); it2.hasNext();) { + String cdidTmp = (String) it2.next(); + if(cdidTmp.equals(cdid)) + copletDatas.add(cd); + } + } + + for(Iterator it = copletDatas.iterator(); it.hasNext();) { + CopletData cd = (CopletData) it.next(); + + try { + CopletInstanceData cinst = cf.newInstance(cd); + CopletLayout lay = (CopletLayout) lf.newInstance("coplet"); + lay.setCopletInstanceData(cinst); + + if(obj instanceof Item) { + Item item = (Item) obj; + item.setLayout(lay); + lay.setParent(item); + } else if(obj instanceof CompositeLayout) { + CompositeLayout cl = (CompositeLayout) obj; + Item item = new Item(); + item.setLayout(lay); + lay.setParent(item); + cl.addItem(item); + } + + } catch (ProcessingException e) {} + } + return copletDatas; + } + + public CopletInstanceData getCopletInstanceData(String id) { + Object obj = getLayoutElement(layout, id, "", 1); + if(obj instanceof CopletLayout) { + return ((CopletLayout) obj).getCopletInstanceData(); + } else { + return null; + } + } + + /** + * interal method; search for a Layout or an Item Object + */ + private Object getLayoutElement (Layout layout, String id, String prefix, int pos) { + + if (layout != null) { + + if (id.equals((prefix+pos))) + return layout; + + if (layout instanceof CompositeLayout) { + Iterator i = ((CompositeLayout) layout).getItems().iterator(); + + int currentpos = pos; + pos = 1; + while (i.hasNext()) { + + Item current = (Item) i.next(); + + if (id.equals((prefix+currentpos+"."+pos))) + return current; + + Object lay = getLayoutElement(current.getLayout(), id, prefix+currentpos+"."+pos+".",1); + if(lay != null) + return lay; + + pos ++; + } + } + } + return null; + } +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/copletManagement/generation/XMLProfileGenerator.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/copletManagement/generation/XMLProfileGenerator.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/copletManagement/generation/XMLProfileGenerator.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,126 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.copletManagement.generation; + +import java.beans.PropertyDescriptor; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.StringReader; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import org.apache.avalon.framework.service.ServiceException; +import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.components.flow.FlowHelper; +import org.apache.cocoon.components.persistence.CastorSourceConverter; +import org.apache.cocoon.components.persistence.ConverterException; +import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.cocoon.environment.Request; +import org.apache.cocoon.generation.ServiceableGenerator; +import org.apache.commons.jxpath.DynamicPropertyHandler; +import org.apache.commons.jxpath.JXPathBeanInfo; +import org.apache.commons.jxpath.JXPathIntrospector; +import org.apache.excalibur.xml.sax.SAXParser; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + + +/** + * + * @version CVS $Id$ + */ +public class XMLProfileGenerator +extends ServiceableGenerator { + + /* (non-Javadoc) + * @see org.apache.cocoon.generation.Generator#generate() + */ + public void generate() + throws IOException, SAXException, ProcessingException { + + SAXParser parser = null; + CastorSourceConverter converter = null; + final Request request = ObjectModelHelper.getRequest(this.objectModel); + final Object context = FlowHelper.getContextObject(this.objectModel); + Map myMap = new HashMap(); + if(context instanceof Map) { + myMap = (Map) context; + } else { + fillContext(context, myMap); + } + try { + Object layout = myMap.get("layout"); + converter = (CastorSourceConverter) this.manager.lookup(org.apache.cocoon.components.persistence.CastorSourceConverter.ROLE); + ByteArrayOutputStream os = new java.io.ByteArrayOutputStream(); + HashMap para = new HashMap(); + para.put("profiletype", "layout"); + converter.storeObject(os, para, layout); + String xml = new String(); + xml = os.toString(); + final InputSource inputSource = new InputSource(new StringReader(xml)); + parser = (SAXParser)this.manager.lookup(SAXParser.ROLE); + parser.parse(inputSource, super.xmlConsumer); + } catch (ServiceException e) { + throw new ProcessingException(e); + } catch (ConverterException e) { + throw new ProcessingException(e); + } finally { + this.manager.release(parser); + this.manager.release(converter); + } + } + + // FIXME: Copy from JXTemplateGenerator + private void fillContext(Object contextObject, Map map) { + if (contextObject != null) { + // Hack: I use jxpath to populate the context object's properties + // in the jexl context + final JXPathBeanInfo bi = JXPathIntrospector.getBeanInfo(contextObject.getClass()); + if (bi.isDynamic()) { + Class cl = bi.getDynamicPropertyHandlerClass(); + try { + DynamicPropertyHandler h = (DynamicPropertyHandler)cl.newInstance(); + String[] result = h.getPropertyNames(contextObject); + int len = result.length; + for (int i = 0; i < len; i++) { + try { + map.put(result[i], h.getProperty(contextObject, result[i])); + } catch (Exception exc) { + exc.printStackTrace(); + } + } + } catch (Exception ignored) { + ignored.printStackTrace(); + } + } else { + PropertyDescriptor[] props = bi.getPropertyDescriptors(); + int len = props.length; + for (int i = 0; i < len; i++) { + try { + Method read = props[i].getReadMethod(); + if (read != null) { + map.put(props[i].getName(), read.invoke(contextObject, null)); + } + } catch (Exception ignored) { + ignored.printStackTrace(); + } + } + } + } + } +} + Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/generation/I18nCatalogueGenerator.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/generation/I18nCatalogueGenerator.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/generation/I18nCatalogueGenerator.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,110 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.generation; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.StringReader; +import java.net.MalformedURLException; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.environment.SourceResolver; +import org.apache.cocoon.generation.ServiceableGenerator; +import org.apache.cocoon.portal.tools.PortalToolCatalogue; +import org.apache.cocoon.portal.tools.PortalToolManager; +import org.apache.excalibur.source.Source; +import org.apache.excalibur.xml.sax.SAXParser; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +/** + * + * @version CVS $Id$ + */ +public class I18nCatalogueGenerator extends ServiceableGenerator { + + private SAXParser parser; + + private String catalogueStartTag = "<?xml version=\"1.0\"?><catalogue>"; + private String catalogueEndTag = "</catalogue>"; + private String lang = ".xml"; + private PortalToolManager ptm = null; + private StringBuffer i18n = new StringBuffer(); + + /* (non-Javadoc) + * @see org.apache.cocoon.generation.Generator#generate() + */ + public void generate() throws IOException, SAXException, + ProcessingException { + StringBuffer catalogue = new StringBuffer(); + catalogue.append(catalogueStartTag).append(i18n.toString()).append(catalogueEndTag); //add pi and catalogue tags + final InputSource inputSource = new InputSource(new StringReader(catalogue.toString())); + try { + parser = (SAXParser)this.manager.lookup(SAXParser.ROLE); + } catch (ServiceException e) { + e.printStackTrace(); + } + parser.parse(inputSource, super.xmlConsumer); + } + + /* (non-Javadoc) + * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters) + */ + public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par) + throws ProcessingException, SAXException, IOException { + super.setup(resolver, objectModel, src, par); + if(src.indexOf("_") != -1) { + lang = src.substring(src.indexOf("_"), src.length()); + lang = lang.toLowerCase(); + } + try { + ptm = (PortalToolManager) this.manager.lookup(PortalToolManager.ROLE); + List cats = ptm.getI18n(); + for(Iterator it = cats.iterator(); it.hasNext();) { + PortalToolCatalogue ptc = (PortalToolCatalogue) it.next(); + try { + Source cat; + cat = resolver.resolveURI(ptc.getLocation() + ptc.getName() + lang); + // if(!cat.exists()) { + // cat = resolver.resolveURI(ptc.getLocation() + ptc.getName() + ".xml"); // default file + // } + BufferedReader br = new BufferedReader(new InputStreamReader(cat.getInputStream())); + String tmp = new String(); + while(br.ready()) { + tmp = tmp + br.readLine(); + } + tmp = tmp.replaceAll("<\\?(.+)\\?>",""); // remove processing instr. + tmp = tmp.replaceAll("<catalogue([^>]+)?>{1}" ,""); // remove catalogue tags + tmp = tmp.replaceAll("</catalogue>", ""); + tmp = tmp.replaceAll("<!--(.+)-->", ""); + i18n.append(tmp); + } catch (MalformedURLException e) { + } catch (IOException e) { + } + } + } catch (ServiceException e) { + e.printStackTrace(); + } + + } + +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/MultipleRoleMatcher.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/MultipleRoleMatcher.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/MultipleRoleMatcher.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,77 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.helper; + +import java.util.StringTokenizer; + +import org.apache.cocoon.portal.tools.model.User; + +/** + * A role matcher matching against several role. + * + * @version CVS $Id$ + */ +public class MultipleRoleMatcher +implements + RoleMatcher +{ + /** + * The character used to seperate multiple roles. + */ + public static final String ROLE_SEPARATOR = "+"; + + /** + * The role. + */ + private String[] roles; + + /** + * Creates a new MultipleRoleMatcher. + */ + public MultipleRoleMatcher(String roles) + { + StringTokenizer tokenizer = new StringTokenizer( + roles, + ROLE_SEPARATOR, + false); + + this.roles = new String[tokenizer.countTokens()]; + + String token; + int i = 0; + while (tokenizer.hasMoreTokens()) + { + token = tokenizer.nextToken(); + this.roles[i] = token; + i++; + } + } + + /** + * Overridden from superclass. + * + * @see com.vodafone.veap.util.RoleMatcher#matches(com.vodafone.veap.model.User) + */ + public boolean matches(User user) + { + // The user must have all roles + int length = this.roles.length; + for (int i = 0; i < length; i++) + if (!user.hasRole(this.roles[i])) + return false; + return true; + } +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/PortalObjects.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/PortalObjects.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/PortalObjects.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,56 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.helper; + +import org.apache.cocoon.portal.PortalComponentManager; +import org.apache.cocoon.portal.PortalService; +import org.apache.cocoon.portal.layout.Layout; +import org.apache.cocoon.portal.profile.ProfileManager; + +/** + * + * @version CVS $Id$ + */ +public class PortalObjects { + + private PortalService portalService; + private String portalName; + private PortalComponentManager componentManager; + private ProfileManager profileManager; + private Layout portalLayout; + + + public PortalObjects(PortalService portalService) { + this.portalService = portalService; + this.componentManager = portalService.getComponentManager(); + this.profileManager = componentManager.getProfileManager(); + this.portalLayout = profileManager.getPortalLayout(null, null); + } + + + public PortalComponentManager getComponentManager() { + return componentManager; + } + public Layout getPortalLayout() { + return portalLayout; + } + public PortalService getPortalService() { + return portalService; + } + public ProfileManager getProfileManager() { + return profileManager; + } +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/RoleMatcher.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/RoleMatcher.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/RoleMatcher.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,31 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.helper; + +import org.apache.cocoon.portal.tools.model.User; + +/** + * Defines the interface for role matchers. + * + * @version CVS $Id$ + */ +public interface RoleMatcher +{ + /** + * @return Whether the user matches this role. + */ + boolean matches(User user); +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/SingleRoleMatcher.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/SingleRoleMatcher.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/helper/SingleRoleMatcher.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,51 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.helper; + +import org.apache.cocoon.portal.tools.model.User; + +/** + * A role matcher matching against a single role. + * + * @version CVS $Id$ + */ +public class SingleRoleMatcher +implements + RoleMatcher +{ + /** + * The role. + */ + private String role; + + /** + * Creates a new SingleRoleMatcher. + */ + public SingleRoleMatcher(String role) + { + this.role = role; + } + + /** + * Overridden from superclass. + * + * @see com.vodafone.veap.util.RoleMatcher#matches(com.vodafone.veap.model.User) + */ + public boolean matches(User user) + { + return user.hasRole(this.role); + } +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/model/User.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/model/User.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/model/User.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,68 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.model; + +import java.util.ArrayList; +import java.util.Iterator; + +/** + * + * @version CVS $Id$ + */ +public class User { + + private String name; + private ArrayList roles = new ArrayList(); + + public User(String name, String role) { + this.name = name; + this.roles.add(role); + } + + public User(String name, ArrayList roles) { + this.name = name; + this.roles = roles; + } + + public User(String name, String[] roles) { + this.name = name; + for(int i = 0; i < roles.length; i++) { + this.roles.add(roles[i]); + } + } + + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public ArrayList getRoles() { + return this.roles; + } + + public boolean hasRole(String role) { + for(Iterator it = roles.iterator(); it.hasNext();) { + if(((String) it.next()).equals(role)) + return true; + } + return false; + } + +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/ptm.js Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/ptm.js?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/ptm.js Fri Jan 28 09:54:58 2005 @@ -0,0 +1,26 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// SVN $ID:$ +cocoon.load("resource://org/apache/cocoon/forms/flow/javascript/Form.js"); +importPackage(Packages.org.apache.cocoon.portal); + +function getPTM() { + return cocoon.getComponent("org.apache.cocoon.portal.tools.PortalToolManager"); +} + +function relPTM(ptm) { + cocoon.releaseComponent(ptm); +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/service/UserrightsService.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/service/UserrightsService.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/service/UserrightsService.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,253 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.service; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Properties; +import java.util.StringTokenizer; + +import org.apache.cocoon.matching.helpers.WildcardHelper; +import org.apache.cocoon.portal.tools.helper.MultipleRoleMatcher; +import org.apache.cocoon.portal.tools.helper.RoleMatcher; +import org.apache.cocoon.portal.tools.helper.SingleRoleMatcher; +import org.apache.cocoon.portal.tools.model.User; +import org.apache.excalibur.source.Source; + +/** + * Service, that provides access to the user rights configuration. + * + * @version CVS $Id$ + */ +public class UserrightsService +{ + /** + * The properties' location. + */ + private Source location; + + /** + * The properties. + */ + private Properties properties = null; + + /** + * Signals when the properties have been loaded last. + */ + private long lastModified = -1; + + /** + * Signals whether to reload the properties. + */ + private boolean reload = false; + + /** + * Holds the userrights. + */ + private Map userrights; + + /** + * @return The location + */ + + public Source getLocation() + { + return this.location; + } + + /** + * @param location The location to set + */ + + public void setLocation(Source location) + { + this.location = location; + } + + /** + * @return The reload + */ + public boolean getReload() + { + return this.reload; + } + + /** + * @param reload The reload to set + */ + public void setReload(boolean reload) + { + this.reload = reload; + } + + /** + * Initialize the bean. + */ + public void initialize() + { + boolean load; + + // Check if called for the first time + if (this.properties == null) + load = true; + else + { + // Check if reload is required + load = this.reload; + } + + try + { + if (load) + { + // Check file timestamp + long lastModified = this.location.getLastModified(); + if (this.lastModified >= lastModified) + load = false; + + if (load) + { + this.lastModified = lastModified; + this.properties = new Properties(); + this.properties.load(this.location.getInputStream()); + this.parseProperties(); + } + } + } + catch (IOException e) + { + throw new RuntimeException(e); + } + } + + /** + * @return Whether the current user is allowed to call the given url. + */ + public boolean userIsAllowed(String url, User user) + { + this.initialize(); + + boolean isAllowed = true; + + // Iterate all userrights + Iterator iterator = this.userrights.entrySet().iterator(); + Map.Entry entry; + int[] pattern; + RoleMatcher[] matcher; + while (iterator.hasNext() && isAllowed) + { + entry = (Map.Entry)iterator.next(); + pattern = (int[])entry.getKey(); + + // If userright matches try to find a matching role + if (WildcardHelper.match(new HashMap(), url, pattern)) + { + matcher = (RoleMatcher[])entry.getValue(); + + isAllowed = false; + + int length = matcher.length; + for (int i = 0; i < length; i++) + { + if (matcher[i].matches(user)) + isAllowed = true; + } + } + } + + return isAllowed; + } + + public boolean userFunctionIsAllowed(String id, User user) + { + this.initialize(); + + boolean isAllowed = true; + + // Iterate all userrights + Iterator iterator = this.userrights.entrySet().iterator(); + Map.Entry entry; + int[] pattern; + RoleMatcher[] matcher; + while (iterator.hasNext() && isAllowed) + { + entry = (Map.Entry)iterator.next(); + pattern = (int[])entry.getKey(); + + // If userright matches try to find a matching role + if (WildcardHelper.match(new HashMap(), id, pattern)) + { + matcher = (RoleMatcher[])entry.getValue(); + + isAllowed = false; + + int length = matcher.length; + for (int i = 0; i < length; i++) + { + if (matcher[i].matches(user)) + isAllowed = true; + } + } + } + + return isAllowed; + } + + /** + * Parse the properties. + */ + private void parseProperties() + { + Map userrights = new HashMap(); + + Iterator iterator = this.properties.entrySet().iterator(); + Map.Entry entry; + while (iterator.hasNext()) + { + entry = (Map.Entry)iterator.next(); + userrights.put( + WildcardHelper.compilePattern((String)entry.getKey()), + this.buildRoles((String)entry.getValue())); + } + + this.userrights = userrights; + } + + /** + * @return A list representing the given roles. + */ + private RoleMatcher[] buildRoles(String roles) + { + StringTokenizer tokenizer = new StringTokenizer(roles, ",", false); + + RoleMatcher[] result = new RoleMatcher[tokenizer.countTokens()]; + + String token; + int i = 0; + while (tokenizer.hasMoreTokens()) + { + token = tokenizer.nextToken(); + if (token.indexOf(MultipleRoleMatcher.ROLE_SEPARATOR) == -1) + result[i] = new SingleRoleMatcher(token); + else result[i] = new MultipleRoleMatcher(token); + i++; + } + + return result; + } +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/CheckAccessTransformer.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/CheckAccessTransformer.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/CheckAccessTransformer.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,102 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.transformation; + +import org.apache.avalon.framework.activity.Disposable; +import org.apache.avalon.framework.parameters.ParameterException; +import org.apache.avalon.framework.parameters.Parameterizable; +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.cocoon.portal.tools.PortalToolManager; +import org.apache.cocoon.portal.tools.model.User; +import org.apache.cocoon.portal.tools.service.UserrightsService; +import org.apache.cocoon.transformation.AbstractSAXTransformer; +import org.apache.cocoon.xml.IncludeXMLConsumer; +import org.w3c.dom.DocumentFragment; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +/** + * + * @version CVS $Id$ + */ +public class CheckAccessTransformer extends AbstractSAXTransformer implements Parameterizable, Disposable { + + public static final String RIGHTS_NAMESPACE_URI = + "http://apache.org/cocoon/portal/tools/rights/1.0"; + public static final String ACCESS_TAG = "access"; + public static final String RIGHT_ID = "id"; + + private UserrightsService urs; + private PortalToolManager ptm; + private User user; + + /* (non-Javadoc) + * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters) + */ + public void parameterize(Parameters para) throws ParameterException { + this.user = new User(para.getParameter("user"), para.getParameter("role")); + } + + /* (non-Javadoc) + * @see org.apache.cocoon.transformation.AbstractSAXTransformer#service(org.apache.avalon.framework.service.ServiceManager) + */ + public void service(ServiceManager manager) throws ServiceException { + super.service(manager); + ptm = (PortalToolManager) this.manager.lookup(PortalToolManager.ROLE); + urs = ptm.getUserRightsService(); + } + + /* (non-Javadoc) + * @see org.apache.cocoon.transformation.AbstractSAXTransformer#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) + */ + public void startElement(String uri, String name, String raw, + Attributes attr) throws SAXException { + if(RIGHTS_NAMESPACE_URI.equals(uri) && ACCESS_TAG.equals(name)) { + String id = attr.getValue(RIGHT_ID); + if(!urs.userIsAllowed(id, user)) { + this.stack.push(new Boolean(false)); + } + this.startRecording(); + } else { + super.startElement(uri, name, raw, attr); + } + } + + /* (non-Javadoc) + * @see org.apache.cocoon.transformation.AbstractSAXTransformer#endElement(java.lang.String, java.lang.String, java.lang.String) + */ + public void endElement(String uri, String name, String raw) + throws SAXException { + if(RIGHTS_NAMESPACE_URI.equals(uri) && ACCESS_TAG.equals(name)) { + DocumentFragment frag = this.endRecording(); + Boolean ignore = (Boolean) this.stack.pop(); + if(!ignore.booleanValue()) + IncludeXMLConsumer.includeNode(frag, this.contentHandler, this.lexicalHandler); + } else { + super.endElement(uri, name, raw); + } + } + + /* (non-Javadoc) + * @see org.apache.avalon.framework.activity.Disposable#dispose() + */ + public void dispose() { + this.manager.release(ptm); + } + +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/PortalToolsI18nTransformer.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/PortalToolsI18nTransformer.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/PortalToolsI18nTransformer.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,84 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.transformation; + +import java.util.Iterator; +import java.util.List; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.avalon.framework.configuration.DefaultConfiguration; +import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.cocoon.portal.tools.PortalToolCatalogue; +import org.apache.cocoon.portal.tools.PortalToolManager; +import org.apache.cocoon.transformation.I18nTransformer; +import org.xml.sax.SAXException; + +/** + * + * @version CVS $Id$ + */ +public class PortalToolsI18nTransformer extends I18nTransformer { + + public static String ROLE = PortalToolsI18nTransformer.class.getName(); + + public void configure(Configuration conf) throws ConfigurationException { + /* + <catalogues default="portalTools"> + <catalogue id="portalTools" name="portalTools" location="cocoon:/i18n"/> + </catalogues> + */ + + if(conf.getChild("catalogues").getAttribute("new", "no").equals("no")) { + super.configure(conf); + return; + } + DefaultConfiguration root = new DefaultConfiguration("root"); + DefaultConfiguration defconf = new DefaultConfiguration("catalogues"); + defconf.setAttribute("default", "default"); + root.addChild(defconf); + PortalToolManager ptm; + try { + System.out.println("getting toolmananger:"); + ptm = (PortalToolManager) this.manager.lookup(PortalToolManager.ROLE); + System.out.println("getting catalog list"); + List i18nc = ptm.getI18n(); + for(Iterator it = i18nc.iterator(); it.hasNext();) { + PortalToolCatalogue ptc = (PortalToolCatalogue) it.next(); + System.out.println("ptc: " + ptc); + DefaultConfiguration catConf = new DefaultConfiguration("catalogue"); + catConf.setAttribute("id", ptc.getId()); + catConf.setAttribute("name", ptc.getName()); + catConf.setAttribute("location", ptc.getLocation()); + defconf.addChild(catConf); + } + System.out.println("conf:"); + System.out.println(new DefaultConfigurationSerializer().serialize(conf)); + System.out.println("new Conf:"); + System.out.println(new DefaultConfigurationSerializer().serialize(defconf)); + super.configure(root); + this.manager.release(ptm); + } catch (ServiceException e) { + e.printStackTrace(); + } catch (ConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } + } + +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/PortalToolsLayoutTransformer.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/PortalToolsLayoutTransformer.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/transformation/PortalToolsLayoutTransformer.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,137 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.transformation; + +import java.io.IOException; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; + +import org.apache.avalon.framework.activity.Disposable; +import org.apache.avalon.framework.parameters.ParameterException; +import org.apache.avalon.framework.parameters.Parameters; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.cocoon.ProcessingException; +import org.apache.cocoon.environment.SourceResolver; +import org.apache.cocoon.portal.tools.PortalTool; +import org.apache.cocoon.portal.tools.PortalToolFunction; +import org.apache.cocoon.portal.tools.PortalToolManager; +import org.apache.cocoon.transformation.AbstractSAXTransformer; +import org.apache.cocoon.xml.AttributesImpl; +import org.xml.sax.SAXException; + +/** + * Adds the navigation etc. to the document + * + * @version CVS $Id$ + */ +public class PortalToolsLayoutTransformer extends AbstractSAXTransformer implements Disposable /*, Parameterizable */{ + + public static final String ROLE = PortalToolsLayoutTransformer.class.getName(); + + private PortalToolManager pm; + private String selected = null; + public PortalToolsLayoutTransformer() { + } + + /* (non-Javadoc) + * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager) + */ + public void service(ServiceManager manager) throws ServiceException { + super.service(manager); + pm = (PortalToolManager) manager.lookup(PortalToolManager.ROLE); + } + + /* (non-Javadoc) + * @see org.apache.cocoon.transformation.AbstractSAXTransformer#setup(org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters) + */ + public void setup(SourceResolver resolver, Map objectModel, String src, + Parameters par) throws ProcessingException, SAXException, + IOException { + super.setup(resolver, objectModel, src, par); + try { + selected = par.getParameter("selected"); + } catch (ParameterException e) { + // does not matter, default handling + } + } + + /* (non-Javadoc) + * @see org.apache.avalon.framework.activity.Disposable#dispose() + */ + public void dispose() { + this.manager.release(pm); + } + + + /* (non-Javadoc) + * @see org.xml.sax.ContentHandler#startDocument() + */ + public void startDocument() throws SAXException { + super.startDocument(); + AttributesImpl a = new AttributesImpl(); + + // took the div-tag as root, because it does not matter in the output, if it passes the xsl transformation + super.startPrefixMapping("i18n", "http://apache.org/cocoon/i18n/2.1"); + super.startElement("", "div","div", a); + super.startElement("", "tab-layout", "tab-layout", a); + Collection tools = pm.getToolsWithFunctions(); + for(Iterator it = tools.iterator(); it.hasNext();) { + AttributesImpl attr = new AttributesImpl(); + PortalTool pt = (PortalTool) it.next(); + attr.addCDATAAttribute("parameter", "tools/functions/" + pt.getId()); + attr.addCDATAAttribute("name", pt.getName()); + attr.addCDATAAttribute("http://apache.org/cocoon/i18n/2.1", "attr", "i18n:attr", "name"); + if(selected != null) { + if(selected.equals(pt.getId())) { + attr.addCDATAAttribute("selected", "true"); + } + } + super.startElement("","named-item", "named-item", attr); + super.endElement("", "named-item", "named-item"); + } + super.endElement("", "tab-layout", "tab-layout"); + if(selected != null) { + PortalTool ct = pm.getTool(selected); + if(ct != null) { + super.startElement("", "tool-functions", "tool-functions", a); + Collection funs = ct.getFunctions(); + for(Iterator it = funs.iterator();it.hasNext();) { + PortalToolFunction ptf = (PortalToolFunction) it.next(); + AttributesImpl attr = new AttributesImpl(); + attr.addCDATAAttribute("parameter", "tools/plugins/" + ct.getId() + "/" + ptf.getFunction()); + attr.addCDATAAttribute("name", ptf.getName()); + attr.addCDATAAttribute("http://apache.org/cocoon/i18n/2.1", "attr", "i18n:attr", "name"); super.startElement("", "function", "function", attr); + super.endElement("", "function", "function"); + } + super.endElement("", "tool-functions", "tool-functions"); + } + } + } + + + /* (non-Javadoc) + * @see org.xml.sax.ContentHandler#endDocument() + */ + public void endDocument() throws SAXException { + super.endElement("", "div", "div"); + super.endPrefixMapping("i18n"); + selected= null; + super.endDocument(); + } + +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/ContextGrabber.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/ContextGrabber.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/ContextGrabber.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,69 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.userManagement; + +import org.apache.cocoon.webapps.authentication.context.AuthenticationContext; +import org.w3c.dom.DocumentFragment; +import org.w3c.dom.Node; + +/** + * Grabbing the context of an user, which is set in the file sunrise-user.xml + * and is stored in the class AuthenticationContext. + * + * @version CVS $Id$ + */ +public class ContextGrabber { + + public ContextGrabber () { /* NOP */ } + + /** + * Grabbing the context of the current user + * + * @param context the instantiated class AuthenticationContext + * @return Object of context information + */ + public UserBean grab (AuthenticationContext context) + { + UserBean ub = new UserBean (); + DocumentFragment df = null; + try { + df = context.getXML ("/authentication/"); + } catch (Exception e) {} + + grabAuthContext (df.getFirstChild(),ub); + + return ub; + } + + private void grabAuthContext (Node node, UserBean ub){ + + while (node != null){ + + if (!node.getNodeName().equals("#text")) + { + if (node.getFirstChild() != null) + { + grabAuthContext (node.getFirstChild () ,ub); + ub.addContext(node.getNodeName(),node.getFirstChild().getNodeValue()); + } + else + ub.addContext(node.getNodeName(),""); + } + node = node.getNextSibling(); + } + } + +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/ContextItem.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/ContextItem.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/ContextItem.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,46 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.userManagement; + +/** + * Capsule a key and its value of an user context + * + * @version CVS $Id$ + */ +public class ContextItem { + + private String key = ""; + private String value = ""; + + public ContextItem(String key, String value){ + this.key = key; + this.value = value; + } + + + public String getKey() { + return key; + } + public String getValue() { + return value; + } + public void setKey(String string) { + key = string; + } + public void setValue(String string) { + value = string; + } +} Added: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/UserBean.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/UserBean.java?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/tools/userManagement/UserBean.java Fri Jan 28 09:54:58 2005 @@ -0,0 +1,85 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cocoon.portal.tools.userManagement; + +import java.util.Collection; +import java.util.HashMap; + +/** + * Object storing information of an user context. + * + * @version CVS $Id$ + */ +public class UserBean { + + private HashMap context = new HashMap (); + private String picture = ""; + + + public UserBean () {} + + /** + * Add a single context information + * + * @param key name of the context + * @param value value of the context + */ + public void addContext (String key, String value){ + this.context.put (key, new ContextItem (key, value)); + } + + /** + * Get the whole context of the current user + * + * @return Collection of the whole context + */ + public Collection getContext () { + return this.context.values(); + } + + /** + * return specified context value + * + * @param key + * @return + */ + public String getContextItem (String key) { + if (this.context.get(key) != null) + return ((ContextItem) this.context.get(key)).getValue(); + else + return ""; + } + + /** + * Special Attribute for the cocoon portal tool example: + * you can store even extra attributes in the bean + * + * @return name of the picture file + */ + public String getPicture() { + return picture; + } + + /** + * Special Attribute for the cocoon portal tool example: + * you can store even extra attributes in the bean + * + * @param string name of the picture file + */ + public void setPicture(String string) { + picture = string; + } +} Modified: cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/NewEventLinkTransformer.java Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/NewEventLinkTransformer.java?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/NewEventLinkTransformer.java&r1=148908&p2=cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/NewEventLinkTransformer.java&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/NewEventLinkTransformer.java (original) +++ cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portal/transformation/NewEventLinkTransformer.java Fri Jan 28 09:54:58 2005 @@ -246,7 +246,7 @@ * @see org.apache.cocoon.transformation.AbstractSAXTransformer#endTransformingElement(String, String, String) */ public void endTransformingElement(String uri, String name, String raw) - throws SAXException { + throws SAXException { String elementName = (String) this.stack.pop(); contentHandler.endElement("", elementName, elementName); } Modified: cocoon/trunk/src/blocks/portal/samples/coplets/basket/sitemap.xmap Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/coplets/basket/sitemap.xmap?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/samples/coplets/basket/sitemap.xmap&r1=148908&p2=cocoon/trunk/src/blocks/portal/samples/coplets/basket/sitemap.xmap&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/samples/coplets/basket/sitemap.xmap (original) +++ cocoon/trunk/src/blocks/portal/samples/coplets/basket/sitemap.xmap Fri Jan 28 09:54:58 2005 @@ -234,6 +234,6 @@ </map:act> </map:match> - </map:pipeline> + </map:pipeline> </map:pipelines> </map:sitemap> Modified: cocoon/trunk/src/blocks/portal/samples/resources/save-user-profile.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/resources/save-user-profile.xml?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/samples/resources/save-user-profile.xml&r1=148908&p2=cocoon/trunk/src/blocks/portal/samples/resources/save-user-profile.xml&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/samples/resources/save-user-profile.xml (original) +++ cocoon/trunk/src/blocks/portal/samples/resources/save-user-profile.xml Fri Jan 28 09:54:58 2005 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright 1999-2004 The Apache Software Foundation + Copyright 1999-2005 The Apache Software Foundation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,14 +15,14 @@ limitations under the License. --> -<!-- $Id: save-user-profile.xml,v 1.2 2004/03/06 02:26:05 antonio Exp $ +<!-- $Id$ Description: This resource save the user profile to a file. --> <user xmlns:source="http://apache.org/cocoon/source/1.0" xmlns:session="http://apache.org/cocoon/session/1.0"> <source:insert> - <source:source>profiles/<session:getxml context="request" path="/parameter/profile"/>/<session:getxml context="request" path="/parameter/portal"/>-user-<session:getxml context="request" path="/parameter/user"/>.xml</source:source> + <source:source>context://samples/blocks/portal/profiles/<session:getxml context="request" path="/parameter/profile"/>/<session:getxml context="request" path="/parameter/portal"/>-user-<session:getxml context="request" path="/parameter/user"/>.xml</source:source> <source:path>/</source:path> <source:fragment><session:getxml context="request" path="/parameter/content"/></source:fragment> <source:replace>*</source:replace> Modified: cocoon/trunk/src/blocks/portal/samples/sitemap.xmap Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/sitemap.xmap?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/samples/sitemap.xmap&r1=148908&p2=cocoon/trunk/src/blocks/portal/samples/sitemap.xmap&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/samples/sitemap.xmap (original) +++ cocoon/trunk/src/blocks/portal/samples/sitemap.xmap Fri Jan 28 09:54:58 2005 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright 1999-2004 The Apache Software Foundation + Copyright 1999-2005 The Apache Software Foundation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -72,7 +72,7 @@ <map:action src="org.apache.cocoon.portal.acting.BookmarkAction" name="portal-bookmark"> <parameter name="src" value="resources/bookmarks.xml"/> </map:action> - <map:action src="org.apache.cocoon.portal.acting.PreparePortalAction" name="portal-prepare"/> + <map:action src="org.apache.cocoon.portal.acting.PreparePortalAction" name="portal-prepare"/> </map:actions> </map:components> @@ -334,6 +334,26 @@ <!-- TODO logout page --> <map:redirect-to uri="login"/> </map:match> + + <!-- ==== P O R T A L T O O L S ==== --> + + <!-- mount sitemap of the portal tools --> + <map:match pattern="tools/**"> + <map:act type="auth-protect"> + <map:parameter name="handler" value="portal-handler"/> + <map:parameter name="application" value="portal"/> + + <map:mount uri-prefix="tools" check-reload="no" src="tools/sitemap.xmap"/> + </map:act> + </map:match> + + <!-- portal tools image reader --> + <map:match pattern="toolImages/*/*.jpg"> + <map:read mime-type="image/jpg" src="tools/skins/{1}/images/{2}.jpg"/> + </map:match> + <map:match pattern="userImages/*.jpg"> + <map:read mime-type="image/jpg" src="tools/plugins/userManagement/userImages/{1}.jpg"/> + </map:match> <!-- Everything else redirect to the portal --> <map:match pattern="**"> Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/css/forms-calendar.css Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/css/forms-calendar.css?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/css/forms-calendar.css Fri Jan 28 09:54:58 2005 @@ -0,0 +1,92 @@ +/* +* Copyright 1999-2004 The Apache Software Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +#forms_calendarDiv { + position: absolute; + visibility: hidden; + background-color: white; + layer-background-color: white; +} + +.forms_cpYearNavigation, .forms_cpMonthNavigation { + background-color:#C0C0C0; + text-align:center; + vertical-align:center; + text-decoration:none; + color:#000000; + font-weight:bold; +} + +.forms_cpDayColumnHeader, .forms_cpYearNavigation, .forms_cpMonthNavigation, .forms_cpCurrentMonthDate, .forms_cpCurrentMonthDateDisabled, .forms_cpOtherMonthDate, .forms_cpOtherMonthDateDisabled, .forms_cpCurrentDate, .forms_cpCurrentDateDisabled, .forms_cpTodayText, .forms_cpTodayTextDisabled, .forms_cpText { + font-family:arial; + font-size:8pt; +} + +TD.forms_cpDayColumnHeader { + text-align:right; + border:solid thin #C0C0C0; + border-width:0 0 19 0; +} + +.forms_cpCurrentMonthDate, .forms_cpOtherMonthDate, .forms_cpCurrentDate { + text-align:right; + text-decoration:none; +} + +.forms_cpCurrentMonthDateDisabled, .forms_cpOtherMonthDateDisabled, .forms_cpCurrentDateDisabled { + color:#D0D0D0; + text-align:right; + text-decoration:line-through; +} + +.forms_cpCurrentMonthDate, .forms_cpCurrentDate { + color:#000000; +} + +.forms_cpOtherMonthDate { + color:#808080; +} + +TD.forms_cpCurrentDate { + color:white; background-color: #C0C0C0; + border-width:1; + border:solid thin #800000; +} + +TD.forms_cpCurrentDateDisabled { + border-width:1; + border:solid thin #FFAAAA; +} + +TD.forms_cpTodayText, TD.forms_cpTodayTextDisabled { + border:solid thin #C0C0C0; + border-width:1 0 0 0; +} + +A.forms_cpTodayText, SPAN.forms_cpTodayTextDisabled { + height:20px; +} + +A.forms_cpTodayText { + color:black; +} + +.forms_cpTodayTextDisabled { + color:#D0D0D0; +} + +.forms_cpBorder { + border:solid thin #808080; +} Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/css/forms.css Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/css/forms.css?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/css/forms.css Fri Jan 28 09:54:58 2005 @@ -0,0 +1,75 @@ +/* +* Copyright 1999-2004 The Apache Software Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +.forms-tab { + background-color: white; + border: 1px solid black; + border-bottom-width: 0px; + padding: 2px 1em 2px 1em; + margin-right: 5px; + position: relative; + text-decoration: none; + top: -1px; + z-index: 1; + cursor: pointer; +} + +.forms-tab.forms-activeTab { + font-weight: bold; + padding-top: 5px; + cursor: default; + z-index: 3; +} + +.forms-tabContent { + background-color: white; + border: 1px solid black; + padding: 1em; + position: relative; + z-index: 2; +} + +.forms-validation-message, a.forms-validation-message:link { + color: red; + font-weight: bold; +} + +.forms-validation-errors { +} + +.forms-validation-error { +} + +.forms-field-required { + color:blue; + font-weight: bold; +} + +.forms-help { + border-style: dotted; + border-width: 1px; + padding: 5px; + background-color:#FFFFC0; /* light yellow */ + width: 200px; /* otherwise IE does a weird layout */ + z-index:1000; /* must be higher than forms-tabContent */ +} + +.forms-doubleList select { + width: 150px; +} + +.forms-doubleList input { + width: 40px; +} Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/images/cal.gif Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/images/cal.gif?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/js/forms-lib.js Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/js/forms-lib.js?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/js/forms-lib.js Fri Jan 28 09:54:58 2005 @@ -0,0 +1,186 @@ +/* +* Copyright 1999-2004 The Apache Software Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +/** + * Runtime JavaScript library for Cocoon forms. + * + * @author <a href="http://www.apache.org/~sylvain/">Sylvain Wallez</a> + * @version CVS $Id$ + */ + +// Handlers that are to be called in the document's "onload" event +var forms_onloadHandlers = new Array(); + +function forms_onload() { + for (var i = 0; i < forms_onloadHandlers.length; i++) { + forms_onloadHandlers[i].forms_onload(); + } + // Clear it (we no more need them) + forms_onloadHandlers = null; +} + +// Handlers that are to be called in form's "onsubmit" event +//FIXME: this single var implies only one form per page, and needs to be +// visited if we decide to support several forms per page. +var forms_onsubmitHandlers = new Array(); + +function forms_onsubmit() { + if (forms_onsubmitHandlers == null) { + alert("onsubmit called twice!"); + } + + for (var i = 0; i < forms_onsubmitHandlers.length; i++) { + forms_onsubmitHandlers[i].forms_onsubmit(); + } + // clear it + forms_onsubmitHandlers = null; +} + +/** + * Submit the form containing an element, also storing in the hidden + * 'forms_submit_id' field the name of the element which triggered the submit. + */ +function forms_submitForm(element, name) { + if (name == undefined) { + name = element.name; + } + + var form = forms_getForm(element); + if (form == null) { + alert("Cannot find form for " + element); + } else { + form["forms_submit_id"].value = name; + // FIXME: programmatically submitting the form doesn't trigger onsubmit ? (both in IE and Moz) + forms_onsubmit(); + form.submit(); + } +} + +/** + * Crawl the parents of an element up to finding a form. + */ +function forms_getForm(element) { + while(element != null && element.tagName != "FORM") { + element = element.parentNode; + } + return element; +} + +/** + * Move a named element as an immediate child of the <body> element. + * This is required for help popups inside <wi:group> tabs. The reason is that CSS positioning + * properties ("left" and "top") on a block with a "position: absolute" are actually relative to + * the nearest ancestor that has a position of "absolute", "relative" or "fixed". + * See http://www.w3.org/TR/CSS21/visudet.html#containing-block-details $4 + */ + +function forms_moveInBody(element) { + element.parentNode.removeChild(element); + document.body.appendChild(element); +} + +/** + * Create a popup window for a named element. + * + * @param id the ID of the element to make a popup with. + */ +function forms_createPopupWindow(id) { + var result = new PopupWindow(id); + result.autoHide(); + // add to onload handlers + result.forms_id = id; + result.forms_onload = function() { + forms_moveInBody(document.getElementById(this.forms_id)); + } + forms_onloadHandlers.push(result); + return result; +} + + +function forms_createOptionTransfer(id, submitOnChange) { + var result = new OptionTransfer(id + ".unselected", id); + result.setAutoSort(true); + // add to onload handlers + result.forms_id = id; + result.forms_onload = function() { + var form = forms_getForm(document.getElementById(this.forms_id)); + this.init(form); + sortSelect(this.left); + sortSelect(this.right); + } + result.submitOnChange = submitOnChange; + result.forms_transferLeft = function() { + this.transferLeft(); + if (this.submitOnChange) { + forms_submitForm(document.getElementById(this.forms_id)); + } + } + result.forms_transferRight = function() { + this.transferRight(); + if (this.submitOnChange) { + forms_submitForm(document.getElementById(this.forms_id)); + } + } + result.forms_transferAllLeft = function() { + this.transferAllLeft(); + if (this.submitOnChange) { + forms_submitForm(document.getElementById(this.forms_id)); + } + }; + result.forms_transferAllRight = function() { + this.transferAllRight(); + if (this.submitOnChange) { + forms_submitForm(document.getElementById(this.forms_id)); + } + }; + forms_onloadHandlers.push(result); + + // add to onsubmit handlers + result.forms_onsubmit = function() { + // Select all options in the "selected" list to that + // its values are sent. + selectAllOptions(this.right); + } + forms_onsubmitHandlers.push(result); + return result; +} + + +/** + * Show a tab in a <wi:group> + * + * @param tabgroup (string) name of the <wi:group> + * @param idx (integer) index of the selected tab + * @param length (integer) total number of tabs + * @param state (string, optional) name of the input storing the tabgroup state + */ +function forms_showTab(tabgroup, idx, length, state) { + for (var i = 0; i < length; i++) { + // Change tab status (selected/unselected) + var tab = document.getElementById(tabgroup + "_tab_" + i); + if (tab != null) { + tab.className = (i == idx) ? 'forms-tab forms-activeTab': 'forms-tab'; + } + // Change tab content visibilty + var tabitems = document.getElementById(tabgroup + "_items_" + i); + if (tabitems != null) { + tabitems.style.display = (i == idx) ? '' : 'none'; + } + } + // Change state value + if (state.length > 0) { + document.forms[0][state].value = idx; + } +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/js/mattkruse-lib.js Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/js/mattkruse-lib.js?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/js/mattkruse-lib.js Fri Jan 28 09:54:58 2005 @@ -0,0 +1,124 @@ +// =================================================================== +// Author: Matt Kruse <[EMAIL PROTECTED]> +// WWW: http://www.mattkruse.com/ +// +// NOTICE: You may use this code for any purpose, commercial or +// private, without any further permission from the author. You may +// remove this notice from your final code if you wish, however it is +// appreciated by the author if at least my web site address is kept. +// +// You may *NOT* re-distribute this code in any way except through its +// use. That means, you can include it in your product, or your web +// site, or any other form where the code is actually being used. You +// may not put the plain javascript up on your site for download or +// include it in your javascript libraries for download. +// If you wish to share this code with others, please just point them +// to the URL instead. +// Please DO NOT link directly to my .js files from your site. Copy +// the files to your server and use them there. Thank you. +// =================================================================== + +/* SOURCE FILE: selectbox.js */ +function selectUnselectMatchingOptions(obj,regex,which,only){if(window.RegExp){if(which == "select"){var selected1=true;var selected2=false;}else if(which == "unselect"){var selected1=false;var selected2=true;}else{return;}var re = new RegExp(regex);for(var i=0;i<obj.options.length;i++){if(re.test(obj.options[i].text)){obj.options[i].selected = selected1;}else{if(only == true){obj.options[i].selected = selected2;}}}}} +function selectMatchingOptions(obj,regex){selectUnselectMatchingOptions(obj,regex,"select",false);} +function selectOnlyMatchingOptions(obj,regex){selectUnselectMatchingOptions(obj,regex,"select",true);} +function unSelectMatchingOptions(obj,regex){selectUnselectMatchingOptions(obj,regex,"unselect",false);} +function sortSelect(obj){var o = new Array();if(obj.options==null){return;}for(var i=0;i<obj.options.length;i++){o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;}if(o.length==0){return;}o = o.sort( +function(a,b){if((a.text+"") <(b.text+"")){return -1;}if((a.text+"") >(b.text+"")){return 1;}return 0;});for(var i=0;i<o.length;i++){obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);}} +function selectAllOptions(obj){for(var i=0;i<obj.options.length;i++){obj.options[i].selected = true;}} +function moveSelectedOptions(from,to){if(arguments.length>3){var regex = arguments[3];if(regex != ""){unSelectMatchingOptions(from,regex);}}for(var i=0;i<from.options.length;i++){var o = from.options[i];if(o.selected){to.options[to.options.length] = new Option( o.text, o.value, false, false);}}for(var i=(from.options.length-1);i>=0;i--){var o = from.options[i];if(o.selected){from.options[i] = null;}}if((arguments.length<3) ||(arguments[2]==true)){sortSelect(from);sortSelect(to);}from.selectedIndex = -1;to.selectedIndex = -1;} +function copySelectedOptions(from,to){var options = new Object();for(var i=0;i<to.options.length;i++){options[to.options[i].text] = true;}for(var i=0;i<from.options.length;i++){var o = from.options[i];if(o.selected){if(options[o.text] == null || options[o.text] == "undefined"){to.options[to.options.length] = new Option( o.text, o.value, false, false);}}}if((arguments.length<3) ||(arguments[2]==true)){sortSelect(to);}from.selectedIndex = -1;to.selectedIndex = -1;} +function moveAllOptions(from,to){selectAllOptions(from);if(arguments.length==2){moveSelectedOptions(from,to);}else if(arguments.length==3){moveSelectedOptions(from,to,arguments[2]);}else if(arguments.length==4){moveSelectedOptions(from,to,arguments[2],arguments[3]);}} +function copyAllOptions(from,to){selectAllOptions(from);if(arguments.length==2){copySelectedOptions(from,to);}else if(arguments.length==3){copySelectedOptions(from,to,arguments[2]);}} +function swapOptions(obj,i,j){var o = obj.options;var i_selected = o[i].selected;var j_selected = o[j].selected;var temp = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);var temp2= new Option(o[j].text, o[j].value, o[j].defaultSelected, o[j].selected);o[i] = temp2;o[j] = temp;o[i].selected = j_selected;o[j].selected = i_selected;} +function moveOptionUp(obj){var selectedCount=0;for(i=0;i<obj.options.length;i++){if(obj.options[i].selected){selectedCount++;}}if(selectedCount!=1){return;}var i = obj.selectedIndex;if(i == 0){return;}swapOptions(obj,i,i-1);obj.options[i-1].selected = true;} +function moveOptionDown(obj){var selectedCount=0;for(i=0;i<obj.options.length;i++){if(obj.options[i].selected){selectedCount++;}}if(selectedCount != 1){return;}var i = obj.selectedIndex;if(i ==(obj.options.length-1)){return;}swapOptions(obj,i,i+1);obj.options[i+1].selected = true;} +function removeSelectedOptions(from){for(var i=(from.options.length-1);i>=0;i--){var o=from.options[i];if(o.selected){from.options[i] = null;}}from.selectedIndex = -1;} + + +/* SOURCE FILE: OptionTransfer.js */ + +function OT_transferLeft(){moveSelectedOptions(this.right,this.left,this.autoSort);this.update();} +function OT_transferRight(){moveSelectedOptions(this.left,this.right,this.autoSort);this.update();} +function OT_transferAllLeft(){moveAllOptions(this.right,this.left,this.autoSort);this.update();} +function OT_transferAllRight(){moveAllOptions(this.left,this.right,this.autoSort);this.update();} +function OT_saveRemovedLeftOptions(f){this.removedLeftField = f;} +function OT_saveRemovedRightOptions(f){this.removedRightField = f;} +function OT_saveAddedLeftOptions(f){this.addedLeftField = f;} +function OT_saveAddedRightOptions(f){this.addedRightField = f;} +function OT_saveNewLeftOptions(f){this.newLeftField = f;} +function OT_saveNewRightOptions(f){this.newRightField = f;} +function OT_update(){var removedLeft = new Object();var removedRight = new Object();var addedLeft = new Object();var addedRight = new Object();var newLeft = new Object();var newRight = new Object();for(var i=0;i<this.left.options.length;i++){var o=this.left.options[i];newLeft[o.value]=1;if(typeof(this.originalLeftValues[o.value])=="undefined"){addedLeft[o.value]=1;removedRight[o.value]=1;}}for(var i=0;i<this.right.options.length;i++){var o=this.right.options[i];newRight[o.value]=1;if(typeof(this.originalRightValues[o.value])=="undefined"){addedRight[o.value]=1;removedLeft[o.value]=1;}}if(this.removedLeftField!=null){this.removedLeftField.value = OT_join(removedLeft,this.delimiter);}if(this.removedRightField!=null){this.removedRightField.value = OT_join(removedRight,this.delimiter);}if(this.addedLeftField!=null){this.addedLeftField.value = OT_join(addedLeft,this.delimiter);}if(this.addedRightField!=null){this.addedRightField.value = OT_join(addedRight,this.delimiter);}if(this.newLeftField!=null){this.newLeftField.value = OT_join(newLeft,this.delimiter);}if(this.newRightField!=null){this.newRightField.value = OT_join(newRight,this.delimiter);}} +function OT_join(o,delimiter){var val;var str="";for(val in o){if(str.length>0){str=str+delimiter;}str=str+val;}return str;} +function OT_setDelimiter(val){this.delimiter=val;} +function OT_setAutoSort(val){this.autoSort=val;} +function OT_init(theform){this.form = theform;if(!theform[this.left]){alert("OptionTransfer init(): Left select list does not exist in form!");return false;}if(!theform[this.right]){alert("OptionTransfer init(): Right select list does not exist in form!");return false;}this.left=theform[this.left];this.right=theform[this.right];for(var i=0;i<this.left.options.length;i++){this.originalLeftValues[this.left.options[i].value]=1;}for(var i=0;i<this.right.options.length;i++){this.originalRightValues[this.right.options[i].value]=1;}if(this.removedLeftField!=null){this.removedLeftField=theform[this.removedLeftField];}if(this.removedRightField!=null){this.removedRightField=theform[this.removedRightField];}if(this.addedLeftField!=null){this.addedLeftField=theform[this.addedLeftField];}if(this.addedRightField!=null){this.addedRightField=theform[this.addedRightField];}if(this.newLeftField!=null){this.newLeftField=theform[this.newLeftField];}if(this.newRightField!=null){this.newRightField=theform[this.newRightField];}this.update();} +function OptionTransfer(l,r){this.form = null;this.left=l;this.right=r;this.autoSort=true;this.delimiter=",";this.originalLeftValues = new Object();this.originalRightValues = new Object();this.removedLeftField = null;this.removedRightField = null;this.addedLeftField = null;this.addedRightField = null;this.newLeftField = null;this.newRightField = null;this.transferLeft=OT_transferLeft;this.transferRight=OT_transferRight;this.transferAllLeft=OT_transferAllLeft;this.transferAllRight=OT_transferAllRight;this.saveRemovedLeftOptions=OT_saveRemovedLeftOptions;this.saveRemovedRightOptions=OT_saveRemovedRightOptions;this.saveAddedLeftOptions=OT_saveAddedLeftOptions;this.saveAddedRightOptions=OT_saveAddedRightOptions;this.saveNewLeftOptions=OT_saveNewLeftOptions;this.saveNewRightOptions=OT_saveNewRightOptions;this.setDelimiter=OT_setDelimiter;this.setAutoSort=OT_setAutoSort;this.init=OT_init;this.update=OT_update;} + +/* SOURCE FILE: date.js */ +var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat'); +function LZ(x){return(x<0||x>9?"":"0")+x} +function isDate(val,format){var date=getDateFromFormat(val,format);if(date==0){return false;}return true;} +function compareDates(date1,dateformat1,date2,dateformat2){var d1=getDateFromFormat(date1,dateformat1);var d2=getDateFromFormat(date2,dateformat2);if(d1==0 || d2==0){return -1;}else if(d1 > d2){return 1;}return 0;} +function formatDate(date,format){format=format+"";var result="";var i_format=0;var c="";var token="";var y=date.getYear()+"";var M=date.getMonth()+1;var d=date.getDate();var E=date.getDay();var H=date.getHours();var m=date.getMinutes();var s=date.getSeconds();var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;var value=new Object();if(y.length < 4){y=""+(y-0+1900);}value["y"]=""+y;value["yyyy"]=y;value["yy"]=y.substring(2,4);value["M"]=M;value["MM"]=LZ(M);value["MMM"]=MONTH_NAMES[M-1];value["NNN"]=MONTH_NAMES[M+11];value["d"]=d;value["dd"]=LZ(d);value["E"]=DAY_NAMES[E+7];value["EE"]=DAY_NAMES[E];value["H"]=H;value["HH"]=LZ(H);if(H==0){value["h"]=12;}else if(H>12){value["h"]=H-12;}else{value["h"]=H;}value["hh"]=LZ(value["h"]);if(H>11){value["K"]=H-12;}else{value["K"]=H;}value["k"]=H+1;value["KK"]=LZ(value["K"]);value["kk"]=LZ(value["k"]);if(H > 11){value["a"]="PM";}else{value["a"]="AM";}value["m"]=m;value["mm"]=LZ(m);value["s"]=s;value["ss"]=LZ(s);while(i_format < format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c) &&(i_format < format.length)){token += format.charAt(i_format++);}if(value[token] != null){result=result + value[token];}else{result=result + token;}}return result;} +function _isInteger(val){var digits="1234567890";for(var i=0;i < val.length;i++){if(digits.indexOf(val.charAt(i))==-1){return false;}}return true;} +function _getInt(str,i,minlength,maxlength){for(var x=maxlength;x>=minlength;x--){var token=str.substring(i,i+x);if(token.length < minlength){return null;}if(_isInteger(token)){return token;}}return null;} +function getDateFromFormat(val,format){val=val+"";format=format+"";var i_val=0;var i_format=0;var c="";var token="";var token2="";var x,y;var now=new Date();var year=now.getYear();var month=now.getMonth()+1;var date=1;var hh=now.getHours();var mm=now.getMinutes();var ss=now.getSeconds();var ampm="";while(i_format < format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c) &&(i_format < format.length)){token += format.charAt(i_format++);}if(token=="yyyy" || token=="yy" || token=="y"){if(token=="yyyy"){x=4;y=4;}if(token=="yy"){x=2;y=2;}if(token=="y"){x=2;y=4;}year=_getInt(val,i_val,x,y);if(year==null){return 0;}i_val += year.length;if(year.length==2){if(year > 70){year=1900+(year-0);}else{year=2000+(year-0);}}}else if(token=="MMM"||token=="NNN"){month=0;for(var i=0;i<MONTH_NAMES.length;i++){var month_name=MONTH_NAMES[i];if(val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()){if(token=="MMM"||(token=="NNN"&&i>11)){month=i+1;if(month>12){month -= 12;}i_val += month_name.length;break;}}}if((month < 1)||(month>12)){return 0;}}else if(token=="EE"||token=="E"){for(var i=0;i<DAY_NAMES.length;i++){var day_name=DAY_NAMES[i];if(val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()){i_val += day_name.length;break;}}}else if(token=="MM"||token=="M"){month=_getInt(val,i_val,token.length,2);if(month==null||(month<1)||(month>12)){return 0;}i_val+=month.length;}else if(token=="dd"||token=="d"){date=_getInt(val,i_val,token.length,2);if(date==null||(date<1)||(date>31)){return 0;}i_val+=date.length;}else if(token=="hh"||token=="h"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>12)){return 0;}i_val+=hh.length;}else if(token=="HH"||token=="H"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>23)){return 0;}i_val+=hh.length;}else if(token=="KK"||token=="K"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>11)){return 0;}i_val+=hh.length;}else if(token=="kk"||token=="k"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>24)){return 0;}i_val+=hh.length;hh--;}else if(token=="mm"||token=="m"){mm=_getInt(val,i_val,token.length,2);if(mm==null||(mm<0)||(mm>59)){return 0;}i_val+=mm.length;}else if(token=="ss"||token=="s"){ss=_getInt(val,i_val,token.length,2);if(ss==null||(ss<0)||(ss>59)){return 0;}i_val+=ss.length;}else if(token=="a"){if(val.substring(i_val,i_val+2).toLowerCase()=="am"){ampm="AM";}else if(val.substring(i_val,i_val+2).toLowerCase()=="pm"){ampm="PM";}else{return 0;}i_val+=2;}else{if(val.substring(i_val,i_val+token.length)!=token){return 0;}else{i_val+=token.length;}}}if(i_val != val.length){return 0;}if(month==2){if( ((year%4==0)&&(year%100 != 0) ) ||(year%400==0) ){if(date > 29){return 0;}}else{if(date > 28){return 0;}}}if((month==4)||(month==6)||(month==9)||(month==11)){if(date > 30){return 0;}}if(hh<12 && ampm=="PM"){hh=hh-0+12;}else if(hh>11 && ampm=="AM"){hh-=12;}var newdate=new Date(year,month-1,date,hh,mm,ss);return newdate.getTime();} +function parseDate(val){var preferEuro=(arguments.length==2)?arguments[1]:false;generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');var d=null;for(var i=0;i<checkList.length;i++){var l=window[checkList[i]];for(var j=0;j<l.length;j++){d=getDateFromFormat(val,l[j]);if(d!=0){return new Date(d);}}}return null;} + +/* SOURCE FILE: AnchorPosition.js */ +function getAnchorPosition(anchorname){var useWindow=false;var coordinates=new Object();var x=0,y=0;var use_gebi=false, use_css=false, use_layers=false;if(document.getElementById){use_gebi=true;}else if(document.all){use_css=true;}else if(document.layers){use_layers=true;}if(use_gebi && document.all){x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);}else if(use_gebi){var o=document.getElementById(anchorname);x=AnchorPosition_getPageOffsetLeft(o);y=AnchorPosition_getPageOffsetTop(o);}else if(use_css){x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);}else if(use_layers){var found=0;for(var i=0;i<document.anchors.length;i++){if(document.anchors[i].name==anchorname){found=1;break;}}if(found==0){coordinates.x=0;coordinates.y=0;return coordinates;}x=document.anchors[i].x;y=document.anchors[i].y;}else{coordinates.x=0;coordinates.y=0;return coordinates;}coordinates.x=x;coordinates.y=y;return coordinates;} +function getAnchorWindowPosition(anchorname){var coordinates=getAnchorPosition(anchorname);var x=0;var y=0;if(document.getElementById){if(isNaN(window.screenX)){x=coordinates.x-document.body.scrollLeft+window.screenLeft;y=coordinates.y-document.body.scrollTop+window.screenTop;}else{x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;}}else if(document.all){x=coordinates.x-document.body.scrollLeft+window.screenLeft;y=coordinates.y-document.body.scrollTop+window.screenTop;}else if(document.layers){x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;}coordinates.x=x;coordinates.y=y;return coordinates;} +function AnchorPosition_getPageOffsetLeft(el){var ol=el.offsetLeft;while((el=el.offsetParent) != null){ol += el.offsetLeft;}return ol;} +function AnchorPosition_getWindowOffsetLeft(el){return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;} +function AnchorPosition_getPageOffsetTop(el){var ot=el.offsetTop;while((el=el.offsetParent) != null){ot += el.offsetTop;}return ot;} +function AnchorPosition_getWindowOffsetTop(el){return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;} + +/* SOURCE FILE: PopupWindow.js */ +function PopupWindow_getXYPosition(anchorname){var coordinates;if(this.type == "WINDOW"){coordinates = getAnchorWindowPosition(anchorname);}else{coordinates = getAnchorPosition(anchorname);}this.x = coordinates.x;this.y = coordinates.y;} +function PopupWindow_setSize(width,height){this.width = width;this.height = height;} +function PopupWindow_populate(contents){this.contents = contents;this.populated = false;} +function PopupWindow_setUrl(url){this.url = url;} +function PopupWindow_setWindowProperties(props){this.windowProperties = props;} +function PopupWindow_refresh(){if(this.divName != null){if(this.use_gebi){document.getElementById(this.divName).innerHTML = this.contents;}else if(this.use_css){document.all[this.divName].innerHTML = this.contents;}else if(this.use_layers){var d = document.layers[this.divName];d.document.open();d.document.writeln(this.contents);d.document.close();}}else{if(this.popupWindow != null && !this.popupWindow.closed){if(this.url!=""){this.popupWindow.location.href=this.url;}else{this.popupWindow.document.open();this.popupWindow.document.writeln(this.contents);this.popupWindow.document.close();}this.popupWindow.focus();}}} +function PopupWindow_showPopup(anchorname){this.getXYPosition(anchorname);this.x += this.offsetX;this.y += this.offsetY;if(!this.populated &&(this.contents != "")){this.populated = true;this.refresh();}if(this.divName != null){if(this.use_gebi){document.getElementById(this.divName).style.left = this.x;document.getElementById(this.divName).style.top = this.y;document.getElementById(this.divName).style.visibility = "visible";}else if(this.use_css){document.all[this.divName].style.left = this.x;document.all[this.divName].style.top = this.y;document.all[this.divName].style.visibility = "visible";}else if(this.use_layers){document.layers[this.divName].left = this.x;document.layers[this.divName].top = this.y;document.layers[this.divName].visibility = "visible";}}else{if(this.popupWindow == null || this.popupWindow.closed){if(this.x<0){this.x=0;}if(this.y<0){this.y=0;}if(screen && screen.availHeight){if((this.y + this.height) > screen.availHeight){this.y = screen.availHeight - this.height;}}if(screen && screen.availWidth){if((this.x + this.width) > screen.availWidth){this.x = screen.availWidth - this.width;}}var avoidAboutBlank = window.opera ||( document.layers && !navigator.mimeTypes['*']) || navigator.vendor == 'KDE' ||( document.childNodes && !document.all && !navigator.taintEnabled);this.popupWindow = window.open(avoidAboutBlank?"":"about:blank","window_"+anchorname,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");}this.refresh();}} +function PopupWindow_hidePopup(){if(this.divName != null){if(this.use_gebi){document.getElementById(this.divName).style.visibility = "hidden";}else if(this.use_css){document.all[this.divName].style.visibility = "hidden";}else if(this.use_layers){document.layers[this.divName].visibility = "hidden";}}else{if(this.popupWindow && !this.popupWindow.closed){this.popupWindow.close();this.popupWindow = null;}}} +function PopupWindow_isClicked(e){if(this.divName != null){if(this.use_layers){var clickX = e.pageX;var clickY = e.pageY;var t = document.layers[this.divName];if((clickX > t.left) &&(clickX < t.left+t.clip.width) &&(clickY > t.top) &&(clickY < t.top+t.clip.height)){return true;}else{return false;}}else if(document.all){var t = window.event.srcElement;while(t.parentElement != null){if(t.id==this.divName){return true;}t = t.parentElement;}return false;}else if(this.use_gebi){var t = e.originalTarget;while(t.parentNode != null){if(t.id==this.divName){return true;}t = t.parentNode;}return false;}return false;}return false;} +function PopupWindow_hideIfNotClicked(e){if(this.autoHideEnabled && !this.isClicked(e)){this.hidePopup();}} +function PopupWindow_autoHide(){this.autoHideEnabled = true;} +function PopupWindow_hidePopupWindows(e){for(var i=0;i<popupWindowObjects.length;i++){if(popupWindowObjects[i] != null){var p = popupWindowObjects[i];p.hideIfNotClicked(e);}}} +function PopupWindow_attachListener(){if(document.layers){document.captureEvents(Event.MOUSEUP);}window.popupWindowOldEventListener = document.onmouseup;if(window.popupWindowOldEventListener != null){document.onmouseup = new Function("window.popupWindowOldEventListener();PopupWindow_hidePopupWindows();");}else{document.onmouseup = PopupWindow_hidePopupWindows;}} +function PopupWindow(){if(!window.popupWindowIndex){window.popupWindowIndex = 0;}if(!window.popupWindowObjects){window.popupWindowObjects = new Array();}if(!window.listenerAttached){window.listenerAttached = true;PopupWindow_attachListener();}this.index = popupWindowIndex++;popupWindowObjects[this.index] = this;this.divName = null;this.popupWindow = null;this.width=0;this.height=0;this.populated = false;this.visible = false;this.autoHideEnabled = false;this.contents = "";this.url="";this.windowProperties="toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no";if(arguments.length>0){this.type="DIV";this.divName = arguments[0];}else{this.type="WINDOW";}this.use_gebi = false;this.use_css = false;this.use_layers = false;if(document.getElementById){this.use_gebi = true;}else if(document.all){this.use_css = true;}else if(document.layers){this.use_layers = true;}else{this.type = "WINDOW";}this.offsetX = 0;this.offsetY = 0;this.getXYPosition = PopupWindow_getXYPosition;this.populate = PopupWindow_populate;this.setUrl = PopupWindow_setUrl;this.setWindowProperties = PopupWindow_setWindowProperties;this.refresh = PopupWindow_refresh;this.showPopup = PopupWindow_showPopup;this.hidePopup = PopupWindow_hidePopup;this.setSize = PopupWindow_setSize;this.isClicked = PopupWindow_isClicked;this.autoHide = PopupWindow_autoHide;this.hideIfNotClicked = PopupWindow_hideIfNotClicked;} + + +/* SOURCE FILE: CalendarPopup.js */ + +function CalendarPopup(){var c;if(arguments.length>0){c = new PopupWindow(arguments[0]);}else{c = new PopupWindow();c.setSize(150,175);}c.offsetX = -152;c.offsetY = 25;c.autoHide();c.monthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");c.monthAbbreviations = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");c.dayHeaders = new Array("S","M","T","W","T","F","S");c.returnFunction = "CP_tmpReturnFunction";c.returnMonthFunction = "CP_tmpReturnMonthFunction";c.returnQuarterFunction = "CP_tmpReturnQuarterFunction";c.returnYearFunction = "CP_tmpReturnYearFunction";c.weekStartDay = 0;c.isShowYearNavigation = false;c.displayType = "date";c.disabledWeekDays = new Object();c.disabledDatesExpression = "";c.yearSelectStartOffset = 2;c.currentDate = null;c.todayText="Today";c.cssPrefix="";c.isShowYearNavigationInput=false;window.CP_targetInput = null;window.CP_dateFormat = "MM/dd/yyyy";c.setReturnFunction = CP_setReturnFunction;c.setReturnMonthFunction = CP_setReturnMonthFunction;c.setReturnQuarterFunction = CP_setReturnQuarterFunction;c.setReturnYearFunction = CP_setReturnYearFunction;c.setMonthNames = CP_setMonthNames;c.setMonthAbbreviations = CP_setMonthAbbreviations;c.setDayHeaders = CP_setDayHeaders;c.setWeekStartDay = CP_setWeekStartDay;c.setDisplayType = CP_setDisplayType;c.setDisabledWeekDays = CP_setDisabledWeekDays;c.addDisabledDates = CP_addDisabledDates;c.setYearSelectStartOffset = CP_setYearSelectStartOffset;c.setTodayText = CP_setTodayText;c.showYearNavigation = CP_showYearNavigation;c.showCalendar = CP_showCalendar;c.hideCalendar = CP_hideCalendar;c.getStyles = getCalendarStyles;c.refreshCalendar = CP_refreshCalendar;c.getCalendar = CP_getCalendar;c.select = CP_select;c.setCssPrefix = CP_setCssPrefix;c.showYearNavigationInput = CP_showYearNavigationInput +return c;} +function CP_tmpReturnFunction(y,m,d){if(window.CP_targetInput!=null){var dt = new Date(y,m-1,d,0,0,0);window.CP_targetInput.value = formatDate(dt,window.CP_dateFormat);}else{alert('Use setReturnFunction() to define which function will get the clicked results!');}} +function CP_tmpReturnMonthFunction(y,m){alert('Use setReturnMonthFunction() to define which function will get the clicked results!\nYou clicked: year='+y+' , month='+m);} +function CP_tmpReturnQuarterFunction(y,q){alert('Use setReturnQuarterFunction() to define which function will get the clicked results!\nYou clicked: year='+y+' , quarter='+q);} +function CP_tmpReturnYearFunction(y){alert('Use setReturnYearFunction() to define which function will get the clicked results!\nYou clicked: year='+y);} +function CP_setReturnFunction(name){this.returnFunction = name;} +function CP_setReturnMonthFunction(name){this.returnMonthFunction = name;} +function CP_setReturnQuarterFunction(name){this.returnQuarterFunction = name;} +function CP_setReturnYearFunction(name){this.returnYearFunction = name;} +function CP_setMonthNames(){for(var i=0;i<arguments.length;i++){this.monthNames[i] = arguments[i];}} +function CP_setMonthAbbreviations(){for(var i=0;i<arguments.length;i++){this.monthAbbreviations[i] = arguments[i];}} +function CP_setDayHeaders(){for(var i=0;i<arguments.length;i++){this.dayHeaders[i] = arguments[i];}} +function CP_setWeekStartDay(day){this.weekStartDay = day;} +function CP_showYearNavigation(){this.isShowYearNavigation =(arguments.length>0)?arguments[0]:true;} +function CP_setDisplayType(type){if(type!="date"&&type!="week-end"&&type!="month"&&type!="quarter"&&type!="year"){alert("Invalid display type! Must be one of: date,week-end,month,quarter,year");return false;}this.displayType=type;} +function CP_setYearSelectStartOffset(num){this.yearSelectStartOffset=num;} +function CP_setDisabledWeekDays(){this.disabledWeekDays = new Object();for(var i=0;i<arguments.length;i++){this.disabledWeekDays[arguments[i]] = true;}} +function CP_addDisabledDates(start, end){if(arguments.length==1){end=start;}if(start==null && end==null){return;}if(this.disabledDatesExpression!=""){this.disabledDatesExpression+= "||";}if(start!=null){start = parseDate(start);start=""+start.getFullYear()+LZ(start.getMonth()+1)+LZ(start.getDate());}if(end!=null){end=parseDate(end);end=""+end.getFullYear()+LZ(end.getMonth()+1)+LZ(end.getDate());}if(start==null){this.disabledDatesExpression+="(ds<="+end+")";}else if(end ==null){this.disabledDatesExpression+="(ds>="+start+")";}else{this.disabledDatesExpression+="(ds>="+start+"&&ds<="+end+")";}} +function CP_setTodayText(text){this.todayText = text;} +function CP_setCssPrefix(val){this.cssPrefix = val;} +function CP_showYearNavigationInput(){this.isShowYearNavigationInput =(arguments.length>0)?arguments[0]:true;} +function CP_hideCalendar(){if(arguments.length > 0){window.popupWindowObjects[arguments[0]].hidePopup();}else{this.hidePopup();}} +function CP_refreshCalendar(index){var calObject = window.popupWindowObjects[index];if(arguments.length>1){calObject.populate(calObject.getCalendar(arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]));}else{calObject.populate(calObject.getCalendar());}calObject.refresh();} +function CP_showCalendar(anchorname){if(arguments.length>1){if(arguments[1]==null||arguments[1]==""){this.currentDate=new Date();}else{this.currentDate=new Date(parseDate(arguments[1]));}}this.populate(this.getCalendar());this.showPopup(anchorname);} +function CP_select(inputobj, linkname, format){var selectedDate=(arguments.length>3)?arguments[3]:null;if(!window.getDateFromFormat){alert("calendar.select: To use this method you must also include 'date.js' for date formatting");return;}if(this.displayType!="date"&&this.displayType!="week-end"){alert("calendar.select: This function can only be used with displayType 'date' or 'week-end'");return;}if(inputobj.type!="text" && inputobj.type!="hidden" && inputobj.type!="textarea"){alert("calendar.select: Input object passed is not a valid form input object");window.CP_targetInput=null;return;}window.CP_targetInput = inputobj;this.currentDate=null;var time=0;if(selectedDate!=null){time = getDateFromFormat(selectedDate,format)}else if(inputobj.value!=""){time = getDateFromFormat(inputobj.value,format);}if(selectedDate!=null || inputobj.value!=""){if(time==0){this.currentDate=null;}else{this.currentDate=new Date(time);}}window.CP_dateFormat = format;this.showCalendar(linkname);} +function getCalendarStyles(){var result = "";var p = "";if(this!=null && typeof(this.cssPrefix)!="undefined" && this.cssPrefix!=null && this.cssPrefix!=""){p=this.cssPrefix;}result += "<STYLE>\n";result += "."+p+"cpYearNavigation,."+p+"cpMonthNavigation{background-color:#C0C0C0;text-align:center;vertical-align:center;text-decoration:none;color:#000000;font-weight:bold;}\n";result += "."+p+"cpDayColumnHeader, ."+p+"cpYearNavigation,."+p+"cpMonthNavigation,."+p+"cpCurrentMonthDate,."+p+"cpCurrentMonthDateDisabled,."+p+"cpOtherMonthDate,."+p+"cpOtherMonthDateDisabled,."+p+"cpCurrentDate,."+p+"cpCurrentDateDisabled,."+p+"cpTodayText,."+p+"cpTodayTextDisabled,."+p+"cpText{font-family:arial;font-size:8pt;}\n";result += "TD."+p+"cpDayColumnHeader{text-align:right;border:solid thin #C0C0C0;border-width:0 0 1 0;}\n";result += "."+p+"cpCurrentMonthDate, ."+p+"cpOtherMonthDate, ."+p+"cpCurrentDate{text-align:right;text-decoration:none;}\n";result += "."+p+"cpCurrentMonthDateDisabled, ."+p+"cpOtherMonthDateDisabled, ."+p+"cpCurrentDateDisabled{color:#D0D0D0;text-align:right;text-decoration:line-through;}\n";result += "."+p+"cpCurrentMonthDate, .cpCurrentDate{color:#000000;}\n";result += "."+p+"cpOtherMonthDate{color:#808080;}\n";result += "TD."+p+"cpCurrentDate{color:white;background-color: #C0C0C0;border-width:1;border:solid thin #800000;}\n";result += "TD."+p+"cpCurrentDateDisabled{border-width:1;border:solid thin #FFAAAA;}\n";result += "TD."+p+"cpTodayText, TD."+p+"cpTodayTextDisabled{border:solid thin #C0C0C0;border-width:1 0 0 0;}\n";result += "A."+p+"cpTodayText, SPAN."+p+"cpTodayTextDisabled{height:20px;}\n";result += "A."+p+"cpTodayText{color:black;}\n";result += "."+p+"cpTodayTextDisabled{color:#D0D0D0;}\n";result += "."+p+"cpBorder{border:solid thin #808080;}\n";result += "</STYLE>\n";return result;} +function CP_getCalendar(){var now = new Date();if(this.type == "WINDOW"){var windowref = "window.opener.";}else{var windowref = "";}var result = "";if(this.type == "WINDOW"){result += "<HTML><HEAD><TITLE>Calendar</TITLE>"+this.getStyles()+"</HEAD><BODY MARGINWIDTH=0 MARGINHEIGHT=0 TOPMARGIN=0 RIGHTMARGIN=0 LEFTMARGIN=0>\n";result += '<CENTER><TABLE WIDTH=100% BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>\n';}else{result += '<TABLE CLASS="'+this.cssPrefix+'cpBorder" WIDTH=144 BORDER=1 BORDERWIDTH=1 CELLSPACING=0 CELLPADDING=1>\n';result += '<TR><TD ALIGN=CENTER>\n';result += '<CENTER>\n';}if(this.displayType=="date" || this.displayType=="week-end"){if(this.currentDate==null){this.currentDate = now;}if(arguments.length > 0){var month = arguments[0];}else{var month = this.currentDate.getMonth()+1;}if(arguments.length > 1 && arguments[1]>0 && arguments[1]-0==arguments[1]){var year = arguments[1];}else{var year = this.currentDate.getFullYear();}var daysinmonth= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);if( ((year%4 == 0)&&(year%100 != 0) ) ||(year%400 == 0) ){daysinmonth[2] = 29;}var current_month = new Date(year,month-1,1);var display_year = year;var display_month = month;var display_date = 1;var weekday= current_month.getDay();var offset = 0;offset =(weekday >= this.weekStartDay) ? weekday-this.weekStartDay : 7-this.weekStartDay+weekday ;if(offset > 0){display_month--;if(display_month < 1){display_month = 12;display_year--;}display_date = daysinmonth[display_month]-offset+1;}var next_month = month+1;var next_month_year = year;if(next_month > 12){next_month=1;next_month_year++;}var last_month = month-1;var last_month_year = year;if(last_month < 1){last_month=12;last_month_year--;}var date_class;if(this.type!="WINDOW"){result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";}result += '<TR>\n';var refresh = 'javascript:'+windowref+'CP_refreshCalendar';if(this.isShowYearNavigation){result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refresh+'('+this.index+','+last_month+','+last_month_year+');"><</A></TD>';result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="58"><SPAN CLASS="'+this.cssPrefix+'cpMonthNavigation">'+this.monthNames[month-1]+'</SPAN></TD>';result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refresh+'('+this.index+','+next_month+','+next_month_year+');">></A></TD>';result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"> </TD>';result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="'+refresh+'('+this.index+','+month+','+(year-1)+');"><</A></TD>';if(this.isShowYearNavigationInput){result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="36"><INPUT NAME="cpYear" CLASS="'+this.cssPrefix+'cpYearNavigation" SIZE="4" MAXLENGTH="4" VALUE="'+year+'" onBlur="'+refresh+'('+this.index+','+month+',this.value-0);"></TD>';}else{result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="36"><SPAN CLASS="'+this.cssPrefix+'cpYearNavigation">'+year+'</SPAN></TD>';}result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="'+refresh+'('+this.index+','+month+','+(year+1)+');">></A></TD>';}else{result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refresh+'('+this.index+','+last_month+','+last_month_year+');"><<</A></TD>\n';result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="100"><SPAN CLASS="'+this.cssPrefix+'cpMonthNavigation">'+this.monthNames[month-1]+' '+year+'</SPAN></TD>\n';result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refresh+'('+this.index+','+next_month+','+next_month_year+');">>></A></TD>\n';}result += '</TR></TABLE>\n';result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=0 CELLPADDING=1 ALIGN=CENTER>\n';result += '<TR>\n';for(var j=0;j<7;j++){result += '<TD CLASS="'+this.cssPrefix+'cpDayColumnHeader" WIDTH="14%"><SPAN CLASS="'+this.cssPrefix+'cpDayColumnHeader">'+this.dayHeaders[(this.weekStartDay+j)%7]+'</TD>\n';}result += '</TR>\n';for(var row=1;row<=6;row++){result += '<TR>\n';for(var col=1;col<=7;col++){var disabled=false;if(this.disabledDatesExpression!=""){var ds=""+display_year+LZ(display_month)+LZ(display_date);eval("disabled=("+this.disabledDatesExpression+")");}var dateClass = "";if((display_month == this.currentDate.getMonth()+1) &&(display_date==this.currentDate.getDate()) &&(display_year==this.currentDate.getFullYear())){dateClass = "cpCurrentDate";}else if(display_month == month){dateClass = "cpCurrentMonthDate";}else{dateClass = "cpOtherMonthDate";}if(disabled || this.disabledWeekDays[col-1]){result += ' <TD CLASS="'+this.cssPrefix+dateClass+'"><SPAN CLASS="'+this.cssPrefix+dateClass+'Disabled">'+display_date+'</SPAN></TD>\n';}else{var selected_date = display_date;var selected_month = display_month;var selected_year = display_year;if(this.displayType=="week-end"){var d = new Date(selected_year,selected_month-1,selected_date,0,0,0,0);d.setDate(d.getDate() +(7-col));selected_year = d.getYear();if(selected_year < 1000){selected_year += 1900;}selected_month = d.getMonth()+1;selected_date = d.getDate();}result += ' <TD CLASS="'+this.cssPrefix+dateClass+'"><A HREF="javascript:'+windowref+this.returnFunction+'('+selected_year+','+selected_month+','+selected_date+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+this.cssPrefix+dateClass+'">'+display_date+'</A></TD>\n';}display_date++;if(display_date > daysinmonth[display_month]){display_date=1;display_month++;}if(display_month > 12){display_month=1;display_year++;}}result += '</TR>';}var current_weekday = now.getDay() - this.weekStartDay;if(current_weekday < 0){current_weekday += 7;}result += '<TR>\n';result += ' <TD COLSPAN=7 ALIGN=CENTER CLASS="'+this.cssPrefix+'cpTodayText">\n';if(this.disabledDatesExpression!=""){var ds=""+now.getFullYear()+LZ(now.getMonth()+1)+LZ(now.getDate());eval("disabled=("+this.disabledDatesExpression+")");}if(disabled || this.disabledWeekDays[current_weekday+1]){result += ' <SPAN CLASS="'+this.cssPrefix+'cpTodayTextDisabled">'+this.todayText+'</SPAN>\n';}else{result += ' <A CLASS="'+this.cssPrefix+'cpTodayText" HREF="javascript:'+windowref+this.returnFunction+'(\''+now.getFullYear()+'\',\''+(now.getMonth()+1)+'\',\''+now.getDate()+'\');'+windowref+'CP_hideCalendar(\''+this.index+'\');">'+this.todayText+'</A>\n';}result += ' <BR>\n';result += ' </TD></TR></TABLE></CENTER></TD></TR></TABLE>\n';}if(this.displayType=="month" || this.displayType=="quarter" || this.displayType=="year"){if(arguments.length > 0){var year = arguments[0];}else{if(this.displayType=="year"){var year = now.getFullYear()-this.yearSelectStartOffset;}else{var year = now.getFullYear();}}if(this.displayType!="year" && this.isShowYearNavigation){result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";result += '<TR>\n';result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year-1)+');"><<</A></TD>\n';result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="100">'+year+'</TD>\n';result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year+1)+');">>></A></TD>\n';result += '</TR></TABLE>\n';}}if(this.displayType=="month"){result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>\n';for(var i=0;i<4;i++){result += '<TR>';for(var j=0;j<3;j++){var monthindex =((i*3)+j);result += '<TD WIDTH=33% ALIGN=CENTER><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnMonthFunction+'('+year+','+(monthindex+1)+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">'+this.monthAbbreviations[monthindex]+'</A></TD>';}result += '</TR>';}result += '</TABLE></CENTER></TD></TR></TABLE>\n';}if(this.displayType=="quarter"){result += '<BR><TABLE WIDTH=120 BORDER=1 CELLSPACING=0 CELLPADDING=0 ALIGN=CENTER>\n';for(var i=0;i<2;i++){result += '<TR>';for(var j=0;j<2;j++){var quarter =((i*2)+j+1);result += '<TD WIDTH=50% ALIGN=CENTER><BR><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnQuarterFunction+'('+year+','+quarter+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">Q'+quarter+'</A><BR><BR></TD>';}result += '</TR>';}result += '</TABLE></CENTER></TD></TR></TABLE>\n';}if(this.displayType=="year"){var yearColumnSize = 4;result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";result += '<TR>\n';result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="50%"><A CLASS="cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year-(yearColumnSize*2))+');"><<</A></TD>\n';result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="50%"><A CLASS="cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year+(yearColumnSize*2))+');">>></A></TD>\n';result += '</TR></TABLE>\n';result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>\n';for(var i=0;i<yearColumnSize;i++){for(var j=0;j<2;j++){var currentyear = year+(j*yearColumnSize)+i;result += '<TD WIDTH=50% ALIGN=CENTER><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnYearFunction+'('+currentyear+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">'+currentyear+'</A></TD>';}result += '</TR>';}result += '</TABLE></CENTER></TD></TR></TABLE>\n';}if(this.type == "WINDOW"){result += "</BODY></HTML>\n";}return result;} + Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-advanced-field-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-advanced-field-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-advanced-field-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,164 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance" + exclude-result-prefixes="fi"> + <!--+ + | This stylesheet is designed to be included by 'forms-samples-styling.xsl'. + | It extends the 'forms-field-styling.xsl' with additional stylings. + | The very specific advanced stylings as the calendar or htmlarea (both + | also need additional JS files) are separated out of this file. + +--> + + <xsl:import href="forms-field-styling.xsl"/> + <xsl:include href="forms-calendar-styling.xsl"/> + <xsl:include href="forms-htmlarea-styling.xsl"/> + <!-- Location of the resources directory, where JS libs and icons are stored --> + <xsl:param name="resources-uri">resources</xsl:param> + + <xsl:template match="head" mode="forms-field"> + <xsl:apply-imports/> + <script src="{$resources-uri}/mattkruse-lib/AnchorPosition.js" type="text/javascript"/> + <script src="{$resources-uri}/mattkruse-lib/PopupWindow.js" type="text/javascript"/> + <script src="{$resources-uri}/mattkruse-lib/OptionTransfer.js" type="text/javascript"/> + <script src="{$resources-uri}/mattkruse-lib/selectbox.js" type="text/javascript"/> + <xsl:apply-templates select="." mode="forms-calendar"/> + <xsl:apply-templates select="." mode="forms-htmlarea"/> + </xsl:template> + + <xsl:template match="body" mode="forms-field"> + <xsl:apply-imports/> + <xsl:apply-templates select="." mode="forms-calendar"/> + <xsl:apply-templates select="." mode="forms-htmlarea"/> + </xsl:template> + + <!--+ This template should not be necessary as this stylesheet "inherits" + | all templates from 'forms-field-styling.xsl', but without it, it does + | not work for me (using Xalan 2.5.1). It's like adding all methods of + | a superclass in a subclass and calling everywhere only the super + | implementation. + +--> + <xsl:template match="*"> + <xsl:apply-imports/> + </xsl:template> + + <!--+ + | Add fi:help to the common stuff. + +--> + <xsl:template match="fi:*" mode="common"> + <xsl:apply-imports/> + <xsl:apply-templates select="fi:help"/> + </xsl:template> + + <!--+ + | + +--> + <xsl:template match="fi:help"> + <xsl:variable name="id" select="generate-id()"/> + <div class="forms-help" id="help{$id}" style="visibility:hidden; position:absolute;"> + <xsl:apply-templates select="node()"/> + </div> + <script type="text/javascript"> + var helpWin<xsl:value-of select="$id"/> = forms_createPopupWindow('help<xsl:value-of select="$id"/>'); + </script> + <a id="{$id}" name="{$id}" href="#" onclick="helpWin{$id}.showPopup('{$id}');return false;"><img border="0" src="{$resources-uri}/help.gif"/></a> + </xsl:template> + + <!--+ + | fi:multivaluefield with list-type='double-listbox' styling + +--> + <xsl:template match="fi:multivaluefield[fi:styling/@list-type='double-listbox']"> + <xsl:variable name="id" select="@id"/> + <xsl:variable name="values" select="fi:values/fi:value/text()"/> + + <span class="forms-doubleList" title="{fi:hint}"> + <table> + <xsl:if test="fi:styling/fi:available-label|fi:styling/fi:selected-label"> + <tr> + <th> + <xsl:copy-of select="fi:styling/fi:available-label/node()"/> + </th> + <th> </th> + <th> + <xsl:copy-of select="fi:styling/fi:selected-label/node()"/> + </th> + </tr> + </xsl:if> + <tr> + <td> + <!-- select for the unselected values --> + <select id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" multiple="multiple" + ondblclick="opt{generate-id()}.forms_transferRight()"> + <xsl:apply-templates select="." mode="styling"/> + <xsl:for-each select="fi:selection-list/fi:item"> + <xsl:variable name="value" select="@value"/> + <xsl:if test="not($values[. = $value])"> + <option value="{$value}"> + <xsl:copy-of select="fi:label/node()"/> + </option> + </xsl:if> + </xsl:for-each> + </select> + </td> + <td> + <!-- command buttons --> + <!-- strangely, IE adds an extra blank line if there only a button on a line. So we surround it with nbsp --> + <xsl:text> </xsl:text> + <input type="button" value=">" onclick="opt{generate-id()}.forms_transferRight()"/> + <xsl:text> </xsl:text> + <br/> + <xsl:text> </xsl:text> + <input type="button" value=">>" onclick="opt{generate-id()}.forms_transferAllRight()"/> + <xsl:text> </xsl:text> + <br/> + <xsl:text> </xsl:text> + <input type="button" value="<" onclick="opt{generate-id()}.forms_transferLeft()"/> + <xsl:text> </xsl:text> + <br/> + <xsl:text> </xsl:text> + <input type="button" value="<<" onclick="opt{generate-id()}.forms_transferAllLeft()"/> + <xsl:text> </xsl:text> + <br/> + <xsl:apply-templates select="." mode="common"/> + </td> + <td> + <!-- select for the selected values --> + <select id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" multiple="multiple" + ondblclick="opt{generate-id()}.forms_transferLeft()" > + <xsl:apply-templates select="." mode="styling"/> + <xsl:for-each select="fi:selection-list/fi:item"> + <xsl:variable name="value" select="@value"/> + <xsl:if test="$values[. = $value]"> + <option value="{$value}"> + <xsl:copy-of select="fi:label/node()"/> + </option> + </xsl:if> + </xsl:for-each> + </select> + </td> + </tr> + </table> + <script type="text/javascript"> + var opt<xsl:value-of select="generate-id()"/> = forms_createOptionTransfer('<xsl:value-of select="@id"/>', <xsl:value-of select="fi:styling/@submit-on-change = 'true'"/>); + </script> + </span> + </xsl:template> + + <xsl:template match="fi:multivaluefield/fi:[EMAIL PROTECTED]'double-listbox']/@submit-on-change" mode="styling"/> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-calendar-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-calendar-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-calendar-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,80 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance" + exclude-result-prefixes="fi"> + <!--+ + | This stylesheet is designed to be included by 'forms-advanced-styling.xsl'. + +--> + + <!-- Location of the resources directory, where JS libs and icons are stored --> + <xsl:param name="resources-uri">resources</xsl:param> + + <xsl:template match="head" mode="forms-calendar"> + <script src="{$resources-uri}/mattkruse-lib/CalendarPopup.js" type="text/javascript"/> + <script src="{$resources-uri}/mattkruse-lib/date.js" type="text/javascript"/> + <script type="text/javascript"> + // Setup calendar + var forms_calendar = CalendarPopup('forms_calendarDiv'); + forms_calendar.setWeekStartDay(1); + forms_calendar.showYearNavigation(); + forms_calendar.showYearNavigationInput(); + forms_calendar.setCssPrefix("forms_"); + </script> + <link rel="stylesheet" type="text/css" href="{$resources-uri}/forms-calendar.css"/> + </xsl:template> + + <xsl:template match="body" mode="forms-calendar"> + <div id="forms_calendarDiv"/> + </xsl:template> + + <!--+ + | fi:field with either + | - explicit styling @type = 'date' or + | - implicit if no styling @type is specified, + | but datatype @type = 'date', selection lists must be excluded here + +--> + <xsl:template match="fi:field[fi:styling/@type='date'] | + fi:field[not(fi:styling/@type)][fi:[EMAIL PROTECTED]'date']][not(fi:selection-list)]"> + <xsl:variable name="id" select="generate-id()"/> + + <xsl:variable name="format"> + <xsl:choose> + <xsl:when test="fi:[EMAIL PROTECTED]'date']/fi:convertor/@pattern"> + <xsl:value-of select="fi:[EMAIL PROTECTED]'date']/fi:convertor/@pattern"/> + </xsl:when> + <xsl:otherwise>yyyy-MM-dd</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <!-- regular input --> + <input id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" value="{fi:value}" title="{normalize-space(fi:hint)}" type="text"> + <xsl:apply-templates select="." mode="styling"/> + </input> + + <!-- calendar popup --> + <a href="#" name="{$id}" id="{$id}" + onClick="forms_calendar.select(forms_getForm(this)['[EMAIL PROTECTED]'],'{$id}','{$format}'); return false;"> + <img src="{$resources-uri}/cal.gif" border="0" alt="Calendar"/> + </a> + + <!-- common stuff --> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-field-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-field-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-field-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,522 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance" + exclude-result-prefixes="fi"> + <!--+ + | This stylesheet is designed to be included by 'forms-samples-styling.xsl'. + | Version CVS $Id$ + +--> + + <!-- Location of the resources directory, where JS libs and icons are stored --> + <xsl:param name="resources-uri">resources</xsl:param> + + <xsl:template match="head" mode="forms-field"> + <script src="{$resources-uri}/forms-lib.js" type="text/javascript"/> + <link rel="stylesheet" type="text/css" href="{$resources-uri}/forms.css"/> + </xsl:template> + + <xsl:template match="body" mode="forms-field"> + <xsl:copy-of select="@*"/> + <xsl:attribute name="onload">forms_onload(); <xsl:value-of select="@onload"/></xsl:attribute> + </xsl:template> + + <!--+ + | Generic fi:field : produce an <input> + +--> + <xsl:template match="fi:field"> + <input name="[EMAIL PROTECTED]" id="[EMAIL PROTECTED]" value="{fi:value}" title="{fi:hint}" type="text"> + <xsl:apply-templates select="." mode="styling"/> + </input> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | Common stuff like fi:validation-message, @required. + +--> + <xsl:template match="fi:*" mode="common"> + <!-- validation message --> + <xsl:apply-templates select="fi:validation-message"/> + <!-- required mark --> + <xsl:if test="@required='true'"> + <span class="forms-field-required"> * </span> + </xsl:if> + </xsl:template> + + <!--+ + | Handling the common styling. You may only add attributes to the output + | in this template as later processing might add attributes too, for + | example @checked or @selected + +--> + <xsl:template match="fi:*" mode="styling"> + <xsl:apply-templates select="fi:styling/@*" mode="styling"/> + + <!--+ + | @listbox-size needs to be handled separately as even if it is not + | specified some output (@size) must be generated. + +--> + <xsl:if test="self::fi:field[fi:selection-list][fi:styling/@list-type = 'listbox'] or + self::fi:multivaluefield[not(fi:styling/@list-type = 'checkbox')]"> + <xsl:variable name="size"> + <xsl:value-of select="fi:styling/@listbox-size"/> + <xsl:if test="not(fi:styling/@listbox-size)">5</xsl:if> + </xsl:variable> + <xsl:attribute name="size"> + <xsl:value-of select="$size"/> + </xsl:attribute> + </xsl:if> + </xsl:template> + + <xsl:template match="fi:styling/@*" mode="styling"> + <xsl:copy-of select="."/> + </xsl:template> + + <xsl:template match="fi:styling/@submit-on-change" mode="styling"> + <xsl:if test=". = 'true'"> + <xsl:attribute name="onchange">forms_submitForm(this)</xsl:attribute> + </xsl:if> + </xsl:template> + + <xsl:template match="fi:styling/@list-type | fi:styling/@list-orientation | + fi:styling/@listbox-size | fi:styling/@format | fi:styling/@layout" + mode="styling"> + <!--+ + | Ignore marker attributes so they don't go into the resuling HTML. + +--> + </xsl:template> + + <xsl:template match="fi:styling/@type" mode="styling"> + <!--+ + | Do we have a duplicate semantic usage of @type? + | @type is only a marker for the stylesheet in general, but some of the + | types must/should be in the HTML output too. + +--> + <xsl:variable name="validHTMLTypes" + select="'text hidden textarea checkbox radio password image reset submit'"/> + <xsl:if test="normalize-space(.) and + contains(concat(' ', $validHTMLTypes, ' '), concat(' ', ., ' '))"> + <xsl:copy-of select="."/> + </xsl:if> + </xsl:template> + + <!--+ + | + +--> + <xsl:template match="fi:validation-message"> + <a href="#" class="forms-validation-message" onclick="alert('{normalize-space(.)}');return false;"> ! </a> + </xsl:template> + + <!--+ + | Hidden fi:field : produce input with type='hidden' + +--> + <xsl:template match="fi:field[fi:styling/@type='hidden']" priority="2"> + <input type="hidden" name="[EMAIL PROTECTED]" id="[EMAIL PROTECTED]" value="{fi:value}"> + <xsl:apply-templates select="." mode="styling"/> + </input> + </xsl:template> + + <!--+ + | fi:field with a selection list and @list-type 'radio' : produce + | radio-buttons oriented according to @list-orientation + | ("horizontal" or "vertical" - default) + +--> + <xsl:template match="fi:field[fi:selection-list][fi:styling/@list-type='radio']" priority="2"> + <xsl:variable name="id" select="@id"/> + <xsl:variable name="value" select="fi:value"/> + <xsl:variable name="vertical" select="string(fi:styling/@list-orientation) != 'horizontal'"/> + <xsl:choose> + <xsl:when test="$vertical"> + <table cellpadding="0" cellspacing="0" border="0" title="{fi:hint}"> + <xsl:for-each select="fi:selection-list/fi:item"> + <tr> + <td> + <input type="radio" id="{generate-id()}" name="{$id}" value="[EMAIL PROTECTED]"> + <xsl:if test="@value = $value"> + <xsl:attribute name="checked">checked</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="." mode="styling"/> + </input> + </td> + <td> + <label for="{generate-id()}"><xsl:copy-of select="fi:label/node()"/></label> + </td> + <xsl:if test="position() = 1"> + <td rowspan="{count(../fi:item)}"> + <xsl:apply-templates select="../.." mode="common"/> + </td> + </xsl:if> + </tr> + </xsl:for-each> + </table> + </xsl:when> + <xsl:otherwise> + <span title="{fi:hint}"> + <xsl:for-each select="fi:selection-list/fi:item"> + <input type="radio" id="{generate-id()}" name="{$id}" value="[EMAIL PROTECTED]"> + <xsl:if test="@value = $value"> + <xsl:attribute name="checked">checked</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="." mode="styling"/> + </input> + <label for="{generate-id()}"><xsl:copy-of select="fi:label/node()"/></label> + </xsl:for-each> + </span> + <xsl:apply-templates select="." mode="common"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!--+ + | fi:field with a selection list (not 'radio' style) + | Rendering depends on the attributes of fi:styling : + | - if @list-type is "listbox" : produce a list box with @listbox-size visible + | items (default 5) + | - otherwise, produce a dropdown menu + +--> + <xsl:template match="fi:field[fi:selection-list]" priority="1"> + <xsl:variable name="value" select="fi:value"/> + + <!-- dropdown or listbox --> + <select title="{fi:hint}" id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]"> + <xsl:apply-templates select="." mode="styling"/> + <xsl:for-each select="fi:selection-list/fi:item"> + <option value="[EMAIL PROTECTED]"> + <xsl:if test="@value = $value"> + <xsl:attribute name="selected">selected</xsl:attribute> + </xsl:if> + <xsl:copy-of select="fi:label/node()"/> + </option> + </xsl:for-each> + </select> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:field with a selection list and @type 'output' + +--> + <xsl:template match="fi:field[fi:selection-list][fi:styling/@type='output']" priority="3"> + <xsl:variable name="value" select="fi:value"/> + <xsl:variable name="selected" select="fi:selection-list/fi:[EMAIL PROTECTED] = $value]"/> + <xsl:choose> + <xsl:when test="$selected/fi:label"> + <xsl:apply-templates select="$selected/fi:label"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$value"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!--+ + | fi:field with @type 'textarea' + +--> + <xsl:template match="fi:field[fi:styling/@type='textarea']"> + <textarea id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" title="{fi:hint}"> + <xsl:apply-templates select="." mode="styling"/> + <!-- remove carriage-returns (occurs on certain versions of IE and doubles linebreaks at each submit) --> + <xsl:copy-of select="translate(fi:value/node(), ' ', '')"/> + </textarea> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:field with @type 'output' and fi:output are both rendered as text + +--> + <xsl:template match="fi:output | fi:field[fi:styling/@type='output']" priority="2"> + <xsl:copy-of select="fi:value/node()"/> + </xsl:template> + + <!--+ + | Labels for form elements. + +--> + <xsl:template match="fi:*" mode="label"> + <label for="[EMAIL PROTECTED]" title="{fi:hint}"> + <xsl:copy-of select="fi:label/node()"/> + </label> + </xsl:template> + + <!--+ + | Labels for pure outputs must not contain <label/> as there is no element to point to. + +--> + <xsl:template match="fi:output | fi:field[fi:styling/@type='output']" mode="label"> + <xsl:copy-of select="fi:label/node()"/> + </xsl:template> + + <!--+ + | fi:booleanfield : produce a checkbox + +--> + <xsl:template match="fi:booleanfield"> + <input id="[EMAIL PROTECTED]" type="checkbox" value="true" name="[EMAIL PROTECTED]" title="{fi:hint}"> + <xsl:apply-templates select="." mode="styling"/> + <xsl:if test="fi:value = 'true'"> + <xsl:attribute name="checked">checked</xsl:attribute> + </xsl:if> + </input> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:booleanfield with @type 'output' : rendered as text + +--> + <xsl:template match="fi:booleanfield[fi:styling/@type='output']"> + <xsl:choose> + <xsl:when test="fi:value = 'true'"> + yes + </xsl:when> + <xsl:otherwise> + no + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!--+ + | fi:action + +--> + <xsl:template match="fi:action"> + <input id="[EMAIL PROTECTED]" type="submit" name="[EMAIL PROTECTED]" title="{fi:hint}"> + <xsl:attribute name="value"><xsl:value-of select="fi:label/node()"/></xsl:attribute> + <xsl:apply-templates select="." mode="styling"/> + </input> + </xsl:template> + + <!--+ + | fi:continuation-id : produce a hidden "continuation-id" input + +--> + <xsl:template match="fi:continuation-id"> + <xsl:variable name="name"> + <xsl:value-of select="@name"/> + <xsl:if test="not(@name)">continuation-id</xsl:if> + </xsl:variable> + <input name="{$name}" type="hidden" value="{.}"/> + </xsl:template> + + <!--+ + | fi:multivaluefield : produce a list of checkboxes + +--> + <xsl:template match="fi:multivaluefield[fi:styling/@list-type='checkbox']"> + <xsl:variable name="id" select="@id"/> + <xsl:variable name="values" select="fi:values/fi:value/text()"/> + + <span title="{fi:hint}"> + <xsl:for-each select="fi:selection-list/fi:item"> + <xsl:variable name="value" select="@value"/> + <input id="{generate-id()}" type="checkbox" value="[EMAIL PROTECTED]" name="{$id}"> + <xsl:if test="$values[. = $value]"> + <xsl:attribute name="checked">checked</xsl:attribute> + </xsl:if> + </input> + <label for="{generate-id()}"><xsl:copy-of select="fi:label/node()"/></label> + <br/> + </xsl:for-each> + </span> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:multivaluefield : produce a multiple-selection list + +--> + <xsl:template match="fi:multivaluefield"> + <xsl:variable name="id" select="@id"/> + <xsl:variable name="values" select="fi:values/fi:value/text()"/> + + <span title="{fi:hint}"> + <select id="[EMAIL PROTECTED]" name="{$id}" multiple="multiple"> + <xsl:apply-templates select="." mode="styling"/> + <xsl:for-each select="fi:selection-list/fi:item"> + <xsl:variable name="value" select="@value"/> + <option value="{$value}"> + <xsl:if test="$values[. = $value]"> + <xsl:attribute name="selected">selected</xsl:attribute> + </xsl:if> + <xsl:copy-of select="fi:label/node()"/> + </option> + </xsl:for-each> + </select> + </span> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:upload + +--> + <xsl:template match="fi:upload"> + <xsl:choose> + <xsl:when test="fi:value"> + <!-- Has a value (filename): display it with a change button --> + <span title="{fi:hint}"> + [<xsl:value-of select="fi:value"/>] <input type="submit" id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" value="..."/> + </span> + </xsl:when> + <xsl:otherwise> + <input type="file" id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" title="{fi:hint}" accept="[EMAIL PROTECTED]"/> + </xsl:otherwise> + </xsl:choose> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:repeater + +--> + <xsl:template match="fi:repeater"> + <input type="hidden" name="[EMAIL PROTECTED]" value="[EMAIL PROTECTED]"/> + <table border="1"> + <tr> + <xsl:for-each select="fi:headings/fi:heading"> + <th><xsl:value-of select="."/></th> + </xsl:for-each> + </tr> + <xsl:apply-templates select="fi:repeater-row"/> + </table> + </xsl:template> + + <!--+ + | fi:repeater-row + +--> + <xsl:template match="fi:repeater-row"> + <tr> + <xsl:for-each select="*"> + <td> + <xsl:apply-templates select="."/> + </td> + </xsl:for-each> + </tr> + </xsl:template> + + <!--+ + | fi:repeater-size + +--> + <xsl:template match="fi:repeater-size"> + <input type="hidden" name="[EMAIL PROTECTED]" value="[EMAIL PROTECTED]"/> + </xsl:template> + + <!--+ + | fi:form-template|fi:form-generated + +--> + <xsl:template match="fi:form-template|fi:form-generated"> + <form> + <xsl:copy-of select="@*"/> + <xsl:attribute name="onsubmit">forms_onsubmit(); <xsl:value-of select="@onsubmit"/></xsl:attribute> + <!-- hidden field to store the submit id --> + <div><input type="hidden" name="forms_submit_id"/></div> + <xsl:apply-templates/> + + <!-- TODO: consider putting this in the xml stream from the generator? --> + <xsl:if test="self::fi:form-generated"> + <input type="submit"/> + </xsl:if> + </form> + </xsl:template> + + <!--+ + | fi:form + +--> + <xsl:template match="fi:form"> + <table border="1"> + <xsl:for-each select="fi:widgets/*"> + <tr> + <xsl:choose> + <xsl:when test="self::fi:repeater"> + <td colspan="2"> + <xsl:apply-templates select="."/> + </td> + </xsl:when> + <xsl:when test="self::fi:booleanfield"> + <td> </td> + <td> + <xsl:apply-templates select="."/> + <xsl:text> </xsl:text> + <xsl:copy-of select="fi:label"/> + </td> + </xsl:when> + <xsl:otherwise> + <td> + <xsl:copy-of select="fi:label"/> + </td> + <td> + <xsl:apply-templates select="."/> + </td> + </xsl:otherwise> + </xsl:choose> + </tr> + </xsl:for-each> + </table> + </xsl:template> + + <xsl:template match="fi:aggregatefield"> + <input id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" value="{fi:value}" title="{fi:hint}"> + <xsl:apply-templates select="." mode="styling"/> + </input> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <xsl:template match="fi:messages"> + <xsl:if test="fi:message"> + <xsl:copy-of select="fi:label/node()"/>: + <ul> + <xsl:for-each select="fi:message"> + <li><xsl:apply-templates/></li> + </xsl:for-each> + </ul> + </xsl:if> + </xsl:template> + + <xsl:template match="fi:validation-errors"> + <xsl:variable name="header"> + <xsl:choose> + <xsl:when test="header"> + <xsl:copy-of select="header"/> + </xsl:when> + <xsl:otherwise> + <p class="forms-validation-errors">The following errors have been detected (marked with !):</p> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="footer"> + <xsl:choose> + <xsl:when test="footer"> + <xsl:copy-of select="footer"/> + </xsl:when> + <xsl:otherwise> + <p class="forms-validation-errors">Please, correct them and re-submit the form.</p> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="frm" select="ancestor::fi:form-template"/> + <xsl:if test="$frm and $frm//fi:validation-message"> + <xsl:copy-of select="$header"/> + <ul> + <xsl:for-each select="$frm//fi:validation-message"> + <li class="forms-validation-error"> + <xsl:if test="../fi:label"> + <xsl:value-of select="../fi:label"/><xsl:text>: </xsl:text> + </xsl:if> + <xsl:value-of select="."/> + </li> + </xsl:for-each> + </ul> + <xsl:copy-of select="$footer"/> + </xsl:if> + </xsl:template> + + <xsl:template match="@*|node()" priority="-1"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-htmlarea-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-htmlarea-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-htmlarea-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,69 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance" + exclude-result-prefixes="fi"> + <!--+ + | This stylesheet is designed to be included by 'forms-advanced-styling.xsl'. + +--> + + <!-- Location of the resources directory, where JS libs and icons are stored --> + <xsl:param name="resources-uri">resources</xsl:param> + <xsl:param name="htmlarea-lang">en</xsl:param> + + <xsl:template match="head" mode="forms-htmlarea"> + <script type="text/javascript"> + _editor_url = "<xsl:value-of select="concat($resources-uri, '/htmlarea/')"/>"; + _editor_lang = "<xsl:value-of select="$htmlarea-lang"/>"; + </script> + <script type="text/javascript" src="{$resources-uri}/htmlarea/htmlarea.js"></script> + </xsl:template> + + <xsl:template match="body" mode="forms-htmlarea"/> + + <!--+ + | fi:field with @type 'htmlarea' + +--> + <xsl:template match="fi:field[fi:[EMAIL PROTECTED]'htmlarea']]"> + <textarea id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" title="{fi:hint}"> + <xsl:apply-templates select="." mode="styling"/> + <!-- remove carriage-returns (occurs on certain versions of IE and doubles linebreaks at each submit) --> + <xsl:apply-templates select="fi:value/node()" mode="htmlarea-copy"/> + </textarea> + <xsl:apply-templates select="." mode="common"/> + <xsl:choose> + <xsl:when test="fi:styling/initFunction"> + <script language="JavaScript"><xsl:value-of select="fi:styling/initFunction"/>('<xsl:value-of select="@id"/>');</script> + </xsl:when> + <xsl:otherwise> + <script language="JavaScript">HTMLArea.replace('<xsl:value-of select="@id"/>');</script> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="@*|*" mode="htmlarea-copy"> + <xsl:copy> + <xsl:apply-templates select="@*|node()" mode="htmlarea-copy"/> + </xsl:copy> + </xsl:template> + + <xsl:template match="text()" mode="htmlarea-copy"> + <xsl:copy-of select="translate(., ' ', '')"/> + </xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-page-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-page-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-page-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,331 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance" + exclude-result-prefixes="fi"> + <!--+ + | This stylesheet is designed to be included by 'forms-samples-styling.xsl'. + +--> + <xsl:template match="head" mode="forms-page"> + <!--+ 'forms-page-styling.xsl' relies on 'forms-field-styling.xsl' for the + | inclusion of the correct JS and CSS files. To fix it, we have to + | separate the page specific parts into their own files. + +--> + </xsl:template> + + <xsl:template match="body" mode="forms-page"/> + + <!-- + fi:group : default is to enclose items in a div + --> + <xsl:template match="fi:group"> + <div title="{fi:hint}"> + <xsl:copy-of select="@*"/> + <xsl:apply-templates mode="group-layout" select="."/> + </div> + </xsl:template> + + <!-- + fi:group of type tabs + --> + <xsl:template match="fi:group[fi:styling/@type='tabs']"> + <!-- find the currently selected tab. + Thoughts still needed here, such as autogenerating a field in the + forms transformer to hold this state. + --> + <xsl:variable name="active"> + <xsl:variable name="value" select="normalize-space(fi:state/fi:*/fi:value)"/> + <xsl:choose> + <xsl:when test="$value"> + <xsl:value-of select="$value"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <!-- copy the "state-widget" attribute for use in for-each --> + <xsl:variable name="state-widget" select="fi:state/fi:*/@id"/> + <xsl:variable name="id" select="generate-id()"/> + + <div id="{$id}" title="{fi:hint}"> + <!-- add an hidden input for the state --> + <xsl:if test="$state-widget"> + <input type="hidden" name="{$state-widget}" value="{$active}"/> + </xsl:if> + <!-- div containing the tabs --> + <div class="forms-tabArea"> + <xsl:for-each select="fi:items/fi:*"> + <xsl:variable name="pos" select="position() - 1"/> + <span id="{$id}_tab_{$pos}" onclick="forms_showTab('{$id}', {$pos}, {last()}, '{$state-widget}')"> + <xsl:attribute name="class"> + <xsl:text>forms-tab</xsl:text> + <xsl:if test="$active = $pos"> forms-activeTab</xsl:if> + </xsl:attribute> + <xsl:copy-of select="fi:label/node()"/> + <xsl:if test="fi:items/*//fi:validation-message"> + <span class="forms-validation-message"> ! </span> + </xsl:if> + </span> + </xsl:for-each> + </div> + <!-- a div for each of the items --> + <xsl:for-each select="fi:items/fi:*"> + <xsl:variable name="pos" select="position() - 1"/> + <div class="forms-tabContent" id="{$id}_items_{$pos}"> + <xsl:if test="$active != $pos"> + <xsl:attribute name="style">display:none</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="."/> + </div> + </xsl:for-each> + </div> + </xsl:template> + + <!-- + fi:group of type choice : a popup is used instead of tabs + --> + <xsl:template match="fi:group[fi:styling/@type='choice']"> + <!-- find the currently selected tab. + Thoughts still needed here, such as autogenerating a field in the formstransformer + to hold this state. + --> + <xsl:variable name="active"> + <xsl:variable name="value" select="normalize-space(fi:state/fi:*/fi:value)"/> + <xsl:choose> + <xsl:when test="$value"> + <xsl:value-of select="$value"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <!-- copy the "state-widget" attribute for use in for-each --> + <xsl:variable name="state-widget" select="fi:state/fi:*/@id"/> + <xsl:variable name="id" select="generate-id()"/> + + <fieldset id="{$id}"> + <legend title="{fi:hint}"> + <xsl:apply-templates select="fi:label/node()"/> + <select name="{$state-widget}" onchange="forms_showTab('{$id}', this.selectedIndex, {count(fi:items/*)}, '{$state-widget}')"> + <xsl:for-each select="fi:items/fi:*"> + <xsl:variable name="pos" select="position() - 1"/> + <option> + <xsl:attribute name="value"> + <xsl:choose> + <xsl:when test="fi:value"> + <xsl:value-of select="fi:value"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$pos"/> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:if test="$active = $pos"> + <xsl:attribute name="selected">selected</xsl:attribute> + </xsl:if> + <xsl:copy-of select="fi:label/node()"/> + </option> + </xsl:for-each> + </select> + <xsl:if test="fi:items/*//fi:validation-message"> + <span class="forms-validation-message"> ! </span> + </xsl:if> + </legend> + <!-- a div for each of the items --> + <xsl:for-each select="fi:items/fi:*"> + <xsl:variable name="pos" select="position() - 1"/> + <div id="{$id}_items_{$pos}"> + <xsl:if test="$active != $pos"> + <xsl:attribute name="style">display:none</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="."/> + </div> + </xsl:for-each> + </fieldset> + </xsl:template> + + <!-- + fi:group of type fieldset : enclose items in a fieldset frame + --> + <xsl:template match="fi:group[fi:styling/@type='fieldset']"> + <fieldset> + <xsl:apply-templates select="." mode="styling"/> + <legend title="{fi:hint}"><xsl:copy-of select="fi:label/node()"/></legend> + <xsl:apply-templates mode="group-layout" select="."/> + </fieldset> + </xsl:template> + + <!-- + Group items layout : default is no layout + --> + <xsl:template match="fi:group" mode="group-layout"> + <xsl:apply-templates select="fi:items/*"/> + </xsl:template> + + <!-- + Column group items layout + --> + <xsl:template match="fi:group[fi:styling/@layout='column']" mode="group-layout"> + <table border="0" summary="{fi:hint}"> + <tbody> + <xsl:apply-templates select="fi:items/*" mode="group-column-content"/> + </tbody> + </table> + </xsl:template> + + <!-- + Default column layout : label above and input below + --> + <xsl:template match="fi:*" mode="group-column-content"> + <tr> + <td><xsl:apply-templates select="." mode="label"/></td> + </tr> + <tr> + <td><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <xsl:template match="fi:action" mode="group-column-content"> + <tr> + <td><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <!-- + Columns group items layout + --> + <xsl:template match="fi:group[fi:styling/@layout='columns']" mode="group-layout"> + <table border="0" summary="{fi:hint}"> + <tbody> + <xsl:apply-templates select="fi:items/*" mode="group-columns-content"/> + </tbody> + </table> + </xsl:template> + + <!-- + Default columns layout : label left and input right + --> + <xsl:template match="fi:*" mode="group-columns-content"> + <tr> + <td><xsl:apply-templates select="." mode="label"/></td> + <td><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <!-- + Row group items layout + --> + <xsl:template match="fi:group[fi:styling/@layout='row']" mode="group-layout"> + <table border="0" summary="{fi:hint}"> + <tbody> + <tr> + <xsl:apply-templates select="fi:items/*" mode="group-row-content"/> + </tr> + </tbody> + </table> + </xsl:template> + + <!-- + Default row layout : label left and input right + --> + <xsl:template match="fi:*" mode="group-row-content"> + <td><xsl:apply-templates select="." mode="label"/></td> + <td><xsl:apply-templates select="."/></td> + </xsl:template> + + <xsl:template match="fi:action" mode="group-row-content"> + <td><xsl:apply-templates select="."/></td> + </xsl:template> + <!-- + Rows group items layout + --> + <xsl:template match="fi:group[fi:styling/@layout='rows']" mode="group-layout"> + <table border="0" summary="{fi:hint}"> + <tbody> + <tr> + <xsl:apply-templates select="fi:items/*" mode="group-rows-labels"/> + </tr> + <tr> + <xsl:apply-templates select="fi:items/*" mode="group-rows-content"/> + </tr> + </tbody> + </table> + </xsl:template> + + <!-- + Default rows layout : label above and input below + --> + <xsl:template match="fi:*" mode="group-rows-labels"> + <td><xsl:apply-templates select="." mode="label"/></td> + </xsl:template> + + <xsl:template match="fi:action" mode="group-rows-labels"> + <td> </td> + </xsl:template> + + <xsl:template match="fi:*" mode="group-rows-content"> + <td><xsl:apply-templates select="."/></td> + </xsl:template> + + <!-- boolean field : checkbox and label on a single line --> + <xsl:template match="fi:booleanfield" mode="group-columns-content"> + <tr> + <td colspan="2"> + <xsl:apply-templates select="."/> + <xsl:apply-templates select="." mode="label"/> + </td> + </tr> + </xsl:template> + + <!-- action : on a single line --> + <xsl:template match="fi:action" mode="group-columns-content"> + <tr> + <td colspan="2"><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <!-- any other element : on a single line --> + <xsl:template match="*" mode="group-columns-content"> + <tr> + <td colspan="2"><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <!-- double-list multivaluefield : lists under the label --> + <xsl:template match="fi:multivaluefield[fi:styling/@list-type='double-listbox']" + mode="group-columns-content"> + <tr> + <td colspan="2"><xsl:apply-templates select="." mode="label"/></td> + </tr> + <tr> + <td colspan="2"><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <!-- nested group --> + <xsl:template match="fi:group" mode="group-columns-content"> + <tr> + <td colspan="2"><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <xsl:template match="@*|node()" priority="-1"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/forms-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + + <!--+ Include styling stylesheets, one for the widgets, the other one for the + | page. As 'forms-advanced-field-styling.xsl' is a specialization of + | 'forms-field-styling.xsl' the latter one is imported there. If you don't + | want advanced styling of widgets, change it here! + | See xsl:include as composition and xsl:import as extension/inheritance. + +--> + <xsl:include href="forms-page-styling.xsl"/> + <xsl:include href="forms-advanced-field-styling.xsl"/> + + <xsl:template match="head"> + <head> + <xsl:apply-templates/> + <xsl:apply-templates select="." mode="forms-page"/> + <xsl:apply-templates select="." mode="forms-field"/> + </head> + </xsl:template> + + <xsl:template match="body"> + <body> + <!--+ !!! If template with mode 'forms-page' adds text or elements + | template with mode 'forms-field' can no longer add attributes!!! + +--> + <xsl:apply-templates select="." mode="forms-page"/> + <xsl:apply-templates select="." mode="forms-field"/> + <xsl:apply-templates/> + </body> + </xsl:template> + +</xsl:stylesheet> Modified: cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/portal-page.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/portal-page.xsl?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/portal-page.xsl&r1=148908&p2=cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/portal-page.xsl&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/portal-page.xsl (original) +++ cocoon/trunk/src/blocks/portal/samples/skins/basic/styles/portal-page.xsl Fri Jan 28 09:54:58 2005 @@ -1,6 +1,6 @@ <?xml version="1.0"?> <!-- - Copyright 1999-2004 The Apache Software Foundation + Copyright 1999-2005 The Apache Software Foundation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,14 +14,22 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!-- SVN $Id:$ --> +<!-- SVN $Id$ --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="user"/> + +<xsl:param name="base"/> + <xsl:template match="/"> <html> <head> + <xsl:if test="$base"> + <base> + <xsl:attribute name="href"><xsl:value-of select="$base"/></xsl:attribute> + </base> + </xsl:if> <link type="text/css" rel="stylesheet" href="css/page.css"/> </head> <body> @@ -47,6 +55,9 @@ <xsl:if test="$user!='anonymous'"> <a href="logout" style="color:#4C6C8F;font-size:75%;"> Logout + </a><br/> + <a href="tools/" style="color:#4C6C8F;font-size:75%;"> + Tools </a> </xsl:if> </td> Added: cocoon/trunk/src/blocks/portal/samples/skins/common/css/forms-calendar.css Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/css/forms-calendar.css?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/css/forms-calendar.css Fri Jan 28 09:54:58 2005 @@ -0,0 +1,92 @@ +/* +* Copyright 1999-2004 The Apache Software Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +#forms_calendarDiv { + position: absolute; + visibility: hidden; + background-color: white; + layer-background-color: white; +} + +.forms_cpYearNavigation, .forms_cpMonthNavigation { + background-color:#C0C0C0; + text-align:center; + vertical-align:center; + text-decoration:none; + color:#000000; + font-weight:bold; +} + +.forms_cpDayColumnHeader, .forms_cpYearNavigation, .forms_cpMonthNavigation, .forms_cpCurrentMonthDate, .forms_cpCurrentMonthDateDisabled, .forms_cpOtherMonthDate, .forms_cpOtherMonthDateDisabled, .forms_cpCurrentDate, .forms_cpCurrentDateDisabled, .forms_cpTodayText, .forms_cpTodayTextDisabled, .forms_cpText { + font-family:arial; + font-size:8pt; +} + +TD.forms_cpDayColumnHeader { + text-align:right; + border:solid thin #C0C0C0; + border-width:0 0 19 0; +} + +.forms_cpCurrentMonthDate, .forms_cpOtherMonthDate, .forms_cpCurrentDate { + text-align:right; + text-decoration:none; +} + +.forms_cpCurrentMonthDateDisabled, .forms_cpOtherMonthDateDisabled, .forms_cpCurrentDateDisabled { + color:#D0D0D0; + text-align:right; + text-decoration:line-through; +} + +.forms_cpCurrentMonthDate, .forms_cpCurrentDate { + color:#000000; +} + +.forms_cpOtherMonthDate { + color:#808080; +} + +TD.forms_cpCurrentDate { + color:white; background-color: #C0C0C0; + border-width:1; + border:solid thin #800000; +} + +TD.forms_cpCurrentDateDisabled { + border-width:1; + border:solid thin #FFAAAA; +} + +TD.forms_cpTodayText, TD.forms_cpTodayTextDisabled { + border:solid thin #C0C0C0; + border-width:1 0 0 0; +} + +A.forms_cpTodayText, SPAN.forms_cpTodayTextDisabled { + height:20px; +} + +A.forms_cpTodayText { + color:black; +} + +.forms_cpTodayTextDisabled { + color:#D0D0D0; +} + +.forms_cpBorder { + border:solid thin #808080; +} Added: cocoon/trunk/src/blocks/portal/samples/skins/common/css/forms.css Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/css/forms.css?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/css/forms.css Fri Jan 28 09:54:58 2005 @@ -0,0 +1,75 @@ +/* +* Copyright 1999-2004 The Apache Software Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +.forms-tab { + background-color: white; + border: 1px solid black; + border-bottom-width: 0px; + padding: 2px 1em 2px 1em; + margin-right: 5px; + position: relative; + text-decoration: none; + top: -1px; + z-index: 1; + cursor: pointer; +} + +.forms-tab.forms-activeTab { + font-weight: bold; + padding-top: 5px; + cursor: default; + z-index: 3; +} + +.forms-tabContent { + background-color: white; + border: 1px solid black; + padding: 1em; + position: relative; + z-index: 2; +} + +.forms-validation-message, a.forms-validation-message:link { + color: red; + font-weight: bold; +} + +.forms-validation-errors { +} + +.forms-validation-error { +} + +.forms-field-required { + color:blue; + font-weight: bold; +} + +.forms-help { + border-style: dotted; + border-width: 1px; + padding: 5px; + background-color:#FFFFC0; /* light yellow */ + width: 200px; /* otherwise IE does a weird layout */ + z-index:1000; /* must be higher than forms-tabContent */ +} + +.forms-doubleList select { + width: 150px; +} + +.forms-doubleList input { + width: 40px; +} Added: cocoon/trunk/src/blocks/portal/samples/skins/common/images/cal.gif Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/images/cal.gif?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/skins/common/js/forms-lib.js Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/js/forms-lib.js?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/js/forms-lib.js Fri Jan 28 09:54:58 2005 @@ -0,0 +1,186 @@ +/* +* Copyright 1999-2004 The Apache Software Foundation +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +/** + * Runtime JavaScript library for Cocoon forms. + * + * @author <a href="http://www.apache.org/~sylvain/">Sylvain Wallez</a> + * @version CVS $Id$ + */ + +// Handlers that are to be called in the document's "onload" event +var forms_onloadHandlers = new Array(); + +function forms_onload() { + for (var i = 0; i < forms_onloadHandlers.length; i++) { + forms_onloadHandlers[i].forms_onload(); + } + // Clear it (we no more need them) + forms_onloadHandlers = null; +} + +// Handlers that are to be called in form's "onsubmit" event +//FIXME: this single var implies only one form per page, and needs to be +// visited if we decide to support several forms per page. +var forms_onsubmitHandlers = new Array(); + +function forms_onsubmit() { + if (forms_onsubmitHandlers == null) { + alert("onsubmit called twice!"); + } + + for (var i = 0; i < forms_onsubmitHandlers.length; i++) { + forms_onsubmitHandlers[i].forms_onsubmit(); + } + // clear it + forms_onsubmitHandlers = null; +} + +/** + * Submit the form containing an element, also storing in the hidden + * 'forms_submit_id' field the name of the element which triggered the submit. + */ +function forms_submitForm(element, name) { + if (name == undefined) { + name = element.name; + } + + var form = forms_getForm(element); + if (form == null) { + alert("Cannot find form for " + element); + } else { + form["forms_submit_id"].value = name; + // FIXME: programmatically submitting the form doesn't trigger onsubmit ? (both in IE and Moz) + forms_onsubmit(); + form.submit(); + } +} + +/** + * Crawl the parents of an element up to finding a form. + */ +function forms_getForm(element) { + while(element != null && element.tagName != "FORM") { + element = element.parentNode; + } + return element; +} + +/** + * Move a named element as an immediate child of the <body> element. + * This is required for help popups inside <wi:group> tabs. The reason is that CSS positioning + * properties ("left" and "top") on a block with a "position: absolute" are actually relative to + * the nearest ancestor that has a position of "absolute", "relative" or "fixed". + * See http://www.w3.org/TR/CSS21/visudet.html#containing-block-details $4 + */ + +function forms_moveInBody(element) { + element.parentNode.removeChild(element); + document.body.appendChild(element); +} + +/** + * Create a popup window for a named element. + * + * @param id the ID of the element to make a popup with. + */ +function forms_createPopupWindow(id) { + var result = new PopupWindow(id); + result.autoHide(); + // add to onload handlers + result.forms_id = id; + result.forms_onload = function() { + forms_moveInBody(document.getElementById(this.forms_id)); + } + forms_onloadHandlers.push(result); + return result; +} + + +function forms_createOptionTransfer(id, submitOnChange) { + var result = new OptionTransfer(id + ".unselected", id); + result.setAutoSort(true); + // add to onload handlers + result.forms_id = id; + result.forms_onload = function() { + var form = forms_getForm(document.getElementById(this.forms_id)); + this.init(form); + sortSelect(this.left); + sortSelect(this.right); + } + result.submitOnChange = submitOnChange; + result.forms_transferLeft = function() { + this.transferLeft(); + if (this.submitOnChange) { + forms_submitForm(document.getElementById(this.forms_id)); + } + } + result.forms_transferRight = function() { + this.transferRight(); + if (this.submitOnChange) { + forms_submitForm(document.getElementById(this.forms_id)); + } + } + result.forms_transferAllLeft = function() { + this.transferAllLeft(); + if (this.submitOnChange) { + forms_submitForm(document.getElementById(this.forms_id)); + } + }; + result.forms_transferAllRight = function() { + this.transferAllRight(); + if (this.submitOnChange) { + forms_submitForm(document.getElementById(this.forms_id)); + } + }; + forms_onloadHandlers.push(result); + + // add to onsubmit handlers + result.forms_onsubmit = function() { + // Select all options in the "selected" list to that + // its values are sent. + selectAllOptions(this.right); + } + forms_onsubmitHandlers.push(result); + return result; +} + + +/** + * Show a tab in a <wi:group> + * + * @param tabgroup (string) name of the <wi:group> + * @param idx (integer) index of the selected tab + * @param length (integer) total number of tabs + * @param state (string, optional) name of the input storing the tabgroup state + */ +function forms_showTab(tabgroup, idx, length, state) { + for (var i = 0; i < length; i++) { + // Change tab status (selected/unselected) + var tab = document.getElementById(tabgroup + "_tab_" + i); + if (tab != null) { + tab.className = (i == idx) ? 'forms-tab forms-activeTab': 'forms-tab'; + } + // Change tab content visibilty + var tabitems = document.getElementById(tabgroup + "_items_" + i); + if (tabitems != null) { + tabitems.style.display = (i == idx) ? '' : 'none'; + } + } + // Change state value + if (state.length > 0) { + document.forms[0][state].value = idx; + } +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/skins/common/js/mattkruse-lib.js Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/js/mattkruse-lib.js?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/js/mattkruse-lib.js Fri Jan 28 09:54:58 2005 @@ -0,0 +1,124 @@ +// =================================================================== +// Author: Matt Kruse <[EMAIL PROTECTED]> +// WWW: http://www.mattkruse.com/ +// +// NOTICE: You may use this code for any purpose, commercial or +// private, without any further permission from the author. You may +// remove this notice from your final code if you wish, however it is +// appreciated by the author if at least my web site address is kept. +// +// You may *NOT* re-distribute this code in any way except through its +// use. That means, you can include it in your product, or your web +// site, or any other form where the code is actually being used. You +// may not put the plain javascript up on your site for download or +// include it in your javascript libraries for download. +// If you wish to share this code with others, please just point them +// to the URL instead. +// Please DO NOT link directly to my .js files from your site. Copy +// the files to your server and use them there. Thank you. +// =================================================================== + +/* SOURCE FILE: selectbox.js */ +function selectUnselectMatchingOptions(obj,regex,which,only){if(window.RegExp){if(which == "select"){var selected1=true;var selected2=false;}else if(which == "unselect"){var selected1=false;var selected2=true;}else{return;}var re = new RegExp(regex);for(var i=0;i<obj.options.length;i++){if(re.test(obj.options[i].text)){obj.options[i].selected = selected1;}else{if(only == true){obj.options[i].selected = selected2;}}}}} +function selectMatchingOptions(obj,regex){selectUnselectMatchingOptions(obj,regex,"select",false);} +function selectOnlyMatchingOptions(obj,regex){selectUnselectMatchingOptions(obj,regex,"select",true);} +function unSelectMatchingOptions(obj,regex){selectUnselectMatchingOptions(obj,regex,"unselect",false);} +function sortSelect(obj){var o = new Array();if(obj.options==null){return;}for(var i=0;i<obj.options.length;i++){o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;}if(o.length==0){return;}o = o.sort( +function(a,b){if((a.text+"") <(b.text+"")){return -1;}if((a.text+"") >(b.text+"")){return 1;}return 0;});for(var i=0;i<o.length;i++){obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);}} +function selectAllOptions(obj){for(var i=0;i<obj.options.length;i++){obj.options[i].selected = true;}} +function moveSelectedOptions(from,to){if(arguments.length>3){var regex = arguments[3];if(regex != ""){unSelectMatchingOptions(from,regex);}}for(var i=0;i<from.options.length;i++){var o = from.options[i];if(o.selected){to.options[to.options.length] = new Option( o.text, o.value, false, false);}}for(var i=(from.options.length-1);i>=0;i--){var o = from.options[i];if(o.selected){from.options[i] = null;}}if((arguments.length<3) ||(arguments[2]==true)){sortSelect(from);sortSelect(to);}from.selectedIndex = -1;to.selectedIndex = -1;} +function copySelectedOptions(from,to){var options = new Object();for(var i=0;i<to.options.length;i++){options[to.options[i].text] = true;}for(var i=0;i<from.options.length;i++){var o = from.options[i];if(o.selected){if(options[o.text] == null || options[o.text] == "undefined"){to.options[to.options.length] = new Option( o.text, o.value, false, false);}}}if((arguments.length<3) ||(arguments[2]==true)){sortSelect(to);}from.selectedIndex = -1;to.selectedIndex = -1;} +function moveAllOptions(from,to){selectAllOptions(from);if(arguments.length==2){moveSelectedOptions(from,to);}else if(arguments.length==3){moveSelectedOptions(from,to,arguments[2]);}else if(arguments.length==4){moveSelectedOptions(from,to,arguments[2],arguments[3]);}} +function copyAllOptions(from,to){selectAllOptions(from);if(arguments.length==2){copySelectedOptions(from,to);}else if(arguments.length==3){copySelectedOptions(from,to,arguments[2]);}} +function swapOptions(obj,i,j){var o = obj.options;var i_selected = o[i].selected;var j_selected = o[j].selected;var temp = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);var temp2= new Option(o[j].text, o[j].value, o[j].defaultSelected, o[j].selected);o[i] = temp2;o[j] = temp;o[i].selected = j_selected;o[j].selected = i_selected;} +function moveOptionUp(obj){var selectedCount=0;for(i=0;i<obj.options.length;i++){if(obj.options[i].selected){selectedCount++;}}if(selectedCount!=1){return;}var i = obj.selectedIndex;if(i == 0){return;}swapOptions(obj,i,i-1);obj.options[i-1].selected = true;} +function moveOptionDown(obj){var selectedCount=0;for(i=0;i<obj.options.length;i++){if(obj.options[i].selected){selectedCount++;}}if(selectedCount != 1){return;}var i = obj.selectedIndex;if(i ==(obj.options.length-1)){return;}swapOptions(obj,i,i+1);obj.options[i+1].selected = true;} +function removeSelectedOptions(from){for(var i=(from.options.length-1);i>=0;i--){var o=from.options[i];if(o.selected){from.options[i] = null;}}from.selectedIndex = -1;} + + +/* SOURCE FILE: OptionTransfer.js */ + +function OT_transferLeft(){moveSelectedOptions(this.right,this.left,this.autoSort);this.update();} +function OT_transferRight(){moveSelectedOptions(this.left,this.right,this.autoSort);this.update();} +function OT_transferAllLeft(){moveAllOptions(this.right,this.left,this.autoSort);this.update();} +function OT_transferAllRight(){moveAllOptions(this.left,this.right,this.autoSort);this.update();} +function OT_saveRemovedLeftOptions(f){this.removedLeftField = f;} +function OT_saveRemovedRightOptions(f){this.removedRightField = f;} +function OT_saveAddedLeftOptions(f){this.addedLeftField = f;} +function OT_saveAddedRightOptions(f){this.addedRightField = f;} +function OT_saveNewLeftOptions(f){this.newLeftField = f;} +function OT_saveNewRightOptions(f){this.newRightField = f;} +function OT_update(){var removedLeft = new Object();var removedRight = new Object();var addedLeft = new Object();var addedRight = new Object();var newLeft = new Object();var newRight = new Object();for(var i=0;i<this.left.options.length;i++){var o=this.left.options[i];newLeft[o.value]=1;if(typeof(this.originalLeftValues[o.value])=="undefined"){addedLeft[o.value]=1;removedRight[o.value]=1;}}for(var i=0;i<this.right.options.length;i++){var o=this.right.options[i];newRight[o.value]=1;if(typeof(this.originalRightValues[o.value])=="undefined"){addedRight[o.value]=1;removedLeft[o.value]=1;}}if(this.removedLeftField!=null){this.removedLeftField.value = OT_join(removedLeft,this.delimiter);}if(this.removedRightField!=null){this.removedRightField.value = OT_join(removedRight,this.delimiter);}if(this.addedLeftField!=null){this.addedLeftField.value = OT_join(addedLeft,this.delimiter);}if(this.addedRightField!=null){this.addedRightField.value = OT_join(addedRight,this.delimiter);}if(this.newLeftField!=null){this.newLeftField.value = OT_join(newLeft,this.delimiter);}if(this.newRightField!=null){this.newRightField.value = OT_join(newRight,this.delimiter);}} +function OT_join(o,delimiter){var val;var str="";for(val in o){if(str.length>0){str=str+delimiter;}str=str+val;}return str;} +function OT_setDelimiter(val){this.delimiter=val;} +function OT_setAutoSort(val){this.autoSort=val;} +function OT_init(theform){this.form = theform;if(!theform[this.left]){alert("OptionTransfer init(): Left select list does not exist in form!");return false;}if(!theform[this.right]){alert("OptionTransfer init(): Right select list does not exist in form!");return false;}this.left=theform[this.left];this.right=theform[this.right];for(var i=0;i<this.left.options.length;i++){this.originalLeftValues[this.left.options[i].value]=1;}for(var i=0;i<this.right.options.length;i++){this.originalRightValues[this.right.options[i].value]=1;}if(this.removedLeftField!=null){this.removedLeftField=theform[this.removedLeftField];}if(this.removedRightField!=null){this.removedRightField=theform[this.removedRightField];}if(this.addedLeftField!=null){this.addedLeftField=theform[this.addedLeftField];}if(this.addedRightField!=null){this.addedRightField=theform[this.addedRightField];}if(this.newLeftField!=null){this.newLeftField=theform[this.newLeftField];}if(this.newRightField!=null){this.newRightField=theform[this.newRightField];}this.update();} +function OptionTransfer(l,r){this.form = null;this.left=l;this.right=r;this.autoSort=true;this.delimiter=",";this.originalLeftValues = new Object();this.originalRightValues = new Object();this.removedLeftField = null;this.removedRightField = null;this.addedLeftField = null;this.addedRightField = null;this.newLeftField = null;this.newRightField = null;this.transferLeft=OT_transferLeft;this.transferRight=OT_transferRight;this.transferAllLeft=OT_transferAllLeft;this.transferAllRight=OT_transferAllRight;this.saveRemovedLeftOptions=OT_saveRemovedLeftOptions;this.saveRemovedRightOptions=OT_saveRemovedRightOptions;this.saveAddedLeftOptions=OT_saveAddedLeftOptions;this.saveAddedRightOptions=OT_saveAddedRightOptions;this.saveNewLeftOptions=OT_saveNewLeftOptions;this.saveNewRightOptions=OT_saveNewRightOptions;this.setDelimiter=OT_setDelimiter;this.setAutoSort=OT_setAutoSort;this.init=OT_init;this.update=OT_update;} + +/* SOURCE FILE: date.js */ +var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat'); +function LZ(x){return(x<0||x>9?"":"0")+x} +function isDate(val,format){var date=getDateFromFormat(val,format);if(date==0){return false;}return true;} +function compareDates(date1,dateformat1,date2,dateformat2){var d1=getDateFromFormat(date1,dateformat1);var d2=getDateFromFormat(date2,dateformat2);if(d1==0 || d2==0){return -1;}else if(d1 > d2){return 1;}return 0;} +function formatDate(date,format){format=format+"";var result="";var i_format=0;var c="";var token="";var y=date.getYear()+"";var M=date.getMonth()+1;var d=date.getDate();var E=date.getDay();var H=date.getHours();var m=date.getMinutes();var s=date.getSeconds();var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;var value=new Object();if(y.length < 4){y=""+(y-0+1900);}value["y"]=""+y;value["yyyy"]=y;value["yy"]=y.substring(2,4);value["M"]=M;value["MM"]=LZ(M);value["MMM"]=MONTH_NAMES[M-1];value["NNN"]=MONTH_NAMES[M+11];value["d"]=d;value["dd"]=LZ(d);value["E"]=DAY_NAMES[E+7];value["EE"]=DAY_NAMES[E];value["H"]=H;value["HH"]=LZ(H);if(H==0){value["h"]=12;}else if(H>12){value["h"]=H-12;}else{value["h"]=H;}value["hh"]=LZ(value["h"]);if(H>11){value["K"]=H-12;}else{value["K"]=H;}value["k"]=H+1;value["KK"]=LZ(value["K"]);value["kk"]=LZ(value["k"]);if(H > 11){value["a"]="PM";}else{value["a"]="AM";}value["m"]=m;value["mm"]=LZ(m);value["s"]=s;value["ss"]=LZ(s);while(i_format < format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c) &&(i_format < format.length)){token += format.charAt(i_format++);}if(value[token] != null){result=result + value[token];}else{result=result + token;}}return result;} +function _isInteger(val){var digits="1234567890";for(var i=0;i < val.length;i++){if(digits.indexOf(val.charAt(i))==-1){return false;}}return true;} +function _getInt(str,i,minlength,maxlength){for(var x=maxlength;x>=minlength;x--){var token=str.substring(i,i+x);if(token.length < minlength){return null;}if(_isInteger(token)){return token;}}return null;} +function getDateFromFormat(val,format){val=val+"";format=format+"";var i_val=0;var i_format=0;var c="";var token="";var token2="";var x,y;var now=new Date();var year=now.getYear();var month=now.getMonth()+1;var date=1;var hh=now.getHours();var mm=now.getMinutes();var ss=now.getSeconds();var ampm="";while(i_format < format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c) &&(i_format < format.length)){token += format.charAt(i_format++);}if(token=="yyyy" || token=="yy" || token=="y"){if(token=="yyyy"){x=4;y=4;}if(token=="yy"){x=2;y=2;}if(token=="y"){x=2;y=4;}year=_getInt(val,i_val,x,y);if(year==null){return 0;}i_val += year.length;if(year.length==2){if(year > 70){year=1900+(year-0);}else{year=2000+(year-0);}}}else if(token=="MMM"||token=="NNN"){month=0;for(var i=0;i<MONTH_NAMES.length;i++){var month_name=MONTH_NAMES[i];if(val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()){if(token=="MMM"||(token=="NNN"&&i>11)){month=i+1;if(month>12){month -= 12;}i_val += month_name.length;break;}}}if((month < 1)||(month>12)){return 0;}}else if(token=="EE"||token=="E"){for(var i=0;i<DAY_NAMES.length;i++){var day_name=DAY_NAMES[i];if(val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()){i_val += day_name.length;break;}}}else if(token=="MM"||token=="M"){month=_getInt(val,i_val,token.length,2);if(month==null||(month<1)||(month>12)){return 0;}i_val+=month.length;}else if(token=="dd"||token=="d"){date=_getInt(val,i_val,token.length,2);if(date==null||(date<1)||(date>31)){return 0;}i_val+=date.length;}else if(token=="hh"||token=="h"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>12)){return 0;}i_val+=hh.length;}else if(token=="HH"||token=="H"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>23)){return 0;}i_val+=hh.length;}else if(token=="KK"||token=="K"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>11)){return 0;}i_val+=hh.length;}else if(token=="kk"||token=="k"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>24)){return 0;}i_val+=hh.length;hh--;}else if(token=="mm"||token=="m"){mm=_getInt(val,i_val,token.length,2);if(mm==null||(mm<0)||(mm>59)){return 0;}i_val+=mm.length;}else if(token=="ss"||token=="s"){ss=_getInt(val,i_val,token.length,2);if(ss==null||(ss<0)||(ss>59)){return 0;}i_val+=ss.length;}else if(token=="a"){if(val.substring(i_val,i_val+2).toLowerCase()=="am"){ampm="AM";}else if(val.substring(i_val,i_val+2).toLowerCase()=="pm"){ampm="PM";}else{return 0;}i_val+=2;}else{if(val.substring(i_val,i_val+token.length)!=token){return 0;}else{i_val+=token.length;}}}if(i_val != val.length){return 0;}if(month==2){if( ((year%4==0)&&(year%100 != 0) ) ||(year%400==0) ){if(date > 29){return 0;}}else{if(date > 28){return 0;}}}if((month==4)||(month==6)||(month==9)||(month==11)){if(date > 30){return 0;}}if(hh<12 && ampm=="PM"){hh=hh-0+12;}else if(hh>11 && ampm=="AM"){hh-=12;}var newdate=new Date(year,month-1,date,hh,mm,ss);return newdate.getTime();} +function parseDate(val){var preferEuro=(arguments.length==2)?arguments[1]:false;generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');var d=null;for(var i=0;i<checkList.length;i++){var l=window[checkList[i]];for(var j=0;j<l.length;j++){d=getDateFromFormat(val,l[j]);if(d!=0){return new Date(d);}}}return null;} + +/* SOURCE FILE: AnchorPosition.js */ +function getAnchorPosition(anchorname){var useWindow=false;var coordinates=new Object();var x=0,y=0;var use_gebi=false, use_css=false, use_layers=false;if(document.getElementById){use_gebi=true;}else if(document.all){use_css=true;}else if(document.layers){use_layers=true;}if(use_gebi && document.all){x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);}else if(use_gebi){var o=document.getElementById(anchorname);x=AnchorPosition_getPageOffsetLeft(o);y=AnchorPosition_getPageOffsetTop(o);}else if(use_css){x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);}else if(use_layers){var found=0;for(var i=0;i<document.anchors.length;i++){if(document.anchors[i].name==anchorname){found=1;break;}}if(found==0){coordinates.x=0;coordinates.y=0;return coordinates;}x=document.anchors[i].x;y=document.anchors[i].y;}else{coordinates.x=0;coordinates.y=0;return coordinates;}coordinates.x=x;coordinates.y=y;return coordinates;} +function getAnchorWindowPosition(anchorname){var coordinates=getAnchorPosition(anchorname);var x=0;var y=0;if(document.getElementById){if(isNaN(window.screenX)){x=coordinates.x-document.body.scrollLeft+window.screenLeft;y=coordinates.y-document.body.scrollTop+window.screenTop;}else{x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;}}else if(document.all){x=coordinates.x-document.body.scrollLeft+window.screenLeft;y=coordinates.y-document.body.scrollTop+window.screenTop;}else if(document.layers){x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;}coordinates.x=x;coordinates.y=y;return coordinates;} +function AnchorPosition_getPageOffsetLeft(el){var ol=el.offsetLeft;while((el=el.offsetParent) != null){ol += el.offsetLeft;}return ol;} +function AnchorPosition_getWindowOffsetLeft(el){return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;} +function AnchorPosition_getPageOffsetTop(el){var ot=el.offsetTop;while((el=el.offsetParent) != null){ot += el.offsetTop;}return ot;} +function AnchorPosition_getWindowOffsetTop(el){return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;} + +/* SOURCE FILE: PopupWindow.js */ +function PopupWindow_getXYPosition(anchorname){var coordinates;if(this.type == "WINDOW"){coordinates = getAnchorWindowPosition(anchorname);}else{coordinates = getAnchorPosition(anchorname);}this.x = coordinates.x;this.y = coordinates.y;} +function PopupWindow_setSize(width,height){this.width = width;this.height = height;} +function PopupWindow_populate(contents){this.contents = contents;this.populated = false;} +function PopupWindow_setUrl(url){this.url = url;} +function PopupWindow_setWindowProperties(props){this.windowProperties = props;} +function PopupWindow_refresh(){if(this.divName != null){if(this.use_gebi){document.getElementById(this.divName).innerHTML = this.contents;}else if(this.use_css){document.all[this.divName].innerHTML = this.contents;}else if(this.use_layers){var d = document.layers[this.divName];d.document.open();d.document.writeln(this.contents);d.document.close();}}else{if(this.popupWindow != null && !this.popupWindow.closed){if(this.url!=""){this.popupWindow.location.href=this.url;}else{this.popupWindow.document.open();this.popupWindow.document.writeln(this.contents);this.popupWindow.document.close();}this.popupWindow.focus();}}} +function PopupWindow_showPopup(anchorname){this.getXYPosition(anchorname);this.x += this.offsetX;this.y += this.offsetY;if(!this.populated &&(this.contents != "")){this.populated = true;this.refresh();}if(this.divName != null){if(this.use_gebi){document.getElementById(this.divName).style.left = this.x;document.getElementById(this.divName).style.top = this.y;document.getElementById(this.divName).style.visibility = "visible";}else if(this.use_css){document.all[this.divName].style.left = this.x;document.all[this.divName].style.top = this.y;document.all[this.divName].style.visibility = "visible";}else if(this.use_layers){document.layers[this.divName].left = this.x;document.layers[this.divName].top = this.y;document.layers[this.divName].visibility = "visible";}}else{if(this.popupWindow == null || this.popupWindow.closed){if(this.x<0){this.x=0;}if(this.y<0){this.y=0;}if(screen && screen.availHeight){if((this.y + this.height) > screen.availHeight){this.y = screen.availHeight - this.height;}}if(screen && screen.availWidth){if((this.x + this.width) > screen.availWidth){this.x = screen.availWidth - this.width;}}var avoidAboutBlank = window.opera ||( document.layers && !navigator.mimeTypes['*']) || navigator.vendor == 'KDE' ||( document.childNodes && !document.all && !navigator.taintEnabled);this.popupWindow = window.open(avoidAboutBlank?"":"about:blank","window_"+anchorname,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");}this.refresh();}} +function PopupWindow_hidePopup(){if(this.divName != null){if(this.use_gebi){document.getElementById(this.divName).style.visibility = "hidden";}else if(this.use_css){document.all[this.divName].style.visibility = "hidden";}else if(this.use_layers){document.layers[this.divName].visibility = "hidden";}}else{if(this.popupWindow && !this.popupWindow.closed){this.popupWindow.close();this.popupWindow = null;}}} +function PopupWindow_isClicked(e){if(this.divName != null){if(this.use_layers){var clickX = e.pageX;var clickY = e.pageY;var t = document.layers[this.divName];if((clickX > t.left) &&(clickX < t.left+t.clip.width) &&(clickY > t.top) &&(clickY < t.top+t.clip.height)){return true;}else{return false;}}else if(document.all){var t = window.event.srcElement;while(t.parentElement != null){if(t.id==this.divName){return true;}t = t.parentElement;}return false;}else if(this.use_gebi){var t = e.originalTarget;while(t.parentNode != null){if(t.id==this.divName){return true;}t = t.parentNode;}return false;}return false;}return false;} +function PopupWindow_hideIfNotClicked(e){if(this.autoHideEnabled && !this.isClicked(e)){this.hidePopup();}} +function PopupWindow_autoHide(){this.autoHideEnabled = true;} +function PopupWindow_hidePopupWindows(e){for(var i=0;i<popupWindowObjects.length;i++){if(popupWindowObjects[i] != null){var p = popupWindowObjects[i];p.hideIfNotClicked(e);}}} +function PopupWindow_attachListener(){if(document.layers){document.captureEvents(Event.MOUSEUP);}window.popupWindowOldEventListener = document.onmouseup;if(window.popupWindowOldEventListener != null){document.onmouseup = new Function("window.popupWindowOldEventListener();PopupWindow_hidePopupWindows();");}else{document.onmouseup = PopupWindow_hidePopupWindows;}} +function PopupWindow(){if(!window.popupWindowIndex){window.popupWindowIndex = 0;}if(!window.popupWindowObjects){window.popupWindowObjects = new Array();}if(!window.listenerAttached){window.listenerAttached = true;PopupWindow_attachListener();}this.index = popupWindowIndex++;popupWindowObjects[this.index] = this;this.divName = null;this.popupWindow = null;this.width=0;this.height=0;this.populated = false;this.visible = false;this.autoHideEnabled = false;this.contents = "";this.url="";this.windowProperties="toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no";if(arguments.length>0){this.type="DIV";this.divName = arguments[0];}else{this.type="WINDOW";}this.use_gebi = false;this.use_css = false;this.use_layers = false;if(document.getElementById){this.use_gebi = true;}else if(document.all){this.use_css = true;}else if(document.layers){this.use_layers = true;}else{this.type = "WINDOW";}this.offsetX = 0;this.offsetY = 0;this.getXYPosition = PopupWindow_getXYPosition;this.populate = PopupWindow_populate;this.setUrl = PopupWindow_setUrl;this.setWindowProperties = PopupWindow_setWindowProperties;this.refresh = PopupWindow_refresh;this.showPopup = PopupWindow_showPopup;this.hidePopup = PopupWindow_hidePopup;this.setSize = PopupWindow_setSize;this.isClicked = PopupWindow_isClicked;this.autoHide = PopupWindow_autoHide;this.hideIfNotClicked = PopupWindow_hideIfNotClicked;} + + +/* SOURCE FILE: CalendarPopup.js */ + +function CalendarPopup(){var c;if(arguments.length>0){c = new PopupWindow(arguments[0]);}else{c = new PopupWindow();c.setSize(150,175);}c.offsetX = -152;c.offsetY = 25;c.autoHide();c.monthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");c.monthAbbreviations = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");c.dayHeaders = new Array("S","M","T","W","T","F","S");c.returnFunction = "CP_tmpReturnFunction";c.returnMonthFunction = "CP_tmpReturnMonthFunction";c.returnQuarterFunction = "CP_tmpReturnQuarterFunction";c.returnYearFunction = "CP_tmpReturnYearFunction";c.weekStartDay = 0;c.isShowYearNavigation = false;c.displayType = "date";c.disabledWeekDays = new Object();c.disabledDatesExpression = "";c.yearSelectStartOffset = 2;c.currentDate = null;c.todayText="Today";c.cssPrefix="";c.isShowYearNavigationInput=false;window.CP_targetInput = null;window.CP_dateFormat = "MM/dd/yyyy";c.setReturnFunction = CP_setReturnFunction;c.setReturnMonthFunction = CP_setReturnMonthFunction;c.setReturnQuarterFunction = CP_setReturnQuarterFunction;c.setReturnYearFunction = CP_setReturnYearFunction;c.setMonthNames = CP_setMonthNames;c.setMonthAbbreviations = CP_setMonthAbbreviations;c.setDayHeaders = CP_setDayHeaders;c.setWeekStartDay = CP_setWeekStartDay;c.setDisplayType = CP_setDisplayType;c.setDisabledWeekDays = CP_setDisabledWeekDays;c.addDisabledDates = CP_addDisabledDates;c.setYearSelectStartOffset = CP_setYearSelectStartOffset;c.setTodayText = CP_setTodayText;c.showYearNavigation = CP_showYearNavigation;c.showCalendar = CP_showCalendar;c.hideCalendar = CP_hideCalendar;c.getStyles = getCalendarStyles;c.refreshCalendar = CP_refreshCalendar;c.getCalendar = CP_getCalendar;c.select = CP_select;c.setCssPrefix = CP_setCssPrefix;c.showYearNavigationInput = CP_showYearNavigationInput +return c;} +function CP_tmpReturnFunction(y,m,d){if(window.CP_targetInput!=null){var dt = new Date(y,m-1,d,0,0,0);window.CP_targetInput.value = formatDate(dt,window.CP_dateFormat);}else{alert('Use setReturnFunction() to define which function will get the clicked results!');}} +function CP_tmpReturnMonthFunction(y,m){alert('Use setReturnMonthFunction() to define which function will get the clicked results!\nYou clicked: year='+y+' , month='+m);} +function CP_tmpReturnQuarterFunction(y,q){alert('Use setReturnQuarterFunction() to define which function will get the clicked results!\nYou clicked: year='+y+' , quarter='+q);} +function CP_tmpReturnYearFunction(y){alert('Use setReturnYearFunction() to define which function will get the clicked results!\nYou clicked: year='+y);} +function CP_setReturnFunction(name){this.returnFunction = name;} +function CP_setReturnMonthFunction(name){this.returnMonthFunction = name;} +function CP_setReturnQuarterFunction(name){this.returnQuarterFunction = name;} +function CP_setReturnYearFunction(name){this.returnYearFunction = name;} +function CP_setMonthNames(){for(var i=0;i<arguments.length;i++){this.monthNames[i] = arguments[i];}} +function CP_setMonthAbbreviations(){for(var i=0;i<arguments.length;i++){this.monthAbbreviations[i] = arguments[i];}} +function CP_setDayHeaders(){for(var i=0;i<arguments.length;i++){this.dayHeaders[i] = arguments[i];}} +function CP_setWeekStartDay(day){this.weekStartDay = day;} +function CP_showYearNavigation(){this.isShowYearNavigation =(arguments.length>0)?arguments[0]:true;} +function CP_setDisplayType(type){if(type!="date"&&type!="week-end"&&type!="month"&&type!="quarter"&&type!="year"){alert("Invalid display type! Must be one of: date,week-end,month,quarter,year");return false;}this.displayType=type;} +function CP_setYearSelectStartOffset(num){this.yearSelectStartOffset=num;} +function CP_setDisabledWeekDays(){this.disabledWeekDays = new Object();for(var i=0;i<arguments.length;i++){this.disabledWeekDays[arguments[i]] = true;}} +function CP_addDisabledDates(start, end){if(arguments.length==1){end=start;}if(start==null && end==null){return;}if(this.disabledDatesExpression!=""){this.disabledDatesExpression+= "||";}if(start!=null){start = parseDate(start);start=""+start.getFullYear()+LZ(start.getMonth()+1)+LZ(start.getDate());}if(end!=null){end=parseDate(end);end=""+end.getFullYear()+LZ(end.getMonth()+1)+LZ(end.getDate());}if(start==null){this.disabledDatesExpression+="(ds<="+end+")";}else if(end ==null){this.disabledDatesExpression+="(ds>="+start+")";}else{this.disabledDatesExpression+="(ds>="+start+"&&ds<="+end+")";}} +function CP_setTodayText(text){this.todayText = text;} +function CP_setCssPrefix(val){this.cssPrefix = val;} +function CP_showYearNavigationInput(){this.isShowYearNavigationInput =(arguments.length>0)?arguments[0]:true;} +function CP_hideCalendar(){if(arguments.length > 0){window.popupWindowObjects[arguments[0]].hidePopup();}else{this.hidePopup();}} +function CP_refreshCalendar(index){var calObject = window.popupWindowObjects[index];if(arguments.length>1){calObject.populate(calObject.getCalendar(arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]));}else{calObject.populate(calObject.getCalendar());}calObject.refresh();} +function CP_showCalendar(anchorname){if(arguments.length>1){if(arguments[1]==null||arguments[1]==""){this.currentDate=new Date();}else{this.currentDate=new Date(parseDate(arguments[1]));}}this.populate(this.getCalendar());this.showPopup(anchorname);} +function CP_select(inputobj, linkname, format){var selectedDate=(arguments.length>3)?arguments[3]:null;if(!window.getDateFromFormat){alert("calendar.select: To use this method you must also include 'date.js' for date formatting");return;}if(this.displayType!="date"&&this.displayType!="week-end"){alert("calendar.select: This function can only be used with displayType 'date' or 'week-end'");return;}if(inputobj.type!="text" && inputobj.type!="hidden" && inputobj.type!="textarea"){alert("calendar.select: Input object passed is not a valid form input object");window.CP_targetInput=null;return;}window.CP_targetInput = inputobj;this.currentDate=null;var time=0;if(selectedDate!=null){time = getDateFromFormat(selectedDate,format)}else if(inputobj.value!=""){time = getDateFromFormat(inputobj.value,format);}if(selectedDate!=null || inputobj.value!=""){if(time==0){this.currentDate=null;}else{this.currentDate=new Date(time);}}window.CP_dateFormat = format;this.showCalendar(linkname);} +function getCalendarStyles(){var result = "";var p = "";if(this!=null && typeof(this.cssPrefix)!="undefined" && this.cssPrefix!=null && this.cssPrefix!=""){p=this.cssPrefix;}result += "<STYLE>\n";result += "."+p+"cpYearNavigation,."+p+"cpMonthNavigation{background-color:#C0C0C0;text-align:center;vertical-align:center;text-decoration:none;color:#000000;font-weight:bold;}\n";result += "."+p+"cpDayColumnHeader, ."+p+"cpYearNavigation,."+p+"cpMonthNavigation,."+p+"cpCurrentMonthDate,."+p+"cpCurrentMonthDateDisabled,."+p+"cpOtherMonthDate,."+p+"cpOtherMonthDateDisabled,."+p+"cpCurrentDate,."+p+"cpCurrentDateDisabled,."+p+"cpTodayText,."+p+"cpTodayTextDisabled,."+p+"cpText{font-family:arial;font-size:8pt;}\n";result += "TD."+p+"cpDayColumnHeader{text-align:right;border:solid thin #C0C0C0;border-width:0 0 1 0;}\n";result += "."+p+"cpCurrentMonthDate, ."+p+"cpOtherMonthDate, ."+p+"cpCurrentDate{text-align:right;text-decoration:none;}\n";result += "."+p+"cpCurrentMonthDateDisabled, ."+p+"cpOtherMonthDateDisabled, ."+p+"cpCurrentDateDisabled{color:#D0D0D0;text-align:right;text-decoration:line-through;}\n";result += "."+p+"cpCurrentMonthDate, .cpCurrentDate{color:#000000;}\n";result += "."+p+"cpOtherMonthDate{color:#808080;}\n";result += "TD."+p+"cpCurrentDate{color:white;background-color: #C0C0C0;border-width:1;border:solid thin #800000;}\n";result += "TD."+p+"cpCurrentDateDisabled{border-width:1;border:solid thin #FFAAAA;}\n";result += "TD."+p+"cpTodayText, TD."+p+"cpTodayTextDisabled{border:solid thin #C0C0C0;border-width:1 0 0 0;}\n";result += "A."+p+"cpTodayText, SPAN."+p+"cpTodayTextDisabled{height:20px;}\n";result += "A."+p+"cpTodayText{color:black;}\n";result += "."+p+"cpTodayTextDisabled{color:#D0D0D0;}\n";result += "."+p+"cpBorder{border:solid thin #808080;}\n";result += "</STYLE>\n";return result;} +function CP_getCalendar(){var now = new Date();if(this.type == "WINDOW"){var windowref = "window.opener.";}else{var windowref = "";}var result = "";if(this.type == "WINDOW"){result += "<HTML><HEAD><TITLE>Calendar</TITLE>"+this.getStyles()+"</HEAD><BODY MARGINWIDTH=0 MARGINHEIGHT=0 TOPMARGIN=0 RIGHTMARGIN=0 LEFTMARGIN=0>\n";result += '<CENTER><TABLE WIDTH=100% BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>\n';}else{result += '<TABLE CLASS="'+this.cssPrefix+'cpBorder" WIDTH=144 BORDER=1 BORDERWIDTH=1 CELLSPACING=0 CELLPADDING=1>\n';result += '<TR><TD ALIGN=CENTER>\n';result += '<CENTER>\n';}if(this.displayType=="date" || this.displayType=="week-end"){if(this.currentDate==null){this.currentDate = now;}if(arguments.length > 0){var month = arguments[0];}else{var month = this.currentDate.getMonth()+1;}if(arguments.length > 1 && arguments[1]>0 && arguments[1]-0==arguments[1]){var year = arguments[1];}else{var year = this.currentDate.getFullYear();}var daysinmonth= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);if( ((year%4 == 0)&&(year%100 != 0) ) ||(year%400 == 0) ){daysinmonth[2] = 29;}var current_month = new Date(year,month-1,1);var display_year = year;var display_month = month;var display_date = 1;var weekday= current_month.getDay();var offset = 0;offset =(weekday >= this.weekStartDay) ? weekday-this.weekStartDay : 7-this.weekStartDay+weekday ;if(offset > 0){display_month--;if(display_month < 1){display_month = 12;display_year--;}display_date = daysinmonth[display_month]-offset+1;}var next_month = month+1;var next_month_year = year;if(next_month > 12){next_month=1;next_month_year++;}var last_month = month-1;var last_month_year = year;if(last_month < 1){last_month=12;last_month_year--;}var date_class;if(this.type!="WINDOW"){result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";}result += '<TR>\n';var refresh = 'javascript:'+windowref+'CP_refreshCalendar';if(this.isShowYearNavigation){result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refresh+'('+this.index+','+last_month+','+last_month_year+');"><</A></TD>';result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="58"><SPAN CLASS="'+this.cssPrefix+'cpMonthNavigation">'+this.monthNames[month-1]+'</SPAN></TD>';result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refresh+'('+this.index+','+next_month+','+next_month_year+');">></A></TD>';result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"> </TD>';result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="'+refresh+'('+this.index+','+month+','+(year-1)+');"><</A></TD>';if(this.isShowYearNavigationInput){result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="36"><INPUT NAME="cpYear" CLASS="'+this.cssPrefix+'cpYearNavigation" SIZE="4" MAXLENGTH="4" VALUE="'+year+'" onBlur="'+refresh+'('+this.index+','+month+',this.value-0);"></TD>';}else{result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="36"><SPAN CLASS="'+this.cssPrefix+'cpYearNavigation">'+year+'</SPAN></TD>';}result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="'+refresh+'('+this.index+','+month+','+(year+1)+');">></A></TD>';}else{result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refresh+'('+this.index+','+last_month+','+last_month_year+');"><<</A></TD>\n';result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="100"><SPAN CLASS="'+this.cssPrefix+'cpMonthNavigation">'+this.monthNames[month-1]+' '+year+'</SPAN></TD>\n';result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refresh+'('+this.index+','+next_month+','+next_month_year+');">>></A></TD>\n';}result += '</TR></TABLE>\n';result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=0 CELLPADDING=1 ALIGN=CENTER>\n';result += '<TR>\n';for(var j=0;j<7;j++){result += '<TD CLASS="'+this.cssPrefix+'cpDayColumnHeader" WIDTH="14%"><SPAN CLASS="'+this.cssPrefix+'cpDayColumnHeader">'+this.dayHeaders[(this.weekStartDay+j)%7]+'</TD>\n';}result += '</TR>\n';for(var row=1;row<=6;row++){result += '<TR>\n';for(var col=1;col<=7;col++){var disabled=false;if(this.disabledDatesExpression!=""){var ds=""+display_year+LZ(display_month)+LZ(display_date);eval("disabled=("+this.disabledDatesExpression+")");}var dateClass = "";if((display_month == this.currentDate.getMonth()+1) &&(display_date==this.currentDate.getDate()) &&(display_year==this.currentDate.getFullYear())){dateClass = "cpCurrentDate";}else if(display_month == month){dateClass = "cpCurrentMonthDate";}else{dateClass = "cpOtherMonthDate";}if(disabled || this.disabledWeekDays[col-1]){result += ' <TD CLASS="'+this.cssPrefix+dateClass+'"><SPAN CLASS="'+this.cssPrefix+dateClass+'Disabled">'+display_date+'</SPAN></TD>\n';}else{var selected_date = display_date;var selected_month = display_month;var selected_year = display_year;if(this.displayType=="week-end"){var d = new Date(selected_year,selected_month-1,selected_date,0,0,0,0);d.setDate(d.getDate() +(7-col));selected_year = d.getYear();if(selected_year < 1000){selected_year += 1900;}selected_month = d.getMonth()+1;selected_date = d.getDate();}result += ' <TD CLASS="'+this.cssPrefix+dateClass+'"><A HREF="javascript:'+windowref+this.returnFunction+'('+selected_year+','+selected_month+','+selected_date+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+this.cssPrefix+dateClass+'">'+display_date+'</A></TD>\n';}display_date++;if(display_date > daysinmonth[display_month]){display_date=1;display_month++;}if(display_month > 12){display_month=1;display_year++;}}result += '</TR>';}var current_weekday = now.getDay() - this.weekStartDay;if(current_weekday < 0){current_weekday += 7;}result += '<TR>\n';result += ' <TD COLSPAN=7 ALIGN=CENTER CLASS="'+this.cssPrefix+'cpTodayText">\n';if(this.disabledDatesExpression!=""){var ds=""+now.getFullYear()+LZ(now.getMonth()+1)+LZ(now.getDate());eval("disabled=("+this.disabledDatesExpression+")");}if(disabled || this.disabledWeekDays[current_weekday+1]){result += ' <SPAN CLASS="'+this.cssPrefix+'cpTodayTextDisabled">'+this.todayText+'</SPAN>\n';}else{result += ' <A CLASS="'+this.cssPrefix+'cpTodayText" HREF="javascript:'+windowref+this.returnFunction+'(\''+now.getFullYear()+'\',\''+(now.getMonth()+1)+'\',\''+now.getDate()+'\');'+windowref+'CP_hideCalendar(\''+this.index+'\');">'+this.todayText+'</A>\n';}result += ' <BR>\n';result += ' </TD></TR></TABLE></CENTER></TD></TR></TABLE>\n';}if(this.displayType=="month" || this.displayType=="quarter" || this.displayType=="year"){if(arguments.length > 0){var year = arguments[0];}else{if(this.displayType=="year"){var year = now.getFullYear()-this.yearSelectStartOffset;}else{var year = now.getFullYear();}}if(this.displayType!="year" && this.isShowYearNavigation){result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";result += '<TR>\n';result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year-1)+');"><<</A></TD>\n';result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="100">'+year+'</TD>\n';result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year+1)+');">>></A></TD>\n';result += '</TR></TABLE>\n';}}if(this.displayType=="month"){result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>\n';for(var i=0;i<4;i++){result += '<TR>';for(var j=0;j<3;j++){var monthindex =((i*3)+j);result += '<TD WIDTH=33% ALIGN=CENTER><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnMonthFunction+'('+year+','+(monthindex+1)+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">'+this.monthAbbreviations[monthindex]+'</A></TD>';}result += '</TR>';}result += '</TABLE></CENTER></TD></TR></TABLE>\n';}if(this.displayType=="quarter"){result += '<BR><TABLE WIDTH=120 BORDER=1 CELLSPACING=0 CELLPADDING=0 ALIGN=CENTER>\n';for(var i=0;i<2;i++){result += '<TR>';for(var j=0;j<2;j++){var quarter =((i*2)+j+1);result += '<TD WIDTH=50% ALIGN=CENTER><BR><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnQuarterFunction+'('+year+','+quarter+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">Q'+quarter+'</A><BR><BR></TD>';}result += '</TR>';}result += '</TABLE></CENTER></TD></TR></TABLE>\n';}if(this.displayType=="year"){var yearColumnSize = 4;result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";result += '<TR>\n';result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="50%"><A CLASS="cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year-(yearColumnSize*2))+');"><<</A></TD>\n';result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="50%"><A CLASS="cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year+(yearColumnSize*2))+');">>></A></TD>\n';result += '</TR></TABLE>\n';result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>\n';for(var i=0;i<yearColumnSize;i++){for(var j=0;j<2;j++){var currentyear = year+(j*yearColumnSize)+i;result += '<TD WIDTH=50% ALIGN=CENTER><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnYearFunction+'('+currentyear+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">'+currentyear+'</A></TD>';}result += '</TR>';}result += '</TABLE></CENTER></TD></TR></TABLE>\n';}if(this.type == "WINDOW"){result += "</BODY></HTML>\n";}return result;} + Added: cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-advanced-field-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-advanced-field-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-advanced-field-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,164 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance" + exclude-result-prefixes="fi"> + <!--+ + | This stylesheet is designed to be included by 'forms-samples-styling.xsl'. + | It extends the 'forms-field-styling.xsl' with additional stylings. + | The very specific advanced stylings as the calendar or htmlarea (both + | also need additional JS files) are separated out of this file. + +--> + + <xsl:import href="forms-field-styling.xsl"/> + <xsl:include href="forms-calendar-styling.xsl"/> + <xsl:include href="forms-htmlarea-styling.xsl"/> + <!-- Location of the resources directory, where JS libs and icons are stored --> + <xsl:param name="resources-uri">resources</xsl:param> + + <xsl:template match="head" mode="forms-field"> + <xsl:apply-imports/> + <script src="{$resources-uri}/mattkruse-lib/AnchorPosition.js" type="text/javascript"/> + <script src="{$resources-uri}/mattkruse-lib/PopupWindow.js" type="text/javascript"/> + <script src="{$resources-uri}/mattkruse-lib/OptionTransfer.js" type="text/javascript"/> + <script src="{$resources-uri}/mattkruse-lib/selectbox.js" type="text/javascript"/> + <xsl:apply-templates select="." mode="forms-calendar"/> + <xsl:apply-templates select="." mode="forms-htmlarea"/> + </xsl:template> + + <xsl:template match="body" mode="forms-field"> + <xsl:apply-imports/> + <xsl:apply-templates select="." mode="forms-calendar"/> + <xsl:apply-templates select="." mode="forms-htmlarea"/> + </xsl:template> + + <!--+ This template should not be necessary as this stylesheet "inherits" + | all templates from 'forms-field-styling.xsl', but without it, it does + | not work for me (using Xalan 2.5.1). It's like adding all methods of + | a superclass in a subclass and calling everywhere only the super + | implementation. + +--> + <xsl:template match="*"> + <xsl:apply-imports/> + </xsl:template> + + <!--+ + | Add fi:help to the common stuff. + +--> + <xsl:template match="fi:*" mode="common"> + <xsl:apply-imports/> + <xsl:apply-templates select="fi:help"/> + </xsl:template> + + <!--+ + | + +--> + <xsl:template match="fi:help"> + <xsl:variable name="id" select="generate-id()"/> + <div class="forms-help" id="help{$id}" style="visibility:hidden; position:absolute;"> + <xsl:apply-templates select="node()"/> + </div> + <script type="text/javascript"> + var helpWin<xsl:value-of select="$id"/> = forms_createPopupWindow('help<xsl:value-of select="$id"/>'); + </script> + <a id="{$id}" name="{$id}" href="#" onclick="helpWin{$id}.showPopup('{$id}');return false;"><img border="0" src="{$resources-uri}/help.gif"/></a> + </xsl:template> + + <!--+ + | fi:multivaluefield with list-type='double-listbox' styling + +--> + <xsl:template match="fi:multivaluefield[fi:styling/@list-type='double-listbox']"> + <xsl:variable name="id" select="@id"/> + <xsl:variable name="values" select="fi:values/fi:value/text()"/> + + <span class="forms-doubleList" title="{fi:hint}"> + <table> + <xsl:if test="fi:styling/fi:available-label|fi:styling/fi:selected-label"> + <tr> + <th> + <xsl:copy-of select="fi:styling/fi:available-label/node()"/> + </th> + <th> </th> + <th> + <xsl:copy-of select="fi:styling/fi:selected-label/node()"/> + </th> + </tr> + </xsl:if> + <tr> + <td> + <!-- select for the unselected values --> + <select id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" multiple="multiple" + ondblclick="opt{generate-id()}.forms_transferRight()"> + <xsl:apply-templates select="." mode="styling"/> + <xsl:for-each select="fi:selection-list/fi:item"> + <xsl:variable name="value" select="@value"/> + <xsl:if test="not($values[. = $value])"> + <option value="{$value}"> + <xsl:copy-of select="fi:label/node()"/> + </option> + </xsl:if> + </xsl:for-each> + </select> + </td> + <td> + <!-- command buttons --> + <!-- strangely, IE adds an extra blank line if there only a button on a line. So we surround it with nbsp --> + <xsl:text> </xsl:text> + <input type="button" value=">" onclick="opt{generate-id()}.forms_transferRight()"/> + <xsl:text> </xsl:text> + <br/> + <xsl:text> </xsl:text> + <input type="button" value=">>" onclick="opt{generate-id()}.forms_transferAllRight()"/> + <xsl:text> </xsl:text> + <br/> + <xsl:text> </xsl:text> + <input type="button" value="<" onclick="opt{generate-id()}.forms_transferLeft()"/> + <xsl:text> </xsl:text> + <br/> + <xsl:text> </xsl:text> + <input type="button" value="<<" onclick="opt{generate-id()}.forms_transferAllLeft()"/> + <xsl:text> </xsl:text> + <br/> + <xsl:apply-templates select="." mode="common"/> + </td> + <td> + <!-- select for the selected values --> + <select id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" multiple="multiple" + ondblclick="opt{generate-id()}.forms_transferLeft()" > + <xsl:apply-templates select="." mode="styling"/> + <xsl:for-each select="fi:selection-list/fi:item"> + <xsl:variable name="value" select="@value"/> + <xsl:if test="$values[. = $value]"> + <option value="{$value}"> + <xsl:copy-of select="fi:label/node()"/> + </option> + </xsl:if> + </xsl:for-each> + </select> + </td> + </tr> + </table> + <script type="text/javascript"> + var opt<xsl:value-of select="generate-id()"/> = forms_createOptionTransfer('<xsl:value-of select="@id"/>', <xsl:value-of select="fi:styling/@submit-on-change = 'true'"/>); + </script> + </span> + </xsl:template> + + <xsl:template match="fi:multivaluefield/fi:[EMAIL PROTECTED]'double-listbox']/@submit-on-change" mode="styling"/> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-calendar-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-calendar-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-calendar-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,80 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance" + exclude-result-prefixes="fi"> + <!--+ + | This stylesheet is designed to be included by 'forms-advanced-styling.xsl'. + +--> + + <!-- Location of the resources directory, where JS libs and icons are stored --> + <xsl:param name="resources-uri">resources</xsl:param> + + <xsl:template match="head" mode="forms-calendar"> + <script src="{$resources-uri}/mattkruse-lib/CalendarPopup.js" type="text/javascript"/> + <script src="{$resources-uri}/mattkruse-lib/date.js" type="text/javascript"/> + <script type="text/javascript"> + // Setup calendar + var forms_calendar = CalendarPopup('forms_calendarDiv'); + forms_calendar.setWeekStartDay(1); + forms_calendar.showYearNavigation(); + forms_calendar.showYearNavigationInput(); + forms_calendar.setCssPrefix("forms_"); + </script> + <link rel="stylesheet" type="text/css" href="{$resources-uri}/forms-calendar.css"/> + </xsl:template> + + <xsl:template match="body" mode="forms-calendar"> + <div id="forms_calendarDiv"/> + </xsl:template> + + <!--+ + | fi:field with either + | - explicit styling @type = 'date' or + | - implicit if no styling @type is specified, + | but datatype @type = 'date', selection lists must be excluded here + +--> + <xsl:template match="fi:field[fi:styling/@type='date'] | + fi:field[not(fi:styling/@type)][fi:[EMAIL PROTECTED]'date']][not(fi:selection-list)]"> + <xsl:variable name="id" select="generate-id()"/> + + <xsl:variable name="format"> + <xsl:choose> + <xsl:when test="fi:[EMAIL PROTECTED]'date']/fi:convertor/@pattern"> + <xsl:value-of select="fi:[EMAIL PROTECTED]'date']/fi:convertor/@pattern"/> + </xsl:when> + <xsl:otherwise>yyyy-MM-dd</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <!-- regular input --> + <input id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" value="{fi:value}" title="{normalize-space(fi:hint)}" type="text"> + <xsl:apply-templates select="." mode="styling"/> + </input> + + <!-- calendar popup --> + <a href="#" name="{$id}" id="{$id}" + onClick="forms_calendar.select(forms_getForm(this)['[EMAIL PROTECTED]'],'{$id}','{$format}'); return false;"> + <img src="{$resources-uri}/cal.gif" border="0" alt="Calendar"/> + </a> + + <!-- common stuff --> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-field-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-field-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-field-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,522 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance" + exclude-result-prefixes="fi"> + <!--+ + | This stylesheet is designed to be included by 'forms-samples-styling.xsl'. + | Version CVS $Id$ + +--> + + <!-- Location of the resources directory, where JS libs and icons are stored --> + <xsl:param name="resources-uri">resources</xsl:param> + + <xsl:template match="head" mode="forms-field"> + <script src="{$resources-uri}/forms-lib.js" type="text/javascript"/> + <link rel="stylesheet" type="text/css" href="{$resources-uri}/forms.css"/> + </xsl:template> + + <xsl:template match="body" mode="forms-field"> + <xsl:copy-of select="@*"/> + <xsl:attribute name="onload">forms_onload(); <xsl:value-of select="@onload"/></xsl:attribute> + </xsl:template> + + <!--+ + | Generic fi:field : produce an <input> + +--> + <xsl:template match="fi:field"> + <input name="[EMAIL PROTECTED]" id="[EMAIL PROTECTED]" value="{fi:value}" title="{fi:hint}" type="text"> + <xsl:apply-templates select="." mode="styling"/> + </input> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | Common stuff like fi:validation-message, @required. + +--> + <xsl:template match="fi:*" mode="common"> + <!-- validation message --> + <xsl:apply-templates select="fi:validation-message"/> + <!-- required mark --> + <xsl:if test="@required='true'"> + <span class="forms-field-required"> * </span> + </xsl:if> + </xsl:template> + + <!--+ + | Handling the common styling. You may only add attributes to the output + | in this template as later processing might add attributes too, for + | example @checked or @selected + +--> + <xsl:template match="fi:*" mode="styling"> + <xsl:apply-templates select="fi:styling/@*" mode="styling"/> + + <!--+ + | @listbox-size needs to be handled separately as even if it is not + | specified some output (@size) must be generated. + +--> + <xsl:if test="self::fi:field[fi:selection-list][fi:styling/@list-type = 'listbox'] or + self::fi:multivaluefield[not(fi:styling/@list-type = 'checkbox')]"> + <xsl:variable name="size"> + <xsl:value-of select="fi:styling/@listbox-size"/> + <xsl:if test="not(fi:styling/@listbox-size)">5</xsl:if> + </xsl:variable> + <xsl:attribute name="size"> + <xsl:value-of select="$size"/> + </xsl:attribute> + </xsl:if> + </xsl:template> + + <xsl:template match="fi:styling/@*" mode="styling"> + <xsl:copy-of select="."/> + </xsl:template> + + <xsl:template match="fi:styling/@submit-on-change" mode="styling"> + <xsl:if test=". = 'true'"> + <xsl:attribute name="onchange">forms_submitForm(this)</xsl:attribute> + </xsl:if> + </xsl:template> + + <xsl:template match="fi:styling/@list-type | fi:styling/@list-orientation | + fi:styling/@listbox-size | fi:styling/@format | fi:styling/@layout" + mode="styling"> + <!--+ + | Ignore marker attributes so they don't go into the resuling HTML. + +--> + </xsl:template> + + <xsl:template match="fi:styling/@type" mode="styling"> + <!--+ + | Do we have a duplicate semantic usage of @type? + | @type is only a marker for the stylesheet in general, but some of the + | types must/should be in the HTML output too. + +--> + <xsl:variable name="validHTMLTypes" + select="'text hidden textarea checkbox radio password image reset submit'"/> + <xsl:if test="normalize-space(.) and + contains(concat(' ', $validHTMLTypes, ' '), concat(' ', ., ' '))"> + <xsl:copy-of select="."/> + </xsl:if> + </xsl:template> + + <!--+ + | + +--> + <xsl:template match="fi:validation-message"> + <a href="#" class="forms-validation-message" onclick="alert('{normalize-space(.)}');return false;"> ! </a> + </xsl:template> + + <!--+ + | Hidden fi:field : produce input with type='hidden' + +--> + <xsl:template match="fi:field[fi:styling/@type='hidden']" priority="2"> + <input type="hidden" name="[EMAIL PROTECTED]" id="[EMAIL PROTECTED]" value="{fi:value}"> + <xsl:apply-templates select="." mode="styling"/> + </input> + </xsl:template> + + <!--+ + | fi:field with a selection list and @list-type 'radio' : produce + | radio-buttons oriented according to @list-orientation + | ("horizontal" or "vertical" - default) + +--> + <xsl:template match="fi:field[fi:selection-list][fi:styling/@list-type='radio']" priority="2"> + <xsl:variable name="id" select="@id"/> + <xsl:variable name="value" select="fi:value"/> + <xsl:variable name="vertical" select="string(fi:styling/@list-orientation) != 'horizontal'"/> + <xsl:choose> + <xsl:when test="$vertical"> + <table cellpadding="0" cellspacing="0" border="0" title="{fi:hint}"> + <xsl:for-each select="fi:selection-list/fi:item"> + <tr> + <td> + <input type="radio" id="{generate-id()}" name="{$id}" value="[EMAIL PROTECTED]"> + <xsl:if test="@value = $value"> + <xsl:attribute name="checked">checked</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="." mode="styling"/> + </input> + </td> + <td> + <label for="{generate-id()}"><xsl:copy-of select="fi:label/node()"/></label> + </td> + <xsl:if test="position() = 1"> + <td rowspan="{count(../fi:item)}"> + <xsl:apply-templates select="../.." mode="common"/> + </td> + </xsl:if> + </tr> + </xsl:for-each> + </table> + </xsl:when> + <xsl:otherwise> + <span title="{fi:hint}"> + <xsl:for-each select="fi:selection-list/fi:item"> + <input type="radio" id="{generate-id()}" name="{$id}" value="[EMAIL PROTECTED]"> + <xsl:if test="@value = $value"> + <xsl:attribute name="checked">checked</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="." mode="styling"/> + </input> + <label for="{generate-id()}"><xsl:copy-of select="fi:label/node()"/></label> + </xsl:for-each> + </span> + <xsl:apply-templates select="." mode="common"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!--+ + | fi:field with a selection list (not 'radio' style) + | Rendering depends on the attributes of fi:styling : + | - if @list-type is "listbox" : produce a list box with @listbox-size visible + | items (default 5) + | - otherwise, produce a dropdown menu + +--> + <xsl:template match="fi:field[fi:selection-list]" priority="1"> + <xsl:variable name="value" select="fi:value"/> + + <!-- dropdown or listbox --> + <select title="{fi:hint}" id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]"> + <xsl:apply-templates select="." mode="styling"/> + <xsl:for-each select="fi:selection-list/fi:item"> + <option value="[EMAIL PROTECTED]"> + <xsl:if test="@value = $value"> + <xsl:attribute name="selected">selected</xsl:attribute> + </xsl:if> + <xsl:copy-of select="fi:label/node()"/> + </option> + </xsl:for-each> + </select> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:field with a selection list and @type 'output' + +--> + <xsl:template match="fi:field[fi:selection-list][fi:styling/@type='output']" priority="3"> + <xsl:variable name="value" select="fi:value"/> + <xsl:variable name="selected" select="fi:selection-list/fi:[EMAIL PROTECTED] = $value]"/> + <xsl:choose> + <xsl:when test="$selected/fi:label"> + <xsl:apply-templates select="$selected/fi:label"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$value"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!--+ + | fi:field with @type 'textarea' + +--> + <xsl:template match="fi:field[fi:styling/@type='textarea']"> + <textarea id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" title="{fi:hint}"> + <xsl:apply-templates select="." mode="styling"/> + <!-- remove carriage-returns (occurs on certain versions of IE and doubles linebreaks at each submit) --> + <xsl:copy-of select="translate(fi:value/node(), ' ', '')"/> + </textarea> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:field with @type 'output' and fi:output are both rendered as text + +--> + <xsl:template match="fi:output | fi:field[fi:styling/@type='output']" priority="2"> + <xsl:copy-of select="fi:value/node()"/> + </xsl:template> + + <!--+ + | Labels for form elements. + +--> + <xsl:template match="fi:*" mode="label"> + <label for="[EMAIL PROTECTED]" title="{fi:hint}"> + <xsl:copy-of select="fi:label/node()"/> + </label> + </xsl:template> + + <!--+ + | Labels for pure outputs must not contain <label/> as there is no element to point to. + +--> + <xsl:template match="fi:output | fi:field[fi:styling/@type='output']" mode="label"> + <xsl:copy-of select="fi:label/node()"/> + </xsl:template> + + <!--+ + | fi:booleanfield : produce a checkbox + +--> + <xsl:template match="fi:booleanfield"> + <input id="[EMAIL PROTECTED]" type="checkbox" value="true" name="[EMAIL PROTECTED]" title="{fi:hint}"> + <xsl:apply-templates select="." mode="styling"/> + <xsl:if test="fi:value = 'true'"> + <xsl:attribute name="checked">checked</xsl:attribute> + </xsl:if> + </input> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:booleanfield with @type 'output' : rendered as text + +--> + <xsl:template match="fi:booleanfield[fi:styling/@type='output']"> + <xsl:choose> + <xsl:when test="fi:value = 'true'"> + yes + </xsl:when> + <xsl:otherwise> + no + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!--+ + | fi:action + +--> + <xsl:template match="fi:action"> + <input id="[EMAIL PROTECTED]" type="submit" name="[EMAIL PROTECTED]" title="{fi:hint}"> + <xsl:attribute name="value"><xsl:value-of select="fi:label/node()"/></xsl:attribute> + <xsl:apply-templates select="." mode="styling"/> + </input> + </xsl:template> + + <!--+ + | fi:continuation-id : produce a hidden "continuation-id" input + +--> + <xsl:template match="fi:continuation-id"> + <xsl:variable name="name"> + <xsl:value-of select="@name"/> + <xsl:if test="not(@name)">continuation-id</xsl:if> + </xsl:variable> + <input name="{$name}" type="hidden" value="{.}"/> + </xsl:template> + + <!--+ + | fi:multivaluefield : produce a list of checkboxes + +--> + <xsl:template match="fi:multivaluefield[fi:styling/@list-type='checkbox']"> + <xsl:variable name="id" select="@id"/> + <xsl:variable name="values" select="fi:values/fi:value/text()"/> + + <span title="{fi:hint}"> + <xsl:for-each select="fi:selection-list/fi:item"> + <xsl:variable name="value" select="@value"/> + <input id="{generate-id()}" type="checkbox" value="[EMAIL PROTECTED]" name="{$id}"> + <xsl:if test="$values[. = $value]"> + <xsl:attribute name="checked">checked</xsl:attribute> + </xsl:if> + </input> + <label for="{generate-id()}"><xsl:copy-of select="fi:label/node()"/></label> + <br/> + </xsl:for-each> + </span> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:multivaluefield : produce a multiple-selection list + +--> + <xsl:template match="fi:multivaluefield"> + <xsl:variable name="id" select="@id"/> + <xsl:variable name="values" select="fi:values/fi:value/text()"/> + + <span title="{fi:hint}"> + <select id="[EMAIL PROTECTED]" name="{$id}" multiple="multiple"> + <xsl:apply-templates select="." mode="styling"/> + <xsl:for-each select="fi:selection-list/fi:item"> + <xsl:variable name="value" select="@value"/> + <option value="{$value}"> + <xsl:if test="$values[. = $value]"> + <xsl:attribute name="selected">selected</xsl:attribute> + </xsl:if> + <xsl:copy-of select="fi:label/node()"/> + </option> + </xsl:for-each> + </select> + </span> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:upload + +--> + <xsl:template match="fi:upload"> + <xsl:choose> + <xsl:when test="fi:value"> + <!-- Has a value (filename): display it with a change button --> + <span title="{fi:hint}"> + [<xsl:value-of select="fi:value"/>] <input type="submit" id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" value="..."/> + </span> + </xsl:when> + <xsl:otherwise> + <input type="file" id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" title="{fi:hint}" accept="[EMAIL PROTECTED]"/> + </xsl:otherwise> + </xsl:choose> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <!--+ + | fi:repeater + +--> + <xsl:template match="fi:repeater"> + <input type="hidden" name="[EMAIL PROTECTED]" value="[EMAIL PROTECTED]"/> + <table border="1"> + <tr> + <xsl:for-each select="fi:headings/fi:heading"> + <th><xsl:value-of select="."/></th> + </xsl:for-each> + </tr> + <xsl:apply-templates select="fi:repeater-row"/> + </table> + </xsl:template> + + <!--+ + | fi:repeater-row + +--> + <xsl:template match="fi:repeater-row"> + <tr> + <xsl:for-each select="*"> + <td> + <xsl:apply-templates select="."/> + </td> + </xsl:for-each> + </tr> + </xsl:template> + + <!--+ + | fi:repeater-size + +--> + <xsl:template match="fi:repeater-size"> + <input type="hidden" name="[EMAIL PROTECTED]" value="[EMAIL PROTECTED]"/> + </xsl:template> + + <!--+ + | fi:form-template|fi:form-generated + +--> + <xsl:template match="fi:form-template|fi:form-generated"> + <form> + <xsl:copy-of select="@*"/> + <xsl:attribute name="onsubmit">forms_onsubmit(); <xsl:value-of select="@onsubmit"/></xsl:attribute> + <!-- hidden field to store the submit id --> + <div><input type="hidden" name="forms_submit_id"/></div> + <xsl:apply-templates/> + + <!-- TODO: consider putting this in the xml stream from the generator? --> + <xsl:if test="self::fi:form-generated"> + <input type="submit"/> + </xsl:if> + </form> + </xsl:template> + + <!--+ + | fi:form + +--> + <xsl:template match="fi:form"> + <table border="1"> + <xsl:for-each select="fi:widgets/*"> + <tr> + <xsl:choose> + <xsl:when test="self::fi:repeater"> + <td colspan="2"> + <xsl:apply-templates select="."/> + </td> + </xsl:when> + <xsl:when test="self::fi:booleanfield"> + <td> </td> + <td> + <xsl:apply-templates select="."/> + <xsl:text> </xsl:text> + <xsl:copy-of select="fi:label"/> + </td> + </xsl:when> + <xsl:otherwise> + <td> + <xsl:copy-of select="fi:label"/> + </td> + <td> + <xsl:apply-templates select="."/> + </td> + </xsl:otherwise> + </xsl:choose> + </tr> + </xsl:for-each> + </table> + </xsl:template> + + <xsl:template match="fi:aggregatefield"> + <input id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" value="{fi:value}" title="{fi:hint}"> + <xsl:apply-templates select="." mode="styling"/> + </input> + <xsl:apply-templates select="." mode="common"/> + </xsl:template> + + <xsl:template match="fi:messages"> + <xsl:if test="fi:message"> + <xsl:copy-of select="fi:label/node()"/>: + <ul> + <xsl:for-each select="fi:message"> + <li><xsl:apply-templates/></li> + </xsl:for-each> + </ul> + </xsl:if> + </xsl:template> + + <xsl:template match="fi:validation-errors"> + <xsl:variable name="header"> + <xsl:choose> + <xsl:when test="header"> + <xsl:copy-of select="header"/> + </xsl:when> + <xsl:otherwise> + <p class="forms-validation-errors">The following errors have been detected (marked with !):</p> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="footer"> + <xsl:choose> + <xsl:when test="footer"> + <xsl:copy-of select="footer"/> + </xsl:when> + <xsl:otherwise> + <p class="forms-validation-errors">Please, correct them and re-submit the form.</p> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="frm" select="ancestor::fi:form-template"/> + <xsl:if test="$frm and $frm//fi:validation-message"> + <xsl:copy-of select="$header"/> + <ul> + <xsl:for-each select="$frm//fi:validation-message"> + <li class="forms-validation-error"> + <xsl:if test="../fi:label"> + <xsl:value-of select="../fi:label"/><xsl:text>: </xsl:text> + </xsl:if> + <xsl:value-of select="."/> + </li> + </xsl:for-each> + </ul> + <xsl:copy-of select="$footer"/> + </xsl:if> + </xsl:template> + + <xsl:template match="@*|node()" priority="-1"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-htmlarea-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-htmlarea-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-htmlarea-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,69 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance" + exclude-result-prefixes="fi"> + <!--+ + | This stylesheet is designed to be included by 'forms-advanced-styling.xsl'. + +--> + + <!-- Location of the resources directory, where JS libs and icons are stored --> + <xsl:param name="resources-uri">resources</xsl:param> + <xsl:param name="htmlarea-lang">en</xsl:param> + + <xsl:template match="head" mode="forms-htmlarea"> + <script type="text/javascript"> + _editor_url = "<xsl:value-of select="concat($resources-uri, '/htmlarea/')"/>"; + _editor_lang = "<xsl:value-of select="$htmlarea-lang"/>"; + </script> + <script type="text/javascript" src="{$resources-uri}/htmlarea/htmlarea.js"></script> + </xsl:template> + + <xsl:template match="body" mode="forms-htmlarea"/> + + <!--+ + | fi:field with @type 'htmlarea' + +--> + <xsl:template match="fi:field[fi:[EMAIL PROTECTED]'htmlarea']]"> + <textarea id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" title="{fi:hint}"> + <xsl:apply-templates select="." mode="styling"/> + <!-- remove carriage-returns (occurs on certain versions of IE and doubles linebreaks at each submit) --> + <xsl:apply-templates select="fi:value/node()" mode="htmlarea-copy"/> + </textarea> + <xsl:apply-templates select="." mode="common"/> + <xsl:choose> + <xsl:when test="fi:styling/initFunction"> + <script language="JavaScript"><xsl:value-of select="fi:styling/initFunction"/>('<xsl:value-of select="@id"/>');</script> + </xsl:when> + <xsl:otherwise> + <script language="JavaScript">HTMLArea.replace('<xsl:value-of select="@id"/>');</script> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="@*|*" mode="htmlarea-copy"> + <xsl:copy> + <xsl:apply-templates select="@*|node()" mode="htmlarea-copy"/> + </xsl:copy> + </xsl:template> + + <xsl:template match="text()" mode="htmlarea-copy"> + <xsl:copy-of select="translate(., ' ', '')"/> + </xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-page-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-page-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-page-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,331 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance" + exclude-result-prefixes="fi"> + <!--+ + | This stylesheet is designed to be included by 'forms-samples-styling.xsl'. + +--> + <xsl:template match="head" mode="forms-page"> + <!--+ 'forms-page-styling.xsl' relies on 'forms-field-styling.xsl' for the + | inclusion of the correct JS and CSS files. To fix it, we have to + | separate the page specific parts into their own files. + +--> + </xsl:template> + + <xsl:template match="body" mode="forms-page"/> + + <!-- + fi:group : default is to enclose items in a div + --> + <xsl:template match="fi:group"> + <div title="{fi:hint}"> + <xsl:copy-of select="@*"/> + <xsl:apply-templates mode="group-layout" select="."/> + </div> + </xsl:template> + + <!-- + fi:group of type tabs + --> + <xsl:template match="fi:group[fi:styling/@type='tabs']"> + <!-- find the currently selected tab. + Thoughts still needed here, such as autogenerating a field in the + forms transformer to hold this state. + --> + <xsl:variable name="active"> + <xsl:variable name="value" select="normalize-space(fi:state/fi:*/fi:value)"/> + <xsl:choose> + <xsl:when test="$value"> + <xsl:value-of select="$value"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <!-- copy the "state-widget" attribute for use in for-each --> + <xsl:variable name="state-widget" select="fi:state/fi:*/@id"/> + <xsl:variable name="id" select="generate-id()"/> + + <div id="{$id}" title="{fi:hint}"> + <!-- add an hidden input for the state --> + <xsl:if test="$state-widget"> + <input type="hidden" name="{$state-widget}" value="{$active}"/> + </xsl:if> + <!-- div containing the tabs --> + <div class="forms-tabArea"> + <xsl:for-each select="fi:items/fi:*"> + <xsl:variable name="pos" select="position() - 1"/> + <span id="{$id}_tab_{$pos}" onclick="forms_showTab('{$id}', {$pos}, {last()}, '{$state-widget}')"> + <xsl:attribute name="class"> + <xsl:text>forms-tab</xsl:text> + <xsl:if test="$active = $pos"> forms-activeTab</xsl:if> + </xsl:attribute> + <xsl:copy-of select="fi:label/node()"/> + <xsl:if test="fi:items/*//fi:validation-message"> + <span class="forms-validation-message"> ! </span> + </xsl:if> + </span> + </xsl:for-each> + </div> + <!-- a div for each of the items --> + <xsl:for-each select="fi:items/fi:*"> + <xsl:variable name="pos" select="position() - 1"/> + <div class="forms-tabContent" id="{$id}_items_{$pos}"> + <xsl:if test="$active != $pos"> + <xsl:attribute name="style">display:none</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="."/> + </div> + </xsl:for-each> + </div> + </xsl:template> + + <!-- + fi:group of type choice : a popup is used instead of tabs + --> + <xsl:template match="fi:group[fi:styling/@type='choice']"> + <!-- find the currently selected tab. + Thoughts still needed here, such as autogenerating a field in the formstransformer + to hold this state. + --> + <xsl:variable name="active"> + <xsl:variable name="value" select="normalize-space(fi:state/fi:*/fi:value)"/> + <xsl:choose> + <xsl:when test="$value"> + <xsl:value-of select="$value"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <!-- copy the "state-widget" attribute for use in for-each --> + <xsl:variable name="state-widget" select="fi:state/fi:*/@id"/> + <xsl:variable name="id" select="generate-id()"/> + + <fieldset id="{$id}"> + <legend title="{fi:hint}"> + <xsl:apply-templates select="fi:label/node()"/> + <select name="{$state-widget}" onchange="forms_showTab('{$id}', this.selectedIndex, {count(fi:items/*)}, '{$state-widget}')"> + <xsl:for-each select="fi:items/fi:*"> + <xsl:variable name="pos" select="position() - 1"/> + <option> + <xsl:attribute name="value"> + <xsl:choose> + <xsl:when test="fi:value"> + <xsl:value-of select="fi:value"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$pos"/> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:if test="$active = $pos"> + <xsl:attribute name="selected">selected</xsl:attribute> + </xsl:if> + <xsl:copy-of select="fi:label/node()"/> + </option> + </xsl:for-each> + </select> + <xsl:if test="fi:items/*//fi:validation-message"> + <span class="forms-validation-message"> ! </span> + </xsl:if> + </legend> + <!-- a div for each of the items --> + <xsl:for-each select="fi:items/fi:*"> + <xsl:variable name="pos" select="position() - 1"/> + <div id="{$id}_items_{$pos}"> + <xsl:if test="$active != $pos"> + <xsl:attribute name="style">display:none</xsl:attribute> + </xsl:if> + <xsl:apply-templates select="."/> + </div> + </xsl:for-each> + </fieldset> + </xsl:template> + + <!-- + fi:group of type fieldset : enclose items in a fieldset frame + --> + <xsl:template match="fi:group[fi:styling/@type='fieldset']"> + <fieldset> + <xsl:apply-templates select="." mode="styling"/> + <legend title="{fi:hint}"><xsl:copy-of select="fi:label/node()"/></legend> + <xsl:apply-templates mode="group-layout" select="."/> + </fieldset> + </xsl:template> + + <!-- + Group items layout : default is no layout + --> + <xsl:template match="fi:group" mode="group-layout"> + <xsl:apply-templates select="fi:items/*"/> + </xsl:template> + + <!-- + Column group items layout + --> + <xsl:template match="fi:group[fi:styling/@layout='column']" mode="group-layout"> + <table border="0" summary="{fi:hint}"> + <tbody> + <xsl:apply-templates select="fi:items/*" mode="group-column-content"/> + </tbody> + </table> + </xsl:template> + + <!-- + Default column layout : label above and input below + --> + <xsl:template match="fi:*" mode="group-column-content"> + <tr> + <td><xsl:apply-templates select="." mode="label"/></td> + </tr> + <tr> + <td><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <xsl:template match="fi:action" mode="group-column-content"> + <tr> + <td><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <!-- + Columns group items layout + --> + <xsl:template match="fi:group[fi:styling/@layout='columns']" mode="group-layout"> + <table border="0" summary="{fi:hint}"> + <tbody> + <xsl:apply-templates select="fi:items/*" mode="group-columns-content"/> + </tbody> + </table> + </xsl:template> + + <!-- + Default columns layout : label left and input right + --> + <xsl:template match="fi:*" mode="group-columns-content"> + <tr> + <td><xsl:apply-templates select="." mode="label"/></td> + <td><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <!-- + Row group items layout + --> + <xsl:template match="fi:group[fi:styling/@layout='row']" mode="group-layout"> + <table border="0" summary="{fi:hint}"> + <tbody> + <tr> + <xsl:apply-templates select="fi:items/*" mode="group-row-content"/> + </tr> + </tbody> + </table> + </xsl:template> + + <!-- + Default row layout : label left and input right + --> + <xsl:template match="fi:*" mode="group-row-content"> + <td><xsl:apply-templates select="." mode="label"/></td> + <td><xsl:apply-templates select="."/></td> + </xsl:template> + + <xsl:template match="fi:action" mode="group-row-content"> + <td><xsl:apply-templates select="."/></td> + </xsl:template> + <!-- + Rows group items layout + --> + <xsl:template match="fi:group[fi:styling/@layout='rows']" mode="group-layout"> + <table border="0" summary="{fi:hint}"> + <tbody> + <tr> + <xsl:apply-templates select="fi:items/*" mode="group-rows-labels"/> + </tr> + <tr> + <xsl:apply-templates select="fi:items/*" mode="group-rows-content"/> + </tr> + </tbody> + </table> + </xsl:template> + + <!-- + Default rows layout : label above and input below + --> + <xsl:template match="fi:*" mode="group-rows-labels"> + <td><xsl:apply-templates select="." mode="label"/></td> + </xsl:template> + + <xsl:template match="fi:action" mode="group-rows-labels"> + <td> </td> + </xsl:template> + + <xsl:template match="fi:*" mode="group-rows-content"> + <td><xsl:apply-templates select="."/></td> + </xsl:template> + + <!-- boolean field : checkbox and label on a single line --> + <xsl:template match="fi:booleanfield" mode="group-columns-content"> + <tr> + <td colspan="2"> + <xsl:apply-templates select="."/> + <xsl:apply-templates select="." mode="label"/> + </td> + </tr> + </xsl:template> + + <!-- action : on a single line --> + <xsl:template match="fi:action" mode="group-columns-content"> + <tr> + <td colspan="2"><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <!-- any other element : on a single line --> + <xsl:template match="*" mode="group-columns-content"> + <tr> + <td colspan="2"><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <!-- double-list multivaluefield : lists under the label --> + <xsl:template match="fi:multivaluefield[fi:styling/@list-type='double-listbox']" + mode="group-columns-content"> + <tr> + <td colspan="2"><xsl:apply-templates select="." mode="label"/></td> + </tr> + <tr> + <td colspan="2"><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <!-- nested group --> + <xsl:template match="fi:group" mode="group-columns-content"> + <tr> + <td colspan="2"><xsl:apply-templates select="."/></td> + </tr> + </xsl:template> + + <xsl:template match="@*|node()" priority="-1"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-styling.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-styling.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/styles/forms-styling.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + + <!--+ Include styling stylesheets, one for the widgets, the other one for the + | page. As 'forms-advanced-field-styling.xsl' is a specialization of + | 'forms-field-styling.xsl' the latter one is imported there. If you don't + | want advanced styling of widgets, change it here! + | See xsl:include as composition and xsl:import as extension/inheritance. + +--> + <xsl:include href="forms-page-styling.xsl"/> + <xsl:include href="forms-advanced-field-styling.xsl"/> + + <xsl:template match="head"> + <head> + <xsl:apply-templates/> + <xsl:apply-templates select="." mode="forms-page"/> + <xsl:apply-templates select="." mode="forms-field"/> + </head> + </xsl:template> + + <xsl:template match="body"> + <body> + <!--+ !!! If template with mode 'forms-page' adds text or elements + | template with mode 'forms-field' can no longer add attributes!!! + +--> + <xsl:apply-templates select="." mode="forms-page"/> + <xsl:apply-templates select="." mode="forms-field"/> + <xsl:apply-templates/> + </body> + </xsl:template> + +</xsl:stylesheet> Modified: cocoon/trunk/src/blocks/portal/samples/skins/common/styles/portal-page.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/skins/common/styles/portal-page.xsl?view=diff&rev=148909&p1=cocoon/trunk/src/blocks/portal/samples/skins/common/styles/portal-page.xsl&r1=148908&p2=cocoon/trunk/src/blocks/portal/samples/skins/common/styles/portal-page.xsl&r2=148909 ============================================================================== --- cocoon/trunk/src/blocks/portal/samples/skins/common/styles/portal-page.xsl (original) +++ cocoon/trunk/src/blocks/portal/samples/skins/common/styles/portal-page.xsl Fri Jan 28 09:54:58 2005 @@ -20,9 +20,15 @@ <xsl:param name="user"/> +<xsl:param name="base"/> <xsl:template match="/"> <html> <head> + <xsl:if test="$base"> + <base> + <xsl:attribute name="href"><xsl:value-of select="$base"/></xsl:attribute> + </base> + </xsl:if> <link type="text/css" rel="stylesheet" href="css/page.css"/> </head> <body> @@ -51,6 +57,7 @@ <td height="99%" bgcolor="#294563" width="1%" align="right"> <xsl:if test="$user!='anonymous'"> <a href="logout" style="color:#CFDCED;font-size:75%;">Logout</a>  + <a href="tools/" style="color:#CFDCED;font-size:75%;">Tools</a>  </xsl:if> <img height="5" src="images/space.gif" width="5"/> </td> Added: cocoon/trunk/src/blocks/portal/samples/tools/auth.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/auth.xml?view=auto&rev=148909 ============================================================================== Added: cocoon/trunk/src/blocks/portal/samples/tools/auth2.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/auth2.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/auth2.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<auth> + <plugin id="copletManagement"> + <functions> + <function id="showTab"> + <roles> + <role>admin</role> + </roles> + <users> + <user>cocoon</user> + </users> + </function> + <actions> + <action id="moveUp"> + <roles> + <role>admin</role> + </roles> + </action> + </actions> + </functions> + </plugin> +</auth> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/conf.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/conf.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/conf.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<conf> +</conf> Added: cocoon/trunk/src/blocks/portal/samples/tools/flow.js Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/flow.js?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/flow.js Fri Jan 28 09:54:58 2005 @@ -0,0 +1,39 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +cocoon.load("resource://org/apache/cocoon/portal/tools/ptm.js"); + +function tools() { + var toolManager = getPTM(); + if(toolManager.getToolsWithFunctions().size() > 0) { + cocoon.sendPage("tools.jx", {"tools" : toolManager.getToolsWithFunctions()}); + } else { + cocoon.sendPage("noTools.jx"); + } + relPTM(toolManager); +} + +function functions() { + var toolManager = getPTM(); + var tool = toolManager.getTool(cocoon.parameters.name); + cocoon.sendPage(tool.getId() + "/functions.jx", {"functions" : tool.getFunctions(), "tool" : tool}); + relPTM(toolManager); +} + +function menu() { + var toolManager = getPTM(); + cocoon.sendPage("menu.jx", {"tools" : toolManager.getToolsWithFunctions()}); + relPTM(toolManager); +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/main/functions.jx Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/main/functions.jx?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/main/functions.jx Fri Jan 28 09:54:58 2005 @@ -0,0 +1,24 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0" xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> +<div style="spacing:3px; padding:5px;"> + <b><i18n:text key="portalTools.functions"/>:</b><br/> + <jx:forEach select="#{functions}" xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + <a href="tools/plugins/#{../tool/id}/#{./function}"><i18n:text i18n:key="#{./name}"/></a><br/> + </jx:forEach> +</div> +</jx:template> Added: cocoon/trunk/src/blocks/portal/samples/tools/main/menu.jx Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/main/menu.jx?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/main/menu.jx Fri Jan 28 09:54:58 2005 @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"> + <tab-layout xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + <jx:forEach select="#{tools}"> + <named-item parameter="tools/functions/#{./id}" name="#{./toolName}"/> + </jx:forEach> + </tab-layout> +</jx:template> Added: cocoon/trunk/src/blocks/portal/samples/tools/main/noTools.jx Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/main/noTools.jx?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/main/noTools.jx Fri Jan 28 09:54:58 2005 @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0" xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> +<div style="spacing:3px; padding:5px;"> + <i18n:text key="portalTools.noToolsAvailable"/> +</div> +</jx:template> Added: cocoon/trunk/src/blocks/portal/samples/tools/main/tools.jx Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/main/tools.jx?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/main/tools.jx Fri Jan 28 09:54:58 2005 @@ -0,0 +1,24 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0" xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + <div style="spacing:3px; padding:5px;"> + <b><i18n:text key="portalTools.tools"/>:</b><br/> + <jx:forEach select="#{tools}" xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + <a href="tools/functions/#{./id}"><i18n:text key="#{./name}"/></a><br/> + </jx:forEach> + </div> +</jx:template> Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/flow.js Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/flow.js?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/flow.js Fri Jan 28 09:54:58 2005 @@ -0,0 +1,192 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +cocoon.load("resource://org/apache/cocoon/portal/tools/ptm.js"); + +// Functions to modify the PortalLayout +// var layoutActions = new Packages.org.apache.cocoon.portal.tools.copletManagement.LayoutActions(portalLayout, componentManager.getLayoutFactory(), componentManager.getCopletFactory(), profileManager); + +function showTab(showId) { + var toolManager = getPTM(); + var portalObjects = toolManager.getPortalObjects(); + var portalLayout = portalObjects.getPortalLayout(); + var portalService = portalObjects.getPortalService(); + var componentManager = portalObjects.getComponentManager(); + var profileManager = portalObjects.getProfileManager(); + var safeLayout = portalLayout; + + /* Use a copy of the Layout in the Tools - DOES NOT WORK ATM + var safeLayout = cocoon.session.getAttribute("safeLayout"); + if(safeLayout == null) { + safeLayout = portalLayout.copy(); + cocoon.session.setAttribute("safeLayout", safeLayout); + } + */ +var layoutActions = new Packages.org.apache.cocoon.portal.tools.copletManagement.LayoutActions(safeLayout, componentManager.getLayoutFactory(), componentManager.getCopletFactory(), profileManager); + var id = cocoon.request.id; + if(showId != null) { + id = showId; + } + if (id == null) id = ""; + + var action = cocoon.request.action; + var actionitem = cocoon.request.actionitem; + + if(action == "del") { + layoutActions.del(actionitem); + } + if(action == "up") { + layoutActions.move(actionitem, true); + } + if(action == "down") { + layoutActions.move(actionitem, false); + } + if(action == "addCol") { + layoutActions.add(actionitem, "column"); + } + if(action == "addRow") { + layoutActions.add(actionitem, "row"); + } + if(action == "addTab") { + var form = new Form("cocoon:/model/addTab"); + form.showForm("form/addTab/template"); + var name = form.getChild("name").getValue(); + + if (actionitem == "maintab") + actionitem = "1"; + + layoutActions.addTab(actionitem, name); + } + + if(action =="addCoplet") { + handleAddCoplets(actionitem, layoutActions); + } + + if(action == "save") { + profileManager.saveUserProfiles(null); + } + + /* save and restore functions if we work with a copy of the layout later. + if(action == "save") { + print("safe layout"); + profileManager.storeProfile(safeLayout, null); + cocoon.session.setAttribute("safeLayout", null); + } + + if(action == "restore") { + print("restore layout"); + safeLayout = portalLayout.copy(); + cocoon.session.setAttribute("safeLayout", safeLayout); + } + */ + + cocoon.sendPage("page/showTab/" + id, {"layout" : safeLayout }); + toolManager.releasePortalObjects(portalObjects); + relPTM(toolManager); +} + +function showXml() { + var toolManager = getPTM(); + var portalObjects = toolManager.getPortalObjects(); + var portalLayout = portalObjects.getPortalLayout(); + var bla = cocoon.request.foo; + cocoon.sendPage("layoutProfile/" + bla, {"layout" : portalLayout }); + toolManager.releasePortalObjects(portalObjects); + relPTM(toolManager); +} + +function showCopletList(current, item) { + var toolManager = getPTM(); + var portalObjects = toolManager.getPortalObjects(); + var profileManager = portalObjects.getProfileManager(); + var coplets = profileManager.getCopletInstanceDatas(); + + cocoon.sendPage("jx/copletList.jx", {"coplets": coplets, "item" : item, "current" : current}); + toolManager.releasePortalObjects(portalObjects); + relPTM(toolManager); +} + +function handleAddCoplets(parent, layoutActions) { + var toolManager = getPTM(); + var portalObjects = toolManager.getPortalObjects(); + var portalService = portalObjects.getPortalService(); + var profileManager = portalObjects.getProfileManager(); + + var form = new Form("cocoon:/model/addCoplet"); + form.createBinding("form/addCoplet/binding.xml"); + var coplets = profileManager.getCopletDatas(); + form.load(profileManager); + form.showForm("form/addCoplet/template"); + layoutActions.getSelectedCoplets(form.getChild("coplets"), coplets, parent); + + toolManager.releasePortalObjects(portalObjects); + relPTM(toolManager); +} + +function selectSkin() { + var toolManager = getPTM(); + var portalObjects = toolManager.getPortalObjects(); + var portalService = portalObjects.getPortalService(); + var portalLayout = portalObjects.getPortalLayout(); + + var id = cocoon.request.id; + var skins = portalService.getSkinDescriptions(); + if(id != null) { + for(var it = skins.iterator(); it.hasNext();) { + var skinName = it.next().getName(); + if(skinName.equals(id)) + portalLayout.getParameters().put("skin", skinName); + } + id = null; + } + cocoon.sendPageAndWait("jx/selectSkin.jx", {"skins" : skins}); + + toolManager.releasePortalObjects(portalObjects); + relPTM(toolManager); +} + +function editCoplet() { + var toolManager = getPTM(); + var portalObjects = toolManager.getPortalObjects(); + var portalService = portalObjects.getPortalService(); + var portalLayout = portalObjects.getPortalLayout(); + var componentManager = portalObjects.getComponentManager(); + var profileManager = portalObjects.getProfileManager(); + var layoutActions = new Packages.org.apache.cocoon.portal.tools.copletManagement.LayoutActions(portalLayout, componentManager.getLayoutFactory(), componentManager.getCopletFactory(), profileManager); + + + var copletId = cocoon.request.actionitem; + var backId = cocoon.request.id; + var instanceData = layoutActions.getCopletInstanceData(copletId); + var copletData = instanceData.getCopletData(); + var copletType = instanceData.getCopletData().getCopletBaseData().getCopletAdapterName(); + var visible = instanceData.getAttributes().get("visible"); + if(visible == null) { + instanceData.getAttributes().put("visible", new Packages.java.lang.Boolean(true)); + } + var which = "all"; + if(copletType.equals("uri")) + which = "uriCoplet"; + var form = new Form("cocoon:/model/editCoplet/" + which); + form.createBinding("form/editCoplet/" + which + "/binding.xml"); + while(1) { + form.load(instanceData); + form.showForm("form/editCoplet/" + which +"/template", {"backId" : backId}); + form.save(instanceData); + } + + toolManager.releasePortalObjects(portalObjects); + relPTM(toolManager); +} Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/binding.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/binding.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/binding.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fb:context + xmlns:fb="http://apache.org/cocoon/forms/1.0#binding" + xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" + path="/"> + + <fb:repeater id="coplets" + parent-path="." + row-path="copletDatas"> + + <fb:identity> + <fb:value id="id" path="@id"/> + </fb:identity> + + <fb:on-bind> + <fb:value id="coplet" path="id"/> + <fb:value id="title" path="title"/> + </fb:on-bind> + + </fb:repeater> + +</fb:context> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/form.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/form.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/form.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fd:form + xmlns:fd="http://apache.org/cocoon/forms/1.0#definition"> + +<fd:widgets> +<fd:repeater id="coplets"> + <fd:label>Coplets</fd:label> + <fd:widgets> + + <fd:output id="id"> + <fd:datatype base="string"/> + </fd:output> + + <fd:output id="coplet"> + <fd:datatype base="string"/> + </fd:output> + + <fd:output id="title"> + <fd:label>Name:</fd:label> + <fd:datatype base="string"/> + </fd:output> + + <fd:booleanfield id="selected"> + <fd:label>Select</fd:label> + </fd:booleanfield> + + </fd:widgets> +</fd:repeater> + +</fd:widgets> +</fd:form> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/template.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/template.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addCoplet/template.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<div style="spacing:3px; padding:5px;" xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:ft="http://apache.org/cocoon/forms/1.0#template" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance"> + <b><i18n:text key="copletManagement.selectCoplet"/></b><br/> + <ft:form-template action="tools/plugins/copletManagement/#{$continuation/id}.continue" method="POST"> + <ft:repeater-widget id="coplets"> + <ft:widget id="selected"/>: <ft:widget id="title"/> <br/> + </ft:repeater-widget> + <input type="submit"/> + </ft:form-template> +</div> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addTab/form.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addTab/form.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addTab/form.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,27 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fd:form + xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + +<fd:widgets> + <fd:field id="name" required="true"> + <fd:label><i18n:text key="copletManagement.tabName"/></fd:label> + <fd:datatype base="string"/> + </fd:field> + +</fd:widgets> +</fd:form> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addTab/template.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addTab/template.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/addTab/template.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<div xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:ft="http://apache.org/cocoon/forms/1.0#template" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance"> + <b><i18n:text key="copletManagement.enterTabName"/></b><br/> + <ft:form-template action="tools/plugins/copletManagement/#{$continuation/id}.continue" method="POST"> + <ft:widget-label id="name"/>: <ft:widget id="name"/> <br/> + <input type="submit"/> + </ft:form-template> +</div> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/binding.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/binding.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/binding.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,24 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fb:context + xmlns:fb="http://apache.org/cocoon/forms/1.0#binding" + xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" + path="/"> + + <fb:value id="title" path="copletData/title"/> + <fb:value id="visible" path="attributes/visible"/> +</fb:context> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/form.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/form.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/form.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fd:form + xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" + xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + +<fd:widgets> + + <fd:field id="title"> + <fd:label><i18n:text key="copletManagement.editCoplet.all.copletTitle"/>:</fd:label> + <fd:datatype base="string"/> + </fd:field> + + <fd:booleanfield id="visible"> + <fd:label><i18n:text key="copletManagement.editCoplet.all.visible"/>:</fd:label> + <fd:datatype base="boolean"/> + </fd:booleanfield> + +</fd:widgets> +</fd:form> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/template.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/template.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/all/template.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<div style="spacing:3px; padding:5px;" xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:ft="http://apache.org/cocoon/forms/1.0#template" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance"> + <b><i18n:text key="copletManagement.editCoplet.all.title"/></b><br/> + <ft:form-template action="tools/plugins/copletManagement/#{$continuation/id}.continue" method="POST"> + <ft:widget-label id="title"/> <ft:widget id="title"/> <br/> + <ft:widget-label id="visible"/> <ft:widget id="visible"/> <br/> + <input type="submit" value="copletManagement.editCoplet.save" i18n:attr="value"/> + <a href="tools/plugins/copletManagement/showTab?id=#{./backId}">back</a> + </ft:form-template> +</div> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/binding.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/binding.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/binding.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fb:context + xmlns:fb="http://apache.org/cocoon/forms/1.0#binding" + xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" + path="/"> + + <fb:value id="title" path="copletData/title"/> + <fb:value id="uri" path="copletData/attributes/uri"/> + <fb:value id="visible" path="attributes/visible"/> +</fb:context> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/form.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/form.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/form.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,39 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fd:form + xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" + xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + +<fd:widgets> + + <fd:field id="title"> + <fd:label><i18n:text key="copletManagement.editCoplet.uri.copletTitle"/>:</fd:label> + <fd:datatype base="string"/> + </fd:field> + + <fd:field id="uri"> + <fd:label><i18n:text key="copletManagement.editCoplet.uri.copletUri"/>:</fd:label> + <fd:datatype base="string"/> + </fd:field> + + <fd:booleanfield id="visible"> + <fd:label><i18n:text key="copletManagement.editCoplet.all.visible"/>:</fd:label> + <fd:datatype base="boolean"/> + </fd:booleanfield> + +</fd:widgets> +</fd:form> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/template.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/template.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/form/editCoplet/uriCoplet/template.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<div style="spacing:3px; padding:5px;" xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:ft="http://apache.org/cocoon/forms/1.0#template" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance"> + <b><i18n:text key="copletManagement.editCoplet.uri.title"/></b><br/> + <ft:form-template action="tools/plugins/copletManagement/#{$continuation/id}.continue" method="POST"> + <ft:widget-label id="title"/> <ft:widget id="title"/> <br/> + <ft:widget-label id="uri"/> <ft:widget id="uri"/> <br/> + <ft:widget-label id="visible"/> <ft:widget id="visible"/> <br/> + <input type="submit" value="copletManagement.editCoplet.save" i18n:attr="value"/> + <a href="tools/plugins/copletManagement/showTab?id=#{./backId}">back</a> + </ft:form-template> +</div> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,55 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + <catalogue> + <message key="copletManagement.editLayout">Edit Layout</message> + <message key="copletManagement.title">Coplet-Management</message> + <message key="copletManagement.selectTab">Tab-Selection</message> + <message key="copletManagement.enterTabName">Enter a name for the tab</message> + <message key="copletManagement.tabName">Name</message> + + <message key="copletManagement.items.tab">Tab</message> + <message key="copletManagement.items.tabFolder">Tab-Folder</message> + <message key="copletManagement.items.row">Row</message> + <message key="copletManagement.items.col">Column</message> + <message key="copletManagement.items.coplet">Coplet</message> + + <message key="copletManagement.actions.title">Actions</message> + <message key="copletManagement.actions.addCoplet">Add Coplet</message> + <message key="copletManagement.actions.addRow">Add Row</message> + <message key="copletManagement.actions.addCol">Add Column</message> + <message key="copletManagement.actions.addTab">Add Tab</message> + <message key="copletManagement.actions.removeItem">Delete Item</message> + <message key="copletManagement.actions.moveLeft">Move Left</message> + <message key="copletManagement.actions.moveUp">Move Up</message> + <message key="copletManagement.actions.moveRight">Move Right</message> + <message key="copletManagement.actions.moveDown">Move Down</message> + <message key="copletManagement.actions.drillDown">Drilldown</message> + <message key="copletManagement.actions.goUp">Go Up</message> + + <message key="copletManagement.selectSkin">Select Skin</message> + + <message key="copletManagement.selectCoplet">Select one or more Coplets</message> + + <message key="copletManagement.editCoplet.save">Save</message> + <message key="copletManagement.editCoplet.all.title">Edit Coplet</message> + <message key="copletManagement.editCoplet.all.copletTitle">Title</message> + <message key="copletManagement.editCoplet.all.visible">Visible</message> + <message key="copletManagement.editCoplet.uri.title">Edit URI-Coplet</message> + <message key="copletManagement.editCoplet.uri.copletTitle">Title</message> + <message key="copletManagement.editCoplet.uri.copletUri">URI</message> + + </catalogue> Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement_de.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement_de.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement_de.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,56 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<catalogue> + <message key="copletManagement.editLayout">Layout bearbeiten</message> + <message key="copletManagement.title">Coplet-Verwaltung</message> + <message key="copletManagement.selectTab">Tab-Auswahl</message> + <message key="copletManagement.enterTabName">Geben Sie einen Namen fuer den Tab ein</message> + <message key="copletManagement.tabName">Name</message> + + <message key="copletManagement.items.tab">Tab</message> + <message key="copletManagement.items.tabFolder">Tab-Ordner</message> + <message key="copletManagement.items.row">Zeile</message> + <message key="copletManagement.items.col">Spalte</message> + <message key="copletManagement.items.coplet">Coplet</message> + + <message key="copletManagement.actions.title">Aktionen</message> + <message key="copletManagement.actions.addCoplet">Coplet hinzufuegen</message> + <message key="copletManagement.actions.addRow">Zeile hinzufuegen</message> + <message key="copletManagement.actions.addCol">Spalte hinzufuegen</message> + <message key="copletManagement.actions.addTab">Tab hinzufuegen</message> + <message key="copletManagement.actions.removeItem">Item loeschen</message> + <message key="copletManagement.actions.moveLeft">nach links verschieben</message> + <message key="copletManagement.actions.moveUp">nach oben verschieben</message> + <message key="copletManagement.actions.moveRight">nach rechts verschieben</message> + <message key="copletManagement.actions.moveDown">nach unten verschieben</message> + <message key="copletManagement.actions.drillDown">Drilldown</message> + <message key="copletManagement.actions.goUp">nach oben</message> + + <message key="copletManagement.selectSkin">Skinauswahl</message> + + <message key="copletManagement.selectCoplet">Waehlen Sie ein oder mehrere Coplets aus</message> + + <message key="copletManagement.editCoplet.save">speichern</message> + <message key="copletManagement.editCoplet.all.title">Coplet bearbeiten</message> + <message key="copletManagement.editCoplet.all.copletTitle">Titel</message> + <message key="copletManagement.editCoplet.all.visible">Sichtbar</message> + <message key="copletManagement.editCoplet.uri.title">URI-Coplet bearbeiten</message> + <message key="copletManagement.editCoplet.uri.copletTitle">Titel</message> + <message key="copletManagement.editCoplet.uri.copletUri">URI</message> + +</catalogue> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement_en.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement_en.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/i18n/copletManagement_en.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,55 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + <catalogue> + <message key="copletManagement.editLayout">Edit Layout</message> + <message key="copletManagement.title">Coplet-Management</message> + <message key="copletManagement.selectTab">Tab-Selection</message> + <message key="copletManagement.enterTabName">Enter a name for the tab</message> + <message key="copletManagement.tabName">Name</message> + + <message key="copletManagement.items.tab">Tab</message> + <message key="copletManagement.items.tabFolder">Tab-Folder</message> + <message key="copletManagement.items.row">Row</message> + <message key="copletManagement.items.col">Column</message> + <message key="copletManagement.items.coplet">Coplet</message> + + <message key="copletManagement.actions.title">Actions</message> + <message key="copletManagement.actions.addCoplet">Add Coplet</message> + <message key="copletManagement.actions.addRow">Add Row</message> + <message key="copletManagement.actions.addCol">Add Column</message> + <message key="copletManagement.actions.addTab">Add Tab</message> + <message key="copletManagement.actions.removeItem">Delete Item</message> + <message key="copletManagement.actions.moveLeft">Move Left</message> + <message key="copletManagement.actions.moveUp">Move Up</message> + <message key="copletManagement.actions.moveRight">Move Right</message> + <message key="copletManagement.actions.moveDown">Move Down</message> + <message key="copletManagement.actions.drillDown">Drilldown</message> + <message key="copletManagement.actions.goUp">Go Up</message> + + <message key="copletManagement.selectSkin">Select Skin</message> + + <message key="copletManagement.selectCoplet">Select one or more Coplets</message> + + <message key="copletManagement.editCoplet.save">Save</message> + <message key="copletManagement.editCoplet.all.title">Edit Coplet</message> + <message key="copletManagement.editCoplet.all.copletTitle">Title</message> + <message key="copletManagement.editCoplet.all.visible">Visible</message> + <message key="copletManagement.editCoplet.uri.title">Edit URI-Coplet</message> + <message key="copletManagement.editCoplet.uri.copletTitle">Title</message> + <message key="copletManagement.editCoplet.uri.copletUri">URI</message> + + </catalogue> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/jx/selectSkin.jx Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/jx/selectSkin.jx?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/jx/selectSkin.jx Fri Jan 28 09:54:58 2005 @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<jx:template xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"> +<div style="spacing:3px; padding:5px;" xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + <b><i18n:text key="copletManagement.selectSkin"/></b> + <table> + <jx:forEach select="#{skins}"> + <tr style="spacing:3px; padding:5px;"> + <td> + <a href="tools/plugins/copletManagement/selectSkin?id=#{./name}"><img src="tools/plugins/copletManagement/selectSkinThumb/#{./name}" border="0"/></a> + </td> + <td> + <a href="tools/plugins/copletManagement/selectSkin?id=#{./name}">#{./name}</a> + </td> + </tr> + </jx:forEach> + </table> +</div> +</jx:template> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/sitemap.xmap Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/sitemap.xmap?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/sitemap.xmap Fri Jan 28 09:54:58 2005 @@ -0,0 +1,150 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> + <map:components> + <map:generators default="file"> + <map:generator name="xmlprofile" + src="org.apache.cocoon.portal.tools.copletManagement.generation.XMLProfileGenerator" /> + </map:generators> + <map:transformers default="xalan"> + </map:transformers> + </map:components> +<!-- flow script --> + <map:flow language="javascript"> + <map:script src="flow.js" /> + </map:flow> + <map:pipelines> +<!-- Now the accessible pipelines --> + <map:pipeline> + + <map:match pattern="main"> + <map:generate src="tool.xml" /> + <map:serialize type="xml" /> + </map:match> + + <map:match pattern="save-user-profile"> + <map:generate src="context://samples/blocks/portal/resources/save-user-profile.xml"/> + <map:transform type="session"/> + <map:transform type="write-source"/> + <map:serialize type="xml"/> + </map:match> + + + <map:match pattern="i18n/**"> + <map:generate src="{1}" type="i18nc"/> + <map:serialize type="xml"/> + </map:match> + + <!-- generate the layoutprofile --> + <map:match pattern="layoutProfile/*"> + <map:generate type="xmlprofile"/> + <map:transform src="styles/createIndex.xsl"> + <map:parameter name="rootId" value="{1}" /> + </map:transform> + <map:serialize type="xml" /> + </map:match> + <map:match pattern="layoutProfile"> + <map:generate type="xmlprofile"/> + <map:transform src="styles/createIndex.xsl"> + </map:transform> + <map:serialize type="xml" /> + </map:match> + + <map:match pattern="page/showTab/*"> + <map:generate src="cocoon:/layoutProfile/{1}"/> + <map:transform src="../../skins/{portal-skin:skin}/styles/showTab.xsl"> + <map:parameter name="current" value="{1}" /> + <map:parameter name="parent" value="{request-param:parent}"/> + <map:parameter name="currentSkin" value="{global:skin}"/> + </map:transform> + <map:transform type="tool-layout"> + <map:parameter name="selected" value="copletManagement" /> + </map:transform> + <map:transform type="i18n" /> + <map:transform src="{portal-skin:skin.basepath}/styles/tab.xsl" /> + <map:transform src="../../skins/{portal-skin:skin}/styles/function.xsl" /> + <map:transform src="{portal-skin:skin.basepath}/styles/portal-page.xsl"> + <map:parameter name="base" value="{global:base}" /> + </map:transform> + <map:serialize type="html" /> + </map:match> + + <map:match pattern="page/showxml/*"> + <map:generate src="cocoon:/layoutProfile/{1}"/> + <map:serialize type="xml" /> + </map:match> + + <map:match pattern="jx/*.jx"> + <map:generate src="jx/{1}.jx" type="jx" /> + <map:transform type="tool-layout"> + <map:parameter name="selected" value="copletManagement" /> + </map:transform> + <map:transform type="i18n" /> + <map:transform src="{portal-skin:skin.basepath}/styles/tab.xsl" /> + <map:transform src="../../skins/{portal-skin:skin}/styles/function.xsl" /> + <map:transform src="{portal-skin:skin.basepath}/styles/portal-page.xsl"> + <map:parameter name="base" value="{global:base}" /> + </map:transform> + <map:serialize type="html" /> + </map:match> + + <map:match pattern="form/**"> + <map:generate src="form/{1}.xml"/> + <map:transform type="forms"/> + <map:transform type="jx"/> + <map:transform type="tool-layout"> + <map:parameter name="selected" value="copletManagement" /> + </map:transform> + <map:transform src="{portal-skin:skin.basepath}/styles/forms-styling.xsl" /> + <map:transform type="i18n" /> + <map:transform src="{portal-skin:skin.basepath}/styles/tab.xsl" /> + <map:transform src="../../skins/{portal-skin:skin}/styles/function.xsl" /> + <map:transform src="{portal-skin:skin.basepath}/styles/portal-page.xsl"> + <map:parameter name="base" value="{global:base}" /> + </map:transform> + <map:serialize type="html" /> + </map:match> + + <map:match pattern="model/**"> + <map:generate src="form/{1}/form.xml"/> + <map:serialize type="xml"/> + </map:match> + + <map:match pattern="selectSkinThumb/*"> + <map:read src="{portal-skin:skin.thumbnailuri.{1}}"/> + </map:match> + + <map:match pattern="*.continue"> + <map:call continuation="{1}" /> + </map:match> + + <map:match pattern="save-user-profile"> + <map:generate src="context:/mobi/ressources/save-user-profile.xml"/> + <map:transform type="session"/> + <map:transform type="write-source"/> + <map:serialize type="xml"/> + </map:match> + + <map:match pattern="*"> + <map:call function="{1}" /> + </map:match> + + </map:pipeline> + </map:pipelines> +</map:sitemap> +<!-- end of file --> + Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/styles/createIndex.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/styles/createIndex.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/styles/createIndex.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,152 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + +<xsl:param name="rootId"/> + +<xsl:template match="/"> + <xsl:apply-templates select="*" mode="firstnode"/> +</xsl:template> + +<xsl:template match="*" mode="firstnode"> + + <!-- calculate new id by the level of the node --> + <!--xsl:variable name="newId"><xsl:value-of select="$prefix"/><xsl:value-of select="position()"/></xsl:variable--> + + <!-- check: is the current node the new root node? --> + <xsl:choose> + <xsl:when test="string-length($rootId) <= 1 or not($rootId)"> + <xsl:copy> + + <xsl:apply-templates select="@*"/> + <xsl:if test="not(@id)"> + + <xsl:attribute name="id">1</xsl:attribute> + </xsl:if> + <!-- go on --> + <xsl:apply-templates select="."> + <xsl:with-param name="prefix">1.</xsl:with-param> + <xsl:with-param name="parent">1</xsl:with-param> + <xsl:with-param name="parentSet">true</xsl:with-param> + </xsl:apply-templates> + + </xsl:copy> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="."> + <xsl:with-param name="prefix">1.</xsl:with-param> + <xsl:with-param name="parent">1</xsl:with-param> + <xsl:with-param name="parentSet"></xsl:with-param> + </xsl:apply-templates> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template match="node()"> + <xsl:param name="prefix"/> + <xsl:param name="parent"/> + <xsl:param name="parentSet"/> + + <xsl:for-each select="*"> + + <!-- calculate new id by the level of the node --> + <xsl:variable name="counter"> + <xsl:call-template name="getIndex"> + <xsl:with-param name="currentpos"><xsl:value-of select="position()"/></xsl:with-param> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="newId"><xsl:value-of select="$prefix"/><xsl:value-of select="string-length(normalize-space($counter))"/></xsl:variable> + + <!-- check: is the current node the new root node? --> + <xsl:choose> + <xsl:when test="(starts-with($newId, $rootId) and (string-length(substring-after($newId,$rootId)) = 0 or starts-with(substring-after($newId,$rootId),'.'))) or not($rootId)"> + <xsl:copy> + + <!-- set id, if it does not exist an is the right node --> + <xsl:if test="not(@id) and name() = 'composite-layout' or name() = 'named-item' or name() = 'coplet-layout' or name() = 'coplet-instance-data' or name() = 'item' or name() = '' or name() = ''"> + <xsl:attribute name="id"><xsl:value-of select="$newId"/></xsl:attribute> + </xsl:if> + + <!-- if the current node is not the root node, set calculated parent id --> + <xsl:if test="$parentSet != 'true'"> + <xsl:attribute name="parent"><xsl:value-of select="$parent"/></xsl:attribute> + </xsl:if> + + <!-- calculate parent: it is always the last composite-layout or named-item node --> + <xsl:variable name="newParent"> + <xsl:choose> + <xsl:when test="name(.) = 'composite-layout' or name(.) = 'named-item'"> + <xsl:value-of select="$newId"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$parent"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <!-- get all other attributes --> + <xsl:apply-templates select="@*"/> + + <!-- go on --> + <xsl:apply-templates select="."> + <xsl:with-param name="prefix"><xsl:value-of select="$prefix"/><xsl:value-of select="string-length(normalize-space($counter))"/>.</xsl:with-param> + <xsl:with-param name="parent"><xsl:value-of select="$newParent"/></xsl:with-param> + <xsl:with-param name="parentSet">true</xsl:with-param> + </xsl:apply-templates> + + <xsl:if test="name() = 'coplet-instance-data'"><xsl:value-of select="."/></xsl:if> + + </xsl:copy> + </xsl:when> + <xsl:otherwise> + + <!-- calculate parent: it is always the last composite-layout or named-item node --> + <xsl:variable name="newParent"> + <xsl:choose> + <xsl:when test="name(.) = 'composite-layout' or name(.) = 'named-item'"> + <xsl:value-of select="$prefix"/><xsl:value-of select="position()"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$parent"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:apply-templates select="."> + <xsl:with-param name="prefix"><xsl:value-of select="$prefix"/><xsl:value-of select="string-length(normalize-space($counter))"/>.</xsl:with-param> + <xsl:with-param name="parent"><xsl:value-of select="$newParent"/></xsl:with-param> + </xsl:apply-templates> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> +</xsl:template> + +<xsl:template name="getIndex"> + <xsl:param name="currentpos"/> + + <xsl:for-each select="parent::node()/*[position() <= $currentpos]"> + <xsl:if test="name() = 'composite-layout' or name() = 'named-item' or name() = 'coplet-layout' or name() = 'coplet-instance-data' or name() = 'item' or name() = '' or name() = ''">.</xsl:if> + </xsl:for-each> +</xsl:template> + +<xsl:template match="@*"> + <xsl:copy> + <xsl:apply-templates select="@*|node()" /> + </xsl:copy> +</xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/tool.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/tool.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/copletManagement/tool.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<tool name="copletManagement.title" id="copletManagement"> + <functions> + <function name="copletManagement.editLayout" id="copletMangementEditLayout" pipeline="showTab"/> + <function name="copletManagement.selectSkin" id="copletManagementSelectSkin" pipeline="selectSkin"/> + </functions> + <i18n> + <catalogue id="copletManagement" name="copletManagement"/> + </i18n> +</tool> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,53 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!-- This catalogue file contains translations for built-in CForms messages. --> +<catalogue> + <message key="general.field-required">This field is required.</message> + + <message key="datatype.conversion-failed">Not a valid {0}.</message> + <message key="datatype.long">integer number</message> + <message key="datatype.decimal">decimal number</message> + <message key="datatype.double">decimal number</message> + <message key="datatype.float">decimal number</message> + <message key="datatype.integer">integer number</message> + <message key="datatype.date">date</message> + + <message key="validation.string.exact-length">Should be exactly {0} characters.</message> + <message key="validation.string.range-length">Should contain from {0} to {1} characters.</message> + <message key="validation.string.min-length">Should be at least {0} characters.</message> + <message key="validation.string.max-length">Should be at most {0} characters.</message> + <message key="validation.string.regexp">Does not match the following regular expression: {0}</message> + + <message key="validation.string.invalidemail">This field does not contain a valid email address</message> + + <message key="validation.array.exact-valuecount">Exactly {0} item(s) should be selected.</message> + <message key="validation.array.range-valuecount">At least {0} item(s) and at most {1} items should be selected.</message> + <message key="validation.array.min-valuecount">At least {0} item(s) should be selected.</message> + <message key="validation.array.max-valuecount">At most {0} items should be selected.</message> + + <message key="multivaluefield.conversionfailed">One of the selected values is of an incorrect type.</message> + + <message key="validation.numeric.range">Number should be in the range from {0} to {1}.</message> + <message key="validation.numeric.min">Number should be greater than or equal to {0}.</message> + <message key="validation.numeric.max">Number should be less than or equal to {0}.</message> + + <message key="validation.mod10">Mod 10 check failed.</message> + + + <message key="aggregatedfield.split-failed">Content of this field does not match the following regular expression: {0}</message> + <message key="upload.invalid-type">Invalid content type.</message> +</catalogue> Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages_de.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages_de.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages_de.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!-- This catalogue file contains translations for built-in Woody messages. --> +<catalogue xml:lang="de"> + <message key="general.field-required">Dieses Feld muss aufgefüllt werden.</message> + + <message key="datatype.conversion-failed">Ungültige(s) {0}.</message> + <message key="datatype.long">natürliche Zahl</message> + <message key="datatype.date">Datum</message> + + <message key="validation.string.exact-length">Bitte geben Sie genau {0} Zeichen ein.</message> + <message key="validation.string.range-length">Bitte geben Sie zwischen {0} und {1} Zeichen ein.</message> + <message key="validation.string.min-length">Bitte geben Sie mindestens {0} Zeichen ein.</message> + <message key="validation.string.max-length">Bitte geben Sie höchstens {0} Zeichen ein.</message> + <message key="validation.string.regexp">Die Eingabe entspricht nicht dem regulären Ausdruck: {0}</message> + + <message key="validation.string.invalidemail">Dieses Feld enthält keine gültige Email Adresse</message> + + <message key="validation.array.exact-valuecount">Es müssen genau {0} Objekt(e) selektiert sein.</message> + <message key="validation.array.range-valuecount">Es müssen mindestens {0} Objekt(e) und höchstens {1} Objekt(e) selektiert werden.</message> + <message key="validation.array.min-valuecount">Es müssen mindestens {0} Objekt(e) selektiert sein.</message> + <message key="validation.array.max-valuecount">Es dürfen höchstens {0} Objekt(e) selektiert werden.</message> + + <message key="multivaluefield.conversionfailed">Eines der selektierten Objekte ist vom falschen Typ.</message> + + <message key="validation.numeric.range">Die Zahl sollte aus dem Bereich {0} und {1} sein.</message> + <message key="validation.numeric.min">Die Zahl sollte grösser oder gleich {0} sein.</message> + <message key="validation.numeric.max">Die Zahl sollte kleiner oder gleich {0} sein.</message> + + <message key="validation.mod10">Modulo 10 Test gescheitert.</message> + + + <message key="aggregatedfield.split-failed">Der Inhalt des Feldes entspricht nicht dem regul. Ausdruck: {0}</message> + <message key="upload.invalid-type">Falscher Inhaltstyp.</message> +</catalogue> Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages_en.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages_en.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/FormsMessages_en.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,53 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!-- This catalogue file contains translations for built-in CForms messages. --> +<catalogue> + <message key="general.field-required">This field is required.</message> + + <message key="datatype.conversion-failed">Not a valid {0}.</message> + <message key="datatype.long">integer number</message> + <message key="datatype.decimal">decimal number</message> + <message key="datatype.double">decimal number</message> + <message key="datatype.float">decimal number</message> + <message key="datatype.integer">integer number</message> + <message key="datatype.date">date</message> + + <message key="validation.string.exact-length">Should be exactly {0} characters.</message> + <message key="validation.string.range-length">Should contain from {0} to {1} characters.</message> + <message key="validation.string.min-length">Should be at least {0} characters.</message> + <message key="validation.string.max-length">Should be at most {0} characters.</message> + <message key="validation.string.regexp">Does not match the following regular expression: {0}</message> + + <message key="validation.string.invalidemail">This field does not contain a valid email address</message> + + <message key="validation.array.exact-valuecount">Exactly {0} item(s) should be selected.</message> + <message key="validation.array.range-valuecount">At least {0} item(s) and at most {1} items should be selected.</message> + <message key="validation.array.min-valuecount">At least {0} item(s) should be selected.</message> + <message key="validation.array.max-valuecount">At most {0} items should be selected.</message> + + <message key="multivaluefield.conversionfailed">One of the selected values is of an incorrect type.</message> + + <message key="validation.numeric.range">Number should be in the range from {0} to {1}.</message> + <message key="validation.numeric.min">Number should be greater than or equal to {0}.</message> + <message key="validation.numeric.max">Number should be less than or equal to {0}.</message> + + <message key="validation.mod10">Mod 10 check failed.</message> + + + <message key="aggregatedfield.split-failed">Content of this field does not match the following regular expression: {0}</message> + <message key="upload.invalid-type">Invalid content type.</message> +</catalogue> Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + <catalogue> + <message key="portalTools">Portal Tools</message> + <message key="portalTools.functions">Functions</message> + <message key="portalTools.tools">Tools</message> + <message key="portalTools.noToolsAvailable">No Tools availabel</message> + </catalogue> Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default_de.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default_de.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default_de.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + <catalogue> + <message key="portalTools">Portal Tools</message> + <message key="portalTools.functions">Funktionen</message> + <message key="portalTools.tools">Tools</message> + <message key="portalTools.noToolsAvailable">Keine Tools verfÃgbar</message> + </catalogue> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default_en.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default_en.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/i18n/default_en.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + <catalogue> + <message key="portalTools">Portal Tools</message> + <message key="portalTools.functions">Functions</message> + <message key="portalTools.tools">Tools</message> + <message key="portalTools.noToolsAvailable">No Tools availabel</message> + </catalogue> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/tool.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/tool.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/default/tool.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + <tool name="Default" id="default"> + <i18n> + <catalogue id="default" name="default"/> + <catalogue id="FormsMessages" name="FormsMessages"/> + </i18n> +</tool> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/flow.js Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/flow.js?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/flow.js Fri Jan 28 09:54:58 2005 @@ -0,0 +1,147 @@ +/* + * Copyright 1999-2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +cocoon.load("resource://org/apache/cocoon/portal/tools/ptm.js"); + +/* component authenticationManager contains the data from the file 'sunrise-user.xml' */ + +function getContext () +{ + var contextMan = + cocoon.getComponent(Packages.org.apache.cocoon.webapps.session.ContextManager.ROLE); + var context = contextMan.getContext("authentication"); + + var authenticationManager = cocoon.getComponent("org.apache.cocoon.webapps.authentication.AuthenticationManager"); + /* get current user data */ + var context = authenticationManager.getState().getHandler().getContext(); + + var grabber = new Packages.org.apache.cocoon.portal.tools.userManagement.ContextGrabber(); + var obj = grabber.grab(context); + + var pic = obj.getContextItem ("picture"); + if (pic != null) + obj.setPicture (pic); + + cocoon.releaseComponent(contextMan); + cocoon.releaseComponent(authenticationManager); + return obj; +} + +/* public function: print the data of an user + */ +function showUser() { + + var obj = getContext (); + + /* show form */ + var form = new Form("cocoon:/page/model/userData?mode=readonly"); + form.createBinding("cocoon:/page/binding/userData?mode=readonly"); + form.load(obj); + form.showForm("page/form/userData?mode=readonly"); +} + +/* public function: print and edit the data of an user + */ +function editUser() { + + var obj = getContext (); + + /* show form */ + var form = new Form("cocoon:/page/model/userData?mode=edit"); + form.createBinding("cocoon:/page/binding/userData?mode=edit"); + form.load(obj); + form.showForm("page/form/userData?mode=edit"); +} + +/* public function: you can create a new user + */ +function addUser() { + + var authenticationManager = cocoon.getComponent("org.apache.cocoon.webapps.authentication.AuthenticationManager"); + + /* get current user data */ + var obj = new Packages.org.apache.cocoon.portal.tools.userManagement.UserBean(); + var context = authenticationManager.getState().getHandler().getContext(); + createDefaultKeys (context.getXML("/authentication/"),0,obj); + + var mf = obj.getContext(); + for(var it = mf.iterator();it.hasNext();) { + var e = it.next() + print(e.getValue()); + } + + /* show form */ + var form = new Form("cocoon:/page/model/userData?mode=add"); + form.createBinding("cocoon:/page/binding/userData?mode=add"); + form.load(obj); + form.showForm("page/form/userData?mode=add"); + + cocoon.releaseComponent(authenticationManager); +} + +/* internal function: creating an empty context of user data from the authenticationManager + */ +function createDefaultKeys (node,lev, obj) { + + node = node.firstChild; + while (node != null) + { + if (node.nodeName == '#text') + { + createDefaultKeys(node,lev+1,obj); + } + else if (node.firstChild == null) + { + obj.addContext (node.nodeName,""); + } + else if (node.firstChild.nodeValue == null) + { + createDefaultKeys(node,lev+1,obj); + } + else + { + obj.addContext (node.nodeName,""); + } + node = node.nextSibling; + } +} + +/* internal function: creates the context of the user data from the authenticationManager + */ +function printRek (node,lev, obj) +{ + node = node.firstChild; + while (node != null) + { + if (node.nodeName == '#text') + { + printRek(node,lev+1,obj); + } + else if (node.firstChild == null) + { + obj.addContext (node.nodeName,""); + } + else if (node.firstChild.nodeValue == null) + { + printRek(node,lev+1,obj); + } + else + { + obj.addContext (node.nodeName,node.firstChild.nodeValue); + } + node = node.nextSibling; + } + +} \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_binding.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_binding.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_binding.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fb:context xmlns:fb="http://apache.org/cocoon/forms/1.0#binding" + xmlns:fd="http://apache.org/cocoon/forms/1.0#definition" + path="/"> + + <fb:value id="picture" path="picture"/> + + <fb:repeater id="context" parent-path="." row-path="context"> + + <fb:identity> + <fb:value id="id" path="@id"/> + </fb:identity> + + <fb:on-bind> + <fb:value id="key" path="key"/> + <fb:value id="value" path="value"/> + </fb:on-bind> + + </fb:repeater> + +</fb:context> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_add.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_add.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_add.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,52 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fd:form xmlns:fd="http://apache.org/cocoon/forms/1.0#definition"> + + <fd:widgets> + + <fd:upload id="pic_file"> + <fd:label></fd:label> + </fd:upload> + + <fd:output id="picture"> + <fd:datatype base="string"/> + </fd:output> + + <fd:repeater id="context"> + <fd:label>Context</fd:label> + + <fd:widgets> + + <fd:output id="id"> + <fd:datatype base="string"/> + </fd:output> + + <fd:output id="key"> + <fd:label>Key</fd:label> + <fd:datatype base="string"/> + </fd:output> + + <fd:field id="value"> + <fd:label>Value</fd:label> + <fd:datatype base="string"/> + </fd:field> + + </fd:widgets> + </fd:repeater> + + </fd:widgets> +</fd:form> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_edit.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_edit.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_edit.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,53 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fd:form xmlns:fd="http://apache.org/cocoon/forms/1.0#definition"> + + <fd:widgets> + + <!-- dummy for add user --> + <fd:output id="pic_file"> + <fd:datatype base="string"/> + </fd:output> + + <fd:output id="picture"> + <fd:datatype base="string"/> + </fd:output> + + <fd:repeater id="context"> + <fd:label>Context</fd:label> + + <fd:widgets> + + <fd:output id="id"> + <fd:datatype base="string"/> + </fd:output> + + <fd:output id="key"> + <fd:label>Key</fd:label> + <fd:datatype base="string"/> + </fd:output> + + <fd:field id="value"> + <fd:label>Value</fd:label> + <fd:datatype base="string"/> + </fd:field> + + </fd:widgets> + </fd:repeater> + + </fd:widgets> +</fd:form> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_readonly.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_readonly.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_form_readonly.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,53 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<fd:form xmlns:fd="http://apache.org/cocoon/forms/1.0#definition"> + + <fd:widgets> + + <!-- dummy for add user --> + <fd:output id="pic_file"> + <fd:datatype base="string"/> + </fd:output> + + <fd:output id="picture"> + <fd:datatype base="string"/> + </fd:output> + + <fd:repeater id="context"> + <fd:label>Context</fd:label> + + <fd:widgets> + + <fd:output id="id"> + <fd:datatype base="string"/> + </fd:output> + + <fd:output id="key"> + <fd:label>Key</fd:label> + <fd:datatype base="string"/> + </fd:output> + + <fd:output id="value"> + <fd:label>Value</fd:label> + <fd:datatype base="string"/> + </fd:output> + + </fd:widgets> + </fd:repeater> + + </fd:widgets> +</fd:form> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_style.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_style.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_style.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<abstractFormStyle> + <items name="userManagement.userData_basicInformation"> + <item>firstname</item> + <item>lastname</item> + <item>title</item> + <item>name</item> + <item>role</item> + <item>language</item> + </items> + <items name="userManagement.userData_contact"> + <item>email</item> + <item>phoneHome</item> + <item>mobileHome</item> + <item>phoneWork</item> + <item>addressStreet</item> + <item>addressTown</item> + </items> +</abstractFormStyle> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_template.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_template.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/form/userData_template.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,77 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<div style="padding-left:10px;" + xmlns:i18n="http://apache.org/cocoon/i18n/2.1" + xmlns:ft="http://apache.org/cocoon/forms/1.0#template" + xmlns:fi="http://apache.org/cocoon/forms/1.0#instance"> + + <ft:form-template action="tools/plugins/userManagement/#{$continuation/id}.continue" method="POST"> + + <p><b><i18n:text i18n:key="userManagement.userData_headline"/>:</b></p> + + <table width="100%"> + <tr> + + <td valign="top" width="200"> + <table width="100%"> + <tr> + <td> + <formularImage> + <src><ft:widget id="picture"/></src> + </formularImage> + <ft:widget id="pic_file"/> + </td> + </tr> + </table> + </td> + + <td> +   + </td> + + <td valign="top" > + + <table width="100%"> + <col width="200px"/> + <col/> + + <abstractFormular> + <ft:repeater-widget id="context"> + <tr> + <td style="border-bottom-style:dotted;border-bottom-color:#cccccc;border-bottom-width:1px;"><ft:widget id="key"/></td> + <td style="border-bottom-style:dotted;border-bottom-color:#cccccc;border-bottom-width:1px;"> + <ft:widget id="value"> + <fi:styling style="width:100%"/> + </ft:widget> + </td> + </tr> + </ft:repeater-widget> + </abstractFormular> + + </table> + <br/> + </td> + </tr> + <tr> + <td colspan="2"></td> + <td> + <input type="submit" value="userManagement.userData_save" i18n:attr="value" onClick="alert ('Sorry, not implemented in the portal yet.'); return false;"/> + </td> + </tr> + </table> + </ft:form-template> +</div> Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<catalogue> + <message key="userManagement.title">User management</message> + + <message key="userManagement.showUser">Show user</message> + <message key="userManagement.editUser">Edit user</message> + <message key="userManagement.addUser">Add user</message> + + <message key="userManagement.userData_headline">User data</message> + <message key="userManagement.userData_basicInformation">Basic informations</message> + <message key="userManagement.userData_contact">Contact</message> + + <message key="userManagement.userData_lastname">lastname</message> + <message key="userManagement.userData_firstname">firstname</message> + <message key="userManagement.userData_name">userID</message> + <message key="userManagement.userData_title">titel</message> + <message key="userManagement.userData_role">current role</message> + <message key="userManagement.userData_language">selected language</message> + <message key="userManagement.userData_email">email</message> + <message key="userManagement.userData_phoneHome">phone (home)</message> + <message key="userManagement.userData_mobileHome">mobile (home)</message> + <message key="userManagement.userData_phoneWork">phone (work)</message> + <message key="userManagement.userData_addressStreet">street</message> + <message key="userManagement.userData_addressTown">town</message> + + <message key="userManagement.userData_save">save</message> + <message key="userManagement.userData_nopicture">No picture available</message> + +</catalogue> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement_de.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement_de.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement_de.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<catalogue> + + <message key="userManagement.title">Benutzer-Verwaltung</message> + + <message key="userManagement.showUser">Benutzerdaten anzeigen</message> + <message key="userManagement.editUser">Benutzerdaten editieren</message> + <message key="userManagement.addUser">Benutzer hinzufügen</message> + + <message key="userManagement.userData_headline">Benutzerdaten</message> + <message key="userManagement.userData_basicInformation">Basis-Informationen</message> + <message key="userManagement.userData_contact">Kontaktdaten</message> + + <message key="userManagement.userData_lastname">Nachname</message> + <message key="userManagement.userData_firstname">Vorname</message> + <message key="userManagement.userData_name">UserID</message> + <message key="userManagement.userData_title">Titel</message> + <message key="userManagement.userData_role">derzeitige Rolle</message> + <message key="userManagement.userData_language">bevorzugte Spracheinstellung</message> + <message key="userManagement.userData_email">eMail</message> + <message key="userManagement.userData_phoneHome">Telefon (privat)</message> + <message key="userManagement.userData_mobileHome">Handy (privat)</message> + <message key="userManagement.userData_phoneWork">Telefon (Arbeit)</message> + <message key="userManagement.userData_addressStreet">Straße</message> + <message key="userManagement.userData_addressTown">PLZ, Stadt</message> + + <message key="userManagement.userData_save">speichern</message> + <message key="userManagement.userData_nopicture">Kein Foto vorhanden</message> +</catalogue> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement_en.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement_en.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/i18n/userManagement_en.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<catalogue> + <message key="userManagement.title">User management</message> + + <message key="userManagement.showUser">Show user</message> + <message key="userManagement.editUser">Edit user</message> + <message key="userManagement.addUser">Add user</message> + + <message key="userManagement.userData_headline">User data</message> + <message key="userManagement.userData_basicInformation">Basic informations</message> + <message key="userManagement.userData_contact">Contact</message> + + <message key="userManagement.userData_lastname">lastname</message> + <message key="userManagement.userData_firstname">firstname</message> + <message key="userManagement.userData_name">userID</message> + <message key="userManagement.userData_title">titel</message> + <message key="userManagement.userData_role">current role</message> + <message key="userManagement.userData_language">selected language</message> + <message key="userManagement.userData_email">email</message> + <message key="userManagement.userData_phoneHome">phone (home)</message> + <message key="userManagement.userData_mobileHome">mobile (home)</message> + <message key="userManagement.userData_phoneWork">phone (work)</message> + <message key="userManagement.userData_addressStreet">street</message> + <message key="userManagement.userData_addressTown">town</message> + + <message key="userManagement.userData_save">save</message> + <message key="userManagement.userData_nopicture">No picture available</message> + +</catalogue> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/sitemap.xmap Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/sitemap.xmap?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/sitemap.xmap Fri Jan 28 09:54:58 2005 @@ -0,0 +1,95 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> + + <!-- components --> + <map:components> + <map:transformers default="xalan"> + </map:transformers> + </map:components> + + <!-- flow script --> + <map:flow language="javascript"> + <map:script src="flow.js"/> + </map:flow> + + <map:pipelines> + + <!-- accessible pipeline --> + <map:pipeline> + + <!-- necessary standard matcher --> + <map:match pattern="main"> + <map:generate src="tool.xml"/> + <map:serialize type="xml"/> + </map:match> + + <map:match pattern="i18n/**"> + <map:generate src="{1}" type="i18nc"/> + <map:serialize type="xml"/> + </map:match> + + <map:match pattern="*"> + <map:call function="{1}"> + <map:parameter name="user" value="{ID}"/> + </map:call> + </map:match> + + + <!-- matcher for this plugin --> + + <map:match pattern="page/form/*"> + <map:generate src="form/{1}_template.xml"/> + <map:transform type="forms" /> + <map:transform type="tool-layout"> + <map:parameter name="selected" value="userManagement" /> + </map:transform> + <map:transform src="{portal-skin:skin.basepath}/styles/forms-styling.xsl" /> + <map:transform src="stylesheets/convertAbstractForm.xsl"> + <map:parameter name="mode" value="{request-param:mode}"/> + </map:transform> + <map:transform type="i18n" /> + <map:transform src="{portal-skin:skin.basepath}/styles/tab.xsl" /> + <map:transform src="../../skins/{portal-skin:skin}/styles/function.xsl" /> + <map:transform src="{portal-skin:skin.basepath}/styles/portal-page.xsl"> + <map:parameter name="base" value="{global:base}" /> + </map:transform> + <map:serialize type="html" /> + </map:match> + + <map:match pattern="page/model/*"> + <map:generate src="form/{1}_form_{request-param:mode}.xml"/> + <map:serialize type="xml"/> + </map:match> + + <map:match pattern="page/binding/*"> + <map:generate src="form/{1}_binding.xml"/> + <map:serialize type="xml"/> + </map:match> + + <map:match pattern="page/abstractForm"> + <map:generate src="form/userData_style.xml"/> + <map:serialize type="xml"/> + </map:match> + + </map:pipeline> + + </map:pipelines> + +</map:sitemap> + +<!-- end of file --> Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/stylesheets/convertAbstractForm.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/stylesheets/convertAbstractForm.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/stylesheets/convertAbstractForm.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,102 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + +<xsl:param name="mode"/> + +<xsl:template match="/"> + <xsl:apply-templates/> +</xsl:template> + +<xsl:template match="formularImage"> + <xsl:choose> + <xsl:when test="string-length(src/.) > 0"> + <img> + <xsl:attribute name="src">userImages/<xsl:value-of select="src/."/></xsl:attribute> + </img> + </xsl:when> + <xsl:otherwise> + <p style="font-size:9px;" align="center"><i18n:text i18n:key="userManagement.userData_nopicture"/></p> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template match="input"> + <xsl:if test="not (@type = 'submit' and $mode = 'readonly')"> + <xsl:copy> + <xsl:apply-templates select="@*|node()" /> + </xsl:copy> + </xsl:if> +</xsl:template> + +<xsl:template match="abstractFormular"> + + <xsl:variable name="abstractForm" select="document('cocoon:/page/abstractForm')"/> + <xsl:variable name="currentNode" select="current()"/> + + <xsl:for-each select="$abstractForm/abstractFormStyle/items"> + <tr> + <td colspan="2" style="background-color:#cccccc; font-size:13px; color:#ffffff"> + <b> + <i18n:text> + <xsl:attribute name="i18n:key"><xsl:value-of select="@name"/></xsl:attribute> + </i18n:text> + </b> + </td> + </tr> + <xsl:for-each select="item"> + <xsl:apply-templates mode="getData"> + <xsl:with-param name="item"><xsl:value-of select="."/></xsl:with-param> + <xsl:with-param name="currentNode" select="$currentNode"/> + </xsl:apply-templates> + </xsl:for-each> + <tr><td colspan="2"> </td></tr> + </xsl:for-each> +</xsl:template> + +<xsl:template match="@*|node()" mode="getData"> + <xsl:param name="item"/> + <xsl:param name="currentNode"/> + + + + <xsl:for-each select="$currentNode/tr"> + <xsl:if test="td[1] = $item"> + <tr> + <td style="border-bottom-style:dotted;border-bottom-color:#cccccc;border-bottom-width:1px;"> + <i18n:text> + <xsl:attribute name="i18n:key">userManagement.userData_<xsl:value-of select="$item"/></xsl:attribute> + </i18n:text>: + </td> + + <xsl:copy-of select="td[2]"/> + </tr> + </xsl:if> + </xsl:for-each> + +</xsl:template> + +<xsl:template match="@*|node()" priority="-1"> + <xsl:copy> + <xsl:apply-templates select="@*|node()" /> + </xsl:copy> +</xsl:template> + + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/tool.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/tool.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/tool.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<tool name="userManagement.title" id="userManagement"> + <functions> + <function name="userManagement.showUser" id="userMangementShow" pipeline="showUser"/> + <function name="userManagement.editUser" id="userMangementEdit" pipeline="editUser"/> + <function name="userManagement.addUser" id="userMangementAdd" pipeline="addUser"/> + </functions> + <i18n> + <catalogue id="userManagement" name="userManagement"/> + </i18n> +</tool> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/userImages/1.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/plugins/userManagement/userImages/1.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/portal-bottom.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/portal-bottom.xml?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/portal-bottom.xml Fri Jan 28 09:54:58 2005 @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright 1999-2004 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<document> + <header> + <title>Further Information</title> + <version>0.1</version> + <type>Overview document</type> + </header> + <body> + <s1 title="Further Information"> + <p>For further information have a look at the Cocoon documentation + and at the other portal demos available using the tab above.</p> + </s1> + + </body> +</document> Added: cocoon/trunk/src/blocks/portal/samples/tools/sitemap.xmap Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/sitemap.xmap?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/sitemap.xmap Fri Jan 28 09:54:58 2005 @@ -0,0 +1,126 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> + <map:components> + <map:transformers default="xslt"> + <map:transformer name="tool-layout" + src="org.apache.cocoon.portal.tools.transformation.PortalToolsLayoutTransformer" /> + <map:transformer name="i18n" + src="org.apache.cocoon.portal.tools.transformation.PortalToolsI18nTransformer"> + <catalogues default="portalTools" new="no"> + <catalogue id="portalTools" name="portalTools" location="cocoon:/i18n"/> + </catalogues> + <cache-at-startup>true</cache-at-startup> + </map:transformer> + </map:transformers> + <map:generators default="file"> + <map:generator name="i18nc" src="org.apache.cocoon.portal.tools.generation.I18nCatalogueGenerator"/> + </map:generators> + <map:actions> + <map:action name="check-access-action" src="org.apache.cocoon.portal.tools.acting.CheckAccessAction"/> + </map:actions> + </map:components> + +<!-- flow script --> + <map:flow language="javascript"> + <map:script src="flow.js" /> + </map:flow> + + <map:pipelines> + +<!-- select skin to use --> + <map:component-configurations> + <map:global-variables> + <base>http://localhost:8888/samples/blocks/portal/</base> + </map:global-variables> + + </map:component-configurations> + +<!-- Now the accessible pipelines --> + <map:pipeline> + + <map:match pattern=""> + <map:redirect-to uri="tools"/> + </map:match> + + <map:match pattern="i18n/**"> + <map:generate src="{1}" type="i18nc"/> + <map:serialize type="xml"/> + </map:match> + + <map:match pattern="*.continue"> + <map:call continuation="{1}" /> + </map:match> + + <map:match pattern="*.jx"> + <map:generate type="jx" src="main/{1}.jx"> + <map:parameter name="lenient-xpath" value="false" /> + </map:generate> + <map:transform type="tool-layout"></map:transform> + <map:transform type="i18n"/> + <map:transform src="{portal-skin:skin.basepath}/styles/tab.xsl" /> + <map:transform src="skins/{portal-skin:skin}/styles/function.xsl" /> + <map:transform src="{portal-skin:skin.basepath}/styles/portal-page.xsl"> + <map:parameter name="base" value="{global:base}"/> + </map:transform> + <map:serialize type="html"></map:serialize> + </map:match> + + <map:match pattern="*/*.jx"> + <map:generate type="jx" src="main/{2}.jx"> + <map:parameter name="lenient-xpath" value="false" /> + </map:generate> + <map:transform type="tool-layout"> + <map:parameter name="selected" value="{1}" /> + </map:transform> + <map:transform type="i18n"></map:transform> + <map:transform src="{portal-skin:skin.basepath}/styles/tab.xsl" /> + <map:transform src="skins/{portal-skin:skin}/styles/function.xsl" /> + <map:transform src="{portal-skin:skin.basepath}/styles/portal-page.xsl"> + <map:parameter name="base" value="{global:base}"/> + </map:transform> + <map:serialize type="html"></map:serialize> + </map:match> + + <map:match pattern="*"> + <map:call function="{1}"></map:call> + </map:match> + + <map:match pattern="functions/*"> + <map:call function="functions"> + <map:parameter name="name" value="{1}" /> + </map:call> + </map:match> + +<!-- mount sub-sitemaps --> + <map:match pattern="plugins/*/**"> + <map:act type="auth-protect"> + <map:parameter name="handler" value="portal-handler"/> + <map:parameter name="application" value="portal"/> + <map:act type="check-access-action"> + <map:parameter name="name" value="{ID}"/> + <map:parameter name="role" value="{role}"/> + <map:parameter name="url" value="{../1}/{../2}"/> + <map:mount uri-prefix="plugins/{../../1}" check-reload="yes" src="plugins/{../../1}/sitemap.xmap"/> + </map:act> + </map:act> + </map:match> + + </map:pipeline> + </map:pipelines> +</map:sitemap> +<!-- end of file --> \ No newline at end of file Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addCol.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addCol.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addCoplet.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addCoplet.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addRow.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addRow.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addTab.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/addTab.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/del.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/del.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/down.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/down.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/drillDown.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/drillDown.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/edit.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/edit.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/goUp.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/goUp.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/left.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/left.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/right.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/right.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/tabs.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/tabs.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/tools.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/tools.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/up.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/images/up.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/styles/function.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/styles/function.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/styles/function.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + + +<!-- Process a tab --> +<xsl:template match="tool-functions"> + <table style="height: 1.8em" border="0" cellpadding="0" cellspacing="0" width="100%" xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + <tr> + <td valign="middle" bgcolor="#cccccc" > + <div class="tab"> + <xsl:for-each select="function"> + | <a href="[EMAIL PROTECTED]" style=" font-size : 85%; border: 0; color: #000000;"> + <xsl:value-of select="@name"/> + </a> + </xsl:for-each> + </div> + </td> + </tr> + </table> + +</xsl:template> + +<!-- Copy all and apply templates --> + +<xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()" /> + </xsl:copy> +</xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/styles/showTab.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/styles/showTab.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/skins/basic/styles/showTab.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,568 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + + <!-- id of the current item --> + <xsl:param name="current"/> + <xsl:param name="currentSkin"/> + + <xsl:variable name="skin"> + <xsl:value-of select="$currentSkin"/> + <!--xsl:call-template name="getSkin"> + <xsl:with-param name="skin4search"><xsl:value-of select="substring($currentSkin,0,string-length($currentSkin))"/></xsl:with-param> + </xsl:call-template--> + </xsl:variable> + + <xsl:template name="getSkin"> + <xsl:param name="skin4search"/> + + <xsl:choose> + <xsl:when test="contains($skin4search,'/')"> + <xsl:call-template name="getSkin"> + <xsl:with-param name="skin4search"><xsl:value-of select="substring-after($skin4search,'/')"/></xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$skin4search"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + + <!-- root --> + <xsl:template match="/"> + <div> + <xsl:apply-templates/> + <br/> + <table> + <tr> + <td><i><i18n:text key="copletManagement.actions.title"/>:</i></td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/left.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveLeft"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/right.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveRight"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/up.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveUp"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/down.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveDown"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/del.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.removeItem"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addTab.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addTab"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCol.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addCol"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addRow.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addRow"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCoplet.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addCoplet"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/drillDown.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.drillDown"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.goUp"/></td> + <td></td> + <td></td> + </tr> + </table> </div> + </xsl:template> + + <xsl:template match="named-item"> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#292c63"> + <tr> + <td bgcolor="#292c63"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.tab"/>: <xsl:value-of select="@name"/></font> + </div> + </td> + <td bgcolor="#292c63"> + <div align="right"> + <xsl:if test="count(child::*) = 0"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceAddButtons">true</xsl:with-param> + <xsl:with-param name="forceAddTabButton">true</xsl:with-param> + </xsl:call-template> + </xsl:if> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <xsl:apply-templates/> + </td> + </tr> + </table> + </xsl:template> + + <xsl:template match="composite-layout"> + + <!-- column --> + <xsl:if test="@name = 'column'"> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#386c84"> + <tr> + <td bgcolor="#386c84"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.col"/></font> + </div> + </td> + <td bgcolor="#386c84"> + <div align="right"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceDeleteButton">true</xsl:with-param> + <xsl:with-param name="forceAddButtons">true</xsl:with-param> + <xsl:with-param name="forceAddTabButton">true</xsl:with-param> + <xsl:with-param name="forceDrillDownButton">true</xsl:with-param> + </xsl:call-template> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <table> + <tr> + <xsl:for-each select="item"> + <td> + <xsl:apply-templates/> + </td> + </xsl:for-each> + </tr> + </table> + </td> + </tr> + </table> + </xsl:if> + + <!-- row --> + <xsl:if test="@name = 'row'"> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#295163"> + <tr> + <td bgcolor="#295163"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.row"/></font> + </div> + </td> + <td bgcolor="#295163"> + <div align="right"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceDeleteButton">true</xsl:with-param> + <xsl:with-param name="forceAddButtons">true</xsl:with-param> + <xsl:with-param name="forceAddTabButton">true</xsl:with-param> + <xsl:with-param name="forceDrillDownButton">true</xsl:with-param> + </xsl:call-template> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <xsl:for-each select="item"> + <xsl:apply-templates/> + </xsl:for-each> + </td> + </tr> + </table> + </xsl:if> + + <!-- tab --> + <xsl:if test="contains(@name,'tab')"> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#3a3fa6"> + <tr> + <td bgcolor="#3a3fa6"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.tabFolder"/></font> + </div> + </td> + <td bgcolor="#3a3fa6"> + <div align="right"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceDeleteButton">false</xsl:with-param> + <xsl:with-param name="forceAddTabButton">true</xsl:with-param> + </xsl:call-template> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <table> + <tr> + <xsl:for-each select="named-item"> + <td> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#292c63"> + <tr> + <td bgcolor="#292c63"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.tab"/>: <xsl:value-of select="@name"/></font> + </div> + </td> + <td bgcolor="#292c63"> + <div align="right"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceMoveButtons">true</xsl:with-param> + <xsl:with-param name="forceDeleteButton">true</xsl:with-param> + <xsl:with-param name="forceDrillDownButton">true</xsl:with-param> + </xsl:call-template> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <xsl:value-of select="@name"/> + </td> + </tr> + </table> + </td> + </xsl:for-each> + </tr> + </table> + </td> + </tr> + </table> + </xsl:if> + </xsl:template> + + <xsl:template match="coplet-layout|frame-layout"> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#4e95b6"> + <tr> + <td bgcolor="#4e95b6"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.coplet"/></font> + </div> + </td> + <td bgcolor="#4e95b6"> + <div align="right"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceDeleteButton">true</xsl:with-param> + <xsl:with-param name="forceDrillDownButton">true</xsl:with-param> + <xsl:with-param name="forceEditCopletButton">true</xsl:with-param> + </xsl:call-template> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <xsl:choose> + <xsl:when test="coplet-instance-data/."> + Coplet: <xsl:value-of select="coplet-instance-data/."/> + </xsl:when> + <xsl:otherwise> + Coplet + </xsl:otherwise> + </xsl:choose> + </td> + </tr> + </table> + </xsl:template> + + + <xsl:template match="help" mode="foo"> + <a href="tools/plugins/copletManagement/showTab?action=save">Save</a> - <a href="tools/plugins/copletManagement/showTab?action=restore">Restore</a> + <table> + <tr> + <td><i18n:text key="copletManagement.actions.title"/></td> + <td></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/left.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveLeft"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/right.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveRight"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/up.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveUp"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/down.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveDown"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/del.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.removeItem"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addTab.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addTab"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCol.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addCol"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addRow.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addRow"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCoplet.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addCoplet"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/drillDown.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.drillDown"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.goUp"/></td> + </tr> + </table> + </xsl:template> + + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()" /> + </xsl:copy> + </xsl:template> + + <xsl:template name="drawToolActions"> + <xsl:param name="id"/> + <xsl:param name="actionitem"/> + <xsl:param name="forceMoveButtons"/> + <xsl:param name="forceDeleteButton"/> + <xsl:param name="forceAddTabButton"/> + <xsl:param name="forceAddButtons"/> + <xsl:param name="forceDrillDownButton"/> + <xsl:param name="forceEditCopletButton"/> + + <xsl:if test="$forceEditCopletButton = 'true'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/editCoplet?actionitem=<xsl:value-of select="$actionitem"/>&id=<xsl:value-of select="$id"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/edit.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + + <xsl:if test="$forceDeleteButton = 'true'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=del&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/del.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + + <xsl:if test="count(../../node()) > 1 or $forceMoveButtons = 'true'"> + <xsl:choose> + <xsl:when test="(../../@name) = 'row'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=up&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/up.jpg</xsl:attribute> + </img> + </a> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=down&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/down.jpg</xsl:attribute> + </img> + </a> + </xsl:when> + <xsl:otherwise> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=up&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/left.jpg</xsl:attribute> + </img> + </a> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=down&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/right.jpg</xsl:attribute> + </img> + </a> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + + <xsl:if test="$forceAddTabButton = 'true'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=addTab&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addTab.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + + <xsl:if test="$forceAddButtons = 'true'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=addRow&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addRow.jpg</xsl:attribute> + </img> + </a> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=addCol&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCol.jpg</xsl:attribute> + </img> + </a> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=addCoplet&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCoplet.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + + <xsl:if test="$forceDrillDownButton = 'true'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/drillDown.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + </xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/Thumbs.db Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/Thumbs.db?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addCol.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addCol.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addCoplet.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addCoplet.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addRow.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addRow.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addTab.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/addTab.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/del.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/del.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/down.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/down.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/drillDown.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/drillDown.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/edit.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/edit.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/goUp.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/goUp.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/left.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/left.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/right.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/right.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/tabs.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/tabs.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/tools.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/tools.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/up.jpg Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/images/up.jpg?view=auto&rev=148909 ============================================================================== Binary file. No diff available. Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/styles/function.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/styles/function.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/skins/common/styles/function.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + + +<!-- Process a tab --> +<xsl:template match="tool-functions"> + <table style="height: 1.8em" border="0" cellpadding="0" cellspacing="0" width="100%" xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + <tr> + <td valign="middle" bgcolor="#B2C4E0" > + <div class="tab"> + <xsl:for-each select="function"> + | <a href="[EMAIL PROTECTED]" style=" font-size : 85%; border: 0; color: #000066;"> + <xsl:value-of select="@name"/> + </a> + </xsl:for-each> + </div> + </td> + </tr> + </table> + +</xsl:template> + +<!-- Copy all and apply templates --> + +<xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()" /> + </xsl:copy> +</xsl:template> + +</xsl:stylesheet> Added: cocoon/trunk/src/blocks/portal/samples/tools/skins/common/styles/showTab.xsl Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/samples/tools/skins/common/styles/showTab.xsl?view=auto&rev=148909 ============================================================================== --- (empty file) +++ cocoon/trunk/src/blocks/portal/samples/tools/skins/common/styles/showTab.xsl Fri Jan 28 09:54:58 2005 @@ -0,0 +1,574 @@ +<?xml version="1.0"?> +<!-- + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> + + <!-- id of the current item --> + <xsl:param name="current"/> + <xsl:param name="currentSkin"/> + + <xsl:variable name="skin"> + <xsl:value-of select="$currentSkin"/> + <!--xsl:call-template name="getSkin"> + <xsl:with-param name="skin4search"><xsl:value-of select="substring($currentSkin,0,string-length($currentSkin))"/></xsl:with-param> + </xsl:call-template--> + </xsl:variable> + + <xsl:template name="getSkin"> + <xsl:param name="skin4search"/> + + <xsl:choose> + <xsl:when test="contains($skin4search,'/')"> + <xsl:call-template name="getSkin"> + <xsl:with-param name="skin4search"><xsl:value-of select="substring-after($skin4search,'/')"/></xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$skin4search"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + + <!-- root --> + <xsl:template match="/"> + <div> + + <xsl:apply-templates/> + <br/> + <table> + <tr> + <td><i><i18n:text key="copletManagement.actions.title"/>:</i></td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$current"/>&action=save</xsl:attribute>Save</a> + </td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/left.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveLeft"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/right.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveRight"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/up.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveUp"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/down.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveDown"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/del.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.removeItem"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addTab.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addTab"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCol.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addCol"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addRow.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addRow"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCoplet.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addCoplet"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/drillDown.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.drillDown"/></td> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.goUp"/></td> + <td></td> + <td></td> + </tr> + </table> </div> + </xsl:template> + + <xsl:template match="named-item"> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#292c63"> + <tr> + <td bgcolor="#292c63"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.tab"/>: <xsl:value-of select="@name"/></font> + </div> + </td> + <td bgcolor="#292c63"> + <div align="right"> + <xsl:if test="count(child::*) = 0"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceAddButtons">true</xsl:with-param> + <xsl:with-param name="forceAddTabButton">true</xsl:with-param> + </xsl:call-template> + </xsl:if> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <xsl:apply-templates/> + </td> + </tr> + </table> + </xsl:template> + + <xsl:template match="composite-layout"> + + <!-- column --> + <xsl:if test="@name = 'column'"> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#386c84"> + <tr> + <td bgcolor="#386c84"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.col"/></font> + </div> + </td> + <td bgcolor="#386c84"> + <div align="right"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceDeleteButton">true</xsl:with-param> + <xsl:with-param name="forceAddButtons">true</xsl:with-param> + <xsl:with-param name="forceAddTabButton">true</xsl:with-param> + <xsl:with-param name="forceDrillDownButton">true</xsl:with-param> + </xsl:call-template> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <table> + <tr> + <xsl:for-each select="item"> + <td> + <xsl:apply-templates/> + </td> + </xsl:for-each> + </tr> + </table> + </td> + </tr> + </table> + </xsl:if> + + <!-- row --> + <xsl:if test="@name = 'row'"> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#295163"> + <tr> + <td bgcolor="#295163"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.row"/></font> + </div> + </td> + <td bgcolor="#295163"> + <div align="right"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceDeleteButton">true</xsl:with-param> + <xsl:with-param name="forceAddButtons">true</xsl:with-param> + <xsl:with-param name="forceAddTabButton">true</xsl:with-param> + <xsl:with-param name="forceDrillDownButton">true</xsl:with-param> + </xsl:call-template> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <xsl:for-each select="item"> + <xsl:apply-templates/> + </xsl:for-each> + </td> + </tr> + </table> + </xsl:if> + + <!-- tab --> + <xsl:if test="contains(@name,'tab')"> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#3a3fa6"> + <tr> + <td bgcolor="#3a3fa6"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.tabFolder"/></font> + </div> + </td> + <td bgcolor="#3a3fa6"> + <div align="right"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceDeleteButton">false</xsl:with-param> + <xsl:with-param name="forceAddTabButton">true</xsl:with-param> + </xsl:call-template> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <table> + <tr> + <xsl:for-each select="named-item"> + <td> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#292c63"> + <tr> + <td bgcolor="#292c63"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.tab"/>: <xsl:value-of select="@name"/></font> + </div> + </td> + <td bgcolor="#292c63"> + <div align="right"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="@id"/></xsl:with-param> + <xsl:with-param name="forceMoveButtons">true</xsl:with-param> + <xsl:with-param name="forceDeleteButton">true</xsl:with-param> + <xsl:with-param name="forceDrillDownButton">true</xsl:with-param> + </xsl:call-template> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <xsl:value-of select="@name"/> + </td> + </tr> + </table> + </td> + </xsl:for-each> + </tr> + </table> + </td> + </tr> + </table> + </xsl:if> + </xsl:template> + + <xsl:template match="coplet-layout|frame-layout"> + <table style="border-width:1px; border-style:solid; border-color:#292c63; spacing:3px; padding:5px;" border="0" cellpadding="3" cellspacing="0" bordercolor="#4e95b6"> + <tr> + <td bgcolor="#4e95b6"> + <div align="left"> + <xsl:if test="@parent"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="@parent"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + <font color="#ffffff"><i18n:text key="copletManagement.items.coplet"/></font> + </div> + </td> + <td bgcolor="#4e95b6"> + <div align="right"> + <xsl:call-template name="drawToolActions"> + <xsl:with-param name="id"><xsl:value-of select="$current"/></xsl:with-param> + <xsl:with-param name="actionitem"><xsl:value-of select="substring(coplet-instance-data/@id, 0, string-length(coplet-instance-data/@id)-1)"/></xsl:with-param> + <xsl:with-param name="forceDeleteButton">true</xsl:with-param> + <xsl:with-param name="forceDrillDownButton">true</xsl:with-param> + <xsl:with-param name="forceEditCopletButton">true</xsl:with-param> + </xsl:call-template> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <xsl:choose> + <xsl:when test="coplet-instance-data/."> + Coplet: <xsl:value-of select="coplet-instance-data/."/> + </xsl:when> + <xsl:otherwise> + Coplet + </xsl:otherwise> + </xsl:choose> + </td> + </tr> + </table> + </xsl:template> + + + <xsl:template match="help" mode="foo"> + <a href="tools/plugins/copletManagement/showTab?action=save">Save</a> - <a href="tools/plugins/copletManagement/showTab?action=restore">Restore</a> + <table> + <tr> + <td><i18n:text key="copletManagement.actions.title"/></td> + <td></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/left.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveLeft"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/right.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveRight"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/up.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveUp"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/down.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.moveDown"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/del.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.removeItem"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addTab.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addTab"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCol.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addCol"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addRow.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addRow"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCoplet.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.addCoplet"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/drillDown.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.drillDown"/></td> + </tr> + <tr> + <td> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/goUp.jpg</xsl:attribute> + </img> + </td> + <td><i18n:text key="copletManagement.actions.goUp"/></td> + </tr> + </table> + </xsl:template> + + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()" /> + </xsl:copy> + </xsl:template> + + <xsl:template name="drawToolActions"> + <xsl:param name="id"/> + <xsl:param name="actionitem"/> + <xsl:param name="forceMoveButtons"/> + <xsl:param name="forceDeleteButton"/> + <xsl:param name="forceAddTabButton"/> + <xsl:param name="forceAddButtons"/> + <xsl:param name="forceDrillDownButton"/> + <xsl:param name="forceEditCopletButton"/> + + <xsl:if test="$forceEditCopletButton = 'true'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/editCoplet?actionitem=<xsl:value-of select="$actionitem"/>&id=<xsl:value-of select="$id"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/edit.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + + <xsl:if test="$forceDeleteButton = 'true'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=del&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/del.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + + <xsl:if test="count(../../node()) > 1 or $forceMoveButtons = 'true'"> + <xsl:choose> + <xsl:when test="(../../@name) = 'row'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=up&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/up.jpg</xsl:attribute> + </img> + </a> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=down&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/down.jpg</xsl:attribute> + </img> + </a> + </xsl:when> + <xsl:otherwise> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=up&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/left.jpg</xsl:attribute> + </img> + </a> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=down&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/right.jpg</xsl:attribute> + </img> + </a> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + + <xsl:if test="$forceAddTabButton = 'true'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=addTab&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addTab.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + + <xsl:if test="$forceAddButtons = 'true'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=addRow&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addRow.jpg</xsl:attribute> + </img> + </a> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=addCol&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCol.jpg</xsl:attribute> + </img> + </a> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$id"/>&action=addCoplet&actionitem=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/addCoplet.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + + <xsl:if test="$forceDrillDownButton = 'true'"> + <a><xsl:attribute name="href">tools/plugins/copletManagement/showTab?id=<xsl:value-of select="$actionitem"/></xsl:attribute> + <img border="0"> + <xsl:attribute name="src">toolImages/<xsl:value-of select="$skin"/>/drillDown.jpg</xsl:attribute> + </img> + </a> + </xsl:if> + </xsl:template> + +</xsl:stylesheet> Modified: cocoon/trunk/status.xml Url: http://svn.apache.org/viewcvs/cocoon/trunk/status.xml?view=diff&rev=148909&p1=cocoon/trunk/status.xml&r1=148908&p2=cocoon/trunk/status.xml&r2=148909 ============================================================================== --- cocoon/trunk/status.xml (original) +++ cocoon/trunk/status.xml Fri Jan 28 09:54:58 2005 @@ -457,6 +457,9 @@ </action> </release> <release version="2.1.7" date="TBD"> + <action dev="CZ" type="add" fixes-bug="33287" due-to="Jens Maukisch" due-to-email="[EMAIL PROTECTED]"> + Portal Block: Add portal tools framework contribution. + </action> <action dev="CZ" type="add"> Build system: External blocks can be built together with Cocoon. </action>
