JBoss Portal SVN: r11459 - in docs/branches/JBoss_Portal_Branch_2_7: referenceGuide and 1 other directories.
by portal-commits@lists.jboss.org
Author: thomas.heute(a)jboss.com
Date: 2008-07-15 17:20:24 -0400 (Tue, 15 Jul 2008)
New Revision: 11459
Modified:
docs/branches/JBoss_Portal_Branch_2_7/quickstartuser/pom.xml
docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/pom.xml
docs/branches/JBoss_Portal_Branch_2_7/userGuide/pom.xml
Log:
Using SNAPSHOTs
Modified: docs/branches/JBoss_Portal_Branch_2_7/quickstartuser/pom.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_7/quickstartuser/pom.xml 2008-07-15 21:20:14 UTC (rev 11458)
+++ docs/branches/JBoss_Portal_Branch_2_7/quickstartuser/pom.xml 2008-07-15 21:20:24 UTC (rev 11459)
@@ -7,7 +7,7 @@
<parent>
<groupId>org.jboss.portal</groupId>
<artifactId>jboss-portal-docs-parent</artifactId>
- <version>1-SNAPSHOT</version>
+ <version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>org.jboss.portal</groupId>
Modified: docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/pom.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/pom.xml 2008-07-15 21:20:14 UTC (rev 11458)
+++ docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/pom.xml 2008-07-15 21:20:24 UTC (rev 11459)
@@ -7,7 +7,7 @@
<parent>
<groupId>org.jboss.portal</groupId>
<artifactId>jboss-portal-docs-parent</artifactId>
- <version>1-SNAPSHOT</version>
+ <version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>org.jboss.portal</groupId>
Modified: docs/branches/JBoss_Portal_Branch_2_7/userGuide/pom.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_7/userGuide/pom.xml 2008-07-15 21:20:14 UTC (rev 11458)
+++ docs/branches/JBoss_Portal_Branch_2_7/userGuide/pom.xml 2008-07-15 21:20:24 UTC (rev 11459)
@@ -7,7 +7,7 @@
<parent>
<groupId>org.jboss.portal</groupId>
<artifactId>jboss-portal-docs-parent</artifactId>
- <version>1-SNAPSHOT</version>
+ <version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>org.jboss.portal</groupId>
15 years, 11 months
JBoss Portal SVN: r11458 - in maven: jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss and 8 other directories.
by portal-commits@lists.jboss.org
Author: thomas.heute(a)jboss.com
Date: 2008-07-15 17:20:14 -0400 (Tue, 15 Jul 2008)
New Revision: 11458
Added:
maven/jboss-portal-docbook-xslt/trunk/.project
maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/common.xsl
maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/eclipse.xsl
maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/pdf.xsl
maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml-common.xsl
maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml-single.xsl
maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml.xsl
maven/jboss-portal-docs-parent/trunk/.project
maven/jboss-portal-jdocbook-style/trunk/.project
maven/jboss-portal-jdocbook-style/trunk/src/main/css/
maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/
maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/codehighlight.css
maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/docnav.css
maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/documentation.css
maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/extensions.css
maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/jbossorg.css
maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/reports.css
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/bkg_gradient.gif
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/community_doc.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/caution.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/caution.svg
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/home.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/important.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/important.svg
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/next.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/note.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/note.svg
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/prev.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/tip.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/tip.svg
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/up.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/warning.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/warning.svg
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/dot.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/dot2.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/jbossorglogo.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/shine.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/title_hdr.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-alpha1.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-alpha2.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-beta1.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-beta2.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-pre-release-candidate.png
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-release-candidate.png
Removed:
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/leftside_bkgimage.gif
maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/th.bg.gif
Modified:
maven/jboss-portal-docbook-xslt/trunk/
maven/jboss-portal-docbook-xslt/trunk/pom.xml
maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/portal/pdf.xsl
maven/jboss-portal-docs-parent/trunk/pom.xml
maven/jboss-portal-jdocbook-style/trunk/
maven/jboss-portal-jdocbook-style/trunk/pom.xml
Log:
Using our own stylesheet and styles
Property changes on: maven/jboss-portal-docbook-xslt/trunk
___________________________________________________________________
Name: svn:ignore
+ target
Added: maven/jboss-portal-docbook-xslt/trunk/.project
===================================================================
--- maven/jboss-portal-docbook-xslt/trunk/.project (rev 0)
+++ maven/jboss-portal-docbook-xslt/trunk/.project 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>jboss-portal-docbook-xslt</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
Modified: maven/jboss-portal-docbook-xslt/trunk/pom.xml
===================================================================
--- maven/jboss-portal-docbook-xslt/trunk/pom.xml 2008-07-15 18:15:31 UTC (rev 11457)
+++ maven/jboss-portal-docbook-xslt/trunk/pom.xml 2008-07-15 21:20:14 UTC (rev 11458)
@@ -23,6 +23,7 @@
</contributor>
<contributor>
<name>Thomas Heute</name>
+ </contributor>
</contributors>
<repositories>
@@ -33,22 +34,19 @@
</repository>
</repositories>
- <dependencies>
- <dependency>
- <groupId>org.jboss</groupId>
- <artifactId>jbossorg-docbook-xslt</artifactId>
- </dependency>
- </dependencies>
+ <dependencies>
+ <dependency>
+ <groupId>net.sf.docbook</groupId>
+ <artifactId>docbook</artifactId>
+ <version>1.74.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.docs</groupId>
+ <artifactId>highlight</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.jboss</groupId>
- <artifactId>jbossorg-docbook-xslt</artifactId>
- <version>1.1.0</version>
- </dependency>
- </dependencies>
- </dependencyManagement>
<build>
<extensions>
@@ -58,15 +56,6 @@
<version>1.0-beta-2</version>
</extension>
</extensions>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.jboss.maven.plugins</groupId>
- <artifactId>maven-jdocbook-plugin</artifactId>
- <version>2.1.1</version>
- </plugin>
- </plugins>
- </pluginManagement>
</build>
<distributionManagement>
Added: maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/common.xsl
===================================================================
--- maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/common.xsl (rev 0)
+++ maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/common.xsl 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,206 @@
+<?xml version='1.0'?>
+
+<!--
+ Copyright 2008 JBoss, a division of Red Hat
+ License: GPL
+ Author: Pete Muir
+ Author: Mark Newton (mark.newton(a)jboss.org)
+-->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <!-- We need to add this as it's needed later for a check -->
+ <xsl:param name="confidential" select="0"/>
+
+ <!-- Enable extensions (needed for callouts) -->
+ <xsl:param name="use.extensions">1</xsl:param>
+
+ <!-- For backwards compatibility we want to use callouts specified using programlistingco elements -->
+ <xsl:param name="callouts.extension">1</xsl:param>
+
+ <!-- Use graphical callouts as they look nicer with highlighed code. -->
+ <xsl:param name="callout.graphics">1</xsl:param>
+ <xsl:param name="callout.graphics.number.limit">15</xsl:param>
+ <xsl:param name="callout.graphics.extension">.png</xsl:param>
+
+ <xsl:param name="callout.graphics.path">
+ <xsl:if test="$img.src.path != ''">
+ <xsl:value-of select="$img.src.path"/>
+ </xsl:if>
+ <xsl:text>images/community/docbook/callouts/</xsl:text>
+ </xsl:param>
+
+ <!-- Admonitions -->
+ <xsl:param name="admon.graphics" select="1"/>
+ <xsl:param name="admon.graphics.path">
+ <xsl:if test="$img.src.path != ''">
+ <xsl:value-of select="$img.src.path"/>
+ </xsl:if>
+ <xsl:text>images/community/docbook/</xsl:text>
+ </xsl:param>
+
+ <!-- And disable these extensions -->
+ <xsl:param name="tablecolumns.extension">0</xsl:param>
+
+ <!-- TOC -->
+ <xsl:param name="section.autolabel" select="1"/>
+
+ <!-- Include the chapter no -->
+ <xsl:param name="section.label.includes.component.label" select="1" />
+
+ <xsl:param name="use.simplified.author.group" select="1"/>
+
+ <xsl:template name="person.name.list">
+ <xsl:param name="person.list" select="author|corpauthor|othercredit|editor" />
+ <xsl:param name="person.count" select="count($person.list)" />
+ <xsl:param name="person.type" select="'author'" />
+ <xsl:param name="count" select="1" />
+
+ <xsl:choose>
+ <xsl:when test="$use.simplified.author.group = 1">
+ <xsl:choose>
+ <!-- If there are no names in the list then don't do anything -->
+ <xsl:when test="$count > $person.count"></xsl:when>
+ <xsl:otherwise>
+
+ <!-- Depending on the type of people in the list print out different prefixes -->
+ <xsl:choose>
+ <xsl:when test="$count = 1 and $person.type = 'author' or $person.type = 'corpauthor'">
+ <xsl:call-template name="gentext.by" />
+ <xsl:call-template name="gentext.space" />
+ </xsl:when>
+ <xsl:when test="$count = 1 and $person.type = 'editor'">
+ <xsl:call-template name="gentext.editors" />
+ <xsl:call-template name="gentext.space" />
+ </xsl:when>
+ <xsl:when test="$count = 1 and $person.type = 'othercredit'">
+ <xsl:call-template name="gentext.others" />
+ <xsl:call-template name="gentext.space" />
+ </xsl:when>
+ </xsl:choose>
+
+ <!-- Output each person's name -->
+ <xsl:call-template name="person.name">
+ <xsl:with-param name="node"
+ select="$person.list[position()=$count]" />
+ </xsl:call-template>
+
+ <xsl:choose>
+ <!-- Put parathenses around short affiliation descriptions -->
+ <xsl:when
+ test="$person.list[position()=$count]/affiliation/shortaffil">
+ <xsl:call-template name="gentext.space" />
+ <xsl:text>(</xsl:text>
+ <xsl:value-of
+ select="$person.list[position()=$count]/affiliation/shortaffil" />
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:choose>
+ <!-- If only two names are present then insert 'and' between them -->
+ <xsl:when test="$person.count = 2 and $count = 1">
+ <xsl:call-template name="gentext.template">
+ <xsl:with-param name="context" select="'authorgroup'" />
+ <xsl:with-param name="name" select="'sep2'" />
+ </xsl:call-template>
+ </xsl:when>
+ <!-- If we get to the last name insert 'and' before it -->
+ <xsl:when
+ test="$person.count > 2 and $count+1 = $person.count">
+ <xsl:call-template name="gentext.template">
+ <xsl:with-param name="context" select="'authorgroup'" />
+ <xsl:with-param name="name" select="'seplast'" />
+ </xsl:call-template>
+ </xsl:when>
+ <!-- If we are in the middle of a list insert a comma between names -->
+ <xsl:when test="$count < $person.count">
+ <xsl:call-template name="gentext.template">
+ <xsl:with-param name="context" select="'authorgroup'" />
+ <xsl:with-param name="name" select="'sep'" />
+ </xsl:call-template>
+ </xsl:when>
+ </xsl:choose>
+
+ <!-- Recursively call the template to process all the names in the list -->
+ <xsl:call-template name="person.name.list">
+ <xsl:with-param name="person.list" select="$person.list" />
+ <xsl:with-param name="person.count" select="$person.count" />
+ <xsl:with-param name="count" select="$count+1" />
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="gentext.editors">
+ <xsl:text>edited by</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="gentext.others">
+ <xsl:text>and thanks to</xsl:text>
+ </xsl:template>
+
+<!-- Modify the default navigation wording -->
+<xsl:param name="local.l10n.xml" select="document('')" />
+<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
+ <l:l10n language="en">
+ <l:gentext key="nav-home" text="Front page"/>
+ </l:l10n>
+</l:i18n>
+
+<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
+ <l:l10n language="en">
+ <l:gentext key="nav-up" text="Top of page"/>
+ </l:l10n>
+</l:i18n>
+
+<!--
+Copied from fo/params.xsl
+-->
+<xsl:param name="l10n.gentext.default.language" select="'en'"/>
+
+<!-- This sets the filename based on the ID -->
+<xsl:param name="use.id.as.filename" select="'1'"/>
+
+<xsl:template match="command">
+ <xsl:call-template name="inline.monoseq"/>
+</xsl:template>
+
+<xsl:template match="application">
+ <xsl:call-template name="inline.boldseq"/>
+</xsl:template>
+
+<xsl:template match="guibutton">
+ <xsl:call-template name="inline.boldseq"/>
+</xsl:template>
+
+<xsl:template match="guiicon">
+ <xsl:call-template name="inline.boldseq"/>
+</xsl:template>
+
+<xsl:template match="guilabel">
+ <xsl:call-template name="inline.boldseq"/>
+</xsl:template>
+
+<xsl:template match="guimenu">
+ <xsl:call-template name="inline.boldseq"/>
+</xsl:template>
+
+<xsl:template match="guimenuitem">
+ <xsl:call-template name="inline.boldseq"/>
+</xsl:template>
+
+<xsl:template match="guisubmenu">
+ <xsl:call-template name="inline.boldseq"/>
+</xsl:template>
+
+<xsl:template match="filename">
+ <xsl:call-template name="inline.monoseq"/>
+</xsl:template>
+
+</xsl:stylesheet>
Added: maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/eclipse.xsl
===================================================================
--- maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/eclipse.xsl (rev 0)
+++ maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/eclipse.xsl 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,405 @@
+<?xml version='1.0'?>
+
+<!--
+ Copyright 2008 JBoss, a division of Red Hat
+ License: GPL
+ Author: Jeff Fearn <jfearn(a)redhat.com>
+ Author: Tammy Fox <tfox(a)redhat.com>
+ Author: Andy Fitzsimon <afitzsim(a)redhat.com>
+ Author: Mark Newton <mark.newton(a)jboss.org>
+-->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <!-- We need to replicate the contents of eclipse/eclipse.xsl but import xhtml/chunk.xsl to generate valid XHTML -->
+ <xsl:import href="http://docbook.sourceforge.net/release/xsl/1.72.0/xhtml/chunk.xsl"/>
+
+<xsl:template match="/">
+ <xsl:choose>
+ <xsl:when test="$rootid != ''">
+ <xsl:choose>
+ <xsl:when test="count(key('id',$rootid)) = 0">
+ <xsl:message terminate="yes">
+ <xsl:text>ID '</xsl:text>
+ <xsl:value-of select="$rootid"/>
+ <xsl:text>' not found in document.</xsl:text>
+ </xsl:message>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="$collect.xref.targets = 'yes' or
+ $collect.xref.targets = 'only'">
+ <xsl:apply-templates select="key('id', $rootid)"
+ mode="collect.targets"/>
+ </xsl:if>
+ <xsl:if test="$collect.xref.targets != 'only'">
+ <xsl:message>Formatting from <xsl:value-of
+ select="$rootid"/></xsl:message>
+ <xsl:apply-templates select="key('id',$rootid)"
+ mode="process.root"/>
+ <xsl:call-template name="etoc"/>
+ <xsl:call-template name="plugin.xml"/>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="$collect.xref.targets = 'yes' or
+ $collect.xref.targets = 'only'">
+ <xsl:apply-templates select="/" mode="collect.targets"/>
+ </xsl:if>
+ <xsl:if test="$collect.xref.targets != 'only'">
+ <xsl:apply-templates select="/" mode="process.root"/>
+ <xsl:call-template name="etoc"/>
+ <xsl:call-template name="plugin.xml"/>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+
+
+</xsl:template>
+
+<xsl:template name="etoc">
+ <xsl:call-template name="write.chunk">
+ <xsl:with-param name="filename">
+ <xsl:if test="$manifest.in.base.dir != 0">
+ <xsl:value-of select="$base.dir"/>
+ </xsl:if>
+ <xsl:value-of select="'toc.xml'"/>
+ </xsl:with-param>
+ <xsl:with-param name="method" select="'xml'"/>
+ <xsl:with-param name="encoding" select="'utf-8'"/>
+ <xsl:with-param name="indent" select="'yes'"/>
+ <xsl:with-param name="content">
+ <xsl:choose>
+
+ <xsl:when test="$rootid != ''">
+ <xsl:variable name="title">
+ <xsl:if test="$eclipse.autolabel=1">
+ <xsl:variable name="label.markup">
+ <xsl:apply-templates select="key('id',$rootid)" mode="label.markup"/>
+ </xsl:variable>
+ <xsl:if test="normalize-space($label.markup)">
+ <xsl:value-of select="concat($label.markup,$autotoc.label.separator)"/>
+ </xsl:if>
+ </xsl:if>
+ <xsl:apply-templates select="key('id',$rootid)" mode="title.markup"/>
+ </xsl:variable>
+ <xsl:variable name="href">
+ <xsl:call-template name="href.target.with.base.dir">
+ <xsl:with-param name="object" select="key('id',$rootid)"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <toc label="{$title}" topic="{$href}">
+ <xsl:apply-templates select="key('id',$rootid)/*" mode="etoc"/>
+ </toc>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:variable name="title">
+ <xsl:if test="$eclipse.autolabel=1">
+ <xsl:variable name="label.markup">
+ <xsl:apply-templates select="/*" mode="label.markup"/>
+ </xsl:variable>
+ <xsl:if test="normalize-space($label.markup)">
+ <xsl:value-of select="concat($label.markup,$autotoc.label.separator)"/>
+ </xsl:if>
+ </xsl:if>
+ <xsl:apply-templates select="/*" mode="title.markup"/>
+ </xsl:variable>
+ <xsl:variable name="href">
+ <xsl:call-template name="href.target.with.base.dir">
+ <xsl:with-param name="object" select="/"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <toc label="{$title}" topic="{$href}">
+ <xsl:apply-templates select="/*/*" mode="etoc"/>
+ </toc>
+ </xsl:otherwise>
+
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="book|part|reference|preface|chapter|bibliography|appendix|article|glossary|section|sect1|sect2|sect3|sect4|sect5|refentry|colophon|bibliodiv|index" mode="etoc">
+ <xsl:variable name="title">
+ <xsl:if test="$eclipse.autolabel=1">
+ <xsl:variable name="label.markup">
+ <xsl:apply-templates select="." mode="label.markup"/>
+ </xsl:variable>
+ <xsl:if test="normalize-space($label.markup)">
+ <xsl:value-of select="concat($label.markup,$autotoc.label.separator)"/>
+ </xsl:if>
+ </xsl:if>
+ <xsl:apply-templates select="." mode="title.markup"/>
+ </xsl:variable>
+
+ <xsl:variable name="href">
+ <xsl:call-template name="href.target.with.base.dir">
+ <xsl:with-param name="context" select="/"/> <!-- Generate links relative to the location of root file/toc.xml file -->
+ </xsl:call-template>
+ </xsl:variable>
+
+ <topic label="{$title}" href="{$href}">
+ <xsl:apply-templates select="part|reference|preface|chapter|bibliography|appendix|article|glossary|section|sect1|sect2|sect3|sect4|sect5|refentry|colophon|bibliodiv|index" mode="etoc"/>
+ </topic>
+
+</xsl:template>
+
+<xsl:template match="text()" mode="etoc"/>
+
+<xsl:template name="plugin.xml">
+ <xsl:call-template name="write.chunk">
+ <xsl:with-param name="filename">
+ <xsl:if test="$manifest.in.base.dir != 0">
+ <xsl:value-of select="$base.dir"/>
+ </xsl:if>
+ <xsl:value-of select="'plugin.xml'"/>
+ </xsl:with-param>
+ <xsl:with-param name="method" select="'xml'"/>
+ <xsl:with-param name="encoding" select="'utf-8'"/>
+ <xsl:with-param name="indent" select="'yes'"/>
+ <xsl:with-param name="content">
+ <plugin name="{$eclipse.plugin.name}"
+ id="{$eclipse.plugin.id}"
+ version="1.0"
+ provider-name="{$eclipse.plugin.provider}">
+
+ <extension point="org.eclipse.help.toc">
+ <toc file="toc.xml" primary="true"/>
+ </extension>
+
+ </plugin>
+ </xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+ <!-- Now we can carry on with our XSL customization layer -->
+ <xsl:include href="xhtml-common.xsl"/>
+
+ <xsl:param name="eclipse.plugin.name">JBoss Community Help</xsl:param>
+ <xsl:param name="eclipse.plugin.id">org.jboss.help</xsl:param>
+ <xsl:param name="eclipse.plugin.provider">JBoss.org</xsl:param>
+
+ <!-- We don't want to display titles in the header navigation as there are already breadcrumbs -->
+ <xsl:param name="navig.showtitles" select="0"/>
+
+<!--
+From: xhtml/chunk-common.xsl
+Reason: need to add class attributes so we can style the pages using icons
+Version: 1.72.0
+-->
+<xsl:template name="header.navigation">
+ <xsl:param name="prev" select="/foo"/>
+ <xsl:param name="next" select="/foo"/>
+ <xsl:param name="nav.context"/>
+
+ <xsl:variable name="home" select="/*[1]"/>
+ <xsl:variable name="up" select="parent::*"/>
+
+ <xsl:variable name="row1" select="$navig.showtitles != 0"/>
+ <xsl:variable name="row2" select="count($prev) > 0 or (count($up) > 0 and generate-id($up) != generate-id($home) and $navig.showtitles != 0) or count($next) > 0"/>
+
+ <xsl:if test="$suppress.navigation = '0' and $suppress.header.navigation = '0'">
+ <div class="navheader">
+ <xsl:if test="$row1 or $row2">
+ <table width="100%" summary="Navigation header">
+ <xsl:if test="$row1">
+ <tr>
+ <th colspan="3" align="center">
+ <xsl:apply-templates select="." mode="object.title.markup"/>
+ </th>
+ </tr>
+ </xsl:if>
+
+ <xsl:if test="$row2">
+ <tr>
+ <td width="20%" align="left" class="previous">
+ <xsl:if test="count($prev)>0">
+ <a accesskey="p">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$prev"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'prev'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:if>
+ <xsl:text> </xsl:text>
+ </td>
+ <td width="60%" align="center">
+ <xsl:choose>
+ <xsl:when test="count($up) > 0 and generate-id($up) != generate-id($home) and $navig.showtitles != 0">
+ <xsl:apply-templates select="$up" mode="object.title.markup"/>
+ </xsl:when>
+ <xsl:otherwise> </xsl:otherwise>
+ </xsl:choose>
+ </td>
+ <td width="20%" align="right" class="next">
+ <xsl:text> </xsl:text>
+ <xsl:if test="count($next)>0">
+ <a accesskey="n">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$next"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'next'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:if>
+ </table>
+ </xsl:if>
+ <xsl:if test="$header.rule != 0">
+ <hr/>
+ </xsl:if>
+ </div>
+ </xsl:if>
+</xsl:template>
+
+<!--
+From: xhtml/chunk-common.xsl
+Reason: need to add class attributes so we can style the page using icons. Also changed the footer table to one row
+ so that the 'Top of page' and 'Front page' links are next to each other and correctly spaced.
+Version: 1.72.0
+-->
+<xsl:template name="footer.navigation">
+ <xsl:param name="prev" select="/foo"/>
+ <xsl:param name="next" select="/foo"/>
+ <xsl:param name="nav.context"/>
+
+ <xsl:variable name="home" select="/*[1]"/>
+ <xsl:variable name="up" select="parent::*"/>
+
+ <xsl:variable name="row1" select="count($prev) > 0 or count($up) > 0 or count($next) > 0"/>
+
+ <xsl:variable name="row2" select="($prev and $navig.showtitles != 0) or (generate-id($home) != generate-id(.) or $nav.context = 'toc') or ($chunk.tocs.and.lots != 0 and $nav.context != 'toc') or ($next and $navig.showtitles != 0)"/>
+
+ <xsl:if test="$suppress.navigation = '0' and $suppress.footer.navigation = '0'">
+ <div class="navfooter">
+ <xsl:if test="$footer.rule != 0">
+ <hr/>
+ </xsl:if>
+
+ <xsl:if test="$row1 or $row2">
+ <table width="100%" summary="Navigation footer">
+ <xsl:if test="$row1">
+ <tr>
+ <td width="25%" align="left" class="previous">
+ <xsl:if test="count($prev)>0">
+ <a accesskey="p">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$prev"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'prev'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:if>
+ <xsl:text> </xsl:text>
+ </td>
+ <td width="25%" align="right" class="up">
+ <xsl:choose>
+ <xsl:when test="count($up)>0 and generate-id($up) != generate-id($home)">
+ <a accesskey="u">
+ <xsl:attribute name="href">
+ <xsl:text>#</xsl:text>
+ <!--<xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$up"/>
+ </xsl:call-template>-->
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'up'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:when>
+ <xsl:otherwise> </xsl:otherwise>
+ </xsl:choose>
+ </td>
+ <td width="25%" align="left" class="home">
+ <xsl:choose>
+ <xsl:when test="$home != . or $nav.context = 'toc'">
+ <a accesskey="h">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$home"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'home'"/>
+ </xsl:call-template>
+ </a>
+ <xsl:if test="$chunk.tocs.and.lots != 0 and $nav.context != 'toc'">
+ <xsl:text> | </xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise> </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:if test="$chunk.tocs.and.lots != 0 and $nav.context != 'toc'">
+ <a accesskey="t">
+ <xsl:attribute name="href">
+ <xsl:apply-templates select="/*[1]" mode="recursive-chunk-filename">
+ <xsl:with-param name="recursive" select="true()"/>
+ </xsl:apply-templates>
+ <xsl:text>-toc</xsl:text>
+ <xsl:value-of select="$html.ext"/>
+ </xsl:attribute>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'nav-toc'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:if>
+ </td>
+ <td width="25%" align="right" class="next">
+ <xsl:text> </xsl:text>
+ <xsl:if test="count($next)>0">
+ <a accesskey="n">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$next"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'next'"/>
+ </xsl:call-template>
+ </a>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:if>
+
+ <xsl:if test="$row2">
+ <tr>
+ <td align="left" valign="top">
+ <xsl:if test="$navig.showtitles != 0">
+ <xsl:apply-templates select="$prev" mode="object.title.markup"/>
+ </xsl:if>
+ <xsl:text> </xsl:text>
+ </td>
+
+ <td align="right" valign="top">
+ <xsl:text> </xsl:text>
+ <xsl:if test="$navig.showtitles != 0">
+ <xsl:apply-templates select="$next" mode="object.title.markup"/>
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:if>
+ </table>
+ </xsl:if>
+ </div>
+ </xsl:if>
+</xsl:template>
+
+</xsl:stylesheet>
Added: maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/pdf.xsl
===================================================================
--- maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/pdf.xsl (rev 0)
+++ maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/pdf.xsl 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,1645 @@
+<?xml version='1.0'?>
+
+<!--
+ Copyright 2007 Red Hat, Inc.
+ License: GPL
+ Author: Jeff Fearn <jfearn(a)redhat.com>
+ Author: Tammy Fox <tfox(a)redhat.com>
+ Author: Andy Fitzsimon <afitzsim(a)redhat.com>
+ Author: Mark Newton <mark.newton(a)jboss.org>
+ Author: Pete Muir
+-->
+
+<!DOCTYPE xsl:stylesheet [
+<!ENTITY lowercase "'abcdefghijklmnopqrstuvwxyz'">
+<!ENTITY uppercase "'ABCDEFGHIJKLMNOPQRSTUVWXYZ'">
+ ]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns="http://www.w3.org/TR/xhtml1/transitional"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xmlns:jbh="java:org.jboss.highlight.renderer.FORenderer"
+ exclude-result-prefixes="jbh">
+
+ <xsl:import href="http://docbook.sourceforge.net/release/xsl/1.72.0/fo/docbook.xsl" />
+
+ <xsl:import href="common.xsl" />
+
+ <xsl:param name="alignment">justify</xsl:param>
+ <xsl:param name="fop.extensions" select="1" />
+ <xsl:param name="fop1.extensions" select="0" />
+ <xsl:param name="img.src.path" />
+ <xsl:param name="qandadiv.autolabel" select="0" />
+
+ <xsl:param name="hyphenation-character">-</xsl:param>
+ <!--xsl:param name="hyphenate.verbatim" select="0"/-->
+ <xsl:param name="hyphenate">true</xsl:param>
+ <!--xsl:param name="ulink.hyphenate" select="1"/-->
+
+ <xsl:param name="line-height" select="1.5" />
+
+ <!-- Callouts -->
+ <!-- Place callout bullets at this column in programlisting.-->
+ <xsl:param name="callout.defaultcolumn">80</xsl:param>
+ <xsl:param name="callout.icon.size">10pt</xsl:param>
+
+ <!-- Admonitions -->
+ <xsl:param name="admon.graphics.extension" select="'.svg'" />
+
+ <xsl:attribute-set name="admonition.title.properties">
+ <xsl:attribute name="font-size">13pt</xsl:attribute>
+ <xsl:attribute name="color">
+ <xsl:choose>
+ <xsl:when test="self::note">#4C5253</xsl:when>
+ <xsl:when test="self::caution">#533500</xsl:when>
+ <xsl:when test="self::important">white</xsl:when>
+ <xsl:when test="self::warning">white</xsl:when>
+ <xsl:when test="self::tip">white</xsl:when>
+ <xsl:otherwise>white</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
+ <xsl:attribute name="hyphenate">false</xsl:attribute>
+ <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
+
+ </xsl:attribute-set>
+
+ <xsl:attribute-set name="graphical.admonition.properties">
+
+ <xsl:attribute name="color">
+ <xsl:choose>
+ <xsl:when test="self::note">#4C5253</xsl:when>
+ <xsl:when test="self::caution">#533500</xsl:when>
+ <xsl:when test="self::important">white</xsl:when>
+ <xsl:when test="self::warning">white</xsl:when>
+ <xsl:when test="self::tip">white</xsl:when>
+ <xsl:otherwise>white</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:attribute name="background-color">
+ <xsl:choose>
+ <xsl:when test="self::note">#B5BCBD</xsl:when>
+ <xsl:when test="self::caution">#E3A835</xsl:when>
+ <xsl:when test="self::important">#4A5D75</xsl:when>
+ <xsl:when test="self::warning">#7B1E1E</xsl:when>
+ <xsl:when test="self::tip">#7E917F</xsl:when>
+ <xsl:otherwise>#404040</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+
+ <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
+ <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+ <xsl:attribute name="space-before.maximum">1.2em</xsl:attribute>
+ <xsl:attribute name="space-after.optimum">1em</xsl:attribute>
+ <xsl:attribute name="space-after.minimum">0.8em</xsl:attribute>
+ <xsl:attribute name="space-after.maximum">1em</xsl:attribute>
+ <xsl:attribute name="padding-bottom">12pt</xsl:attribute>
+ <xsl:attribute name="padding-top">12pt</xsl:attribute>
+ <xsl:attribute name="padding-right">12pt</xsl:attribute>
+ <xsl:attribute name="padding-left">12pt</xsl:attribute>
+ <xsl:attribute name="margin-left">
+ <xsl:value-of select="$title.margin.left" />
+ </xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:param name="programlisting.font" select="'verdana,helvetica,sans-serif'" />
+ <xsl:param name="programlisting.font.size" select="'100%'" />
+
+ <!-- Change to monospace font for programlisting, needed to workaround crappy callouts -->
+ <!-- <xsl:param name="programlisting.font" select="$monospace.font.family" /> -->
+ <!-- Make the font for programlisting slightly smaller -->
+ <!-- <xsl:param name="programlisting.font.size" select="'75%'" /> -->
+
+ <!-- Make the section depth in the TOC 2, same as html -->
+ <xsl:param name="toc.section.depth">2</xsl:param>
+
+ <!-- Now, set enable scalefit for large images -->
+ <xsl:param name="graphicsize.extension" select="'1'" />
+ <xsl:param name="default.image.width">17.4cm</xsl:param>
+
+ <xsl:attribute-set name="xref.properties">
+ <xsl:attribute name="font-style">italic</xsl:attribute>
+ <xsl:attribute name="color">
+ <xsl:choose>
+ <xsl:when
+ test="ancestor::note or ancestor::caution or ancestor::important or ancestor::warning or ancestor::tip">
+ <xsl:text>#aee6ff</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>#0066cc</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:attribute-set name="monospace.properties">
+ <xsl:attribute name="font-size">9pt</xsl:attribute>
+ <xsl:attribute name="font-family">
+ <xsl:value-of select="$monospace.font.family" />
+ </xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:attribute-set name="monospace.verbatim.properties"
+ use-attribute-sets="verbatim.properties monospace.properties">
+ <xsl:attribute name="text-align">start</xsl:attribute>
+ <xsl:attribute name="wrap-option">wrap</xsl:attribute>
+ <xsl:attribute name="hyphenation-character">►</xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:param name="shade.verbatim" select="1" />
+ <xsl:attribute-set name="shade.verbatim.style">
+ <xsl:attribute name="wrap-option">wrap</xsl:attribute>
+ <xsl:attribute name="background-color">
+ <xsl:choose>
+ <xsl:when test="ancestor::note"> <xsl:text>#B5BCBD</xsl:text> </xsl:when>
+ <xsl:when test="ancestor::caution"> <xsl:text>#E3A835</xsl:text> </xsl:when>
+ <xsl:when test="ancestor::important"> <xsl:text>#4A5D75</xsl:text> </xsl:when>
+ <xsl:when test="ancestor::warning"> <xsl:text>#7B1E1E</xsl:text> </xsl:when>
+ <xsl:when test="ancestor::tip"> <xsl:text>#7E917F</xsl:text> </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>black</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:attribute name="color">
+ <xsl:choose>
+ <xsl:when test="ancestor::note"> <xsl:text>#4C5253</xsl:text> </xsl:when>
+ <xsl:when test="ancestor::caution"> <xsl:text>#533500</xsl:text> </xsl:when>
+ <xsl:when test="ancestor::important"> <xsl:text>white</xsl:text> </xsl:when>
+ <xsl:when test="ancestor::warning"> <xsl:text>white</xsl:text> </xsl:when>
+ <xsl:when test="ancestor::tip"> <xsl:text>white</xsl:text> </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>red</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:attribute name="padding-left">12pt</xsl:attribute>
+ <xsl:attribute name="padding-right">12pt</xsl:attribute>
+ <xsl:attribute name="padding-top">6pt</xsl:attribute>
+ <xsl:attribute name="padding-bottom">6pt</xsl:attribute>
+ <xsl:attribute name="margin-left">
+ <xsl:value-of select="$title.margin.left" />
+ </xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:attribute-set name="verbatim.properties">
+ <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+ <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
+ <xsl:attribute name="space-before.maximum">1.2em</xsl:attribute>
+ <xsl:attribute name="space-after.minimum">0.8em</xsl:attribute>
+ <xsl:attribute name="space-after.optimum">1em</xsl:attribute>
+ <xsl:attribute name="space-after.maximum">1.2em</xsl:attribute>
+ <xsl:attribute name="hyphenate">false</xsl:attribute>
+ <xsl:attribute name="wrap-option">wrap</xsl:attribute>
+ <xsl:attribute name="white-space-collapse">false</xsl:attribute>
+ <xsl:attribute name="white-space-treatment">preserve</xsl:attribute>
+ <xsl:attribute name="linefeed-treatment">preserve</xsl:attribute>
+ <xsl:attribute name="text-align">start</xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:param name="generate.toc">set toc book toc article toc</xsl:param>
+
+ <!--###################################################
+ Custom TOC (bold chapter titles)
+ ################################################### -->
+
+ <!-- Improve the TOC. -->
+ <xsl:template name="toc.line">
+ <xsl:variable name="id">
+ <xsl:call-template name="object.id" />
+ </xsl:variable>
+
+ <xsl:variable name="label">
+ <xsl:apply-templates select="." mode="label.markup" />
+ </xsl:variable>
+
+ <fo:block text-align-last="justify" end-indent="{$toc.indent.width}pt"
+ last-line-end-indent="-{$toc.indent.width}pt">
+ <fo:inline keep-with-next.within-line="always">
+ <fo:basic-link internal-destination="{$id}">
+
+ <!-- Chapter titles should be bold. -->
+ <xsl:choose>
+ <xsl:when test="local-name(.) = 'chapter'">
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:if test="$label != ''">
+ <xsl:copy-of select="$label" />
+ <xsl:value-of select="$autotoc.label.separator" />
+ </xsl:if>
+ <xsl:apply-templates select="." mode="titleabbrev.markup" />
+ </fo:basic-link>
+ </fo:inline>
+ <fo:inline keep-together.within-line="always">
+ <xsl:text> </xsl:text>
+ <fo:leader leader-pattern="dots" leader-pattern-width="3pt"
+ leader-alignment="reference-area" keep-with-next.within-line="always" />
+ <xsl:text> </xsl:text>
+ <fo:basic-link internal-destination="{$id}">
+ <fo:page-number-citation ref-id="{$id}" />
+ </fo:basic-link>
+ </fo:inline>
+ </fo:block>
+ </xsl:template>
+
+ <!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
+ <xsl:param name="variablelist.as.blocks">1</xsl:param>
+
+ <!-- The horrible list spacing problems, this is much better. -->
+ <xsl:attribute-set name="list.block.spacing">
+ <xsl:attribute name="space-before.optimum">2em</xsl:attribute>
+ <xsl:attribute name="space-before.minimum">1em</xsl:attribute>
+ <xsl:attribute name="space-before.maximum">3em</xsl:attribute>
+ <xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
+ <xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
+ <xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
+ </xsl:attribute-set>
+
+ <!-- Some padding inside tables -->
+ <xsl:attribute-set name="table.cell.padding">
+ <xsl:attribute name="padding-left">4pt</xsl:attribute>
+ <xsl:attribute name="padding-right">4pt</xsl:attribute>
+ <xsl:attribute name="padding-top">2pt</xsl:attribute>
+ <xsl:attribute name="padding-bottom">2pt</xsl:attribute>
+ </xsl:attribute-set>
+
+ <!-- Only hairlines as frame and cell borders in tables -->
+ <xsl:param name="table.frame.border.thickness">0.3pt</xsl:param>
+ <xsl:param name="table.cell.border.thickness">0.15pt</xsl:param>
+ <xsl:param name="table.cell.border.color">#5c5c4f</xsl:param>
+ <xsl:param name="table.frame.border.color">#5c5c4f</xsl:param>
+ <xsl:param name="table.cell.border.right.color">white</xsl:param>
+ <xsl:param name="table.cell.border.left.color">white</xsl:param>
+ <xsl:param name="table.frame.border.right.color">white</xsl:param>
+ <xsl:param name="table.frame.border.left.color">white</xsl:param>
+ <!-- Paper type, no headers on blank pages, no double sided printing -->
+ <xsl:param name="paper.type" select="'A4'" />
+ <xsl:param name="double.sided">1</xsl:param>
+ <xsl:param name="headers.on.blank.pages">1</xsl:param>
+ <xsl:param name="footers.on.blank.pages">1</xsl:param>
+ <!--xsl:param name="header.column.widths" select="'1 4 1'"/-->
+ <xsl:param name="header.column.widths" select="'1 0 1'" />
+ <xsl:param name="footer.column.widths" select="'1 1 1'" />
+ <xsl:param name="header.rule" select="1" />
+
+ <!-- Space between paper border and content (chaotic stuff, don't touch) -->
+ <xsl:param name="page.margin.top">15mm</xsl:param>
+ <xsl:param name="region.before.extent">10mm</xsl:param>
+ <xsl:param name="body.margin.top">15mm</xsl:param>
+
+ <xsl:param name="body.margin.bottom">15mm</xsl:param>
+ <xsl:param name="region.after.extent">10mm</xsl:param>
+ <xsl:param name="page.margin.bottom">15mm</xsl:param>
+
+ <xsl:param name="page.margin.outer">30mm</xsl:param>
+ <xsl:param name="page.margin.inner">30mm</xsl:param>
+
+ <!-- No intendation of Titles -->
+ <xsl:param name="body.start.indent">0pt</xsl:param>
+
+ <xsl:param name="title.color">#4a5d75</xsl:param>
+ <xsl:param name="chapter.title.color" select="$title.color" />
+ <xsl:param name="section.title.color" select="$title.color" />
+
+ <xsl:attribute-set name="section.title.level1.properties">
+ <xsl:attribute name="color"><xsl:value-of select="$section.title.color" />
+ </xsl:attribute>
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master * 1.6" />
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+ </xsl:attribute-set>
+ <xsl:attribute-set name="section.title.level2.properties">
+ <xsl:attribute name="color"><xsl:value-of select="$section.title.color" />
+ </xsl:attribute>
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master * 1.4" />
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+ </xsl:attribute-set>
+ <xsl:attribute-set name="section.title.level3.properties">
+ <xsl:attribute name="color"><xsl:value-of select="$section.title.color" />
+ </xsl:attribute>
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master * 1.3" />
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+ </xsl:attribute-set>
+ <xsl:attribute-set name="section.title.level4.properties">
+ <xsl:attribute name="color"><xsl:value-of select="$section.title.color" />
+ </xsl:attribute>
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master * 1.2" />
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+ </xsl:attribute-set>
+ <xsl:attribute-set name="section.title.level5.properties">
+ <xsl:attribute name="color"><xsl:value-of select="$section.title.color" />
+ </xsl:attribute>
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master * 1.1" />
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+ </xsl:attribute-set>
+ <xsl:attribute-set name="section.title.level6.properties">
+ <xsl:attribute name="color"><xsl:value-of select="$section.title.color" />
+ </xsl:attribute>
+ <xsl:attribute name="font-size">
+ <xsl:value-of select="$body.font.master" />
+ <xsl:text>pt</xsl:text>
+ </xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:attribute-set name="section.title.properties">
+ <xsl:attribute name="font-family">
+ <xsl:value-of select="$title.font.family" />
+ </xsl:attribute>
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
+ <!-- font size is calculated dynamically by section.heading template -->
+ <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
+ <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
+ <xsl:attribute name="space-before.optimum">1.0em</xsl:attribute>
+ <xsl:attribute name="space-before.maximum">1.2em</xsl:attribute>
+ <xsl:attribute name="text-align">left</xsl:attribute>
+ <xsl:attribute name="start-indent"><xsl:value-of select="$title.margin.left" />
+ </xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:param name="titlepage.color" select="$title.color" />
+
+ <xsl:attribute-set name="book.titlepage.recto.style">
+ <xsl:attribute name="font-family">
+ <xsl:value-of select="$title.fontset" />
+ </xsl:attribute>
+ <xsl:attribute name="color"><xsl:value-of select="$titlepage.color" />
+ </xsl:attribute>
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
+ <xsl:attribute name="font-size">12pt</xsl:attribute>
+ <xsl:attribute name="text-align">center</xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:attribute-set name="component.title.properties">
+ <xsl:attribute name="keep-with-next.within-column">always</xsl:attribute>
+ <xsl:attribute name="space-before.optimum"><xsl:value-of
+ select="concat($body.font.master, 'pt')" />
+ </xsl:attribute>
+ <xsl:attribute name="space-before.minimum"><xsl:value-of
+ select="concat($body.font.master, 'pt')" />
+ </xsl:attribute>
+ <xsl:attribute name="space-before.maximum"><xsl:value-of
+ select="concat($body.font.master, 'pt')" />
+ </xsl:attribute>
+ <xsl:attribute name="hyphenate">false</xsl:attribute>
+ <xsl:attribute name="color">
+ <xsl:choose>
+ <xsl:when test="not(parent::chapter | parent::article | parent::appendix)"><xsl:value-of
+ select="$title.color" />
+ </xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:attribute name="text-align">
+ <xsl:choose>
+ <xsl:when
+ test="((parent::article | parent::articleinfo) and not(ancestor::book) and not(self::bibliography)) or (parent::slides | parent::slidesinfo)">center</xsl:when>
+ <xsl:otherwise>left</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:attribute name="start-indent"><xsl:value-of select="$title.margin.left" />
+ </xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:attribute-set name="chapter.titlepage.recto.style">
+ <xsl:attribute name="color"><xsl:value-of select="$chapter.title.color" />
+ </xsl:attribute>
+ <xsl:attribute name="background-color">white</xsl:attribute>
+ <xsl:attribute name="font-size">
+ <xsl:choose>
+ <xsl:when test="$l10n.gentext.language = 'ja-JP'">
+ <xsl:value-of select="$body.font.master * 1.7" />
+ <xsl:text>pt</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>24pt</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
+ <xsl:attribute name="text-align">left</xsl:attribute>
+ <!--xsl:attribute name="wrap-option">no-wrap</xsl:attribute-->
+ <xsl:attribute name="padding-left">1em</xsl:attribute>
+ <xsl:attribute name="padding-right">1em</xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:attribute-set name="preface.titlepage.recto.style">
+ <xsl:attribute name="font-family">
+ <xsl:value-of select="$title.fontset" />
+ </xsl:attribute>
+ <xsl:attribute name="color">#4a5d75</xsl:attribute>
+ <xsl:attribute name="font-size">12pt</xsl:attribute>
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:attribute-set name="part.titlepage.recto.style">
+ <xsl:attribute name="color"><xsl:value-of select="$title.color" />
+ </xsl:attribute>
+ <xsl:attribute name="text-align">center</xsl:attribute>
+ </xsl:attribute-set>
+
+
+ <!--
+ From: fo/table.xsl
+ Reason: Table Header format
+ Version:1.72
+ -->
+ <xsl:template name="table.cell.block.properties">
+ <!-- highlight this entry? -->
+ <xsl:if test="ancestor::thead or ancestor::tfoot">
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
+ <xsl:attribute name="background-color">#4a5d75</xsl:attribute>
+ <xsl:attribute name="color">white</xsl:attribute>
+ </xsl:if>
+ </xsl:template>
+
+ <!--
+ From: fo/table.xsl
+ Reason: Table Header format
+ Version:1.72
+ -->
+ <!-- customize this template to add row properties -->
+ <xsl:template name="table.row.properties">
+ <xsl:variable name="bgcolor">
+ <xsl:call-template name="dbfo-attribute">
+ <xsl:with-param name="pis" select="processing-instruction('dbfo')" />
+ <xsl:with-param name="attribute" select="'bgcolor'" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test="$bgcolor != ''">
+ <xsl:attribute name="background-color">
+ <xsl:value-of select="$bgcolor" />
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="ancestor::thead or ancestor::tfoot">
+ <xsl:attribute name="background-color">#4a5d75</xsl:attribute>
+ </xsl:if>
+ </xsl:template>
+
+ <!--
+ From: fo/titlepage.templates.xsl
+ Reason: Switch to using chapter.titlepage.recto.style
+ Version:1.72
+ -->
+ <xsl:template match="title" mode="appendix.titlepage.recto.auto.mode">
+ <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xsl:use-attribute-sets="chapter.titlepage.recto.style">
+ <xsl:call-template name="component.title.nomarkup">
+ <xsl:with-param name="node" select="ancestor-or-self::appendix[1]" />
+ </xsl:call-template>
+ </fo:block>
+ </xsl:template>
+
+ <!--
+ From: fo/titlepage.templates.xsl
+ Reason: Remove font size and weight overrides
+ Version:1.72
+ -->
+ <xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
+ <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xsl:use-attribute-sets="chapter.titlepage.recto.style">
+ <xsl:value-of select="." />
+ </fo:block>
+ </xsl:template>
+
+ <!--
+ From: fo/titlepage.templates.xsl
+ Reason: Remove font family, size and weight overrides
+ Version:1.72
+ -->
+ <xsl:template name="preface.titlepage.recto">
+ <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xsl:use-attribute-sets="preface.titlepage.recto.style"
+ margin-left="{$title.margin.left}">
+ <xsl:call-template name="component.title.nomarkup">
+ <xsl:with-param name="node" select="ancestor-or-self::preface[1]" />
+ </xsl:call-template>
+ </fo:block>
+ <xsl:choose>
+ <xsl:when test="prefaceinfo/subtitle">
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/subtitle" />
+ </xsl:when>
+ <xsl:when test="docinfo/subtitle">
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/subtitle" />
+ </xsl:when>
+ <xsl:when test="info/subtitle">
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="info/subtitle" />
+ </xsl:when>
+ <xsl:when test="subtitle">
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="subtitle" />
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/corpauthor" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/corpauthor" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="info/corpauthor" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/authorgroup" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/authorgroup" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="info/authorgroup" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/author" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/author" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/author" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/othercredit" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/othercredit" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="info/othercredit" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/releaseinfo" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/releaseinfo" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="info/releaseinfo" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/copyright" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/copyright" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="info/copyright" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/legalnotice" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/legalnotice" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="info/legalnotice" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/pubdate" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/pubdate" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode" select="info/pubdate" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/revision" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/revision" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="info/revision" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/revhistory" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/revhistory" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="info/revhistory" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="prefaceinfo/abstract" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="docinfo/abstract" />
+ <xsl:apply-templates mode="preface.titlepage.recto.auto.mode"
+ select="info/abstract" />
+ </xsl:template>
+
+
+ <xsl:template name="pickfont-sans">
+ <xsl:variable name="font">
+ <xsl:choose>
+ <xsl:when test="$l10n.gentext.language = 'ja-JP'">
+ <xsl:text>KochiMincho,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'ko-KR'">
+ <xsl:text>BaekmukBatang,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'zh-CN'">
+ <xsl:text>ARPLKaitiMGB,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'bn-IN'">
+ <xsl:text>LohitBengali,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'ta-IN'">
+ <xsl:text>LohitTamil,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'pa-IN'">
+ <xsl:text>LohitPunjabi,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'hi-IN'">
+ <xsl:text>LohitHindi,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'gu-IN'">
+ <xsl:text>LohitGujarati,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'zh-TW'">
+ <xsl:text>ARPLMingti2LBig5,</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$fop1.extensions != 0">
+ <xsl:copy-of select="$font" />
+ <xsl:text>DejaVuLGCSans,sans-serif</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="$font" />
+ <xsl:text>sans-serif</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="pickfont-serif">
+ <xsl:variable name="font">
+ <xsl:choose>
+ <xsl:when test="$l10n.gentext.language = 'ja-JP'">
+ <xsl:text>KochiMincho,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'ko-KR'">
+ <xsl:text>BaekmukBatang,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'zh-CN'">
+ <xsl:text>ARPLKaitiMGB,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'bn-IN'">
+ <xsl:text>LohitBengali,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'ta-IN'">
+ <xsl:text>LohitTamil,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'pa-IN'">
+ <xsl:text>LohitPunjabi,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'hi-IN'">
+ <xsl:text>LohitHindi,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'gu-IN'">
+ <xsl:text>LohitGujarati,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'zh-TW'">
+ <xsl:text>ARPLMingti2LBig5,</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$fop1.extensions != 0">
+ <xsl:copy-of select="$font" />
+ <xsl:text>DejaVuLGCSans,serif</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="$font" />
+ <xsl:text>serif</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="pickfont-mono">
+ <xsl:variable name="font">
+ <xsl:choose>
+ <xsl:when test="$l10n.gentext.language = 'ja-JP'">
+ <xsl:text>KochiMincho,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'ko-KR'">
+ <xsl:text>BaekmukBatang,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'zh-CN'">
+ <xsl:text>ARPLKaitiMGB,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'bn-IN'">
+ <xsl:text>LohitBengali,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'ta-IN'">
+ <xsl:text>LohitTamil,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'pa-IN'">
+ <xsl:text>LohitPunjabi,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'hi-IN'">
+ <xsl:text>LohitHindi,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'gu-IN'">
+ <xsl:text>LohitGujarati,</xsl:text>
+ </xsl:when>
+ <xsl:when test="$l10n.gentext.language = 'zh-TW'">
+ <xsl:text>ARPLMingti2LBig5,</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$fop1.extensions != 0">
+ <xsl:copy-of select="$font" />
+ <xsl:text>DejaVuLGCSans,monospace</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="$font" />
+ <xsl:text>monospace</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!--xsl:param name="symbol.font.family">
+ <xsl:choose>
+ <xsl:when test="$l10n.gentext.language = 'ja-JP'">
+ <xsl:text>Symbol,ZapfDingbats</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>Symbol,ZapfDingbats</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:param-->
+
+ <xsl:param name="title.font.family">
+ <xsl:call-template name="pickfont-sans" />
+ </xsl:param>
+
+ <xsl:param name="body.font.family">
+ <xsl:call-template name="pickfont-sans" />
+ </xsl:param>
+
+ <xsl:param name="monospace.font.family">
+ <xsl:call-template name="pickfont-mono" />
+ </xsl:param>
+
+ <xsl:param name="sans.font.family">
+ <xsl:call-template name="pickfont-sans" />
+ </xsl:param>
+
+ <!--xsl:param name="callout.unicode.font">
+ <xsl:call-template name="pickfont-sans"/>
+ </xsl:param-->
+
+ <!--
+ From: fo/verbatim.xsl
+ Reason: Left align address
+ Version: 1.72
+ -->
+
+ <xsl:template match="address">
+ <xsl:param name="suppress-numbers" select="'0'" />
+
+ <xsl:variable name="content">
+ <xsl:choose>
+ <xsl:when
+ test="$suppress-numbers = '0'
+ and @linenumbering = 'numbered'
+ and $use.extensions != '0'
+ and $linenumbering.extension != '0'">
+ <xsl:call-template name="number.rtf.lines">
+ <xsl:with-param name="rtf">
+ <xsl:apply-templates />
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <fo:block wrap-option='no-wrap' white-space-collapse='false'
+ white-space-treatment='preserve' linefeed-treatment="preserve" text-align="start"
+ xsl:use-attribute-sets="verbatim.properties">
+ <xsl:copy-of select="$content" />
+ </fo:block>
+ </xsl:template>
+
+ <xsl:template name="component.title.nomarkup">
+ <xsl:param name="node" select="." />
+
+ <xsl:variable name="id">
+ <xsl:call-template name="object.id">
+ <xsl:with-param name="object" select="$node" />
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="title">
+ <xsl:apply-templates select="$node" mode="object.title.markup">
+ <xsl:with-param name="allow-anchors" select="1" />
+ </xsl:apply-templates>
+ </xsl:variable>
+ <xsl:copy-of select="$title" />
+ </xsl:template>
+
+ <!--
+ From: fo/pagesetup.xsl
+ Reason: Custom Header
+ Version: 1.72
+ -->
+ <xsl:template name="header.content">
+ <xsl:param name="pageclass" select="''" />
+ <xsl:param name="sequence" select="''" />
+ <xsl:param name="position" select="''" />
+ <xsl:param name="gentext-key" select="''" />
+ <xsl:param name="title-limit" select="'30'" />
+ <!--
+ <fo:block>
+ <xsl:value-of select="$pageclass"/>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$sequence"/>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$position"/>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$gentext-key"/>
+ </fo:block>
+ body, blank, left, chapter
+ -->
+ <!-- sequence can be odd, even, first, blank -->
+ <!-- position can be left, center, right -->
+ <xsl:choose>
+ <!--xsl:when test="($sequence='blank' and $position='left' and $gentext-key='chapter')">
+ <xsl:variable name="text">
+ <xsl:call-template name="component.title.nomarkup"/>
+ </xsl:variable>
+ <fo:inline keep-together.within-line="always" font-weight="bold">
+ <xsl:choose>
+ <xsl:when test="string-length($text) > '33'">
+ <xsl:value-of select="concat(substring($text, 0, $title-limit), '...')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$text"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </fo:inline>
+ </xsl:when-->
+ <xsl:when
+ test="$confidential = 1 and (($sequence='odd' and $position='left') or ($sequence='even' and $position='right'))">
+ <fo:inline keep-together.within-line="always" font-weight="bold">
+ <xsl:text>RED HAT CONFIDENTIAL</xsl:text>
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$sequence = 'blank'">
+ <!-- nothing -->
+ </xsl:when>
+ <!-- Extracting 'Chapter' + Chapter Number from the full Chapter title, with a dirty, dirty hack -->
+ <xsl:when
+ test="($sequence='first' and $position='left' and $gentext-key='chapter')">
+ <xsl:variable name="text">
+ <xsl:call-template name="component.title.nomarkup" />
+ </xsl:variable>
+ <xsl:variable name="chapt">
+ <xsl:value-of select="substring-before($text, ' ')" />
+ </xsl:variable>
+ <xsl:variable name="remainder">
+ <xsl:value-of select="substring-after($text, ' ')" />
+ </xsl:variable>
+ <xsl:variable name="chapt-num">
+ <xsl:value-of select="substring-before($remainder, ' ')" />
+ </xsl:variable>
+ <xsl:variable name="text1">
+ <xsl:value-of select="concat($chapt, ' ', $chapt-num)" />
+ </xsl:variable>
+ <fo:inline keep-together.within-line="always" font-weight="bold">
+ <xsl:value-of select="$text1" />
+ </fo:inline>
+ </xsl:when>
+ <!--xsl:when test="($sequence='odd' or $sequence='even') and $position='center'"-->
+ <xsl:when test="($sequence='even' and $position='left')">
+ <!--xsl:if test="$pageclass != 'titlepage'"-->
+ <xsl:variable name="text">
+ <xsl:call-template name="component.title.nomarkup" />
+ </xsl:variable>
+ <fo:inline keep-together.within-line="always" font-weight="bold">
+ <xsl:choose>
+ <xsl:when test="string-length($text) > '33'">
+ <xsl:value-of
+ select="concat(substring($text, 0, $title-limit), '...')" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$text" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </fo:inline>
+ <!--xsl:if-->
+ </xsl:when>
+ <xsl:when test="($sequence='odd' and $position='right')">
+ <!--xsl:if test="$pageclass != 'titlepage'"-->
+ <fo:inline keep-together.within-line="always">
+ <fo:retrieve-marker retrieve-class-name="section.head.marker"
+ retrieve-position="first-including-carryover"
+ retrieve-boundary="page-sequence" />
+ </fo:inline>
+ <!--/xsl:if-->
+ </xsl:when>
+ <xsl:when test="$position='left'">
+ <!-- Same for odd, even, empty, and blank sequences -->
+ <xsl:call-template name="draft.text" />
+ </xsl:when>
+ <xsl:when test="$position='center'">
+ <!-- nothing for empty and blank sequences -->
+ </xsl:when>
+ <xsl:when test="$position='right'">
+ <!-- Same for odd, even, empty, and blank sequences -->
+ <xsl:call-template name="draft.text" />
+ </xsl:when>
+ <xsl:when test="$sequence = 'first'">
+ <!-- nothing for first pages -->
+ </xsl:when>
+ <xsl:when test="$sequence = 'blank'">
+ <!-- nothing for blank pages -->
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <!--
+ From: fo/pagesetup.xsl
+ Reason: Override colour
+ Version: 1.72
+ -->
+ <xsl:template name="head.sep.rule">
+ <xsl:param name="pageclass" />
+ <xsl:param name="sequence" />
+ <xsl:param name="gentext-key" />
+
+ <xsl:if test="$header.rule != 0">
+ <xsl:attribute name="border-bottom-width">0.5pt</xsl:attribute>
+ <xsl:attribute name="border-bottom-style">solid</xsl:attribute>
+ <xsl:attribute name="border-bottom-color">#4a5d75</xsl:attribute>
+ </xsl:if>
+ </xsl:template>
+
+ <!--
+ From: fo/pagesetup.xsl
+ Reason: Override colour
+ Version: 1.72
+ -->
+ <xsl:template name="foot.sep.rule">
+ <xsl:param name="pageclass" />
+ <xsl:param name="sequence" />
+ <xsl:param name="gentext-key" />
+
+ <xsl:if test="$footer.rule != 0">
+ <xsl:attribute name="border-top-width">0.5pt</xsl:attribute>
+ <xsl:attribute name="border-top-style">solid</xsl:attribute>
+ <xsl:attribute name="border-top-color">#4a5d75</xsl:attribute>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:param name="footnote.font.size">
+ <xsl:value-of select="$body.font.master * 0.8" />
+ <xsl:text>pt</xsl:text>
+ </xsl:param>
+ <xsl:param name="footnote.number.format" select="'1'" />
+ <xsl:param name="footnote.number.symbols" select="''" />
+ <xsl:attribute-set name="footnote.mark.properties">
+ <xsl:attribute name="font-size">75%</xsl:attribute>
+ <xsl:attribute name="font-weight">normal</xsl:attribute>
+ <xsl:attribute name="font-style">normal</xsl:attribute>
+ </xsl:attribute-set>
+ <xsl:attribute-set name="footnote.properties">
+ <xsl:attribute name="padding-top">48pt</xsl:attribute>
+ <xsl:attribute name="font-family"><xsl:value-of select="$body.fontset" />
+ </xsl:attribute>
+ <xsl:attribute name="font-size"><xsl:value-of select="$footnote.font.size" />
+ </xsl:attribute>
+ <xsl:attribute name="font-weight">normal</xsl:attribute>
+ <xsl:attribute name="font-style">normal</xsl:attribute>
+ <xsl:attribute name="text-align"><xsl:value-of select="$alignment" />
+ </xsl:attribute>
+ <xsl:attribute name="start-indent">0pt</xsl:attribute>
+ </xsl:attribute-set>
+ <xsl:attribute-set name="footnote.sep.leader.properties">
+ <xsl:attribute name="color">black</xsl:attribute>
+ <xsl:attribute name="leader-pattern">rule</xsl:attribute>
+ <xsl:attribute name="leader-length">1in</xsl:attribute>
+ </xsl:attribute-set>
+
+ <xsl:template match="author" mode="tablerow.titlepage.mode">
+ <fo:table-row>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'Author'" />
+ </xsl:call-template>
+ </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:call-template name="person.name">
+ <xsl:with-param name="node" select="." />
+ </xsl:call-template>
+ </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:apply-templates select="email" />
+ </fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </xsl:template>
+
+ <xsl:template match="author" mode="titlepage.mode">
+ <fo:block>
+ <xsl:call-template name="person.name">
+ <xsl:with-param name="node" select="." />
+ </xsl:call-template>
+ </fo:block>
+ </xsl:template>
+
+ <xsl:param name="editedby.enabled">0</xsl:param>
+
+ <xsl:template match="editor" mode="tablerow.titlepage.mode">
+ <fo:table-row>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'Editor'" />
+ </xsl:call-template>
+ </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:call-template name="person.name">
+ <xsl:with-param name="node" select="." />
+ </xsl:call-template>
+ </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:apply-templates select="email" />
+ </fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </xsl:template>
+
+ <xsl:template match="othercredit" mode="tablerow.titlepage.mode">
+ <fo:table-row>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'translator'" />
+ </xsl:call-template>
+ </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:call-template name="person.name">
+ <xsl:with-param name="node" select="." />
+ </xsl:call-template>
+ </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:apply-templates select="email" />
+ </fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </xsl:template>
+
+ <!--
+ From: fo/titlepage.xsl
+ Reason:
+ Version:1.72
+ -->
+ <!-- Omitted to get JBossOrg style working - TODO
+ <xsl:template name="verso.authorgroup">
+ <fo:table table-layout="fixed" width="100%">
+ <fo:table-column column-number="1" column-width="proportional-column-width(1)"/>
+ <fo:table-column column-number="2" column-width="proportional-column-width(1)"/>
+ <fo:table-column column-number="3" column-width="proportional-column-width(1)"/>
+ <fo:table-body>
+ <xsl:apply-templates select="author" mode="tablerow.titlepage.mode"/>
+ <xsl:apply-templates select="editor" mode="tablerow.titlepage.mode"/>
+ <xsl:apply-templates select="othercredit" mode="tablerow.titlepage.mode"/>
+ </fo:table-body>
+ </fo:table>
+ </xsl:template> -->
+
+ <xsl:template match="title" mode="book.titlepage.recto.auto.mode">
+ <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xsl:use-attribute-sets="book.titlepage.recto.style" text-align="center"
+ font-size="20pt" space-before="18.6624pt" font-weight="bold"
+ font-family="{$title.fontset}">
+ <xsl:call-template name="division.title">
+ <xsl:with-param name="node" select="ancestor-or-self::book[1]" />
+ </xsl:call-template>
+ </fo:block>
+ </xsl:template>
+
+ <xsl:template match="subtitle" mode="book.titlepage.recto.auto.mode">
+ <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xsl:use-attribute-sets="book.titlepage.recto.style" text-align="center"
+ font-size="34pt" space-before="30pt" font-family="{$title.fontset}">
+ <xsl:apply-templates select="." mode="book.titlepage.recto.mode" />
+ </fo:block>
+ </xsl:template>
+
+ <xsl:template match="issuenum" mode="book.titlepage.recto.auto.mode">
+ <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xsl:use-attribute-sets="book.titlepage.recto.style" text-align="center"
+ font-size="16pt" space-before="15.552pt" font-family="{$title.fontset}">
+ <xsl:apply-templates select="." mode="book.titlepage.recto.mode" />
+ </fo:block>
+ </xsl:template>
+
+ <xsl:template match="author" mode="book.titlepage.recto.auto.mode">
+ <fo:block xsl:use-attribute-sets="book.titlepage.recto.style" font-size="14pt"
+ space-before="15.552pt">
+ <xsl:call-template name="person.name">
+ <xsl:with-param name="node" select="." />
+ </xsl:call-template>
+ </fo:block>
+ </xsl:template>
+
+ <!-- <xsl:template name="book.titlepage.recto">
+ <xsl:choose>
+ <xsl:when test="bookinfo/title">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/title"/>
+ </xsl:when>
+ <xsl:when test="info/title">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/title"/>
+ </xsl:when>
+ <xsl:when test="title">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="title"/>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/issuenum"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/issuenum"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="issuenum"/>
+
+ <xsl:choose>
+ <xsl:when test="bookinfo/subtitle">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/subtitle"/>
+ </xsl:when>
+ <xsl:when test="info/subtitle">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/subtitle"/>
+ </xsl:when>
+ <xsl:when test="subtitle">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="subtitle"/>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/corpauthor"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/corpauthor"/>
+
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/authorgroup/author"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/authorgroup/author"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/author"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/author"/>
+
+ <fo:block xsl:use-attribute-sets="book.titlepage.recto.style" color="black">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/invpartnumber"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/invpartnumber"/>
+ </fo:block>
+ <fo:block xsl:use-attribute-sets="book.titlepage.recto.style" color="black">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'isbn'"/>
+ </xsl:call-template>
+ <xsl:text>: </xsl:text>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/isbn"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/isbn"/>
+ </fo:block>
+ <fo:block xsl:use-attribute-sets="book.titlepage.recto.style" color="black">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'pubdate'"/>
+ </xsl:call-template>
+ <xsl:text>: </xsl:text>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/pubdate"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/pubdate"/>
+ </fo:block>
+ </xsl:template> -->
+
+ <!-- Use our own slightly simpler title page (just show title, version, authors) -->
+ <xsl:template name="book.titlepage.recto">
+ <xsl:choose>
+ <xsl:when test="bookinfo/title">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode"
+ select="bookinfo/title" />
+ </xsl:when>
+ <xsl:when test="info/title">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode"
+ select="info/title" />
+ </xsl:when>
+ <xsl:when test="title">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="title" />
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode"
+ select="bookinfo/issuenum" />
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/issuenum" />
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="issuenum" />
+
+ <xsl:choose>
+ <xsl:when test="bookinfo/subtitle">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode"
+ select="bookinfo/subtitle" />
+ </xsl:when>
+ <xsl:when test="info/subtitle">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode"
+ select="info/subtitle" />
+ </xsl:when>
+ <xsl:when test="subtitle">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="subtitle" />
+ </xsl:when>
+ </xsl:choose>
+
+ <fo:block xsl:use-attribute-sets="book.titlepage.recto.style" font-size="14pt"
+ space-before="15.552pt">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode"
+ select="bookinfo/releaseinfo" />
+ </fo:block>
+
+ <fo:block text-align="center" space-before="15.552pt">
+ <xsl:call-template name="person.name.list">
+ <xsl:with-param name="person.list"
+ select="bookinfo/authorgroup/author|bookinfo/authorgroup/corpauthor" />
+ <xsl:with-param name="person.type" select="'author'" />
+ </xsl:call-template>
+ </fo:block>
+
+ <fo:block text-align="center" space-before="15.552pt">
+ <xsl:call-template name="person.name.list">
+ <xsl:with-param name="person.list" select="bookinfo/authorgroup/editor" />
+ <xsl:with-param name="person.type" select="'editor'" />
+ </xsl:call-template>
+ </fo:block>
+
+ <fo:block text-align="center" space-before="15.552pt">
+ <xsl:call-template name="person.name.list">
+ <xsl:with-param name="person.list" select="bookinfo/authorgroup/othercredit" />
+ <xsl:with-param name="person.type" select="'othercredit'" />
+ </xsl:call-template>
+ </fo:block>
+
+ </xsl:template>
+
+ <!-- <xsl:template name="book.titlepage.verso">
+ <xsl:choose>
+ <xsl:when test="bookinfo/abstract">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/abstract"/>
+ </xsl:when>
+ <xsl:when test="info/abstract">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/abstract"/>
+ </xsl:when>
+ </xsl:choose>
+
+ </xsl:template> -->
+
+ <xsl:template name="book.titlepage.verso"></xsl:template>
+
+
+ <!-- <xsl:template name="book.titlepage3.recto">
+ <xsl:choose>
+ <xsl:when test="bookinfo/title">
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="bookinfo/title"/>
+ </xsl:when>
+ <xsl:when test="info/title">
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="info/title"/>
+ </xsl:when>
+ <xsl:when test="title">
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="title"/>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="bookinfo/authorgroup"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="info/authorgroup"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="bookinfo/author"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="info/author"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="bookinfo/othercredit"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="info/othercredit"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="bookinfo/copyright"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="info/copyright"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="bookinfo/legalnotice"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="info/legalnotice"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="bookinfo/publisher"/>
+ <xsl:apply-templates mode="book.titlepage.verso.auto.mode" select="info/publisher"/>
+ </xsl:template> -->
+
+ <xsl:template name="book.titlepage3.recto">
+
+ </xsl:template>
+
+ <!-- Make examples, tables etc. break across pages -->
+ <xsl:attribute-set name="formal.object.properties">
+ <xsl:attribute name="keep-together.within-column">auto</xsl:attribute>
+ </xsl:attribute-set>
+
+ <!-- Correct placement of titles for figures and examples. -->
+ <xsl:param name="formal.title.placement">
+ figure after example before equation before table before procedure before
+ </xsl:param>
+
+ <!-- Prevent blank pages in output -->
+ <xsl:template name="book.titlepage.before.verso"></xsl:template>
+ <xsl:template name="book.titlepage.separator"></xsl:template>
+
+ <!-- <xsl:template name="book.titlepage.separator"><fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" break-after="page"/>
+ </xsl:template> -->
+
+ <xsl:template name="book.titlepage.before.recto"></xsl:template>
+
+ <!-- <xsl:template name="book.titlepage.before.verso"><fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" break-after="page"/>
+ </xsl:template> -->
+
+ <xsl:template name="book.titlepage">
+ <fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <xsl:call-template name="book.titlepage.before.recto" />
+ <fo:block>
+ <xsl:call-template name="book.titlepage.recto" />
+ </fo:block>
+ <xsl:call-template name="book.titlepage.separator" />
+ <fo:block>
+ <xsl:call-template name="book.titlepage.verso" />
+ </fo:block>
+ <xsl:call-template name="book.titlepage.separator" />
+ <fo:block>
+ <xsl:call-template name="book.titlepage3.recto" />
+ </fo:block>
+ <xsl:call-template name="book.titlepage.separator" />
+ </fo:block>
+ </xsl:template>
+
+ <!--
+ From: fo/qandaset.xsl
+ Reason: Id in list-item-label causes fop crash
+ Version:1.72
+ -->
+
+ <xsl:template match="question">
+ <xsl:variable name="id">
+ <xsl:call-template name="object.id" />
+ </xsl:variable>
+
+ <xsl:variable name="entry.id">
+ <xsl:call-template name="object.id">
+ <xsl:with-param name="object" select="parent::*" />
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="deflabel">
+ <xsl:choose>
+ <xsl:when test="ancestor-or-self::*[@defaultlabel]">
+ <xsl:value-of
+ select="(ancestor-or-self::*[@defaultlabel])[last()]
+ /@defaultlabel" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$qanda.defaultlabel" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <fo:list-item id="{$entry.id}" xsl:use-attribute-sets="list.item.spacing">
+ <fo:list-item-label end-indent="label-end()">
+ <xsl:choose>
+ <xsl:when test="$deflabel = 'none'">
+ <fo:block />
+ </xsl:when>
+ <xsl:otherwise>
+ <fo:block>
+ <xsl:apply-templates select="." mode="label.markup" />
+ <xsl:if test="$deflabel = 'number' and not(label)">
+ <xsl:apply-templates select="." mode="intralabel.punctuation" />
+ </xsl:if>
+ </fo:block>
+ </xsl:otherwise>
+ </xsl:choose>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <xsl:choose>
+ <xsl:when test="$deflabel = 'none'">
+ <fo:block font-weight="bold">
+ <xsl:apply-templates select="*[local-name(.)!='label']" />
+ </fo:block>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="*[local-name(.)!='label']" />
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- Uncomment this line to get revhistory output in the question -->
+ <!-- <xsl:apply-templates select="preceding-sibling::revhistory"/> -->
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+
+ <!--
+ From: fo/qandaset.xsl
+ Reason: Id in list-item-label causes fop crash
+ Version:1.72
+ -->
+ <xsl:template match="answer">
+ <xsl:variable name="id">
+ <xsl:call-template name="object.id" />
+ </xsl:variable>
+ <xsl:variable name="entry.id">
+ <xsl:call-template name="object.id">
+ <xsl:with-param name="object" select="parent::*" />
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="deflabel">
+ <xsl:choose>
+ <xsl:when test="ancestor-or-self::*[@defaultlabel]">
+ <xsl:value-of
+ select="(ancestor-or-self::*[@defaultlabel])[last()]
+ /@defaultlabel" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$qanda.defaultlabel" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <fo:list-item xsl:use-attribute-sets="list.item.spacing">
+ <fo:list-item-label end-indent="label-end()">
+ <xsl:choose>
+ <xsl:when test="$deflabel = 'none'">
+ <fo:block />
+ </xsl:when>
+ <xsl:otherwise>
+ <fo:block>
+ <xsl:variable name="answer.label">
+ <xsl:apply-templates select="." mode="label.markup" />
+ </xsl:variable>
+ <xsl:copy-of select="$answer.label" />
+ </fo:block>
+ </xsl:otherwise>
+ </xsl:choose>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <xsl:apply-templates select="*[local-name(.)!='label']" />
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+
+
+ <xsl:template
+ match="programlisting|programlisting[@role='XML']|programlisting[@role='JAVA']|programlisting[@role='XHTML']|programlisting[@role='JSP']|programlisting[@role='CSS']">
+
+ <xsl:variable name="role">
+ <xsl:value-of select="s:toUpperCase(string(@role))"
+ xmlns:s="java:java.lang.String" />
+ </xsl:variable>
+
+ <xsl:variable name="hilighter" select="jbh:new()" />
+ <xsl:variable name="parsable" select="jbh:isParsable($role)" />
+
+ <fo:block background-color="#F5F5F5" border-style="solid" border-width=".3mm"
+ border-color="#CCCCCC" font-family="{$programlisting.font}"
+ font-size="{$programlisting.font.size}" space-before="12pt" space-after="12pt"
+ linefeed-treatment="preserve" white-space-collapse="false"
+ white-space-treatment="preserve" padding-bottom="12pt" padding-top="12pt"
+ padding-right="12pt" padding-left="12pt">
+
+ <xsl:choose>
+ <xsl:when test="$parsable = 'true'">
+ <xsl:for-each select="node()">
+ <xsl:choose>
+ <xsl:when test="self::text()">
+ <xsl:variable name="child.content" select="." />
+
+ <xsl:variable name="caller"
+ select="jbh:parseText($hilighter, $role, string($child.content), 'UTF-8')" />
+ <xsl:variable name="noOfTokens"
+ select="jbh:getNoOfTokens($caller)" />
+
+ <xsl:call-template name="iterator">
+ <xsl:with-param name="caller" select="$caller" />
+ <xsl:with-param name="noOfTokens" select="$noOfTokens" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <fo:inline>
+ <xsl:call-template name="anchor" />
+ </fo:inline>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates />
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </fo:block>
+ </xsl:template>
+
+
+ <xsl:template name="iterator">
+ <xsl:param name="caller" />
+ <xsl:param name="noOfTokens" />
+ <xsl:param name="i" select="0" />
+
+ <xsl:variable name="style" select="jbh:getStyle($caller, $i)" />
+ <xsl:variable name="token" select="jbh:getToken($caller, $i)" />
+
+ <xsl:choose>
+ <xsl:when test="$style = 'java_keyword'">
+ <fo:inline color="#7F1B55" font-weight="bold">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'java_plain'">
+ <fo:inline color="#000000">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'java_type'">
+ <fo:inline color="#000000">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'java_separator'">
+ <fo:inline color="#000000">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'java_literal'">
+ <fo:inline color="#2A00FF">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'java_comment'">
+ <fo:inline color="#3F7F5F">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'java_javadoc_comment'">
+ <fo:inline color="#3F5FBF" font-style="italic">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'java_operator'">
+ <fo:inline color="#000000">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'java_javadoc_tag'">
+ <fo:inline color="#7F9FBF" font-weight="bold" font-style="italic">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'xml_plain'">
+ <fo:inline color="#000000">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'xml_char_data'">
+ <fo:inline color="#000000">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'xml_tag_symbols'">
+ <fo:inline color="#008080">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'xml_comment'">
+ <fo:inline color="#3F5FBF">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'xml_attribute_value'">
+ <fo:inline color="#2A00FF">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'xml_attribute_name'">
+ <fo:inline color="#7F007F" font-weight="bold">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'xml_processing_instruction'">
+ <fo:inline color="#000000" font-weight="bold" font-style="italic">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'xml_tag_name'">
+ <fo:inline color="#3F7F7F">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'xml_rife_tag'">
+ <fo:inline color="#000000">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:when test="$style = 'xml_rife_name'">
+ <fo:inline color="#008CCA">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:when>
+ <xsl:otherwise>
+ <fo:inline color="black">
+ <xsl:value-of select="$token" />
+ </fo:inline>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:if test="$i < $noOfTokens - 1">
+ <xsl:call-template name="iterator">
+ <xsl:with-param name="caller" select="$caller" />
+ <xsl:with-param name="noOfTokens" select="$noOfTokens" />
+ <xsl:with-param name="i" select="$i + 1" />
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>
Modified: maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/portal/pdf.xsl
===================================================================
--- maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/portal/pdf.xsl 2008-07-15 18:15:31 UTC (rev 11457)
+++ maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/portal/pdf.xsl 2008-07-15 21:20:14 UTC (rev 11458)
@@ -16,6 +16,9 @@
<xsl:import href="classpath:/xslt/org/jboss/pdf.xsl"/>
<xsl:import href="common.xsl"/>
+ <xsl:param name="callout.graphics.extension">.svg</xsl:param>
+
+
<!-- Change the font color for titles to SeamFramework.org one -->
<!--
<xsl:param name="title.color">#576C74</xsl:param>
Added: maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml-common.xsl
===================================================================
--- maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml-common.xsl (rev 0)
+++ maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml-common.xsl 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,520 @@
+<?xml version='1.0'?>
+
+<!--
+ Copyright 2007 Red Hat, Inc.
+ License: GPL
+ Author: Jeff Fearn <jfearn(a)redhat.com>
+ Author: Tammy Fox <tfox(a)redhat.com>
+ Author: Andy Fitzsimon <afitzsim(a)redhat.com>
+ Author: Mark Newton <mark.newton(a)jboss.org>
+ Author: Pete Muir
+-->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0"
+ xmlns:rf="java:org.jboss.highlight.XhtmlRendererFactory"
+ exclude-result-prefixes="#default">
+
+ <xsl:import href="common.xsl" />
+
+ <!-- Ignore image scaling in html version -->
+ <xsl:param name="ignore.image.scaling" select="1"/>
+
+ <xsl:param name="generate.legalnotice.link" select="1"/>
+ <xsl:param name="generate.revhistory.link" select="0"/>
+
+ <!-- This is needed to generate the correct xhtml-strict DOCTYPE on the front page.
+ We can't use indentation as the algorithm inserts linebreaks into the markup
+ created for callouts. This means that callouts appear on different lines than
+ the code they are supposed to refer to. -->
+ <xsl:output method="xml"
+ encoding="UTF-8"
+ indent="no"
+ doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+ standalone="no"/>
+
+ <xsl:param name="siteHref" select="'http://www.jboss.org'"/>
+ <xsl:param name="docHref" select="'http://docs.jboss.org/'"/>
+ <xsl:param name="siteLinkText" select="'JBoss.org'"/>
+ <xsl:param name="docLinkText" select="'Community Documentation'"/>
+
+ <xsl:param name="graphicsize.extension">0</xsl:param>
+
+ <!-- Placement of titles -->
+ <xsl:param name="formal.title.placement">
+ figure after example before equation before table before procedure before
+ </xsl:param>
+
+ <!-- Callouts -->
+ <!-- Place callout marks at this column in annotated areas. The algorithm using this number doesn't
+ know about highlighted code with extra span elements so we need to pad each line at the start
+ with an XML comment and a line break. The callout marks must then be placed immediately afterwards.
+ This ensures that the callouts appear on the same line as the code it relates to and we can position
+ them using CSS so that they all appear in a column on the right. -->
+ <xsl:param name="callout.defaultcolumn">15</xsl:param>
+ <xsl:param name="callout.icon.size">17px</xsl:param>
+
+ <!-- Admonitions -->
+ <xsl:param name="admon.style" select="''"/>
+
+ <!-- Set chunk.section.depth to 0 to just chunk chapters. -->
+ <xsl:param name="chunk.section.depth" select="0"/>
+ <xsl:param name="chunk.first.sections" select="1"/>
+ <xsl:param name="chunk.toc" select="''"/>
+ <xsl:param name="chunker.output.doctype-public" select="'-//W3C//DTD XHTML 1.0 Strict//EN'"/>
+ <xsl:param name="chunker.output.doctype-system" select="'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'"/>
+ <xsl:param name="chunker.output.encoding" select="'UTF-8'"/>
+
+ <!-- We must turn off indenting as the algorithm inserts linebreaks into the callout markup that is added by the
+ code highlighting routine. This causes the callouts to appear on different lines from the code they relate to. -->
+ <xsl:param name="chunker.output.indent" select="'no'"/>
+
+ <xsl:param name="html.stylesheet" select="'css/jbossorg.css'"/>
+ <xsl:param name="html.stylesheet.type" select="'text/css'"/>
+ <xsl:param name="html.cleanup" select="1"/>
+ <xsl:param name="html.ext" select="'.html'"/>
+
+
+ <xsl:template match="authorgroup" mode="titlepage.mode">
+ <xsl:choose>
+ <xsl:when test="$use.simplified.author.group = 1">
+ <div class="authorgroup">
+ <div class="authors">
+ <xsl:call-template name="person.name.list">
+ <xsl:with-param name="person.list" select="./author|./corpauthor" />
+ <xsl:with-param name="person.type" select="'author'"/>
+ </xsl:call-template>
+ </div>
+
+ <div class="editors">
+ <xsl:call-template name="person.name.list">
+ <xsl:with-param name="person.list" select="./editor" />
+ <xsl:with-param name="person.type" select="'editor'"/>
+ </xsl:call-template>
+ </div>
+
+ <div class="others">
+ <xsl:call-template name="person.name.list">
+ <xsl:with-param name="person.list" select="./othercredit" />
+ <xsl:with-param name="person.type" select="'othercredit'"/>
+ </xsl:call-template>
+ </div>
+ </div>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:template>
+
+<!-- TOC -->
+<xsl:param name="generate.toc">
+set toc
+book toc
+article toc
+chapter toc
+qandadiv toc
+qandaset toc
+sect1 nop
+sect2 nop
+sect3 nop
+sect4 nop
+sect5 nop
+section toc
+part toc
+</xsl:param>
+
+<xsl:param name="suppress.navigation" select="0"/>
+<xsl:param name="suppress.header.navigation" select="0"/>
+<xsl:param name="suppress.footer.navigation" select="0"/>
+
+<xsl:param name="header.rule" select="0"/>
+<xsl:param name="footer.rule" select="0"/>
+<xsl:param name="css.decoration" select="0"/>
+<xsl:param name="ulink.target"/>
+<xsl:param name="table.cell.border.style"/>
+
+<!-- BUGBUG TODO
+
+ There is a bug where inserting elements in to the body level
+ of xhtml will add xmlns="" to the tag. This is invalid xhtml.
+ To overcome this I added:
+ xmlns="http://www.w3.org/1999/xhtml"
+ to the outer most tag. This gets stripped by the parser, resulting
+ in valid xhtml ... go figure.
+
+ This sounds like the system used by the stylesheets to process
+ DocBook 5 docs by stripping out the XML namespace before processing
+ the node set as normal: http://lists.oasis-open.org/archives/docbook-apps/200701/msg00184.html
+-->
+
+<!--
+From: xhtml/admon.xsl
+Reason: remove tables
+Version: 1.72.0
+-->
+<xsl:template name="graphical.admonition">
+ <xsl:variable name="admon.type">
+ <xsl:choose>
+ <xsl:when test="local-name(.)='note'">Note</xsl:when>
+ <xsl:when test="local-name(.)='warning'">Warning</xsl:when>
+ <xsl:when test="local-name(.)='caution'">Caution</xsl:when>
+ <xsl:when test="local-name(.)='tip'">Tip</xsl:when>
+ <xsl:when test="local-name(.)='important'">Important</xsl:when>
+ <xsl:otherwise>Note</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="alt">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="$admon.type"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:if test="$admon.style != ''">
+ <xsl:attribute name="style">
+ <xsl:value-of select="$admon.style"/>
+ </xsl:attribute>
+ </xsl:if>
+
+ <xsl:call-template name="anchor"/>
+ <xsl:if test="$admon.textlabel != 0 or title">
+ <h2>
+ <xsl:apply-templates select="." mode="object.title.markup"/>
+ </h2>
+ </xsl:if>
+ <xsl:apply-templates/>
+ </div>
+</xsl:template>
+
+<!--
+From: xhtml/lists.xsl
+Reason: Remove invalid type attribute from ol
+Version: 1.72.0
+-->
+<xsl:template match="substeps">
+ <xsl:variable name="numeration">
+ <xsl:call-template name="procedure.step.numeration"/>
+ </xsl:variable>
+ <xsl:call-template name="anchor"/>
+ <ol xmlns="http://www.w3.org/1999/xhtml" class="{$numeration}">
+ <xsl:apply-templates/>
+ </ol>
+</xsl:template>
+
+<!--
+From: xhtml/lists.xsl
+Reason: Remove invalid type, start & compact attributes from ol
+Version: 1.72.0
+-->
+<xsl:template match="orderedlist">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:call-template name="anchor"/>
+ <xsl:if test="title">
+ <xsl:call-template name="formal.object.heading"/>
+ </xsl:if>
+<!-- Preserve order of PIs and comments -->
+ <xsl:apply-templates select="*[not(self::listitem or self::title or self::titleabbrev)] |comment()[not(preceding-sibling::listitem)] |processing-instruction()[not(preceding-sibling::listitem)]"/>
+ <ol>
+ <xsl:apply-templates select="listitem |comment()[preceding-sibling::listitem] |processing-instruction()[preceding-sibling::listitem]"/>
+ </ol>
+ </div>
+</xsl:template>
+
+<!--
+From: xhtml/lists.xsl
+Reason: Remove invalid type, start & compact attributes from ol
+Version: 1.72.0
+-->
+<xsl:template match="procedure">
+ <xsl:variable name="param.placement" select="substring-after(normalize-space($formal.title.placement), concat(local-name(.), ' '))"/>
+
+ <xsl:variable name="placement">
+ <xsl:choose>
+ <xsl:when test="contains($param.placement, ' ')">
+ <xsl:value-of select="substring-before($param.placement, ' ')"/>
+ </xsl:when>
+ <xsl:when test="$param.placement = ''">before</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$param.placement"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+<!-- Preserve order of PIs and comments -->
+ <xsl:variable name="preamble" select="*[not(self::step or self::title or self::titleabbrev)] |comment()[not(preceding-sibling::step)] |processing-instruction()[not(preceding-sibling::step)]"/>
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="." mode="class.attribute"/>
+ <xsl:call-template name="anchor">
+ <xsl:with-param name="conditional">
+ <xsl:choose>
+ <xsl:when test="title">0</xsl:when>
+ <xsl:otherwise>1</xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:if test="title and $placement = 'before'">
+ <xsl:call-template name="formal.object.heading"/>
+ </xsl:if>
+ <xsl:apply-templates select="$preamble"/>
+ <xsl:choose>
+ <xsl:when test="count(step) = 1">
+ <ul>
+ <xsl:apply-templates select="step |comment()[preceding-sibling::step] |processing-instruction()[preceding-sibling::step]"/>
+ </ul>
+ </xsl:when>
+ <xsl:otherwise>
+ <ol>
+ <xsl:attribute name="class">
+ <xsl:value-of select="substring($procedure.step.numeration.formats,1,1)"/>
+ </xsl:attribute>
+ <xsl:apply-templates select="step |comment()[preceding-sibling::step] |processing-instruction()[preceding-sibling::step]"/>
+ </ol>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:if test="title and $placement != 'before'">
+ <xsl:call-template name="formal.object.heading"/>
+ </xsl:if>
+ </div>
+</xsl:template>
+
+<!--
+From: xhtml/graphics.xsl
+Reason: Remove html markup (align)
+Version: 1.72.0
+-->
+<xsl:template name="longdesc.link">
+ <xsl:param name="longdesc.uri" select="''"/>
+
+ <xsl:variable name="this.uri">
+ <xsl:call-template name="make-relative-filename">
+ <xsl:with-param name="base.dir" select="$base.dir"/>
+ <xsl:with-param name="base.name">
+ <xsl:call-template name="href.target.uri"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="href.to">
+ <xsl:call-template name="trim.common.uri.paths">
+ <xsl:with-param name="uriA" select="$longdesc.uri"/>
+ <xsl:with-param name="uriB" select="$this.uri"/>
+ <xsl:with-param name="return" select="'A'"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <div xmlns="http://www.w3.org/1999/xhtml" class="longdesc-link">
+ <br/>
+ <span class="longdesc-link">
+ <xsl:text>[</xsl:text>
+ <a href="{$href.to}">D</a>
+ <xsl:text>]</xsl:text>
+ </span>
+ </div>
+</xsl:template>
+
+<!--
+From: xhtml/docbook.xsl
+Reason: Remove inline style for draft mode
+Version: 1.72.0
+-->
+<xsl:template name="head.content">
+ <xsl:param name="node" select="."/>
+ <xsl:param name="title">
+ <xsl:apply-templates select="$node" mode="object.title.markup.textonly"/>
+ </xsl:param>
+
+ <title xmlns="http://www.w3.org/1999/xhtml" >
+ <xsl:copy-of select="$title"/>
+ </title>
+
+ <xsl:if test="$html.stylesheet != ''">
+ <xsl:call-template name="output.html.stylesheets">
+ <xsl:with-param name="stylesheets" select="normalize-space($html.stylesheet)"/>
+ </xsl:call-template>
+ </xsl:if>
+
+ <xsl:if test="$link.mailto.url != ''">
+ <link rev="made" href="{$link.mailto.url}"/>
+ </xsl:if>
+
+ <xsl:if test="$html.base != ''">
+ <base href="{$html.base}"/>
+ </xsl:if>
+
+ <meta xmlns="http://www.w3.org/1999/xhtml" name="generator" content="DocBook {$DistroTitle} V{$VERSION}"/>
+
+ <xsl:if test="$generate.meta.abstract != 0">
+ <xsl:variable name="info" select="(articleinfo |bookinfo |prefaceinfo |chapterinfo |appendixinfo |sectioninfo |sect1info |sect2info |sect3info |sect4info |sect5info |referenceinfo |refentryinfo |partinfo |info |docinfo)[1]"/>
+ <xsl:if test="$info and $info/abstract">
+ <meta xmlns="http://www.w3.org/1999/xhtml" name="description">
+ <xsl:attribute name="content">
+ <xsl:for-each select="$info/abstract[1]/*">
+ <xsl:value-of select="normalize-space(.)"/>
+ <xsl:if test="position() < last()">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:attribute>
+ </meta>
+ </xsl:if>
+ </xsl:if>
+
+ <xsl:apply-templates select="." mode="head.keywords.content"/>
+</xsl:template>
+
+<!--
+From: xhtml/docbook.xsl
+Reason: Add css class for draft mode
+Version: 1.72.0
+-->
+<xsl:template name="body.attributes">
+ <xsl:if test="($draft.mode = 'yes' or ($draft.mode = 'maybe' and ancestor-or-self::*[@status][1]/@status = 'draft'))">
+ <xsl:attribute name="class">
+ <xsl:value-of select="ancestor-or-self::*[@status][1]/@status"/>
+ </xsl:attribute>
+ </xsl:if>
+</xsl:template>
+
+<!--
+From: xhtml/docbook.xsl
+Reason: Add confidential to footer
+Version: 1.72.0
+-->
+<xsl:template name="user.footer.content">
+ <xsl:param name="node" select="."/>
+ <xsl:if test="$confidential = '1'">
+ <h1 xmlns="http://www.w3.org/1999/xhtml" class="confidential">
+ <xsl:text>Red Hat Confidential!</xsl:text>
+ </h1>
+ </xsl:if>
+</xsl:template>
+
+<!--
+From: xhtml/block.xsl
+Reason: default class (otherwise) to formalpara
+Version: 1.72.0
+-->
+<xsl:template match="formalpara">
+ <xsl:call-template name="paragraph">
+ <xsl:with-param name="class">
+ <xsl:choose>
+ <xsl:when test="@role and $para.propagates.style != 0">
+ <xsl:value-of select="@role"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>formalpara</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ <xsl:with-param name="content">
+ <xsl:call-template name="anchor"/>
+ <xsl:apply-templates/>
+ </xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<!--
+From: xhtml/block.xsl
+Reason: h5 instead of <b>, remove default title end punctuation
+Version: 1.72.0
+-->
+<xsl:template match="formalpara/title|formalpara/info/title">
+ <xsl:variable name="titleStr">
+ <xsl:apply-templates/>
+ </xsl:variable>
+ <h5 xmlns="http://www.w3.org/1999/xhtml" class="formalpara">
+ <xsl:copy-of select="$titleStr"/>
+ </h5>
+</xsl:template>
+
+<!--
+From: xhtml/footnote.xsl
+Reason: remove inline css from hr
+Version: 1.72.0
+-->
+<xsl:template name="process.footnotes">
+ <xsl:variable name="footnotes" select=".//footnote"/>
+ <xsl:variable name="table.footnotes" select=".//tgroup//footnote"/>
+
+ <!-- Only bother to do this if there's at least one non-table footnote -->
+ <xsl:if test="count($footnotes)>count($table.footnotes)">
+ <div class="footnotes">
+ <br/>
+ <hr/>
+ <xsl:apply-templates select="$footnotes" mode="process.footnote.mode"/>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="$annotation.support != 0 and //annotation">
+ <div class="annotation-list">
+ <div class="annotation-nocss">
+ <p>The following annotations are from this essay. You are seeing
+ them here because your browser doesn’t support the user-interface
+ techniques used to make them appear as ‘popups’ on modern browsers.</p>
+ </div>
+
+ <xsl:apply-templates select="//annotation" mode="annotation-popup"/>
+ </div>
+ </xsl:if>
+</xsl:template>
+
+ <xsl:template match="programlisting[@role='XML']|programlisting[@role='JAVA']|programlisting[@role='XHTML']|programlisting[@role='JSP']|programlisting[@role='CSS']">
+
+ <xsl:variable name="role">
+ <xsl:value-of select="s:toUpperCase(string(@role))" xmlns:s="java:java.lang.String"/>
+ </xsl:variable>
+
+ <xsl:variable name="factory" select="rf:instance()"/>
+ <xsl:variable name="hiliter" select="rf:getRenderer($factory, string($role))"/>
+
+ <pre class="{$role}">
+ <xsl:choose>
+ <xsl:when test="$hiliter">
+ <xsl:for-each select="node()">
+ <xsl:choose>
+ <xsl:when test="self::text()">
+ <xsl:variable name="child.content" select="."/>
+
+ <xsl:value-of select="jhr:highlight($hiliter, $role, string($child.content), 'UTF-8', true())"
+ xmlns:jhr="com.uwyn.jhighlight.renderer.Renderer" disable-output-escaping="yes"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- Support a single linkend in HTML -->
+ <xsl:variable name="targets" select="key('id', @linkends)"/>
+ <xsl:variable name="target" select="$targets[1]"/>
+ <xsl:choose>
+ <xsl:when test="$target">
+ <a>
+ <xsl:if test="@id or @xml:id">
+ <xsl:attribute name="id">
+ <xsl:value-of select="(@id|@xml:id)[1]"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$target"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ </a>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="anchor"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </pre>
+
+ </xsl:template>
+
+</xsl:stylesheet>
Added: maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml-single.xsl
===================================================================
--- maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml-single.xsl (rev 0)
+++ maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml-single.xsl 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,99 @@
+<?xml version='1.0'?>
+
+<!--
+ Copyright 2008 JBoss, a division of Red Hat
+ License: GPL
+ Author: Jeff Fearn <jfearn(a)redhat.com>
+ Author: Tammy Fox <tfox(a)redhat.com>
+ Author: Andy Fitzsimon <afitzsim(a)redhat.com>
+ Author: Mark Newton <mark.newton(a)jboss.org>
+-->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:import href="http://docbook.sourceforge.net/release/xsl/1.72.0/xhtml/docbook.xsl"/>
+
+ <xsl:include href="xhtml-common.xsl"/>
+
+<!--
+From: xhtml/titlepage-templates.xsl
+Reason: Needed to add JBoss.org and Community Documentation graphics to header
+Version: 1.72.0
+-->
+<xsl:template name="book.titlepage.recto">
+ <p xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:attribute name="id">
+ <xsl:text>title</xsl:text>
+ </xsl:attribute>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="$siteHref" />
+ </xsl:attribute>
+ <xsl:attribute name="class">
+ <xsl:text>site_href</xsl:text>
+ </xsl:attribute>
+ <strong>
+ <xsl:value-of select="$siteLinkText"/>
+ </strong>
+ </a>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="$docHref" />
+ </xsl:attribute>
+ <xsl:attribute name="class">
+ <xsl:text>doc_href</xsl:text>
+ </xsl:attribute>
+ <strong>
+ <xsl:value-of select="$docLinkText"/>
+ </strong>
+ </a>
+ </p>
+ <xsl:choose>
+ <xsl:when test="bookinfo/title">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/title"/>
+ </xsl:when>
+ <xsl:when test="info/title">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/title"/>
+ </xsl:when>
+ <xsl:when test="title">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="title"/>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="bookinfo/subtitle">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/subtitle"/>
+ </xsl:when>
+ <xsl:when test="info/subtitle">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/subtitle"/>
+ </xsl:when>
+ <xsl:when test="subtitle">
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="subtitle"/>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/corpauthor"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/corpauthor"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/authorgroup"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/authorgroup"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/author"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/author"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/othercredit"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/othercredit"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/releaseinfo"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/releaseinfo"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/copyright"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/copyright"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/legalnotice"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/legalnotice"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/pubdate"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/pubdate"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/revision"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/revision"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/revhistory"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/revhistory"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="bookinfo/abstract"/>
+ <xsl:apply-templates mode="book.titlepage.recto.auto.mode" select="info/abstract"/>
+</xsl:template>
+
+</xsl:stylesheet>
Added: maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml.xsl
===================================================================
--- maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml.xsl (rev 0)
+++ maven/jboss-portal-docbook-xslt/trunk/src/main/resources/xslt/org/jboss/xhtml.xsl 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,217 @@
+<?xml version='1.0'?>
+
+<!--
+ Copyright 2008 JBoss, a division of Red Hat
+ License: GPL
+ Author: Jeff Fearn <jfearn(a)redhat.com>
+ Author: Tammy Fox <tfox(a)redhat.com>
+ Author: Andy Fitzsimon <afitzsim(a)redhat.com>
+ Author: Mark Newton <mark.newton(a)jboss.org>
+-->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:import href="http://docbook.sourceforge.net/release/xsl/1.72.0/xhtml/chunk.xsl"/>
+
+ <xsl:include href="xhtml-common.xsl"/>
+
+<!--
+From: xhtml/chunk-common.xsl
+Reason: remove tables, truncate link text
+Version:
+-->
+<xsl:template name="header.navigation">
+ <xsl:param name="prev" select="/foo"/>
+ <xsl:param name="next" select="/foo"/>
+ <xsl:param name="nav.context"/>
+ <xsl:variable name="home" select="/*[1]"/>
+ <xsl:variable name="up" select="parent::*"/>
+ <xsl:variable name="row1" select="$navig.showtitles != 0"/>
+ <xsl:variable name="row2" select="count($prev) > 0 or (count($up) > 0 and generate-id($up) != generate-id($home) and $navig.showtitles != 0) or count($next) > 0"/>
+ <xsl:if test="$suppress.navigation = '0' and $suppress.header.navigation = '0'">
+ <xsl:if test="$row1 or $row2">
+ <xsl:if test="$row1">
+ <p xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:attribute name="id">
+ <xsl:text>title</xsl:text>
+ </xsl:attribute>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="$siteHref" />
+ </xsl:attribute>
+ <xsl:attribute name="class">
+ <xsl:text>site_href</xsl:text>
+ </xsl:attribute>
+ <strong>
+ <xsl:value-of select="$siteLinkText"/>
+ </strong>
+ </a>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:value-of select="$docHref" />
+ </xsl:attribute>
+ <xsl:attribute name="class">
+ <xsl:text>doc_href</xsl:text>
+ </xsl:attribute>
+ <strong>
+ <xsl:value-of select="$docLinkText"/>
+ </strong>
+ </a>
+ </p>
+ </xsl:if>
+ <xsl:if test="$row2">
+ <ul class="docnav" xmlns="http://www.w3.org/1999/xhtml">
+ <li class="previous">
+ <xsl:if test="count($prev)>0">
+ <a accesskey="p">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$prev"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <strong>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'prev'"/>
+ </xsl:call-template>
+ </strong>
+ </a>
+ </xsl:if>
+ </li>
+ <li class="next">
+ <xsl:if test="count($next)>0">
+ <a accesskey="n">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$next"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <strong>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'next'"/>
+ </xsl:call-template>
+ </strong>
+ </a>
+ </xsl:if>
+ </li>
+ </ul>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="$header.rule != 0">
+ <hr/>
+ </xsl:if>
+ </xsl:if>
+</xsl:template>
+
+<!--
+From: xhtml/chunk-common.xsl
+Reason: remove tables, truncate link text
+Version:
+-->
+<xsl:template name="footer.navigation">
+ <xsl:param name="prev" select="/foo"/>
+ <xsl:param name="next" select="/foo"/>
+ <xsl:param name="nav.context"/>
+ <xsl:param name="title-limit" select="'50'"/>
+ <xsl:variable name="home" select="/*[1]"/>
+ <xsl:variable name="up" select="parent::*"/>
+ <xsl:variable name="row1" select="count($prev) > 0 or count($up) > 0 or count($next) > 0"/>
+ <xsl:variable name="row2" select="($prev and $navig.showtitles != 0) or (generate-id($home) != generate-id(.) or $nav.context = 'toc') or ($chunk.tocs.and.lots != 0 and $nav.context != 'toc') or ($next and $navig.showtitles != 0)"/>
+
+ <xsl:if test="$suppress.navigation = '0' and $suppress.footer.navigation = '0'">
+ <xsl:if test="$footer.rule != 0">
+ <hr/>
+ </xsl:if>
+ <xsl:if test="$row1 or $row2">
+ <ul class="docnav" xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:if test="$row1">
+ <li class="previous">
+ <xsl:if test="count($prev) > 0">
+ <a accesskey="p">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$prev"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <strong>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'prev'"/>
+ </xsl:call-template>
+ </strong>
+ <xsl:variable name="text">
+ <xsl:apply-templates select="$prev" mode="object.title.markup"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($text) > $title-limit">
+ <xsl:value-of select="concat(substring($text, 0, $title-limit), '...')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$text"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </a>
+ </xsl:if>
+ </li>
+ <xsl:if test="count($up) > 0">
+ <li class="up">
+ <a accesskey="u">
+ <xsl:attribute name="href">
+ <xsl:text>#</xsl:text>
+ </xsl:attribute>
+ <strong>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'up'"/>
+ </xsl:call-template>
+ </strong>
+ </a>
+ </li>
+ </xsl:if>
+ <xsl:if test="$home != . or $nav.context = 'toc'">
+ <li class="home">
+ <a accesskey="h">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$home"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <strong>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'home'"/>
+ </xsl:call-template>
+ </strong>
+ </a>
+ </li>
+ </xsl:if>
+ <xsl:if test="count($next)>0">
+ <li class="next">
+ <a accesskey="n">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$next"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <strong>
+ <xsl:call-template name="navig.content">
+ <xsl:with-param name="direction" select="'next'"/>
+ </xsl:call-template>
+ </strong>
+ <xsl:variable name="text">
+ <xsl:apply-templates select="$next" mode="object.title.markup"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($text) > $title-limit">
+ <xsl:value-of select="concat(substring($text, 0, $title-limit),'...')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$text"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </a>
+ </li>
+ </xsl:if>
+ </xsl:if>
+ </ul>
+ </xsl:if>
+ </xsl:if>
+</xsl:template>
+
+</xsl:stylesheet>
Added: maven/jboss-portal-docs-parent/trunk/.project
===================================================================
--- maven/jboss-portal-docs-parent/trunk/.project (rev 0)
+++ maven/jboss-portal-docs-parent/trunk/.project 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>jboss-portal-docs-parent</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
Modified: maven/jboss-portal-docs-parent/trunk/pom.xml
===================================================================
--- maven/jboss-portal-docs-parent/trunk/pom.xml 2008-07-15 18:15:31 UTC (rev 11457)
+++ maven/jboss-portal-docs-parent/trunk/pom.xml 2008-07-15 21:20:14 UTC (rev 11458)
@@ -5,7 +5,7 @@
<artifactId>jboss-portal-docs-parent</artifactId>
<packaging>pom</packaging>
<name>JBoss Portal Docs Parent POM</name>
- <version>1-SNAPSHOT</version>
+ <version>1.0.0-SNAPSHOT</version>
<repositories>
<repository>
@@ -81,14 +81,14 @@
<extensions>true</extensions>
<dependencies>
<dependency>
- <groupId>org.jboss</groupId>
- <artifactId>jbossorg-docbook-xslt</artifactId>
- <version>1.1.0</version>
+ <groupId>org.jboss.portal</groupId>
+ <artifactId>jboss-portal-docbook-xslt</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
- <groupId>org.jboss</groupId>
- <artifactId>jbossorg-jdocbook-style</artifactId>
- <version>1.1.0</version>
+ <groupId>org.jboss.portal</groupId>
+ <artifactId>jboss-portal-jdocbook-style</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
<type>jdocbook-style</type>
</dependency>
</dependencies>
@@ -107,22 +107,22 @@
<formats>
<format>
<formatName>pdf</formatName>
- <stylesheetResource>classpath:/xslt/org/jboss/pdf.xsl</stylesheetResource>
+ <stylesheetResource>classpath:/xslt/org/jboss/portal/pdf.xsl</stylesheetResource>
<finalName>${pom.name}.pdf</finalName>
</format>
<format>
<formatName>html</formatName>
- <stylesheetResource>classpath:/xslt/org/jboss/xhtml.xsl</stylesheetResource>
+ <stylesheetResource>classpath:/xslt/org/jboss/portal/xhtml.xsl</stylesheetResource>
<finalName>index.html</finalName>
</format>
<format>
<formatName>html_single</formatName>
- <stylesheetResource>classpath:/xslt/org/jboss/xhtml-single.xsl</stylesheetResource>
+ <stylesheetResource>classpath:/xslt/org/jboss/portal/xhtml-single.xsl</stylesheetResource>
<finalName>index.html</finalName>
</format>
<format>
<formatName>eclipse</formatName>
- <stylesheetResource>classpath:/xslt/org/jboss/eclipse.xsl</stylesheetResource>
+ <stylesheetResource>classpath:/xslt/org/jboss/portal/eclipse.xsl</stylesheetResource>
<finalName>index.html</finalName>
</format>
</formats>
@@ -131,7 +131,7 @@
<xmlTransformerType>saxon</xmlTransformerType>
<!-- needed for uri-resolvers; can be ommitted if using 'current' uri scheme -->
<!-- could also locate the docbook dependency and inspect its version... -->
- <docbookVersion>1.72.0</docbookVersion>
+ <docbookVersion>1.74.0</docbookVersion>
</options>
</configuration>
</plugin>
Property changes on: maven/jboss-portal-jdocbook-style/trunk
___________________________________________________________________
Name: svn:ignore
+ target
Added: maven/jboss-portal-jdocbook-style/trunk/.project
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/.project (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/.project 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>jboss-portal-jdocbook-style</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
Modified: maven/jboss-portal-jdocbook-style/trunk/pom.xml
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/pom.xml 2008-07-15 18:15:31 UTC (rev 11457)
+++ maven/jboss-portal-jdocbook-style/trunk/pom.xml 2008-07-15 21:20:14 UTC (rev 11458)
@@ -6,7 +6,7 @@
<artifactId>jboss-portal-jdocbook-style</artifactId>
<packaging>jdocbook-style</packaging>
<version>1.0.0-SNAPSHOT</version>
-
+
<name>JBoss Portal Documentation Styles</name>
<description>
The JDocBook styles for the JBoss Portal Documentation.
@@ -45,7 +45,7 @@
<plugin>
<groupId>org.jboss.maven.plugins</groupId>
<artifactId>maven-jdocbook-style-plugin</artifactId>
- <version>1.1.0</version>
+ <version>1.0.0</version>
<extensions>true</extensions>
</plugin>
</plugins>
@@ -59,6 +59,7 @@
</extensions>
</build>
+
<distributionManagement>
<repository>
<!-- Copy the dist to the local checkout of the JBoss maven2 repo ${maven.repository.root} -->
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/codehighlight.css
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/codehighlight.css (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/codehighlight.css 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,242 @@
+span.property {color:#0066CC;}
+
+pre.JAVA {line-height:10px;}
+
+pre.XML {line-height:8px;}
+
+pre.JSP {line-height:8px;}
+
+pre.XHTML {line-height:8px;}
+
+.java_type {color:#000000;}
+
+.java_keyword {
+ font-weight:bold;
+ color:#7F1B55;
+}
+
+.java_javadoc_comment {
+ color:#3F5FBF;
+ font-style:italic;
+ background-color:rgb(247,247,247);
+}
+
+.java_comment {
+ color:#3F7F5F;
+ background-color:rgb(247,247,247);
+}
+
+.java_operator {color:#000000;}
+
+.java_plain {color:rgb(0,0,0);}
+
+.java_literal {color:#2A00FF;}
+
+pre CODE {
+ font-size:12px;
+ color:rgb(0,0,0);
+ font-family:monospace;
+ white-space:nowrap;
+}
+
+.java_javadoc_tag {
+ font-weight:bold;
+ color:#7F9FBF;
+ font-style:italic;
+ background-color:rgb(247,247,247);
+}
+
+.java_separator {color:#000000;}
+
+.xml_plain {color:rgb(0,0,0);}
+
+.xml_tag_name {color:#3F7F7F;}
+
+.xml_comment {
+ color:#3F5FBF;
+ background-color:rgb(247,247,247);
+}
+
+.xml_tag_symbols {color:#008080;}
+
+.xml_rife_tag {
+ color:rgb(0,0,0);
+ background-color:rgb(228,230,160);
+}
+
+.xml_attribute_value {color:#2A00FF;}
+
+.xml_attribute_name {
+ font-weight:bold;
+ color:#7F007F;
+}
+
+.xml_char_data {color:rgb(0,0,0);}
+
+.xml_rife_name {
+ color:#008cca;
+ background-color:rgb(228,230,160);
+}
+
+.xml_processing_instruction {
+ font-weight:bold;
+ color:rgb(0,0,0);
+ font-style:italic;
+}
+
+td.java {
+ vertical-align:top;
+ line-height:10px;
+}
+
+td.java-ln {
+ vertical-align:top;
+ line-height:10px;
+}
+
+tt.java {
+ margin-bottom:0em;
+ line-height:10px;
+ font-family:verdana,helvetica,sans-serif;
+}
+
+tt.java-ln {
+ margin-bottom:0em;
+ line-height:10px;
+}
+
+pre.java {
+ margin-bottom:0em;
+ line-height:10px;
+}
+
+pre.java-ln {
+ margin-bottom:0em;
+ line-height:10px;
+}
+
+td.java-ln {
+ line-height:10px;
+ text-align:right;
+}
+
+tt.java-ln {
+ color:#888888;
+ line-height:10px;
+}
+
+pre.java-ln {
+ color:#888888;
+ line-height:10px;
+}
+
+span.java0 {
+ font-size:8pt;
+ color:#ffffff;
+ line-height:10px;
+}
+
+span.java1 {
+ font-size:8pt;
+ color:#808080;
+}
+
+span.java2 {
+ font-size:8pt;
+ color:#3f7f5f;
+ line-height:10px;
+}
+
+/* Single-line comment */
+
+span.java3 {
+ font-size:8pt;
+ color:#3f7f5f;
+ line-height:10px;
+}
+
+/* Keywords excluding 'return' */
+
+span.java4 {
+ font-weight:bold;
+ font-size:8pt;
+ color:#7F1B55;
+ line-height:10px;
+}
+
+span.java5 {
+ font-size:8pt;
+ color:#2a00ff;
+ line-height:10px;
+}
+
+span.java6 {
+ font-size:8pt;
+ color:#990000;
+ line-height:10px;
+}
+
+span.java7 {
+ font-size:8pt;
+ color:#990000;
+ line-height:10px;
+}
+
+span.java8 {
+ font-size:8pt;
+ color:#000000;
+ line-height:10px;
+}
+
+/* Primitive types: long, int, void etc... */
+
+span.java9 {
+ font-weight:bold;
+ font-size:8pt;
+ color:#7F0055;
+ line-height:10px;
+}
+
+span.java10 {
+ font-size:8pt;
+ color:#000000;
+ line-height:10px;
+}
+
+span.java11 {
+ font-size:8pt;
+ color:#7f9fbf;
+ line-height:10px;
+}
+
+span.java12 {
+ font-size:8pt;
+ color:#7f7f9f;
+ line-height:10px;
+}
+
+span.java13 {
+ font-size:8pt;
+ color:#3f3fbf;
+ line-height:10px;
+}
+
+span.java14 {
+ font-size:8pt;
+ color:#3f5fbf;
+ line-height:10px;
+}
+
+span.java15 {
+ font-size:8pt;
+ color:#7F0055;
+ line-height:10px;
+}
+
+/* Annotations */
+
+span.java16 {
+ font-size:8pt;
+ color:#646464;
+ line-height:10px;
+}
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/docnav.css
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/docnav.css (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/docnav.css 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,204 @@
+/* Document Navigation */
+
+.docnav a, .docnav strong {
+ text-decoration:none;
+ font-weight:normal;
+}
+
+.docnav {
+ list-style:none;
+ margin:0em;
+ padding:0em;
+ position:relative;
+ width:100%;
+ padding-bottom:2em;
+ padding-top:1em;
+ border-top:1px dotted #ccc;
+}
+
+.docnav li {
+ list-style:none;
+ margin:0em;
+ padding:0em;
+ display:inline;
+ font-size:.8em;
+}
+
+.docnav li:before {content:" ";}
+
+.docnav li.previous, .docnav li.next {
+ position:absolute;
+ top:1em;
+}
+
+.docnav li.up, .docnav li.home {margin:0em 1.5em;}
+
+.docnav li.previous {
+ left:0px;
+ text-align:left;
+}
+
+.docnav li.next {
+ right:0px;
+ text-align:right;
+}
+
+.docnav li.previous strong, .docnav li.next strong {
+ display:block;
+ height:22px;
+}
+
+.docnav {
+ margin:0 auto;
+ text-align:center;
+}
+
+.docnav li.next a strong {
+ background:url(../images/portal/docbook/next.png) top right no-repeat;
+ padding-top:10px;
+ padding-bottom:15px;
+ height:40px;
+ padding-right:60px;
+ font-size:1.2em;
+}
+
+.docnav li.previous a strong {
+ background:url(../images/portal/docbook/prev.png) top left no-repeat;
+ padding-top:10px;
+ padding-bottom:15px;
+ height:40px;
+ padding-left:60px;
+ font-size:1.2em;
+}
+
+.docnav li.home a strong {
+ background:url(../images/portal/docbook/home.png) top left no-repeat;
+ padding-top:10px;
+ padding-bottom:15px;
+ height:40px;
+ padding-left:60px;
+ font-size:1.2em;
+}
+
+.docnav li.up a strong {
+ background:url(../images/portal/docbook/up.png) top left no-repeat;
+ padding-top:10px;
+ padding-bottom:15px;
+ height:40px;
+ padding-left:60px;
+ font-size:1.2em;
+}
+
+.docnav a:link, .docnav a:visited {color:#666 !important;}
+
+.docnav a:hover, .docnav a:focus, .docnav a:active {color:black !important;}
+
+.docnav a {
+ max-width:10em;
+ overflow:hidden;
+}
+
+.docnav a:link strong {text-decoration:none;}
+
+.docnav {
+ margin:0 auto;
+ text-align:center;
+}
+
+.docnav {margin-bottom:16px;}
+
+/* Eclipse Help Navigation */
+
+.navheader {padding-top:35px}
+
+.navheader table {border-style:none}
+
+.navheader a {
+ text-decoration:none;
+ font-weight:normal;
+ font-size:.8em;
+}
+
+.navheader td.next a {
+ background:url(../images/portal/docbook/next.png) top right no-repeat;
+ padding-top:10px;
+ padding-bottom:15px;
+ height:40px;
+ padding-right:60px;
+ font-size:0.9em;
+}
+
+.navheader td.previous a {
+ background:url(../images/portal/docbook/prev.png) top left no-repeat;
+ padding-top:10px;
+ padding-bottom:15px;
+ height:40px;
+ padding-left:60px;
+ font-size:0.9em;
+}
+
+.navheader a:link, .navheader a:visited {color:#666 !important;}
+
+.navheader a:hover, .navheader a:focus, .navheader a:active {color:black !important;}
+
+.navheader a {
+ max-width:10em;
+ overflow:hidden;
+}
+
+.navheader a:link {text-decoration:none;}
+
+.navfooter table {border-style:none}
+
+.navfooter a {
+ text-decoration:none;
+ font-weight:normal;
+ font-size:.8em;
+}
+
+.navfooter td.next a {
+ background:url(../images/portal/docbook/next.png) top right no-repeat;
+ padding-top:10px;
+ padding-bottom:15px;
+ height:40px;
+ padding-right:60px;
+ font-size:0.9em;
+}
+
+.navfooter td.previous a {
+ background:url(../images/portal/docbook/prev.png) top left no-repeat;
+ padding-top:10px;
+ padding-bottom:15px;
+ height:40px;
+ padding-left:60px;
+ font-size:0.9em;
+}
+
+.navfooter td.home a {
+ background:url(../images/portal/docbook/home.png) top left no-repeat;
+ padding-top:10px;
+ padding-bottom:15px;
+ height:40px;
+ padding-left:60px;
+ font-size:0.9em;
+}
+
+.navfooter td.up a {
+ background:url(../images/portal/docbook/up.png) top left no-repeat;
+ padding-top:10px;
+ padding-bottom:15px;
+ height:40px;
+ padding-left:60px;
+ font-size:0.9em;
+}
+
+.navfooter a:link, .navfooter a:visited {color:#666 !important;}
+
+.navfooter a:hover, .navfooter a:focus, .navfooter a:active {color:black !important;}
+
+.navfooter a {
+ max-width:10em;
+ overflow:hidden;
+}
+
+.navfooter a:link {text-decoration:none;}
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/documentation.css
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/documentation.css (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/documentation.css 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,551 @@
+/* Lists */
+
+ol li, ul li {
+ padding-left:.2em;
+ padding-bottom:.5em;
+ margin:0em;
+}
+
+ul {
+ padding-left:1.6em;
+ list-style-image:url(../images/portal/dot.png);
+ list-style-type:circle;
+}
+
+ul ul {
+ list-style-image:url(../images/portal/dot2.png);
+ list-style-type:circle;
+}
+
+dt {
+ font-weight:bold;
+ margin-bottom:0em;
+ padding-bottom:0em;
+}
+
+dd {
+ margin:0em;
+ margin-left:2em;
+ padding-top:0em;
+}
+
+li p:first-child, dd p:first-child {
+ padding:0em;
+ margin-top:.3em;
+}
+
+.variablelist, .itemizedlist {margin-top:.6em;}
+
+ul li p:first-child {margin:0em;}
+
+/* Images */
+
+img {
+ display:block;
+ margin:2em 0;
+}
+
+.inlinemediaobject, .inlinemediaobject img {
+ display:inline !important;
+ margin:0em;
+}
+
+.programlisting a img, pre a img, td a img, td img {
+ display:inline;
+ margin:0 0;
+}
+
+/* Needed for Safari */
+
+pre a span img, pre span img {
+ display:inline;
+ margin:0 0;
+}
+
+span.co {
+ position:absolute;
+ left:900px
+}
+
+/* Document modes */
+
+.confidential {
+ background-color:#900;
+ color:white;
+ padding:.5em .5em;
+ font-family:serif;
+ text-transform:uppercase;
+ text-align:center
+}
+
+dt a {font-weight:normal;}
+
+.longdesc-link {display:none;}
+
+.prompt {
+ background-color:#ede7c8;
+ padding:0em .3em;
+}
+
+/* User interface styles */
+
+.screen .replaceable {color:#444;}
+
+.screen {
+ background-color:#ede7c8;
+ color:#333;
+ padding:.5em 1em;
+ margin:0em;
+}
+
+pre, code, .guibutton, .keycap, .guilabel {
+ font-size:0.9em;
+ font-family:verdana, helvetica, sans-serif;
+}
+
+.guibutton, .keycap, .guilabel {
+ font-weight:bold;
+ white-space:nowrap;
+ color:#444;
+ font-family:'Lucida Grande', Geneva, Verdana, Arial, sans-serif;
+}
+
+.guibutton, .guilabel {}
+
+.keycap {padding:.1em.4em;}
+
+.example {
+ background-color:#c8c5ac;
+ padding:5px;
+ margin-bottom:10px;
+}
+
+/* Terminal/Console text */
+
+.command, .computeroutput, .filename, .citetitle, .replaceable, .option {font-weight:bold;}
+
+.command .replaceable {color:#555;}
+
+pre {
+ display:block;
+ background-color:#f9f3b0;
+ color:#333;
+ overflow:auto;
+ padding:10px 20px;
+}
+
+code {white-space:nowrap;}
+
+/* Admonitions */
+
+/* Set basic colors and spacing */
+
+div.note {
+ background:#b5bcbd;
+ color:#4c5253;
+ border:1px solid #8a9195;
+ margin-bottom:1.5em;
+ background-repeat:no-repeat;
+ background-position:10px 10px;
+ padding:1em;
+ padding-bottom:20px;
+}
+
+div.tip {
+ background:#7e917f;
+ color:white;
+ border:1px solid #8a9195;
+ margin-bottom:1.5em;
+ background-repeat:no-repeat;
+ background-position:10px 10px;
+ padding:1em;
+ padding-bottom:20px;
+}
+
+div.important {
+ background:#4a5d75;
+ color:white;
+ border:1px solid #8a9195;
+ margin-bottom:1.5em;
+ background-repeat:no-repeat;
+ background-position:10px 10px;
+ padding:1em;
+ padding-bottom:20px;
+}
+
+div.caution {
+ background:#e3a835;
+ color:#533500;
+ border:1px solid #ab710a;
+ margin-bottom:1.5em;
+ background-repeat:no-repeat;
+ background-position:10px 10px;
+ padding:1em;
+ padding-bottom:20px;
+}
+
+div.warning {
+ background:#7b1e1e;
+ color:white;
+ border:1px solid #65504e;
+ margin-bottom:1.5em;
+ background-repeat:no-repeat;
+ background-position:10px 10px;
+ padding:1em;
+ padding-bottom:20px;
+}
+
+/* Pre tag color settings */
+
+div.note pre {
+ background-color:#d6dee0;
+ color:#334558;
+ border:1px solid #e1e9eb;
+}
+
+div.tip pre {
+ background-color:#d5e1d5;
+ color:#334558;
+ border:1px solid #e1e9eb;
+}
+
+div.important pre {
+ background-color:#e1eef4;
+ color:#334558;
+ border:1px solid #e1e9eb;
+}
+
+div.caution pre {
+ background-color:#faf8ed;
+ color:#334558;
+ border:1px solid #e1e9eb;
+}
+
+div.warning pre {
+ background-color:#faf8ed;
+ color:#334558;
+ border:1px solid #e1e9eb;
+}
+
+/* Background images and margin */
+
+div.note, div.tip, div.important, div.caution, div.warning {margin-top:.5em;}
+
+div.note {background-image:url(../images/portal/docbook/note.png);}
+div.tip {background-image:url(../images/portal/docbook/tip.png);}
+div.important {background-image:url(../images/portal/docbook/important.png);}
+div.caution {background-image:url(../images/portal/docbook/caution.png);}
+div.warning {background-image:url(../images/portal/docbook/warning.png);}
+
+div.note .replaceable, div.tip .replaceable, div.important .replaceable, div.caution .replaceable, div.warning .replaceable {color:#e3dcc0;}
+
+pre .replaceable, tt .replaceable {color:#444 !important;}
+
+div.note h2, div.tip h2, div.important h2, div.caution h2, div.warning h2 {
+ height:32px;
+ font-size:1.3em;
+}
+
+div.note h2 {color:#4c5253;}
+div.tip h2 {color:white;}
+div.important h2 {color:white;}
+div.caution h2 {color:#533500;}
+div.warning h2 {color:white;}
+
+div.note .guilabel, div.tip .guilabel, div.important .guilabel, div.caution .guilabel, div.warning .guilabel {color:white !important;}
+
+div.note li, div.tip li, div.caution li, div.warning li, div.important li {
+ padding-left:10px;
+ margin:0em;
+}
+
+div.note ul, div.tip ul, div.caution ul, div.warning ul, div.important ul {
+ padding-left:40px;
+ margin:0em;
+}
+
+div.note pre pre a:visited, div.tip pre pre a:visited, div.important pre pre a:visited, div.caution pre pre a:visited, div.warning pre pre a:visited,
+div.note pre a:link, div.tip pre a:link, div.important pre a:link, div.caution pre a:link, div.warning pre a:link {color:#0066cc !important;}
+
+div.note a:visited, div.tip a:visited, div.important a:visited, div.warning a:visited,
+div.note a:link, div.tip a:link, div.important a:link, div.warning a:link {color:#f7f2d0;}
+
+div.note a:visited, div.note a:link, div.caution a:link, div.caution a:visited {color:#0066cc;}
+
+/* Admonition icons spacing */
+
+div.note h2, div.note p, div.tip h2, div.tip p, div.caution h2, div.caution p, div.warning h2, div.warning p, div.important h2, div.important p {
+ padding:0em;
+ margin:0em;
+ padding-left:56px;
+}
+
+/* Page Title */
+
+#title {
+ padding:0px;
+ margin:0px;
+}
+
+#title strong {display:none;}
+
+#title a.site_href {
+ display:block;
+ height:89px;
+ width:310px;
+ float:left;
+ background:url(../images/portal/jbossorglogo.png) top left no-repeat;
+}
+
+#title a.doc_href {
+ display:block;
+ height:89px;
+ background:transparent url(../images/portal/portal_doc.png) top right no-repeat;
+}
+
+/* Table */
+
+table {
+ border:1px solid #aaa;
+ width:100%;
+ border-collapse:collapse;
+}
+
+table th {
+ text-align:left;
+ background-color:#4A5D75;
+ padding:.3em .5em;
+ color:white;
+}
+
+table td {padding:.15em .5em;}
+
+table tr.even td {background-color:#f5f5f5;}
+
+table th p:first-child, table td p:first-child, table li p:first-child {
+ margin-top:0em;
+ padding-top:0em;
+ display:inline;
+}
+
+th, td {border-style:none;}
+
+table table td {
+ border-bottom:1px dotted #aaa !important;
+ background-color:white;
+ padding:.6em 0em;
+}
+
+table table {
+ border:1px solid white !important;
+ font-size:.9em;
+}
+
+td.remarkval {
+ font-size:.9em;
+ color:#444;
+}
+
+.defaultval {font-size:.8em}
+
+td.typeval {font-size:.8em}
+
+td.fieldval {
+ font-weight:bold;
+ font-size:.9em;
+}
+
+th.dbkey {font-size:.9em;}
+
+.lbname, .lbtype, .lbdescr, .lbdriver, .lbhost {
+ color:white;
+ font-weight:bold;
+ background-color:#999;
+ font-size:0.9em;
+ width:120px;
+}
+
+td.remarkval {width:230px;}
+
+td.tname {
+ font-weight:bold;
+ font-size:1.1em;
+}
+
+h5 {font-size:9pt;}
+h6 {font-size:10pt;}
+
+th.dbfield {width:120px;}
+th.dbtype {width:70px;}
+th.dbdefault {width:70px;}
+th.dbnul {width:70px;}
+th.dbkey {width:70px;}
+
+span.book {
+ margin-top:4em;
+ display:block;
+}
+
+span.chapter {
+ display:block;
+ margin-top:0.5em;
+}
+
+/* Breadcrumbs */
+
+#breadcrumbs ul li.first:before {content:" ";}
+
+#breadcrumbs {
+ color:#900;
+ padding:3px;
+ margin-bottom:25px;
+}
+
+#breadcrumbs ul {
+ margin-left:0;
+ padding-left:0;
+ display:inline;
+ border:none;
+}
+
+#breadcrumbs ul li {
+ margin-left:0;
+ padding-left:2px;
+ border:none;
+ list-style:none;
+ display:inline;
+}
+
+#breadcrumbs ul li:before {
+ content:"\0020 \0020 \0020 \00BB \0020";
+ color:#333;
+}
+
+/* Status */
+
+.alpha1 {background:white url(../images/portal/watermark-alpha1.png) top left repeat;}
+.alpha2 {background:white url(../images/portal/watermark-alpha2.png) top left repeat;}
+.beta1 {background:white url(../images/portal/watermark-beta1.png) top left repeat;}
+.beta2 {background:white url(../images/portal/watermark-beta2.png) top left repeat;}
+.pre-release-candidate {background:white url(../images/portal/watermark-pre-release-candidate.png) top left repeat;}
+.release-candidate {background:white url(../images/portal/watermark-release-candidate.png) top left repeat;}
+
+/* Index */
+
+.glossary h3, .index h3 {
+ font-size:2em;
+ color:#aaa;
+ margin:0em;
+}
+
+.indexdiv {margin-bottom:1em;}
+
+.glossary dt, .index dt {
+ font-size:.9em;
+ color:#444;
+ padding-top:.5em;
+}
+
+.glossary dl dl dt, .index dl dl dt {
+ font-size:.85em;
+ color:#777;
+ line-height:1.2em;
+ font-weight:normal;
+ padding-top:0em;
+}
+
+.index dl dl dt:before {
+ content:"- ";
+ color:#ccc;
+}
+
+/* Changes */
+
+.footnotes {}
+
+.footnote {
+ padding:.2em 1em;
+ background-color:#c8c5ac;
+ font-size:.9em;
+ margin:0em;
+ margin-bottom:.5em;
+ color:#222;
+}
+
+table .footnote {margin:1em .5em;}
+
+sup {
+ padding:0em .3em;
+ padding-left:0em;
+}
+
+.footnote {position:relative;}
+
+.footnote sup {
+ color:#e3dcc0;
+ font-size:1.8em;
+ position:absolute;
+ left:.4em;
+}
+
+.footnote sup a:link, .footnote sup a:visited {
+ color:#92917d;
+ text-decoration:none;
+}
+
+.footnote:hover sup a {
+ color:#fff;
+ text-decoration:none;
+}
+
+.footnote p {padding-left:5em;}
+
+.footnote a:link, .footnote a:visited {color:#00537c;}
+
+.footnote a:hover {color:white;}
+
+li p:first-child {
+ margin:0em !important;
+ padding:0em !important;
+}
+
+div.chapter, div.section {padding-top:2em;}
+
+.revhistory {font-size:}
+
+pre .replaceable, pre .keycap {color:white;}
+
+pre {
+ font-family:verdana,helvetica,sans-serif;
+ background-color:#F5F5F5;
+ border:1px solid #CCCCCC;
+ padding:5px 15px 5px 25px;
+}
+
+div.note .replaceable, div.tip .replaceable, div.important .replaceable, div.caution .replaceable, div.warning .replaceable,
+div.note .keycap, div.tip .keycap, div.important .keycap, div.caution .keycap, div.warning .keycap {color:white;}
+
+div.abstract {font-size:larger;}
+
+.authorgroup {}
+
+.authorgroup h4 {
+ padding:0em;
+ margin:0em;
+ margin-top:1em;
+}
+
+.author, .editor, .translator, .othercredit {display:block;}
+
+/* Simpler author style on contents page */
+
+.authorgroup div {
+ margin-left:10px;
+ margin-right:10px;
+ margin-bottom:15px;
+}
+
+ul li p:last-child {
+ margin-bottom:0em;
+ padding-bottom:0em;
+}
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/extensions.css
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/extensions.css (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/extensions.css 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,7 @@
+/* Firefox */
+
+pre {-moz-border-radius:11px;}
+
+.example {-moz-border-radius:15px;}
+
+div.note, div.tip, div.important, div.caution, div.warning {-moz-border-radius:11px;}
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/jbossorg.css
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/jbossorg.css (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/jbossorg.css 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,80 @@
+@import url("documentation.css");
+@import url("docnav.css");
+@import url("reports.css");
+@import url("extensions.css");
+@import url("codehighlight.css");
+
+body {
+ background-image:url(../images/portal/bkg_gradient.gif);
+ background-repeat:repeat-x;
+ margin:0 auto;
+ font-family:'Lucida Grande', Geneva, Verdana, Arial, sans-serif;
+ font-size:12px;
+ max-width:55em;
+ padding:0em 2em;
+ color:#333;
+ line-height:150%;
+ text-align:justify;
+}
+
+/* Links */
+
+a:link {color:#0066cc;}
+
+a:visited {color:#6699cc;}
+
+div.longdesc-link {
+ float:right;
+ color:#999;
+}
+
+/* Headings */
+
+h1, h2, h3, h4, h5, h6 {
+ color:#4a5d75;
+ line-height:130%;
+ margin-top:0em;
+ font-family:'Lucida Grande', Geneva, Verdana, Arial, sans-serif;
+ background-color:transparent;
+}
+
+h1 {
+ background-image:url(../images/portal/title_hdr.png);
+ background-repeat:no-repeat;
+ border-top:1px dotted #CCCCCC;
+ line-height:1.2em;
+ color:#182737;
+ font-size:2em;
+ padding:1.5em;
+}
+
+h2 {font-size:1.6em;}
+
+h3 {
+ font-size:1.3em;
+ padding-top:0em;
+ padding-bottom:0em;
+}
+
+h4 {
+ font-size:1.1em;
+ padding-top:0em;
+ padding-bottom:0em;
+}
+
+h5.formalpara {
+ font-size:1em;
+ margin-top:2em;
+ margin-bottom:.8em;
+}
+
+/* Element rules */
+
+hr {
+ border-collapse:collapse;
+ border-style:none;
+ border-top:1px dotted #ccc;
+ width:100% !important;
+}
+
+sup {color:#999;}
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/reports.css
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/reports.css (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/css/css/reports.css 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,231 @@
+/* Reports */
+
+.reports ul.locale {list-style:none;}
+
+.reports ul {
+ padding:0em;
+ margin:0em;
+}
+
+.reports ul.locale li {
+ font-size:small;
+ color:#000;
+ display:block;
+ border:1px solid #eee;
+ float:left;
+ padding-right:2em;
+ margin-right:1em;
+ margin-bottom:1em;
+}
+
+.reports ul.locale li a {
+ font-size:1.2em;
+ display:block;
+ padding-top:.1em;
+ padding-bottom:.5em;
+}
+
+.reports ul.locale strong {
+ display:block;
+ margin:0em;
+ padding:0em;
+ margin-bottom:-2.2em;
+}
+
+.reports ul.locale span.value {
+ display:block;
+ position:relative;
+ text-align:right;
+ margin-right:-1.5em;
+ font-size:1.0em;
+ color:#444;
+}
+
+.reports ul.locale li {
+ width:12em;
+ display:block;
+ float:left;
+ margin:0em;
+ clear:none;
+}
+
+.reports ul.locale li div.progress {
+ font-size:1em;
+ width:13.2em;
+ position:relative;
+ left:0em;
+ top:0em;
+ margin-bottom:0em;
+}
+
+.reports h2 {
+ font-size:1em;
+ margin:0em;
+}
+
+.reports li {}
+
+.reports li:hover {
+ background-color:#666;
+ border-color:#444 !important;
+ color:white !important;
+}
+
+.reports li:hover strong, .reports li:hover h2, .reports li:hover a, .reports li:hover span.value {color:white;}
+
+/* Uniform */
+
+body.results, body.reports {
+ max-width:57em !important;
+ padding:0em !important;
+}
+
+/* Progress Bar */
+
+div.progress {
+ display:block;
+ float:left;
+ width:16em;
+ background:#c00 url(../images/portal/shine.png) top left repeat-x;
+ height:1em;
+}
+
+div.progress span {
+ height:1em;
+ float:left;
+}
+
+div.progress span.translated {background:#6c3 url(../images/portal/shine.png) top left repeat-x;}
+div.progress span.fuzzy {background:#ff9f00 url(../images/portal/shine.png) top left repeat-x;}
+
+/* Results */
+
+.results ul.locale {
+ list-style:none;
+ padding:0em;
+ margin:0em;
+}
+
+.results .pofile {
+ padding:0em !important;
+ margin:0em;
+}
+
+.results ul.locale li {
+ border-top:1px solid #eee;
+ padding:0em;
+ margin:0em;
+ padding-left:32px;
+}
+
+.results ul.locale .pofile {
+ font-size:1.2em;
+ display:block;
+ width:100%;
+ color:#444;
+ padding:0em;
+ margin:0em;
+}
+
+.results span.value {color:#888;}
+
+.results strong {font-weight:normal;}
+
+.results .home a {
+ display:block;
+ margin:0 auto;
+ width:5em;
+ background:url(../images/portal/docbook/home.png) top left no-repeat;
+ padding:5px;
+ padding-left:28px;
+ font-size:1.2em;
+}
+
+.results ul.locale li:hover, .results ul.locale li:hover span.pofile, .results ul.locale li:hover strong, .results ul.locale li:hover span.value {
+ background-color:#666 !important;
+ color:white;
+}
+
+ul.locale {list-style:none;}
+
+ul.locale li.total {
+ font-size:small;
+ color:#777;
+ width:31em;
+ display:block;
+ float:left;
+ margin-right:2em;
+ clear:none !important;
+}
+
+ul.locale li {
+ clear:both;
+ font-size:small;
+ color:#777;
+ display:block;
+}
+
+ul.locale strong, span.value {
+ font-weight:normal;
+ color:#888;
+ font-size:.7em;
+}
+
+ul.locale li a {
+ font-size:1.2em;
+ display:block;
+ padding-top:.2em;
+}
+
+ul.locale li.total div.progress {
+ position:relative;
+ left:0em;
+ top:0em;
+ margin-bottom:0em;
+}
+
+ul.locale li {width:100%;}
+
+ul.locale li div.progress {
+ float:left;
+ position:relative;
+ left:30.5em;
+ top:-2em;
+ margin:0em;
+ margin-bottom:-3em;
+}
+
+li.total {padding:0em !important;}
+
+li.total {
+ float:right;
+ max-width:16em;
+ padding:.5em;
+ margin:0 auto;
+ padding-top:.5em;
+ background-color:#f7f2d0;
+ font-size:1.3em !important;
+ color:#ccc !important;
+ margin-bottom:1em;
+ min-height:9.5em;
+}
+
+li.total .value {
+ color:#444;
+ font-size:.8em;
+}
+
+li.total strong {
+ display:block;
+ color:black;
+ font-weight:bold;
+}
+
+li.total span.value {
+ position:relative;
+ display:block;
+ top:-1.25em;
+ text-align:right;
+}
+
+.pofile {position:relative;}
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/bkg_gradient.gif
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/bkg_gradient.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/community_doc.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/community_doc.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/caution.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/caution.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/caution.svg
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/caution.svg (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/caution.svg 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="35.7529" y1="33.8691" x2="13.3137" y2="11.4299">
+ <stop offset="0.0169" style="stop-color:#4A5D75"/>
+ <stop offset="0.0488" style="stop-color:#42546B"/>
+ <stop offset="0.124" style="stop-color:#35465A"/>
+ <stop offset="0.2176" style="stop-color:#2B3C4F"/>
+ <stop offset="0.3489" style="stop-color:#263648"/>
+ <stop offset="0.7135" style="stop-color:#243446"/>
+ <stop offset="0.7671" style="stop-color:#27384A"/>
+ <stop offset="0.8176" style="stop-color:#324355"/>
+ <stop offset="0.8669" style="stop-color:#435667"/>
+ <stop offset="0.9154" style="stop-color:#5C7181"/>
+ <stop offset="0.9628" style="stop-color:#7B93A3"/>
+ <stop offset="0.9944" style="stop-color:#94AEBD"/>
+</linearGradient>
+<path fill="url(#XMLID_3_)" d="M43.075,19.076c2.035,2.036,2.035,5.337,0,7.37L28.331,41.191c-2.035,2.035-5.336,2.037-7.372,0
+ L6.217,26.449c-2.038-2.036-2.035-5.337,0-7.372L20.961,4.333c2.034-2.035,5.335-2.036,7.372,0L43.075,19.076z"/>
+<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="15.2588" y1="13.3765" x2="38.2721" y2="36.3898">
+ <stop offset="0.0112" style="stop-color:#F3D99F"/>
+ <stop offset="0.0843" style="stop-color:#E9BB61"/>
+ <stop offset="0.7135" style="stop-color:#E3A835"/>
+ <stop offset="0.9944" style="stop-color:#FAF8ED"/>
+</linearGradient>
+<path fill="url(#XMLID_4_)" d="M40.31,19.999c1.527,1.525,1.525,4.002,0,5.528l-12.9,12.899c-1.527,1.526-4.002,1.528-5.529,0
+ L8.98,25.526c-1.527-1.525-1.527-4.002,0-5.527L21.88,7.098c1.526-1.526,4.002-1.527,5.529-0.001L40.31,19.999z"/>
+<g>
+ <path fill="#656565" d="M23.199,23.943l-5.117-0.973l1.37-4.179l4.789,2.379l-0.755-5.259h4.395l-0.723,5.185l4.687-2.305
+ l1.33,4.213l-5.185,0.903l3.672,3.71l-3.637,2.629l-2.414-4.648l-2.595,4.613l-3.529-2.559L23.199,23.943z"/>
+</g>
+<g>
+ <path fill="#FFFFFF" d="M22.037,22.709l-5.117-0.973l1.37-4.179l4.789,2.379l-0.755-5.259h4.395l-0.723,5.185l4.687-2.305
+ l1.33,4.213l-5.185,0.903l3.672,3.71l-3.637,2.629l-2.414-4.648l-2.595,4.613l-3.529-2.559L22.037,22.709z"/>
+</g>
+</svg>
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/home.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/home.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/important.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/important.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/important.svg
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/important.svg (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/important.svg 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="63.1689" y1="10.5625" x2="38.669" y2="-13.9374" gradientTransform="matrix(0.7071 -0.7071 0.7071 0.7071 -10.7369 61.7461)">
+ <stop offset="0.0169" style="stop-color:#4A5D75"/>
+ <stop offset="0.0488" style="stop-color:#42546B"/>
+ <stop offset="0.124" style="stop-color:#35465A"/>
+ <stop offset="0.2176" style="stop-color:#2B3C4F"/>
+ <stop offset="0.3489" style="stop-color:#263648"/>
+ <stop offset="0.7135" style="stop-color:#243446"/>
+ <stop offset="0.7671" style="stop-color:#27384A"/>
+ <stop offset="0.8176" style="stop-color:#324355"/>
+ <stop offset="0.8669" style="stop-color:#435667"/>
+ <stop offset="0.9154" style="stop-color:#5C7181"/>
+ <stop offset="0.9628" style="stop-color:#7B93A3"/>
+ <stop offset="0.9944" style="stop-color:#94AEBD"/>
+</linearGradient>
+<path fill="url(#XMLID_5_)" d="M35.623,7.474c3.145,0,5.691,2.549,5.691,5.691v22.766c0,3.143-2.547,5.691-5.691,5.691H12.859
+ c-3.145,0-5.691-2.549-5.69-5.691L7.168,13.165c0-3.143,2.547-5.691,5.691-5.691H35.623z"/>
+<linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="40.7939" y1="-11.8105" x2="65.919" y2="13.3145" gradientTransform="matrix(0.7071 -0.7071 0.7071 0.7071 -10.7369 61.7461)">
+ <stop offset="0.0112" style="stop-color:#F3D99F"/>
+ <stop offset="0.0843" style="stop-color:#E9BB61"/>
+ <stop offset="0.7135" style="stop-color:#E3A835"/>
+ <stop offset="0.9944" style="stop-color:#FAF8ED"/>
+</linearGradient>
+<path fill="url(#XMLID_6_)" d="M34.2,10.321c2.357-0.001,4.268,1.911,4.269,4.268v19.92c-0.001,2.356-1.91,4.268-4.268,4.268
+ l-19.92-0.001c-2.357,0.001-4.269-1.91-4.268-4.268V14.589c-0.001-2.355,1.91-4.269,4.268-4.269L34.2,10.321z"/>
+<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="5.6143" y1="23.5635" x2="42.4814" y2="23.5635">
+ <stop offset="0.0337" style="stop-color:#FFFFFF"/>
+ <stop offset="0.1129" style="stop-color:#FFFFD8"/>
+ <stop offset="0.291" style="stop-color:#FFFF77"/>
+ <stop offset="0.4944" style="stop-color:#FFFF00"/>
+ <stop offset="0.5406" style="stop-color:#FFFF0E"/>
+ <stop offset="0.6275" style="stop-color:#FFFF32"/>
+ <stop offset="0.7459" style="stop-color:#FFFF6D"/>
+ <stop offset="0.8895" style="stop-color:#FFFFBD"/>
+ <stop offset="1" style="stop-color:#FFFFFF"/>
+</linearGradient>
+<polygon fill="url(#XMLID_7_)" stroke="#243446" stroke-width="1.9897" points="27.155,4.71 28.67,18.877 42.481,22.381
+ 29.476,28.199 30.412,42.416 20.858,31.846 7.627,37.13 14.729,24.777 5.614,13.826 19.557,16.762 "/>
+<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="11.6602" y1="11.79" x2="31.5098" y2="38.189">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="0.4831" style="stop-color:#FFFF66"/>
+ <stop offset="1" style="stop-color:#FFFFFF"/>
+</linearGradient>
+<polygon fill="url(#XMLID_8_)" enable-background="new " points="26.897,5.888 28.321,19.204 41.304,22.497 29.079,27.967
+ 29.96,41.33 20.979,31.395 8.542,36.361 15.217,24.75 6.649,14.457 19.755,17.217 "/>
+</svg>
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/next.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/next.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/note.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/note.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/note.svg
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/note.svg (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/note.svg 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="38.6953" y1="39.5127" x2="10.665" y2="4.0423">
+ <stop offset="0.0169" style="stop-color:#4A5D75"/>
+ <stop offset="0.0488" style="stop-color:#42546B"/>
+ <stop offset="0.124" style="stop-color:#35465A"/>
+ <stop offset="0.2176" style="stop-color:#2B3C4F"/>
+ <stop offset="0.3489" style="stop-color:#263648"/>
+ <stop offset="0.7135" style="stop-color:#243446"/>
+ <stop offset="0.7671" style="stop-color:#27384A"/>
+ <stop offset="0.8176" style="stop-color:#324355"/>
+ <stop offset="0.8669" style="stop-color:#435667"/>
+ <stop offset="0.9154" style="stop-color:#5C7181"/>
+ <stop offset="0.9628" style="stop-color:#7B93A3"/>
+ <stop offset="0.9944" style="stop-color:#94AEBD"/>
+</linearGradient>
+<path fill="url(#XMLID_4_)" d="M41.066,32.29c0,3.143-2.549,5.691-5.691,5.691h-9.146l-0.549,8.217l-10.058-8.217H12.61
+ c-3.143,0-5.691-2.549-5.691-5.691V9.524c0-3.143,2.549-5.691,5.691-5.691h22.765c3.143,0,5.691,2.549,5.691,5.691V32.29z"/>
+<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="27.7246" y1="29.2754" x2="16.1471" y2="3.3128">
+ <stop offset="0" style="stop-color:#D7EBD8"/>
+ <stop offset="0.7135" style="stop-color:#C5E2C7"/>
+ <stop offset="0.9944" style="stop-color:#FAF8ED"/>
+</linearGradient>
+<path fill="url(#XMLID_5_)" d="M38.221,30.866c0,2.357-1.912,4.27-4.27,4.27h-9.735l-0.183,7.039l-7.551-7.032l-2.45-0.007
+ c-2.357,0-4.269-1.912-4.269-4.27v-19.92c0-2.355,1.911-4.268,4.269-4.268h19.918c2.357,0,4.27,1.912,4.27,4.268V30.866z"/>
+<g enable-background="new ">
+ <path fill="#E6E7E8" d="M18.542,28.369v-0.828c0.843-0.061,1.325-0.125,1.446-0.197c0.12-0.07,0.195-0.204,0.226-0.398
+ c0.073-0.413,0.109-1.475,0.109-3.184c0-2.348-0.031-3.683-0.094-4.005c-0.03-0.15-0.079-0.247-0.147-0.293
+ c-0.15-0.097-0.664-0.149-1.54-0.157v-0.859c1.135-0.118,1.991-0.243,2.57-0.376c0.578-0.133,1.21-0.335,1.893-0.608l0.271,0.146
+ c-0.094,1.168-0.141,2.265-0.141,3.291v3.819c0,1.303,0.029,2.074,0.09,2.313c0.029,0.135,0.088,0.225,0.178,0.27
+ c0.201,0.098,0.691,0.162,1.467,0.191v0.875c-1.065-0.031-2.223-0.047-3.475-0.047C20.318,28.322,19.366,28.338,18.542,28.369z
+ M21.644,12.104c0.478,0,0.882,0.169,1.213,0.506c0.333,0.338,0.499,0.742,0.499,1.215c0,0.48-0.166,0.889-0.499,1.227
+ c-0.331,0.337-0.735,0.506-1.213,0.506c-0.47,0-0.872-0.169-1.208-0.506c-0.335-0.338-0.503-0.746-0.503-1.227
+ c0-0.473,0.166-0.877,0.497-1.215C20.762,12.272,21.166,12.104,21.644,12.104z"/>
+</g>
+<g enable-background="new ">
+ <linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="30.665" y1="16.4727" x2="22.2632" y2="20.1011">
+ <stop offset="0" style="stop-color:#96A1AF"/>
+ <stop offset="1" style="stop-color:#182028"/>
+ </linearGradient>
+ <path fill="url(#XMLID_6_)" d="M20.07,27.224v-0.828c0.843-0.061,1.325-0.125,1.446-0.197c0.12-0.07,0.195-0.204,0.226-0.398
+ c0.073-0.413,0.109-1.475,0.109-3.184c0-2.348-0.031-3.683-0.094-4.005c-0.03-0.15-0.079-0.247-0.147-0.293
+ c-0.15-0.097-0.664-0.149-1.54-0.157v-0.859c1.135-0.118,1.991-0.243,2.57-0.376c0.578-0.133,1.21-0.335,1.893-0.608l0.271,0.146
+ c-0.094,1.168-0.141,2.265-0.141,3.291v3.819c0,1.303,0.029,2.074,0.09,2.313c0.029,0.135,0.088,0.225,0.178,0.27
+ c0.201,0.098,0.691,0.162,1.467,0.191v0.875c-1.064-0.031-2.222-0.047-3.474-0.047C21.846,27.177,20.894,27.192,20.07,27.224z
+ M23.171,10.958c0.478,0,0.882,0.169,1.213,0.506c0.333,0.338,0.499,0.742,0.499,1.215c0,0.48-0.166,0.889-0.499,1.227
+ c-0.331,0.337-0.735,0.506-1.213,0.506c-0.47,0-0.872-0.169-1.208-0.506c-0.335-0.338-0.503-0.746-0.503-1.227
+ c0-0.473,0.166-0.877,0.497-1.215C22.29,11.127,22.694,10.958,23.171,10.958z"/>
+</g>
+</svg>
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/prev.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/prev.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/tip.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/tip.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/tip.svg
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/tip.svg (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/tip.svg 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<polygon fill="#E3A835" points="23.829,1.919 25.042,8.157 27.447,2.274 27.418,8.629 30.924,3.33 29.656,9.557 34.129,5.042
+ 31.67,10.903 36.938,7.348 33.383,12.616 39.243,10.157 34.729,14.63 40.956,13.362 35.656,16.868 42.011,16.838 36.127,19.244
+ 42.367,20.456 36.127,21.667 42.011,24.073 35.656,24.043 40.956,27.55 34.729,26.281 39.243,30.754 33.383,28.297 36.938,33.563
+ 31.67,30.01 34.129,35.869 29.656,31.354 30.924,37.582 27.418,32.281 27.447,38.637 25.042,32.754 23.829,38.992 22.619,32.754
+ 20.213,38.637 20.243,32.281 16.735,37.582 18.005,31.354 13.532,35.869 15.99,30.01 10.723,33.563 14.277,28.297 8.417,30.754
+ 12.932,26.281 6.705,27.55 12.004,24.043 5.649,24.073 11.532,21.667 5.293,20.456 11.532,19.244 5.649,16.838 12.004,16.868
+ 6.705,13.362 12.932,14.63 8.417,10.157 14.277,12.616 10.723,7.348 15.99,10.903 13.532,5.042 18.005,9.557 16.735,3.33
+ 20.243,8.629 20.213,2.274 22.619,8.157 "/>
+<polygon stroke="#000000" stroke-width="0.4664" points="23.528,45.402 25.335,45.402 27.842,42.895 27.842,37.415 23.528,37.415
+ 19.213,37.415 19.213,42.895 21.72,45.402 "/>
+<path fill="#FFFFFF" d="M23.684,9.819c5.923,0,10.571,4.803,10.571,10.727c0,0.911-0.319,2.267-0.933,3.459
+ c-0.678,1.317-1.865,3.071-3.108,6.647c-1.244,3.576-1.244,4.663-1.244,4.663s0.038,1.556-0.7,1.556c-2.486,0-4.585,0-4.585,0
+ s-2.1,0-4.587,0c-0.739,0-0.7-1.556-0.7-1.556s0-1.087-1.243-4.663s-2.31-5.338-3.071-6.608c-0.817-1.359-0.973-2.587-0.973-3.498
+ C13.111,14.622,17.759,9.819,23.684,9.819z"/>
+<radialGradient id="XMLID_7_" cx="23.2544" cy="20.3462" r="6.0813" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#FFFF00"/>
+ <stop offset="1" style="stop-color:#FAF8ED"/>
+</radialGradient>
+<path fill="url(#XMLID_7_)" d="M23.684,9.819c5.923,0,10.571,4.803,10.571,10.727c0,0.911-0.319,2.267-0.933,3.459
+ c-0.678,1.317-1.865,3.071-3.108,6.647c-1.244,3.576-1.244,4.663-1.244,4.663s0.038,1.556-0.7,1.556c-2.486,0-4.585,0-4.585,0
+ s-2.1,0-4.587,0c-0.739,0-0.7-1.556-0.7-1.556s0-1.087-1.243-4.663s-2.31-5.338-3.071-6.608c-0.817-1.359-0.973-2.587-0.973-3.498
+ C13.111,14.622,17.759,9.819,23.684,9.819z"/>
+<g>
+ <path d="M22.478,45.402c0,0.322,0.262,0.584,0.583,0.584h0.934c0.322,0,0.583-0.262,0.583-0.584l0,0
+ c0-0.322-0.261-0.584-0.583-0.584h-0.934C22.739,44.818,22.478,45.08,22.478,45.402L22.478,45.402z"/>
+ <g>
+ <radialGradient id="XMLID_8_" cx="23.5273" cy="40.2715" r="3.0611" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#656565"/>
+ <stop offset="1" style="stop-color:#E6E7E8"/>
+ </radialGradient>
+ <rect x="19.213" y="39.922" fill="url(#XMLID_8_)" width="8.629" height="0.699"/>
+ <radialGradient id="XMLID_9_" cx="23.5273" cy="42.3711" r="3.0611" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#656565"/>
+ <stop offset="1" style="stop-color:#E6E7E8"/>
+ </radialGradient>
+ <rect x="19.213" y="42.021" fill="url(#XMLID_9_)" width="8.629" height="0.699"/>
+ <radialGradient id="XMLID_10_" cx="23.5273" cy="41.3213" r="3.0611" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#656565"/>
+ <stop offset="1" style="stop-color:#E6E7E8"/>
+ </radialGradient>
+ <rect x="19.213" y="40.971" fill="url(#XMLID_10_)" width="8.629" height="0.7"/>
+ <polygon fill="#424242" points="21.72,45.402 23.528,45.402 25.335,45.402 27.667,43.07 19.389,43.07 "/>
+ <radialGradient id="XMLID_11_" cx="23.5273" cy="39.2217" r="3.0611" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#656565"/>
+ <stop offset="1" style="stop-color:#E6E7E8"/>
+ </radialGradient>
+ <rect x="19.213" y="38.873" fill="url(#XMLID_11_)" width="8.629" height="0.698"/>
+ <radialGradient id="XMLID_12_" cx="23.5273" cy="37.9688" r="3.0761" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#656565"/>
+ <stop offset="1" style="stop-color:#E6E7E8"/>
+ </radialGradient>
+ <polygon fill="url(#XMLID_12_)" points="27.842,37.415 23.528,37.415 19.213,37.415 19.213,38.522 27.842,38.522 "/>
+ </g>
+</g>
+<polyline fill="none" stroke="#656565" stroke-width="0.4664" stroke-linecap="round" points="22.012,35.549 21.662,27.445
+ 19.155,21.091 19.155,19.924 "/>
+<polyline fill="none" stroke="#656565" stroke-width="0.4664" stroke-linecap="round" points="25.511,35.549 25.859,27.445
+ 28.366,21.091 28.366,19.924 "/>
+<path fill="none" stroke="#E3A835" stroke-width="0.4664" stroke-linecap="round" d="M19.97,20.216c0,0,2.857,2.04,7.697,0.117"/>
+</svg>
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/up.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/up.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/warning.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/warning.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/warning.svg
===================================================================
--- maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/warning.svg (rev 0)
+++ maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/docbook/warning.svg 2008-07-15 21:20:14 UTC (rev 11458)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg version="1.1" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="48" height="48" viewBox="0 0 48 48"
+ overflow="visible" enable-background="new 0 0 48 48" xml:space="preserve">
+<polygon fill="none" stroke="#243446" stroke-width="4.403" stroke-linejoin="round" points="6.486,37.712 24.021,7.338
+ 41.559,37.712 "/>
+<polygon fill="none" stroke="#FFFFFF" stroke-width="1.4677" stroke-linejoin="round" points="6.486,37.712 24.021,7.338
+ 41.559,37.712 "/>
+<polygon fill="#CC0000" points="6.486,37.712 24.021,7.338 41.559,37.712 "/>
+<polygon fill="#CC0000" points="6.486,37.712 24.021,7.338 41.559,37.712 "/>
+<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="22.3276" y1="33.249" x2="10.7696" y2="15.7285">
+ <stop offset="0" style="stop-color:#7B1E1E"/>
+ <stop offset="1" style="stop-color:#FFFFFF"/>
+</linearGradient>
+<polygon fill="url(#XMLID_4_)" points="6.486,37.712 24.021,7.338 41.559,37.712 "/>
+<g>
+ <path fill="#656565" d="M27.092,13.988l-0.59,14.035h-3.479l-0.59-14.035H27.092z M22.64,30.145h4.245v4.423H22.64V30.145z"/>
+</g>
+<g>
+ <linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="26.9766" y1="25.9307" x2="22.815" y2="17.0526">
+ <stop offset="0" style="stop-color:#656565"/>
+ <stop offset="1" style="stop-color:#FFFFFF"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_5_)" points="26.441,13.431 25.852,27.466 22.373,27.466 21.783,13.431 "/>
+ <linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="25.1895" y1="34.0957" x2="23.5154" y2="30.5243">
+ <stop offset="0" style="stop-color:#656565"/>
+ <stop offset="1" style="stop-color:#FFFFFF"/>
+ </linearGradient>
+ <rect x="21.99" y="29.588" fill="url(#XMLID_6_)" width="4.245" height="4.423"/>
+</g>
+</svg>
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/dot.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/dot.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/dot2.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/dot2.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/jbossorglogo.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/jbossorglogo.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Deleted: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/leftside_bkgimage.gif
===================================================================
(Binary files differ)
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/shine.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/shine.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Deleted: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/th.bg.gif
===================================================================
(Binary files differ)
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/title_hdr.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/title_hdr.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-alpha1.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-alpha1.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-alpha2.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-alpha2.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-beta1.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-beta1.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-beta2.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-beta2.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-pre-release-candidate.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-pre-release-candidate.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-release-candidate.png
===================================================================
(Binary files differ)
Property changes on: maven/jboss-portal-jdocbook-style/trunk/src/main/images/images/portal/watermark-release-candidate.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
15 years, 11 months
JBoss Portal SVN: r11457 - branches/JBoss_Portal_Branch_2_7/core-wsrp/src/resources/portal-wsrp-admin-war/jsf/consumers.
by portal-commits@lists.jboss.org
Author: chris.laprun(a)jboss.com
Date: 2008-07-15 14:15:31 -0400 (Tue, 15 Jul 2008)
New Revision: 11457
Modified:
branches/JBoss_Portal_Branch_2_7/core-wsrp/src/resources/portal-wsrp-admin-war/jsf/consumers/editConsumer.xhtml
Log:
- Fixed messed-up commit (tried to cancel the commit too late)...
Modified: branches/JBoss_Portal_Branch_2_7/core-wsrp/src/resources/portal-wsrp-admin-war/jsf/consumers/editConsumer.xhtml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-wsrp/src/resources/portal-wsrp-admin-war/jsf/consumers/editConsumer.xhtml 2008-07-15 18:04:27 UTC (rev 11456)
+++ branches/JBoss_Portal_Branch_2_7/core-wsrp/src/resources/portal-wsrp-admin-war/jsf/consumers/editConsumer.xhtml 2008-07-15 18:15:31 UTC (rev 11457)
@@ -91,7 +91,7 @@
</tr>
<tr jsfc="ui:repeat" value="#{consumer.producerInfo.registrationInfo.registrationProperties}"
var="prop" title="#{prop.value.description.label.value}">
- <td>#{prop.value..name}</td>
+ <td>#{prop.value.name}</td>
<td>#{prop.value.description.label.value}</td>
<td>
<h:inputText value="#{prop.value.value}" size="50"
15 years, 11 months
JBoss Portal SVN: r11456 - branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna.
by portal-commits@lists.jboss.org
Author: wesleyhales
Date: 2008-07-15 14:04:27 -0400 (Tue, 15 Jul 2008)
New Revision: 11456
Modified:
branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/builder.js
branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/controls.js
branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/dragdrop.js
branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/effects.js
branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/prototype.js
branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/scriptaculous.js
branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/slider.js
branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/unittest.js
Log:
http://jira.jboss.com/jira/browse/JBPORTAL-2047
Modified: branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/builder.js
===================================================================
--- branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/builder.js 2008-07-15 17:58:47 UTC (rev 11455)
+++ branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/builder.js 2008-07-15 18:04:27 UTC (rev 11456)
@@ -1,4 +1,4 @@
-// script.aculo.us builder.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008
+// script.aculo.us builder.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//
Modified: branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/controls.js
===================================================================
--- branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/controls.js 2008-07-15 17:58:47 UTC (rev 11455)
+++ branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/controls.js 2008-07-15 18:04:27 UTC (rev 11456)
@@ -1,4 +1,4 @@
-// script.aculo.us controls.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008
+// script.aculo.us controls.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
@@ -39,8 +39,9 @@
if(typeof Effect == 'undefined')
throw("controls.js requires including script.aculo.us' effects.js library");
-var Autocompleter = { }
-Autocompleter.Base = Class.create({
+var Autocompleter = {}
+Autocompleter.Base = function() {};
+Autocompleter.Base.prototype = {
baseInitialize: function(element, update, options) {
element = $(element)
this.element = element;
@@ -50,12 +51,11 @@
this.active = false;
this.index = 0;
this.entryCount = 0;
- this.oldElementValue = this.element.value;
if(this.setOptions)
this.setOptions(options);
else
- this.options = options || { };
+ this.options = options || {};
this.options.paramName = this.options.paramName || this.element.name;
this.options.tokens = this.options.tokens || [];
@@ -77,9 +77,6 @@
if(typeof(this.options.tokens) == 'string')
this.options.tokens = new Array(this.options.tokens);
- // Force carriage returns as token delimiters anyway
- if (!this.options.tokens.include('\n'))
- this.options.tokens.push('\n');
this.observer = null;
@@ -88,7 +85,13 @@
Element.hide(this.update);
Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
- Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
+ Event.observe(this.element, 'keypress', this.onKeyPress.bindAsEventListener(this));
+
+ // Turn autocomplete back on when the user leaves the page, so that the
+ // field's value will be remembered on Mozilla-based browsers.
+ Event.observe(window, 'beforeunload', function(){
+ element.setAttribute('autocomplete', 'on');
+ });
},
show: function() {
@@ -144,12 +147,12 @@
case Event.KEY_UP:
this.markPrevious();
this.render();
- Event.stop(event);
+ if(Prototype.Browser.WebKit) Event.stop(event);
return;
case Event.KEY_DOWN:
this.markNext();
this.render();
- Event.stop(event);
+ if(Prototype.Browser.WebKit) Event.stop(event);
return;
}
else
@@ -242,22 +245,21 @@
}
var value = '';
if (this.options.select) {
- var nodes = $(selectedElement).select('.' + this.options.select) || [];
+ var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
} else
value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
- var bounds = this.getTokenBounds();
- if (bounds[0] != -1) {
- var newValue = this.element.value.substr(0, bounds[0]);
- var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
+ var lastTokenPos = this.findLastToken();
+ if (lastTokenPos != -1) {
+ var newValue = this.element.value.substr(0, lastTokenPos + 1);
+ var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
if (whitespace)
newValue += whitespace[0];
- this.element.value = newValue + value + this.element.value.substr(bounds[1]);
+ this.element.value = newValue + value;
} else {
this.element.value = value;
}
- this.oldElementValue = this.element.value;
this.element.focus();
if (this.options.afterUpdateElement)
@@ -301,48 +303,38 @@
onObserverEvent: function() {
this.changed = false;
- this.tokenBounds = null;
if(this.getToken().length>=this.options.minChars) {
this.getUpdatedChoices();
} else {
this.active = false;
this.hide();
}
- this.oldElementValue = this.element.value;
},
getToken: function() {
- var bounds = this.getTokenBounds();
- return this.element.value.substring(bounds[0], bounds[1]).strip();
+ var tokenPos = this.findLastToken();
+ if (tokenPos != -1)
+ var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
+ else
+ var ret = this.element.value;
+
+ return /\n/.test(ret) ? '' : ret;
},
- getTokenBounds: function() {
- if (null != this.tokenBounds) return this.tokenBounds;
- var value = this.element.value;
- if (value.strip().empty()) return [-1, 0];
- var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
- var offset = (diff == this.oldElementValue.length ? 1 : 0);
- var prevTokenPos = -1, nextTokenPos = value.length;
- var tp;
- for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
- tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
- if (tp > prevTokenPos) prevTokenPos = tp;
- tp = value.indexOf(this.options.tokens[index], diff + offset);
- if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
+ findLastToken: function() {
+ var lastTokenPos = -1;
+
+ for (var i=0; i<this.options.tokens.length; i++) {
+ var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
+ if (thisTokenPos > lastTokenPos)
+ lastTokenPos = thisTokenPos;
}
- return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
+ return lastTokenPos;
}
-});
+}
-Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
- var boundary = Math.min(newS.length, oldS.length);
- for (var index = 0; index < boundary; ++index)
- if (newS[index] != oldS[index])
- return index;
- return boundary;
-};
-
-Ajax.Autocompleter = Class.create(Autocompleter.Base, {
+Ajax.Autocompleter = Class.create();
+Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
initialize: function(element, update, url, options) {
this.baseInitialize(element, update, options);
this.options.asynchronous = true;
@@ -369,6 +361,7 @@
onComplete: function(request) {
this.updateChoices(request.responseText);
}
+
});
// The local array autocompleter. Used when you'd prefer to
@@ -406,7 +399,8 @@
// In that case, the other options above will not apply unless
// you support them.
-Autocompleter.Local = Class.create(Autocompleter.Base, {
+Autocompleter.Local = Class.create();
+Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
initialize: function(element, update, array, options) {
this.baseInitialize(element, update, options);
this.options.array = array;
@@ -462,12 +456,13 @@
ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
return "<ul>" + ret.join('') + "</ul>";
}
- }, options || { });
+ }, options || {});
}
});
-// AJAX in-place editor and collection editor
-// Full rewrite by Christophe Porteneuve <tdd(a)tddsworld.com> (April 2007).
+// AJAX in-place editor
+//
+// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor
// Use this if you notice weird scrolling problems on some browsers,
// the DOM might be a bit confused when this gets called so do this
@@ -478,472 +473,387 @@
}, 1);
}
-Ajax.InPlaceEditor = Class.create({
+Ajax.InPlaceEditor = Class.create();
+Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
+Ajax.InPlaceEditor.prototype = {
initialize: function(element, url, options) {
this.url = url;
- this.element = element = $(element);
- this.prepareOptions();
- this._controls = { };
- arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
- Object.extend(this.options, options || { });
- if (!this.options.formId && this.element.id) {
- this.options.formId = this.element.id + '-inplaceeditor';
- if ($(this.options.formId))
- this.options.formId = '';
+ this.element = $(element);
+
+ this.options = Object.extend({
+ paramName: "value",
+ okButton: true,
+ okLink: false,
+ okText: "ok",
+ cancelButton: false,
+ cancelLink: true,
+ cancelText: "cancel",
+ textBeforeControls: '',
+ textBetweenControls: '',
+ textAfterControls: '',
+ savingText: "Saving...",
+ clickToEditText: "Click to edit",
+ okText: "ok",
+ rows: 1,
+ onComplete: function(transport, element) {
+ new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
+ },
+ onFailure: function(transport) {
+ alert("Error communicating with the server: " + transport.responseText.stripTags());
+ },
+ callback: function(form) {
+ return Form.serialize(form);
+ },
+ handleLineBreaks: true,
+ loadingText: 'Loading...',
+ savingClassName: 'inplaceeditor-saving',
+ loadingClassName: 'inplaceeditor-loading',
+ formClassName: 'inplaceeditor-form',
+ highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
+ highlightendcolor: "#FFFFFF",
+ externalControl: null,
+ submitOnBlur: false,
+ ajaxOptions: {},
+ evalScripts: false
+ }, options || {});
+
+ if(!this.options.formId && this.element.id) {
+ this.options.formId = this.element.id + "-inplaceeditor";
+ if ($(this.options.formId)) {
+ // there's already a form with that name, don't specify an id
+ this.options.formId = null;
+ }
}
- if (this.options.externalControl)
+
+ if (this.options.externalControl) {
this.options.externalControl = $(this.options.externalControl);
- if (!this.options.externalControl)
- this.options.externalControlOnly = false;
- this._originalBackground = this.element.getStyle('background-color') || 'transparent';
+ }
+
+ this.originalBackground = Element.getStyle(this.element, 'background-color');
+ if (!this.originalBackground) {
+ this.originalBackground = "transparent";
+ }
+
this.element.title = this.options.clickToEditText;
- this._boundCancelHandler = this.handleFormCancellation.bind(this);
- this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
- this._boundFailureHandler = this.handleAJAXFailure.bind(this);
- this._boundSubmitHandler = this.handleFormSubmission.bind(this);
- this._boundWrapperHandler = this.wrapUp.bind(this);
- this.registerListeners();
+
+ this.onclickListener = this.enterEditMode.bindAsEventListener(this);
+ this.mouseoverListener = this.enterHover.bindAsEventListener(this);
+ this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
+ Event.observe(this.element, 'click', this.onclickListener);
+ Event.observe(this.element, 'mouseover', this.mouseoverListener);
+ Event.observe(this.element, 'mouseout', this.mouseoutListener);
+ if (this.options.externalControl) {
+ Event.observe(this.options.externalControl, 'click', this.onclickListener);
+ Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
+ Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
+ }
},
- checkForEscapeOrReturn: function(e) {
- if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
- if (Event.KEY_ESC == e.keyCode)
- this.handleFormCancellation(e);
- else if (Event.KEY_RETURN == e.keyCode)
- this.handleFormSubmission(e);
+ enterEditMode: function(evt) {
+ if (this.saving) return;
+ if (this.editing) return;
+ this.editing = true;
+ this.onEnterEditMode();
+ if (this.options.externalControl) {
+ Element.hide(this.options.externalControl);
+ }
+ Element.hide(this.element);
+ this.createForm();
+ this.element.parentNode.insertBefore(this.form, this.element);
+ if (!this.options.loadTextURL) Field.scrollFreeActivate(this.editField);
+ // stop the event to avoid a page refresh in Safari
+ if (evt) {
+ Event.stop(evt);
+ }
+ return false;
},
- createControl: function(mode, handler, extraClasses) {
- var control = this.options[mode + 'Control'];
- var text = this.options[mode + 'Text'];
- if ('button' == control) {
- var btn = document.createElement('input');
- btn.type = 'submit';
- btn.value = text;
- btn.className = 'editor_' + mode + '_button';
- if ('cancel' == mode)
- btn.onclick = this._boundCancelHandler;
- this._form.appendChild(btn);
- this._controls[mode] = btn;
- } else if ('link' == control) {
- var link = document.createElement('a');
- link.href = '#';
- link.appendChild(document.createTextNode(text));
- link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
- link.className = 'editor_' + mode + '_link';
- if (extraClasses)
- link.className += ' ' + extraClasses;
- this._form.appendChild(link);
- this._controls[mode] = link;
+ createForm: function() {
+ this.form = document.createElement("form");
+ this.form.id = this.options.formId;
+ Element.addClassName(this.form, this.options.formClassName)
+ this.form.onsubmit = this.onSubmit.bind(this);
+
+ this.createEditField();
+
+ if (this.options.textarea) {
+ var br = document.createElement("br");
+ this.form.appendChild(br);
}
+
+ if (this.options.textBeforeControls)
+ this.form.appendChild(document.createTextNode(this.options.textBeforeControls));
+
+ if (this.options.okButton) {
+ var okButton = document.createElement("input");
+ okButton.type = "submit";
+ okButton.value = this.options.okText;
+ okButton.className = 'editor_ok_button';
+ this.form.appendChild(okButton);
+ }
+
+ if (this.options.okLink) {
+ var okLink = document.createElement("a");
+ okLink.href = "#";
+ okLink.appendChild(document.createTextNode(this.options.okText));
+ okLink.onclick = this.onSubmit.bind(this);
+ okLink.className = 'editor_ok_link';
+ this.form.appendChild(okLink);
+ }
+
+ if (this.options.textBetweenControls &&
+ (this.options.okLink || this.options.okButton) &&
+ (this.options.cancelLink || this.options.cancelButton))
+ this.form.appendChild(document.createTextNode(this.options.textBetweenControls));
+
+ if (this.options.cancelButton) {
+ var cancelButton = document.createElement("input");
+ cancelButton.type = "submit";
+ cancelButton.value = this.options.cancelText;
+ cancelButton.onclick = this.onclickCancel.bind(this);
+ cancelButton.className = 'editor_cancel_button';
+ this.form.appendChild(cancelButton);
+ }
+
+ if (this.options.cancelLink) {
+ var cancelLink = document.createElement("a");
+ cancelLink.href = "#";
+ cancelLink.appendChild(document.createTextNode(this.options.cancelText));
+ cancelLink.onclick = this.onclickCancel.bind(this);
+ cancelLink.className = 'editor_cancel editor_cancel_link';
+ this.form.appendChild(cancelLink);
+ }
+
+ if (this.options.textAfterControls)
+ this.form.appendChild(document.createTextNode(this.options.textAfterControls));
},
+ hasHTMLLineBreaks: function(string) {
+ if (!this.options.handleLineBreaks) return false;
+ return string.match(/<br/i) || string.match(/<p>/i);
+ },
+ convertHTMLLineBreaks: function(string) {
+ return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
+ },
createEditField: function() {
- var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
- var fld;
- if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
- fld = document.createElement('input');
- fld.type = 'text';
+ var text;
+ if(this.options.loadTextURL) {
+ text = this.options.loadingText;
+ } else {
+ text = this.getText();
+ }
+
+ var obj = this;
+
+ if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
+ this.options.textarea = false;
+ var textField = document.createElement("input");
+ textField.obj = this;
+ textField.type = "text";
+ textField.name = this.options.paramName;
+ textField.value = text;
+ textField.style.backgroundColor = this.options.highlightcolor;
+ textField.className = 'editor_field';
var size = this.options.size || this.options.cols || 0;
- if (0 < size) fld.size = size;
+ if (size != 0) textField.size = size;
+ if (this.options.submitOnBlur)
+ textField.onblur = this.onSubmit.bind(this);
+ this.editField = textField;
} else {
- fld = document.createElement('textarea');
- fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
- fld.cols = this.options.cols || 40;
+ this.options.textarea = true;
+ var textArea = document.createElement("textarea");
+ textArea.obj = this;
+ textArea.name = this.options.paramName;
+ textArea.value = this.convertHTMLLineBreaks(text);
+ textArea.rows = this.options.rows;
+ textArea.cols = this.options.cols || 40;
+ textArea.className = 'editor_field';
+ if (this.options.submitOnBlur)
+ textArea.onblur = this.onSubmit.bind(this);
+ this.editField = textArea;
}
- fld.name = this.options.paramName;
- fld.value = text; // No HTML breaks conversion anymore
- fld.className = 'editor_field';
- if (this.options.submitOnBlur)
- fld.onblur = this._boundSubmitHandler;
- this._controls.editor = fld;
- if (this.options.loadTextURL)
+
+ if(this.options.loadTextURL) {
this.loadExternalText();
- this._form.appendChild(this._controls.editor);
+ }
+ this.form.appendChild(this.editField);
},
- createForm: function() {
- var ipe = this;
- function addText(mode, condition) {
- var text = ipe.options['text' + mode + 'Controls'];
- if (!text || condition === false) return;
- ipe._form.appendChild(document.createTextNode(text));
- };
- this._form = $(document.createElement('form'));
- this._form.id = this.options.formId;
- this._form.addClassName(this.options.formClassName);
- this._form.onsubmit = this._boundSubmitHandler;
- this.createEditField();
- if ('textarea' == this._controls.editor.tagName.toLowerCase())
- this._form.appendChild(document.createElement('br'));
- if (this.options.onFormCustomization)
- this.options.onFormCustomization(this, this._form);
- addText('Before', this.options.okControl || this.options.cancelControl);
- this.createControl('ok', this._boundSubmitHandler);
- addText('Between', this.options.okControl && this.options.cancelControl);
- this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
- addText('After', this.options.okControl || this.options.cancelControl);
+ getText: function() {
+ return this.element.innerHTML;
},
- destroy: function() {
- if (this._oldInnerHTML)
- this.element.innerHTML = this._oldInnerHTML;
- this.leaveEditMode();
- this.unregisterListeners();
+ loadExternalText: function() {
+ Element.addClassName(this.form, this.options.loadingClassName);
+ this.editField.disabled = true;
+ new Ajax.Request(
+ this.options.loadTextURL,
+ Object.extend({
+ asynchronous: true,
+ onComplete: this.onLoadedExternalText.bind(this)
+ }, this.options.ajaxOptions)
+ );
},
- enterEditMode: function(e) {
- if (this._saving || this._editing) return;
- this._editing = true;
- this.triggerCallback('onEnterEditMode');
- if (this.options.externalControl)
- this.options.externalControl.hide();
- this.element.hide();
- this.createForm();
- this.element.parentNode.insertBefore(this._form, this.element);
- if (!this.options.loadTextURL)
- this.postProcessEditField();
- if (e) Event.stop(e);
+ onLoadedExternalText: function(transport) {
+ Element.removeClassName(this.form, this.options.loadingClassName);
+ this.editField.disabled = false;
+ this.editField.value = transport.responseText.stripTags();
+ Field.scrollFreeActivate(this.editField);
},
- enterHover: function(e) {
- if (this.options.hoverClassName)
- this.element.addClassName(this.options.hoverClassName);
- if (this._saving) return;
- this.triggerCallback('onEnterHover');
+ onclickCancel: function() {
+ this.onComplete();
+ this.leaveEditMode();
+ return false;
},
- getText: function() {
- return this.element.innerHTML;
- },
- handleAJAXFailure: function(transport) {
- this.triggerCallback('onFailure', transport);
- if (this._oldInnerHTML) {
- this.element.innerHTML = this._oldInnerHTML;
- this._oldInnerHTML = null;
+ onFailure: function(transport) {
+ this.options.onFailure(transport);
+ if (this.oldInnerHTML) {
+ this.element.innerHTML = this.oldInnerHTML;
+ this.oldInnerHTML = null;
}
+ return false;
},
- handleFormCancellation: function(e) {
- this.wrapUp();
- if (e) Event.stop(e);
- },
- handleFormSubmission: function(e) {
- var form = this._form;
- var value = $F(this._controls.editor);
- this.prepareSubmission();
- var params = this.options.callback(form, value) || '';
- if (Object.isString(params))
- params = params.toQueryParams();
- params.editorId = this.element.id;
- if (this.options.htmlResponse) {
- var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: params,
- onComplete: this._boundWrapperHandler,
- onFailure: this._boundFailureHandler
- });
- new Ajax.Updater({ success: this.element }, this.url, options);
- } else {
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: params,
- onComplete: this._boundWrapperHandler,
- onFailure: this._boundFailureHandler
- });
- new Ajax.Request(this.url, options);
+ onSubmit: function() {
+ // onLoading resets these so we need to save them away for the Ajax call
+ var form = this.form;
+ var value = this.editField.value;
+
+ // do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
+ // which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
+ // to be displayed indefinitely
+ this.onLoading();
+
+ if (this.options.evalScripts) {
+ new Ajax.Request(
+ this.url, Object.extend({
+ parameters: this.options.callback(form, value),
+ onComplete: this.onComplete.bind(this),
+ onFailure: this.onFailure.bind(this),
+ asynchronous:true,
+ evalScripts:true
+ }, this.options.ajaxOptions));
+ } else {
+ new Ajax.Updater(
+ { success: this.element,
+ // don't update on failure (this could be an option)
+ failure: null },
+ this.url, Object.extend({
+ parameters: this.options.callback(form, value),
+ onComplete: this.onComplete.bind(this),
+ onFailure: this.onFailure.bind(this)
+ }, this.options.ajaxOptions));
}
- if (e) Event.stop(e);
+ // stop the event to avoid a page refresh in Safari
+ if (arguments.length > 1) {
+ Event.stop(arguments[0]);
+ }
+ return false;
},
- leaveEditMode: function() {
- this.element.removeClassName(this.options.savingClassName);
+ onLoading: function() {
+ this.saving = true;
this.removeForm();
this.leaveHover();
- this.element.style.backgroundColor = this._originalBackground;
- this.element.show();
- if (this.options.externalControl)
- this.options.externalControl.show();
- this._saving = false;
- this._editing = false;
- this._oldInnerHTML = null;
- this.triggerCallback('onLeaveEditMode');
- },
- leaveHover: function(e) {
- if (this.options.hoverClassName)
- this.element.removeClassName(this.options.hoverClassName);
- if (this._saving) return;
- this.triggerCallback('onLeaveHover');
- },
- loadExternalText: function() {
- this._form.addClassName(this.options.loadingClassName);
- this._controls.editor.disabled = true;
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
- onComplete: Prototype.emptyFunction,
- onSuccess: function(transport) {
- this._form.removeClassName(this.options.loadingClassName);
- var text = transport.responseText;
- if (this.options.stripLoadedTextTags)
- text = text.stripTags();
- this._controls.editor.value = text;
- this._controls.editor.disabled = false;
- this.postProcessEditField();
- }.bind(this),
- onFailure: this._boundFailureHandler
- });
- new Ajax.Request(this.options.loadTextURL, options);
- },
- postProcessEditField: function() {
- var fpc = this.options.fieldPostCreation;
- if (fpc)
- $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
- },
- prepareOptions: function() {
- this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
- Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
- [this._extraDefaultOptions].flatten().compact().each(function(defs) {
- Object.extend(this.options, defs);
- }.bind(this));
- },
- prepareSubmission: function() {
- this._saving = true;
- this.removeForm();
- this.leaveHover();
this.showSaving();
},
- registerListeners: function() {
- this._listeners = { };
- var listener;
- $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
- listener = this[pair.value].bind(this);
- this._listeners[pair.key] = listener;
- if (!this.options.externalControlOnly)
- this.element.observe(pair.key, listener);
- if (this.options.externalControl)
- this.options.externalControl.observe(pair.key, listener);
- }.bind(this));
- },
- removeForm: function() {
- if (!this._form) return;
- this._form.remove();
- this._form = null;
- this._controls = { };
- },
showSaving: function() {
- this._oldInnerHTML = this.element.innerHTML;
+ this.oldInnerHTML = this.element.innerHTML;
this.element.innerHTML = this.options.savingText;
- this.element.addClassName(this.options.savingClassName);
- this.element.style.backgroundColor = this._originalBackground;
- this.element.show();
+ Element.addClassName(this.element, this.options.savingClassName);
+ this.element.style.backgroundColor = this.originalBackground;
+ Element.show(this.element);
},
- triggerCallback: function(cbName, arg) {
- if ('function' == typeof this.options[cbName]) {
- this.options[cbName](this, arg);
+ removeForm: function() {
+ if(this.form) {
+ if (this.form.parentNode) Element.remove(this.form);
+ this.form = null;
}
},
- unregisterListeners: function() {
- $H(this._listeners).each(function(pair) {
- if (!this.options.externalControlOnly)
- this.element.stopObserving(pair.key, pair.value);
- if (this.options.externalControl)
- this.options.externalControl.stopObserving(pair.key, pair.value);
- }.bind(this));
+ enterHover: function() {
+ if (this.saving) return;
+ this.element.style.backgroundColor = this.options.highlightcolor;
+ if (this.effect) {
+ this.effect.cancel();
+ }
+ Element.addClassName(this.element, this.options.hoverClassName)
},
- wrapUp: function(transport) {
- this.leaveEditMode();
- // Can't use triggerCallback due to backward compatibility: requires
- // binding + direct element
- this._boundComplete(transport, this.element);
- }
-});
-
-Object.extend(Ajax.InPlaceEditor.prototype, {
- dispose: Ajax.InPlaceEditor.prototype.destroy
-});
-
-Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
- initialize: function($super, element, url, options) {
- this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
- $super(element, url, options);
- },
-
- createEditField: function() {
- var list = document.createElement('select');
- list.name = this.options.paramName;
- list.size = 1;
- this._controls.editor = list;
- this._collection = this.options.collection || [];
- if (this.options.loadCollectionURL)
- this.loadCollection();
- else
- this.checkForExternalText();
- this._form.appendChild(this._controls.editor);
- },
-
- loadCollection: function() {
- this._form.addClassName(this.options.loadingClassName);
- this.showLoadingText(this.options.loadingCollectionText);
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
- onComplete: Prototype.emptyFunction,
- onSuccess: function(transport) {
- var js = transport.responseText.strip();
- if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
- throw 'Server returned an invalid collection representation.';
- this._collection = eval(js);
- this.checkForExternalText();
- }.bind(this),
- onFailure: this.onFailure
+ leaveHover: function() {
+ if (this.options.backgroundColor) {
+ this.element.style.backgroundColor = this.oldBackground;
+ }
+ Element.removeClassName(this.element, this.options.hoverClassName)
+ if (this.saving) return;
+ this.effect = new Effect.Highlight(this.element, {
+ startcolor: this.options.highlightcolor,
+ endcolor: this.options.highlightendcolor,
+ restorecolor: this.originalBackground
});
- new Ajax.Request(this.options.loadCollectionURL, options);
},
-
- showLoadingText: function(text) {
- this._controls.editor.disabled = true;
- var tempOption = this._controls.editor.firstChild;
- if (!tempOption) {
- tempOption = document.createElement('option');
- tempOption.value = '';
- this._controls.editor.appendChild(tempOption);
- tempOption.selected = true;
+ leaveEditMode: function() {
+ Element.removeClassName(this.element, this.options.savingClassName);
+ this.removeForm();
+ this.leaveHover();
+ this.element.style.backgroundColor = this.originalBackground;
+ Element.show(this.element);
+ if (this.options.externalControl) {
+ Element.show(this.options.externalControl);
}
- tempOption.update((text || '').stripScripts().stripTags());
+ this.editing = false;
+ this.saving = false;
+ this.oldInnerHTML = null;
+ this.onLeaveEditMode();
},
-
- checkForExternalText: function() {
- this._text = this.getText();
- if (this.options.loadTextURL)
- this.loadExternalText();
- else
- this.buildOptionList();
+ onComplete: function(transport) {
+ this.leaveEditMode();
+ this.options.onComplete.bind(this)(transport, this.element);
},
-
- loadExternalText: function() {
- this.showLoadingText(this.options.loadingText);
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
- onComplete: Prototype.emptyFunction,
- onSuccess: function(transport) {
- this._text = transport.responseText.strip();
- this.buildOptionList();
- }.bind(this),
- onFailure: this.onFailure
- });
- new Ajax.Request(this.options.loadTextURL, options);
- },
-
- buildOptionList: function() {
- this._form.removeClassName(this.options.loadingClassName);
- this._collection = this._collection.map(function(entry) {
- return 2 === entry.length ? entry : [entry, entry].flatten();
- });
- var marker = ('value' in this.options) ? this.options.value : this._text;
- var textFound = this._collection.any(function(entry) {
- return entry[0] == marker;
- }.bind(this));
- this._controls.editor.update('');
- var option;
- this._collection.each(function(entry, index) {
- option = document.createElement('option');
- option.value = entry[0];
- option.selected = textFound ? entry[0] == marker : 0 == index;
- option.appendChild(document.createTextNode(entry[1]));
- this._controls.editor.appendChild(option);
- }.bind(this));
- this._controls.editor.disabled = false;
- Field.scrollFreeActivate(this._controls.editor);
+ onEnterEditMode: function() {},
+ onLeaveEditMode: function() {},
+ dispose: function() {
+ if (this.oldInnerHTML) {
+ this.element.innerHTML = this.oldInnerHTML;
+ }
+ this.leaveEditMode();
+ Event.stopObserving(this.element, 'click', this.onclickListener);
+ Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
+ Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
+ if (this.options.externalControl) {
+ Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
+ Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
+ Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
+ }
}
-});
-
-//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
-//**** This only exists for a while, in order to let ****
-//**** users adapt to the new API. Read up on the new ****
-//**** API and convert your code to it ASAP! ****
-
-Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
- if (!options) return;
- function fallback(name, expr) {
- if (name in options || expr === undefined) return;
- options[name] = expr;
- };
- fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
- options.cancelLink == options.cancelButton == false ? false : undefined)));
- fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
- options.okLink == options.okButton == false ? false : undefined)));
- fallback('highlightColor', options.highlightcolor);
- fallback('highlightEndColor', options.highlightendcolor);
};
-Object.extend(Ajax.InPlaceEditor, {
- DefaultOptions: {
- ajaxOptions: { },
- autoRows: 3, // Use when multi-line w/ rows == 1
- cancelControl: 'link', // 'link'|'button'|false
- cancelText: 'cancel',
- clickToEditText: 'Click to edit',
- externalControl: null, // id|elt
- externalControlOnly: false,
- fieldPostCreation: 'activate', // 'activate'|'focus'|false
- formClassName: 'inplaceeditor-form',
- formId: null, // id|elt
- highlightColor: '#ffff99',
- highlightEndColor: '#ffffff',
- hoverClassName: '',
- htmlResponse: true,
- loadingClassName: 'inplaceeditor-loading',
- loadingText: 'Loading...',
- okControl: 'button', // 'link'|'button'|false
- okText: 'ok',
- paramName: 'value',
- rows: 1, // If 1 and multi-line, uses autoRows
- savingClassName: 'inplaceeditor-saving',
- savingText: 'Saving...',
- size: 0,
- stripLoadedTextTags: false,
- submitOnBlur: false,
- textAfterControls: '',
- textBeforeControls: '',
- textBetweenControls: ''
- },
- DefaultCallbacks: {
- callback: function(form) {
- return Form.serialize(form);
- },
- onComplete: function(transport, element) {
- // For backward compatibility, this one is bound to the IPE, and passes
- // the element directly. It was too often customized, so we don't break it.
- new Effect.Highlight(element, {
- startcolor: this.options.highlightColor, keepBackgroundImage: true });
- },
- onEnterEditMode: null,
- onEnterHover: function(ipe) {
- ipe.element.style.backgroundColor = ipe.options.highlightColor;
- if (ipe._effect)
- ipe._effect.cancel();
- },
- onFailure: function(transport, ipe) {
- alert('Error communication with the server: ' + transport.responseText.stripTags());
- },
- onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
- onLeaveEditMode: null,
- onLeaveHover: function(ipe) {
- ipe._effect = new Effect.Highlight(ipe.element, {
- startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
- restorecolor: ipe._originalBackground, keepBackgroundImage: true
- });
+Ajax.InPlaceCollectionEditor = Class.create();
+Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
+Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
+ createEditField: function() {
+ if (!this.cached_selectTag) {
+ var selectTag = document.createElement("select");
+ var collection = this.options.collection || [];
+ var optionTag;
+ collection.each(function(e,i) {
+ optionTag = document.createElement("option");
+ optionTag.value = (e instanceof Array) ? e[0] : e;
+ if((typeof this.options.value == 'undefined') &&
+ ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true;
+ if(this.options.value==optionTag.value) optionTag.selected = true;
+ optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
+ selectTag.appendChild(optionTag);
+ }.bind(this));
+ this.cached_selectTag = selectTag;
}
- },
- Listeners: {
- click: 'enterEditMode',
- keydown: 'checkForEscapeOrReturn',
- mouseover: 'enterHover',
- mouseout: 'leaveHover'
+
+ this.editField = this.cached_selectTag;
+ if(this.options.loadTextURL) this.loadExternalText();
+ this.form.appendChild(this.editField);
+ this.options.callback = function(form, value) {
+ return "value=" + encodeURIComponent(value);
+ }
}
});
-Ajax.InPlaceCollectionEditor.DefaultOptions = {
- loadingCollectionText: 'Loading options...'
-};
-
// Delayed observer, like Form.Element.Observer,
// but waits for delay after last key input
// Ideal for live-search fields
-Form.Element.DelayedObserver = Class.create({
+Form.Element.DelayedObserver = Class.create();
+Form.Element.DelayedObserver.prototype = {
initialize: function(element, delay, callback) {
this.delay = delay || 0.5;
this.element = $(element);
@@ -962,4 +872,4 @@
this.timer = null;
this.callback(this.element, $F(this.element));
}
-});
+};
Modified: branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/dragdrop.js
===================================================================
--- branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/dragdrop.js 2008-07-15 17:58:47 UTC (rev 11455)
+++ branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/dragdrop.js 2008-07-15 18:04:27 UTC (rev 11456)
@@ -1,4 +1,4 @@
-// script.aculo.us dragdrop.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008
+// script.aculo.us dragdrop.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, sammi(a)oriontransfer.co.nz)
@@ -6,7 +6,7 @@
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/
-if(Object.isUndefined(Effect))
+if(typeof Effect == 'undefined')
throw("dragdrop.js requires including script.aculo.us' effects.js library");
var Droppables = {
@@ -22,13 +22,14 @@
greedy: true,
hoverclass: null,
tree: false
- }, arguments[1] || { });
+ }, arguments[1] || {});
// cache containers
if(options.containment) {
options._containers = [];
var containment = options.containment;
- if(Object.isArray(containment)) {
+ if((typeof containment == 'object') &&
+ (containment.constructor == Array)) {
containment.each( function(c) { options._containers.push($(c)) });
} else {
options._containers.push($(containment));
@@ -88,23 +89,21 @@
show: function(point, element) {
if(!this.drops.length) return;
- var drop, affected = [];
+ var affected = [];
+ if(this.last_active) this.deactivate(this.last_active);
this.drops.each( function(drop) {
if(Droppables.isAffected(point, element, drop))
affected.push(drop);
});
- if(affected.length>0)
+ if(affected.length>0) {
drop = Droppables.findDeepestChild(affected);
-
- if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
- if (drop) {
Position.within(drop.element, point[0], point[1]);
if(drop.onHover)
drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
- if (drop != this.last_active) Droppables.activate(drop);
+ Droppables.activate(drop);
}
},
@@ -224,7 +223,10 @@
/*--------------------------------------------------------------------------*/
-var Draggable = Class.create({
+var Draggable = Class.create();
+Draggable._dragging = {};
+
+Draggable.prototype = {
initialize: function(element) {
var defaults = {
handle: false,
@@ -235,7 +237,7 @@
});
},
endeffect: function(element) {
- var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
+ var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0;
new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
queue: {scope:'_draggable', position:'end'},
afterFinish: function(){
@@ -253,7 +255,7 @@
delay: 0
};
- if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
+ if(!arguments[1] || typeof arguments[1].endeffect == 'undefined')
Object.extend(defaults, {
starteffect: function(element) {
element._opacity = Element.getOpacity(element);
@@ -262,11 +264,11 @@
}
});
- var options = Object.extend(defaults, arguments[1] || { });
+ var options = Object.extend(defaults, arguments[1] || {});
this.element = $(element);
- if(options.handle && Object.isString(options.handle))
+ if(options.handle && (typeof options.handle == 'string'))
this.handle = this.element.down('.'+options.handle, 0);
if(!this.handle) this.handle = $(options.handle);
@@ -279,6 +281,7 @@
Element.makePositioned(this.element); // fix IE
+ this.delta = this.currentDelta();
this.options = options;
this.dragging = false;
@@ -300,7 +303,7 @@
},
initDrag: function(event) {
- if(!Object.isUndefined(Draggable._dragging[this.element]) &&
+ if(typeof Draggable._dragging[this.element] != 'undefined' &&
Draggable._dragging[this.element]) return;
if(Event.isLeftClick(event)) {
// abort on form elements, fixes a Firefox issue
@@ -323,8 +326,6 @@
startDrag: function(event) {
this.dragging = true;
- if(!this.delta)
- this.delta = this.currentDelta();
if(this.options.zindex) {
this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
@@ -333,9 +334,7 @@
if(this.options.ghosting) {
this._clone = this.element.cloneNode(true);
- this.element._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
- if (!this.element._originallyAbsolute)
- Position.absolutize(this.element);
+ Position.absolutize(this.element);
this.element.parentNode.insertBefore(this._clone, this.element);
}
@@ -405,9 +404,7 @@
}
if(this.options.ghosting) {
- if (!this.element._originallyAbsolute)
- Position.relativize(this.element);
- delete this.element._originallyAbsolute;
+ Position.relativize(this.element);
Element.remove(this._clone);
this._clone = null;
}
@@ -421,7 +418,7 @@
Draggables.notify('onEnd', this, event);
var revert = this.options.revert;
- if(revert && Object.isFunction(revert)) revert = revert(this.element);
+ if(revert && typeof revert == 'function') revert = revert(this.element);
var d = this.currentDelta();
if(revert && this.options.reverteffect) {
@@ -475,15 +472,15 @@
}.bind(this));
if(this.options.snap) {
- if(Object.isFunction(this.options.snap)) {
+ if(typeof this.options.snap == 'function') {
p = this.options.snap(p[0],p[1],this);
} else {
- if(Object.isArray(this.options.snap)) {
+ if(this.options.snap instanceof Array) {
p = p.map( function(v, i) {
- return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this))
+ return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
} else {
p = p.map( function(v) {
- return (v/this.options.snap).round()*this.options.snap }.bind(this))
+ return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
}
}}
@@ -567,13 +564,12 @@
}
return { top: T, left: L, width: W, height: H };
}
-});
+}
-Draggable._dragging = { };
-
/*--------------------------------------------------------------------------*/
-var SortableObserver = Class.create({
+var SortableObserver = Class.create();
+SortableObserver.prototype = {
initialize: function(element, observer) {
this.element = $(element);
this.observer = observer;
@@ -589,12 +585,12 @@
if(this.lastValue != Sortable.serialize(this.element))
this.observer(this.element)
}
-});
+}
var Sortable = {
SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
- sortables: { },
+ sortables: {},
_findRootElement: function(element) {
while (element.tagName.toUpperCase() != "BODY") {
@@ -650,7 +646,7 @@
onChange: Prototype.emptyFunction,
onUpdate: Prototype.emptyFunction
- }, arguments[1] || { });
+ }, arguments[1] || {});
// clear any old sortable with same element
this.destroy(element);
@@ -714,7 +710,7 @@
(options.elements || this.findElements(element, options) || []).each( function(e,i) {
var handle = options.handles ? $(options.handles[i]) :
- (options.handle ? $(e).select('.' + options.handle)[0] : e);
+ (options.handle ? $(e).getElementsByClassName(options.handle)[0] : e);
options.draggables.push(
new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
Droppables.add(e, options_for_droppable);
@@ -874,7 +870,7 @@
only: sortableOptions.only,
name: element.id,
format: sortableOptions.format
- }, arguments[1] || { });
+ }, arguments[1] || {});
var root = {
id: null,
@@ -898,7 +894,7 @@
sequence: function(element) {
element = $(element);
- var options = Object.extend(this.options(element), arguments[1] || { });
+ var options = Object.extend(this.options(element), arguments[1] || {});
return $(this.findElements(element, options) || []).map( function(item) {
return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
@@ -907,9 +903,9 @@
setSequence: function(element, new_sequence) {
element = $(element);
- var options = Object.extend(this.options(element), arguments[2] || { });
+ var options = Object.extend(this.options(element), arguments[2] || {});
- var nodeMap = { };
+ var nodeMap = {};
this.findElements(element, options).each( function(n) {
if (n.id.match(options.format))
nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
@@ -927,7 +923,7 @@
serialize: function(element) {
element = $(element);
- var options = Object.extend(Sortable.options(element), arguments[1] || { });
+ var options = Object.extend(Sortable.options(element), arguments[1] || {});
var name = encodeURIComponent(
(arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
Modified: branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/effects.js
===================================================================
--- branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/effects.js 2008-07-15 17:58:47 UTC (rev 11455)
+++ branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/effects.js 2008-07-15 18:04:27 UTC (rev 11456)
@@ -1,4 +1,4 @@
-// script.aculo.us effects.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008
+// script.aculo.us effects.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
@@ -13,17 +13,17 @@
// returns self (or first argument) if not convertable
String.prototype.parseColor = function() {
var color = '#';
- if (this.slice(0,4) == 'rgb(') {
+ if(this.slice(0,4) == 'rgb(') {
var cols = this.slice(4,this.length-1).split(',');
var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
} else {
- if (this.slice(0,1) == '#') {
- if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
- if (this.length==7) color = this.toLowerCase();
+ if(this.slice(0,1) == '#') {
+ if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+ if(this.length==7) color = this.toLowerCase();
}
}
- return (color.length==7 ? color : (arguments[0] || this));
-};
+ return(color.length==7 ? color : (arguments[0] || this));
+}
/*--------------------------------------------------------------------------*/
@@ -32,7 +32,7 @@
return (node.nodeType==3 ? node.nodeValue :
(node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
}).flatten().join('');
-};
+}
Element.collectTextNodesIgnoreClass = function(element, className) {
return $A($(element).childNodes).collect( function(node) {
@@ -40,18 +40,18 @@
((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
Element.collectTextNodesIgnoreClass(node, className) : ''));
}).flatten().join('');
-};
+}
Element.setContentZoom = function(element, percent) {
element = $(element);
element.setStyle({fontSize: (percent/100) + 'em'});
- if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ if(Prototype.Browser.WebKit) window.scrollBy(0,0);
return element;
-};
+}
Element.getInlineOpacity = function(element){
return $(element).style.opacity || '';
-};
+}
Element.forceRerendering = function(element) {
try {
@@ -64,63 +64,31 @@
/*--------------------------------------------------------------------------*/
+Array.prototype.call = function() {
+ var args = arguments;
+ this.each(function(f){ f.apply(this, args) });
+}
+
+/*--------------------------------------------------------------------------*/
+
var Effect = {
_elementDoesNotExistError: {
name: 'ElementDoesNotExistError',
message: 'The specified DOM element does not exist, but is required for this effect to operate'
},
- Transitions: {
- linear: Prototype.K,
- sinoidal: function(pos) {
- return (-Math.cos(pos*Math.PI)/2) + 0.5;
- },
- reverse: function(pos) {
- return 1-pos;
- },
- flicker: function(pos) {
- var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
- return pos > 1 ? 1 : pos;
- },
- wobble: function(pos) {
- return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
- },
- pulse: function(pos, pulses) {
- pulses = pulses || 5;
- return (
- ((pos % (1/pulses)) * pulses).round() == 0 ?
- ((pos * pulses * 2) - (pos * pulses * 2).floor()) :
- 1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())
- );
- },
- spring: function(pos) {
- return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
- },
- none: function(pos) {
- return 0;
- },
- full: function(pos) {
- return 1;
- }
- },
- DefaultOptions: {
- duration: 1.0, // seconds
- fps: 100, // 100= assume 66fps max.
- sync: false, // true for combining
- from: 0.0,
- to: 1.0,
- delay: 0.0,
- queue: 'parallel'
- },
tagifyText: function(element) {
+ if(typeof Builder == 'undefined')
+ throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
+
var tagifyStyle = 'position:relative';
- if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
+ if(Prototype.Browser.IE) tagifyStyle += ';zoom:1';
element = $(element);
$A(element.childNodes).each( function(child) {
- if (child.nodeType==3) {
+ if(child.nodeType==3) {
child.nodeValue.toArray().each( function(character) {
element.insertBefore(
- new Element('span', {style: tagifyStyle}).update(
+ Builder.node('span',{style: tagifyStyle},
character == ' ' ? String.fromCharCode(160) : character),
child);
});
@@ -130,8 +98,8 @@
},
multiple: function(element, effect) {
var elements;
- if (((typeof element == 'object') ||
- Object.isFunction(element)) &&
+ if(((typeof element == 'object') ||
+ (typeof element == 'function')) &&
(element.length))
elements = element;
else
@@ -140,7 +108,7 @@
var options = Object.extend({
speed: 0.1,
delay: 0.0
- }, arguments[2] || { });
+ }, arguments[2] || {});
var masterDelay = options.delay;
$A(elements).each( function(element, index) {
@@ -157,17 +125,51 @@
effect = (effect || 'appear').toLowerCase();
var options = Object.extend({
queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
- }, arguments[2] || { });
+ }, arguments[2] || {});
Effect[element.visible() ?
Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
}
};
-Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
+var Effect2 = Effect; // deprecated
+/* ------------- transitions ------------- */
+
+Effect.Transitions = {
+ linear: Prototype.K,
+ sinoidal: function(pos) {
+ return (-Math.cos(pos*Math.PI)/2) + 0.5;
+ },
+ reverse: function(pos) {
+ return 1-pos;
+ },
+ flicker: function(pos) {
+ var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
+ return (pos > 1 ? 1 : pos);
+ },
+ wobble: function(pos) {
+ return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
+ },
+ pulse: function(pos, pulses) {
+ pulses = pulses || 5;
+ return (
+ Math.round((pos % (1/pulses)) * pulses) == 0 ?
+ ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) :
+ 1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
+ );
+ },
+ none: function(pos) {
+ return 0;
+ },
+ full: function(pos) {
+ return 1;
+ }
+};
+
/* ------------- core effects ------------- */
-Effect.ScopedQueue = Class.create(Enumerable, {
+Effect.ScopedQueue = Class.create();
+Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
initialize: function() {
this.effects = [];
this.interval = null;
@@ -178,7 +180,7 @@
add: function(effect) {
var timestamp = new Date().getTime();
- var position = Object.isString(effect.options.queue) ?
+ var position = (typeof effect.options.queue == 'string') ?
effect.options.queue : effect.options.queue.position;
switch(position) {
@@ -201,15 +203,15 @@
effect.startOn += timestamp;
effect.finishOn += timestamp;
- if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
+ if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
this.effects.push(effect);
- if (!this.interval)
+ if(!this.interval)
this.interval = setInterval(this.loop.bind(this), 15);
},
remove: function(effect) {
this.effects = this.effects.reject(function(e) { return e==effect });
- if (this.effects.length == 0) {
+ if(this.effects.length == 0) {
clearInterval(this.interval);
this.interval = null;
}
@@ -224,15 +226,29 @@
Effect.Queues = {
instances: $H(),
get: function(queueName) {
- if (!Object.isString(queueName)) return queueName;
+ if(typeof queueName != 'string') return queueName;
- return this.instances.get(queueName) ||
- this.instances.set(queueName, new Effect.ScopedQueue());
+ if(!this.instances[queueName])
+ this.instances[queueName] = new Effect.ScopedQueue();
+
+ return this.instances[queueName];
}
-};
+}
Effect.Queue = Effect.Queues.get('global');
-Effect.Base = Class.create({
+Effect.DefaultOptions = {
+ transition: Effect.Transitions.sinoidal,
+ duration: 1.0, // seconds
+ fps: 100, // 100= assume 66fps max.
+ sync: false, // true for combining
+ from: 0.0,
+ to: 1.0,
+ delay: 0.0,
+ queue: 'parallel'
+}
+
+Effect.Base = function() {};
+Effect.Base.prototype = {
position: null,
start: function(options) {
function codeForEvent(options,eventName){
@@ -241,8 +257,8 @@
(options[eventName] ? 'this.options.'+eventName+'(this);' : '')
);
}
- if (options && options.transition === false) options.transition = Effect.Transitions.linear;
- this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
+ if(options.transition === false) options.transition = Effect.Transitions.linear;
+ this.options = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
this.currentFrame = 0;
this.state = 'idle';
this.startOn = this.options.delay*1000;
@@ -252,60 +268,61 @@
this.totalFrames = this.options.fps*this.options.duration;
eval('this.render = function(pos){ '+
- 'if (this.state=="idle"){this.state="running";'+
- codeForEvent(this.options,'beforeSetup')+
+ 'if(this.state=="idle"){this.state="running";'+
+ codeForEvent(options,'beforeSetup')+
(this.setup ? 'this.setup();':'')+
- codeForEvent(this.options,'afterSetup')+
- '};if (this.state=="running"){'+
+ codeForEvent(options,'afterSetup')+
+ '};if(this.state=="running"){'+
'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
'this.position=pos;'+
- codeForEvent(this.options,'beforeUpdate')+
+ codeForEvent(options,'beforeUpdate')+
(this.update ? 'this.update(pos);':'')+
- codeForEvent(this.options,'afterUpdate')+
+ codeForEvent(options,'afterUpdate')+
'}}');
this.event('beforeStart');
- if (!this.options.sync)
- Effect.Queues.get(Object.isString(this.options.queue) ?
+ if(!this.options.sync)
+ Effect.Queues.get(typeof this.options.queue == 'string' ?
'global' : this.options.queue.scope).add(this);
},
loop: function(timePos) {
- if (timePos >= this.startOn) {
- if (timePos >= this.finishOn) {
+ if(timePos >= this.startOn) {
+ if(timePos >= this.finishOn) {
this.render(1.0);
this.cancel();
this.event('beforeFinish');
- if (this.finish) this.finish();
+ if(this.finish) this.finish();
this.event('afterFinish');
return;
}
var pos = (timePos - this.startOn) / this.totalTime,
- frame = (pos * this.totalFrames).round();
- if (frame > this.currentFrame) {
+ frame = Math.round(pos * this.totalFrames);
+ if(frame > this.currentFrame) {
this.render(pos);
this.currentFrame = frame;
}
}
},
cancel: function() {
- if (!this.options.sync)
- Effect.Queues.get(Object.isString(this.options.queue) ?
+ if(!this.options.sync)
+ Effect.Queues.get(typeof this.options.queue == 'string' ?
'global' : this.options.queue.scope).remove(this);
this.state = 'finished';
},
event: function(eventName) {
- if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
- if (this.options[eventName]) this.options[eventName](this);
+ if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
+ if(this.options[eventName]) this.options[eventName](this);
},
inspect: function() {
var data = $H();
for(property in this)
- if (!Object.isFunction(this[property])) data.set(property, this[property]);
+ if(typeof this[property] != 'function') data[property] = this[property];
return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
}
-});
+}
-Effect.Parallel = Class.create(Effect.Base, {
+Effect.Parallel = Class.create();
+Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
initialize: function(effects) {
this.effects = effects || [];
this.start(arguments[1]);
@@ -318,45 +335,35 @@
effect.render(1.0);
effect.cancel();
effect.event('beforeFinish');
- if (effect.finish) effect.finish(position);
+ if(effect.finish) effect.finish(position);
effect.event('afterFinish');
});
}
});
-Effect.Tween = Class.create(Effect.Base, {
- initialize: function(object, from, to) {
- object = Object.isString(object) ? $(object) : object;
- var args = $A(arguments), method = args.last(),
- options = args.length == 5 ? args[3] : null;
- this.method = Object.isFunction(method) ? method.bind(object) :
- Object.isFunction(object[method]) ? object[method].bind(object) :
- function(value) { object[method] = value };
- this.start(Object.extend({ from: from, to: to }, options || { }));
- },
- update: function(position) {
- this.method(position);
- }
-});
-
-Effect.Event = Class.create(Effect.Base, {
+Effect.Event = Class.create();
+Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {
initialize: function() {
- this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
+ var options = Object.extend({
+ duration: 0
+ }, arguments[0] || {});
+ this.start(options);
},
update: Prototype.emptyFunction
});
-Effect.Opacity = Class.create(Effect.Base, {
+Effect.Opacity = Class.create();
+Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
initialize: function(element) {
this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
+ if(!this.element) throw(Effect._elementDoesNotExistError);
// make this work on IE on elements without 'layout'
- if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
this.element.setStyle({zoom: 1});
var options = Object.extend({
from: this.element.getOpacity() || 0.0,
to: 1.0
- }, arguments[1] || { });
+ }, arguments[1] || {});
this.start(options);
},
update: function(position) {
@@ -364,30 +371,36 @@
}
});
-Effect.Move = Class.create(Effect.Base, {
+Effect.Move = Class.create();
+Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
initialize: function(element) {
this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
+ if(!this.element) throw(Effect._elementDoesNotExistError);
var options = Object.extend({
x: 0,
y: 0,
mode: 'relative'
- }, arguments[1] || { });
+ }, arguments[1] || {});
this.start(options);
},
setup: function() {
+ // Bug in Opera: Opera returns the "real" position of a static element or
+ // relative element that does not have top/left explicitly set.
+ // ==> Always set top and left for position relative elements in your stylesheets
+ // (to 0 if you do not need them)
this.element.makePositioned();
this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
this.originalTop = parseFloat(this.element.getStyle('top') || '0');
- if (this.options.mode == 'absolute') {
+ if(this.options.mode == 'absolute') {
+ // absolute movement, so we need to calc deltaX and deltaY
this.options.x = this.options.x - this.originalLeft;
this.options.y = this.options.y - this.originalTop;
}
},
update: function(position) {
this.element.setStyle({
- left: (this.options.x * position + this.originalLeft).round() + 'px',
- top: (this.options.y * position + this.originalTop).round() + 'px'
+ left: Math.round(this.options.x * position + this.originalLeft) + 'px',
+ top: Math.round(this.options.y * position + this.originalTop) + 'px'
});
}
});
@@ -395,29 +408,30 @@
// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
return new Effect.Move(element,
- Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
+ Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
};
-Effect.Scale = Class.create(Effect.Base, {
+Effect.Scale = Class.create();
+Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
initialize: function(element, percent) {
this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
+ if(!this.element) throw(Effect._elementDoesNotExistError);
var options = Object.extend({
scaleX: true,
scaleY: true,
scaleContent: true,
scaleFromCenter: false,
- scaleMode: 'box', // 'box' or 'contents' or { } with provided values
+ scaleMode: 'box', // 'box' or 'contents' or {} with provided values
scaleFrom: 100.0,
scaleTo: percent
- }, arguments[2] || { });
+ }, arguments[2] || {});
this.start(options);
},
setup: function() {
this.restoreAfterFinish = this.options.restoreAfterFinish || false;
this.elementPositioning = this.element.getStyle('position');
- this.originalStyle = { };
+ this.originalStyle = {};
['top','left','width','height','fontSize'].each( function(k) {
this.originalStyle[k] = this.element.style[k];
}.bind(this));
@@ -427,7 +441,7 @@
var fontSize = this.element.getStyle('font-size') || '100%';
['em','px','%','pt'].each( function(fontSizeType) {
- if (fontSize.indexOf(fontSizeType)>0) {
+ if(fontSize.indexOf(fontSizeType)>0) {
this.fontSize = parseFloat(fontSize);
this.fontSizeType = fontSizeType;
}
@@ -436,61 +450,62 @@
this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
this.dims = null;
- if (this.options.scaleMode=='box')
+ if(this.options.scaleMode=='box')
this.dims = [this.element.offsetHeight, this.element.offsetWidth];
- if (/^content/.test(this.options.scaleMode))
+ if(/^content/.test(this.options.scaleMode))
this.dims = [this.element.scrollHeight, this.element.scrollWidth];
- if (!this.dims)
+ if(!this.dims)
this.dims = [this.options.scaleMode.originalHeight,
this.options.scaleMode.originalWidth];
},
update: function(position) {
var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
- if (this.options.scaleContent && this.fontSize)
+ if(this.options.scaleContent && this.fontSize)
this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
},
finish: function(position) {
- if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
+ if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
},
setDimensions: function(height, width) {
- var d = { };
- if (this.options.scaleX) d.width = width.round() + 'px';
- if (this.options.scaleY) d.height = height.round() + 'px';
- if (this.options.scaleFromCenter) {
+ var d = {};
+ if(this.options.scaleX) d.width = Math.round(width) + 'px';
+ if(this.options.scaleY) d.height = Math.round(height) + 'px';
+ if(this.options.scaleFromCenter) {
var topd = (height - this.dims[0])/2;
var leftd = (width - this.dims[1])/2;
- if (this.elementPositioning == 'absolute') {
- if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
- if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
+ if(this.elementPositioning == 'absolute') {
+ if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
+ if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
} else {
- if (this.options.scaleY) d.top = -topd + 'px';
- if (this.options.scaleX) d.left = -leftd + 'px';
+ if(this.options.scaleY) d.top = -topd + 'px';
+ if(this.options.scaleX) d.left = -leftd + 'px';
}
}
this.element.setStyle(d);
}
});
-Effect.Highlight = Class.create(Effect.Base, {
+Effect.Highlight = Class.create();
+Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
initialize: function(element) {
this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
+ if(!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
this.start(options);
},
setup: function() {
// Prevent executing on elements not in the layout flow
- if (this.element.getStyle('display')=='none') { this.cancel(); return; }
+ if(this.element.getStyle('display')=='none') { this.cancel(); return; }
// Disable background image during the effect
- this.oldStyle = { };
+ this.oldStyle = {};
if (!this.options.keepBackgroundImage) {
this.oldStyle.backgroundImage = this.element.getStyle('background-image');
this.element.setStyle({backgroundImage: 'none'});
}
- if (!this.options.endcolor)
+ if(!this.options.endcolor)
this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
- if (!this.options.restorecolor)
+ if(!this.options.restorecolor)
this.options.restorecolor = this.element.getStyle('background-color');
// init color calculations
this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
@@ -498,7 +513,7 @@
},
update: function(position) {
this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
- return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
+ return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
},
finish: function() {
this.element.setStyle(Object.extend(this.oldStyle, {
@@ -507,37 +522,45 @@
}
});
-Effect.ScrollTo = function(element) {
- var options = arguments[1] || { },
- scrollOffsets = document.viewport.getScrollOffsets(),
- elementOffsets = $(element).cumulativeOffset(),
- max = (window.height || document.body.scrollHeight) - document.viewport.getHeight();
+Effect.ScrollTo = Class.create();
+Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
+ initialize: function(element) {
+ this.element = $(element);
+ this.start(arguments[1] || {});
+ },
+ setup: function() {
+ Position.prepare();
+ var offsets = Position.cumulativeOffset(this.element);
+ if(this.options.offset) offsets[1] += this.options.offset;
+ var max = window.innerHeight ?
+ window.height - window.innerHeight :
+ document.body.scrollHeight -
+ (document.documentElement.clientHeight ?
+ document.documentElement.clientHeight : document.body.clientHeight);
+ this.scrollStart = Position.deltaY;
+ this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
+ },
+ update: function(position) {
+ Position.prepare();
+ window.scrollTo(Position.deltaX,
+ this.scrollStart + (position*this.delta));
+ }
+});
- if (options.offset) elementOffsets[1] += options.offset;
-
- return new Effect.Tween(null,
- scrollOffsets.top,
- elementOffsets[1] > max ? max : elementOffsets[1],
- options,
- function(p){ scrollTo(scrollOffsets.left, p.round()) }
- );
-};
-
/* ------------- combination effects ------------- */
Effect.Fade = function(element) {
element = $(element);
var oldOpacity = element.getInlineOpacity();
var options = Object.extend({
- from: element.getOpacity() || 1.0,
- to: 0.0,
- afterFinishInternal: function(effect) {
- if (effect.options.to!=0) return;
- effect.element.hide().setStyle({opacity: oldOpacity});
- }
- }, arguments[1] || { });
+ from: element.getOpacity() || 1.0,
+ to: 0.0,
+ afterFinishInternal: function(effect) {
+ if(effect.options.to!=0) return;
+ effect.element.hide().setStyle({opacity: oldOpacity});
+ }}, arguments[1] || {});
return new Effect.Opacity(element,options);
-};
+}
Effect.Appear = function(element) {
element = $(element);
@@ -550,9 +573,9 @@
},
beforeSetup: function(effect) {
effect.element.setOpacity(effect.options.from).show();
- }}, arguments[1] || { });
+ }}, arguments[1] || {});
return new Effect.Opacity(element,options);
-};
+}
Effect.Puff = function(element) {
element = $(element);
@@ -574,9 +597,9 @@
},
afterFinishInternal: function(effect) {
effect.effects[0].element.hide().setStyle(oldStyle); }
- }, arguments[1] || { })
+ }, arguments[1] || {})
);
-};
+}
Effect.BlindUp = function(element) {
element = $(element);
@@ -588,9 +611,9 @@
afterFinishInternal: function(effect) {
effect.element.hide().undoClipping();
}
- }, arguments[1] || { })
+ }, arguments[1] || {})
);
-};
+}
Effect.BlindDown = function(element) {
element = $(element);
@@ -607,8 +630,8 @@
afterFinishInternal: function(effect) {
effect.element.undoClipping();
}
- }, arguments[1] || { }));
-};
+ }, arguments[1] || {}));
+}
Effect.SwitchOff = function(element) {
element = $(element);
@@ -629,8 +652,8 @@
}
})
}
- }, arguments[1] || { }));
-};
+ }, arguments[1] || {}));
+}
Effect.DropOut = function(element) {
element = $(element);
@@ -649,35 +672,29 @@
afterFinishInternal: function(effect) {
effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
}
- }, arguments[1] || { }));
-};
+ }, arguments[1] || {}));
+}
Effect.Shake = function(element) {
element = $(element);
- var options = Object.extend({
- distance: 20,
- duration: 0.5
- }, arguments[1] || {});
- var distance = parseFloat(options.distance);
- var split = parseFloat(options.duration) / 10.0;
var oldStyle = {
top: element.getStyle('top'),
left: element.getStyle('left') };
- return new Effect.Move(element,
- { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ return new Effect.Move(element,
+ { x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
new Effect.Move(effect.element,
- { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
new Effect.Move(effect.element,
- { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
new Effect.Move(effect.element,
- { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
new Effect.Move(effect.element,
- { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
new Effect.Move(effect.element,
- { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
effect.element.undoPositioned().setStyle(oldStyle);
}}) }}) }}) }}) }}) }});
-};
+}
Effect.SlideDown = function(element) {
element = $(element).cleanWhitespace();
@@ -693,7 +710,7 @@
afterSetup: function(effect) {
effect.element.makePositioned();
effect.element.down().makePositioned();
- if (window.opera) effect.element.setStyle({top: ''});
+ if(window.opera) effect.element.setStyle({top: ''});
effect.element.makeClipping().setStyle({height: '0px'}).show();
},
afterUpdateInternal: function(effect) {
@@ -703,25 +720,23 @@
afterFinishInternal: function(effect) {
effect.element.undoClipping().undoPositioned();
effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
- }, arguments[1] || { })
+ }, arguments[1] || {})
);
-};
+}
Effect.SlideUp = function(element) {
element = $(element).cleanWhitespace();
var oldInnerBottom = element.down().getStyle('bottom');
- var elementDimensions = element.getDimensions();
return new Effect.Scale(element, window.opera ? 0 : 1,
Object.extend({ scaleContent: false,
scaleX: false,
scaleMode: 'box',
scaleFrom: 100,
- scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
restoreAfterFinish: true,
- afterSetup: function(effect) {
+ beforeStartInternal: function(effect) {
effect.element.makePositioned();
effect.element.down().makePositioned();
- if (window.opera) effect.element.setStyle({top: ''});
+ if(window.opera) effect.element.setStyle({top: ''});
effect.element.makeClipping().show();
},
afterUpdateInternal: function(effect) {
@@ -729,12 +744,12 @@
(effect.dims[0] - effect.element.clientHeight) + 'px' });
},
afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping().undoPositioned();
- effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
+ effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
+ effect.element.down().undoPositioned();
}
- }, arguments[1] || { })
+ }, arguments[1] || {})
);
-};
+}
// Bug in opera makes the TD containing this element expand for a instance after finish
Effect.Squish = function(element) {
@@ -747,7 +762,7 @@
effect.element.hide().undoClipping();
}
});
-};
+}
Effect.Grow = function(element) {
element = $(element);
@@ -756,7 +771,7 @@
moveTransition: Effect.Transitions.sinoidal,
scaleTransition: Effect.Transitions.sinoidal,
opacityTransition: Effect.Transitions.full
- }, arguments[1] || { });
+ }, arguments[1] || {});
var oldStyle = {
top: element.style.top,
left: element.style.left,
@@ -821,7 +836,7 @@
)
}
});
-};
+}
Effect.Shrink = function(element) {
element = $(element);
@@ -830,7 +845,7 @@
moveTransition: Effect.Transitions.sinoidal,
scaleTransition: Effect.Transitions.sinoidal,
opacityTransition: Effect.Transitions.none
- }, arguments[1] || { });
+ }, arguments[1] || {});
var oldStyle = {
top: element.style.top,
left: element.style.left,
@@ -875,11 +890,11 @@
effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
}, options)
);
-};
+}
Effect.Pulsate = function(element) {
element = $(element);
- var options = arguments[1] || { };
+ var options = arguments[1] || {};
var oldOpacity = element.getInlineOpacity();
var transition = options.transition || Effect.Transitions.sinoidal;
var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
@@ -888,7 +903,7 @@
Object.extend(Object.extend({ duration: 2.0, from: 0,
afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
}, options), {transition: reverser}));
-};
+}
Effect.Fold = function(element) {
element = $(element);
@@ -908,43 +923,46 @@
afterFinishInternal: function(effect) {
effect.element.hide().undoClipping().setStyle(oldStyle);
} });
- }}, arguments[1] || { }));
+ }}, arguments[1] || {}));
};
-Effect.Morph = Class.create(Effect.Base, {
+Effect.Morph = Class.create();
+Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), {
initialize: function(element) {
this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
+ if(!this.element) throw(Effect._elementDoesNotExistError);
var options = Object.extend({
- style: { }
- }, arguments[1] || { });
-
- if (!Object.isString(options.style)) this.style = $H(options.style);
- else {
- if (options.style.include(':'))
- this.style = options.style.parseStyle();
- else {
- this.element.addClassName(options.style);
- this.style = $H(this.element.getStyles());
- this.element.removeClassName(options.style);
- var css = this.element.getStyles();
- this.style = this.style.reject(function(style) {
- return style.value == css[style.key];
+ style: {}
+ }, arguments[1] || {});
+ if (typeof options.style == 'string') {
+ if(options.style.indexOf(':') == -1) {
+ var cssText = '', selector = '.' + options.style;
+ $A(document.styleSheets).reverse().each(function(styleSheet) {
+ if (styleSheet.cssRules) cssRules = styleSheet.cssRules;
+ else if (styleSheet.rules) cssRules = styleSheet.rules;
+ $A(cssRules).reverse().each(function(rule) {
+ if (selector == rule.selectorText) {
+ cssText = rule.style.cssText;
+ throw $break;
+ }
+ });
+ if (cssText) throw $break;
});
- options.afterFinishInternal = function(effect) {
+ this.style = cssText.parseStyle();
+ options.afterFinishInternal = function(effect){
effect.element.addClassName(effect.options.style);
effect.transforms.each(function(transform) {
- effect.element.style[transform.style] = '';
+ if(transform.style != 'opacity')
+ effect.element.style[transform.style] = '';
});
}
- }
- }
+ } else this.style = options.style.parseStyle();
+ } else this.style = $H(options.style)
this.start(options);
},
-
setup: function(){
function parseColor(color){
- if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
+ if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
color = color.parseColor();
return $R(0,2).map(function(i){
return parseInt( color.slice(i*2+1,i*2+3), 16 )
@@ -953,14 +971,14 @@
this.transforms = this.style.map(function(pair){
var property = pair[0], value = pair[1], unit = null;
- if (value.parseColor('#zzzzzz') != '#zzzzzz') {
+ if(value.parseColor('#zzzzzz') != '#zzzzzz') {
value = value.parseColor();
unit = 'color';
- } else if (property == 'opacity') {
+ } else if(property == 'opacity') {
value = parseFloat(value);
- if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
this.element.setStyle({zoom: 1});
- } else if (Element.CSS_LENGTH.test(value)) {
+ } else if(Element.CSS_LENGTH.test(value)) {
var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
value = parseFloat(components[1]);
unit = (components.length == 3) ? components[2] : null;
@@ -984,7 +1002,7 @@
});
},
update: function(position) {
- var style = { }, transform, i = this.transforms.length;
+ var style = {}, transform, i = this.transforms.length;
while(i--)
style[(transform = this.transforms[i]).style] =
transform.unit=='color' ? '#'+
@@ -994,25 +1012,24 @@
(transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
(Math.round(transform.originalValue[2]+
(transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
- (transform.originalValue +
- (transform.targetValue - transform.originalValue) * position).toFixed(3) +
- (transform.unit === null ? '' : transform.unit);
+ transform.originalValue + Math.round(
+ ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
this.element.setStyle(style, true);
}
});
-Effect.Transform = Class.create({
+Effect.Transform = Class.create();
+Object.extend(Effect.Transform.prototype, {
initialize: function(tracks){
this.tracks = [];
- this.options = arguments[1] || { };
+ this.options = arguments[1] || {};
this.addTracks(tracks);
},
addTracks: function(tracks){
tracks.each(function(track){
- track = $H(track);
- var data = track.values().first();
+ var data = $H(track).values().first();
this.tracks.push($H({
- ids: track.keys().first(),
+ ids: $H(track).keys().first(),
effect: Effect.Morph,
options: { style: data }
}));
@@ -1022,9 +1039,8 @@
play: function(){
return new Effect.Parallel(
this.tracks.map(function(track){
- var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
- var elements = [$(ids) || $$(ids)].flatten();
- return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
+ var elements = [$(track.ids) || $$(track.ids)].flatten();
+ return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
}).flatten(),
this.options
);
@@ -1044,79 +1060,35 @@
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
-String.__parseStyleElement = document.createElement('div');
String.prototype.parseStyle = function(){
- var style, styleRules = $H();
- if (Prototype.Browser.WebKit)
- style = new Element('div',{style:this}).style;
- else {
- String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
- style = String.__parseStyleElement.childNodes[0].style;
- }
+ var element = document.createElement('div');
+ element.innerHTML = '<div style="' + this + '"></div>';
+ var style = element.childNodes[0].style, styleRules = $H();
Element.CSS_PROPERTIES.each(function(property){
- if (style[property]) styleRules.set(property, style[property]);
+ if(style[property]) styleRules[property] = style[property];
});
-
- if (Prototype.Browser.IE && this.include('opacity'))
- styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
-
+ if(Prototype.Browser.IE && this.indexOf('opacity') > -1) {
+ styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
+ }
return styleRules;
};
-if (document.defaultView && document.defaultView.getComputedStyle) {
- Element.getStyles = function(element) {
- var css = document.defaultView.getComputedStyle($(element), null);
- return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
- styles[property] = css[property];
- return styles;
- });
- };
-} else {
- Element.getStyles = function(element) {
- element = $(element);
- var css = element.currentStyle, styles;
- styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
- results[property] = css[property];
- return results;
- });
- if (!styles.opacity) styles.opacity = element.getOpacity();
- return styles;
- };
+Element.morph = function(element, style) {
+ new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {}));
+ return element;
};
-Effect.Methods = {
- morph: function(element, style) {
- element = $(element);
- new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
- return element;
- },
- visualEffect: function(element, effect, options) {
- element = $(element)
- var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
- new Effect[klass](element, options);
- return element;
- },
- highlight: function(element, options) {
- element = $(element);
- new Effect.Highlight(element, options);
- return element;
- }
-};
-
-$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
- 'pulsate shake puff squish switchOff dropOut').each(
- function(effect) {
- Effect.Methods[effect] = function(element, options){
- element = $(element);
- Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
- return element;
- }
- }
+['getInlineOpacity','forceRerendering','setContentZoom',
+ 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each(
+ function(f) { Element.Methods[f] = Element[f]; }
);
-$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
- function(f) { Effect.Methods[f] = Element[f]; }
-);
+Element.Methods.visualEffect = function(element, effect, options) {
+ s = effect.dasherize().camelize();
+ effect_class = s.charAt(0).toUpperCase() + s.substring(1);
+ new Effect[effect_class](element, options);
+ return $(element);
+};
-Element.addMethods(Effect.Methods);
+Element.addMethods();
\ No newline at end of file
Modified: branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/prototype.js
===================================================================
--- branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/prototype.js 2008-07-15 17:58:47 UTC (rev 11455)
+++ branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/prototype.js 2008-07-15 18:04:27 UTC (rev 11456)
@@ -1,116 +1,59 @@
-/* Prototype JavaScript framework, version 1.6.0.2
- * (c) 2005-2008 Sam Stephenson
+/* Prototype JavaScript framework, version 1.5.1
+ * (c) 2005-2007 Sam Stephenson
*
* Prototype is freely distributable under the terms of an MIT-style license.
* For details, see the Prototype web site: http://www.prototypejs.org/
*
- *--------------------------------------------------------------------------*/
+/*--------------------------------------------------------------------------*/
var Prototype = {
- Version: '1.6.0.2',
+ Version: '1.5.1',
Browser: {
IE: !!(window.attachEvent && !window.opera),
Opera: !!window.opera,
WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
- Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
- MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1
},
BrowserFeatures: {
XPath: !!document.evaluate,
ElementExtensions: !!window.HTMLElement,
SpecificElementExtensions:
- document.createElement('div').__proto__ &&
- document.createElement('div').__proto__ !==
- document.createElement('form').__proto__
+ (document.createElement('div').__proto__ !==
+ document.createElement('form').__proto__)
},
- ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
- JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+ ScriptFragment: '<script[^>]*>([\u0001-\uFFFF]*?)</script>',
+ JSONFilter: /^\/\*-secure-\s*(.*)\s*\*\/\s*$/,
emptyFunction: function() { },
K: function(x) { return x }
-};
+}
-if (Prototype.Browser.MobileSafari)
- Prototype.BrowserFeatures.SpecificElementExtensions = false;
-
-
-/* Based on Alex Arnell's inheritance implementation. */
var Class = {
create: function() {
- var parent = null, properties = $A(arguments);
- if (Object.isFunction(properties[0]))
- parent = properties.shift();
-
- function klass() {
+ return function() {
this.initialize.apply(this, arguments);
}
-
- Object.extend(klass, Class.Methods);
- klass.superclass = parent;
- klass.subclasses = [];
-
- if (parent) {
- var subclass = function() { };
- subclass.prototype = parent.prototype;
- klass.prototype = new subclass;
- parent.subclasses.push(klass);
- }
-
- for (var i = 0; i < properties.length; i++)
- klass.addMethods(properties[i]);
-
- if (!klass.prototype.initialize)
- klass.prototype.initialize = Prototype.emptyFunction;
-
- klass.prototype.constructor = klass;
-
- return klass;
}
-};
+}
-Class.Methods = {
- addMethods: function(source) {
- var ancestor = this.superclass && this.superclass.prototype;
- var properties = Object.keys(source);
+var Abstract = new Object();
- if (!Object.keys({ toString: true }).length)
- properties.push("toString", "valueOf");
-
- for (var i = 0, length = properties.length; i < length; i++) {
- var property = properties[i], value = source[property];
- if (ancestor && Object.isFunction(value) &&
- value.argumentNames().first() == "$super") {
- var method = value, value = Object.extend((function(m) {
- return function() { return ancestor[m].apply(this, arguments) };
- })(property).wrap(method), {
- valueOf: function() { return method },
- toString: function() { return method.toString() }
- });
- }
- this.prototype[property] = value;
- }
-
- return this;
- }
-};
-
-var Abstract = { };
-
Object.extend = function(destination, source) {
- for (var property in source)
+ for (var property in source) {
destination[property] = source[property];
+ }
return destination;
-};
+}
Object.extend(Object, {
inspect: function(object) {
try {
- if (Object.isUndefined(object)) return 'undefined';
+ if (object === undefined) return 'undefined';
if (object === null) return 'null';
- return object.inspect ? object.inspect() : String(object);
+ return object.inspect ? object.inspect() : object.toString();
} catch (e) {
if (e instanceof RangeError) return '...';
throw e;
@@ -119,35 +62,24 @@
toJSON: function(object) {
var type = typeof object;
- switch (type) {
+ switch(type) {
case 'undefined':
case 'function':
case 'unknown': return;
case 'boolean': return object.toString();
}
-
if (object === null) return 'null';
if (object.toJSON) return object.toJSON();
- if (Object.isElement(object)) return;
-
+ if (object.ownerDocument === document) return;
var results = [];
for (var property in object) {
var value = Object.toJSON(object[property]);
- if (!Object.isUndefined(value))
+ if (value !== undefined)
results.push(property.toJSON() + ': ' + value);
}
-
return '{' + results.join(', ') + '}';
},
- toQueryString: function(object) {
- return $H(object).toQueryString();
- },
-
- toHTML: function(object) {
- return object && object.toHTML ? object.toHTML() : String.interpret(object);
- },
-
keys: function(object) {
var keys = [];
for (var property in object)
@@ -163,100 +95,55 @@
},
clone: function(object) {
- return Object.extend({ }, object);
- },
-
- isElement: function(object) {
- return object && object.nodeType == 1;
- },
-
- isArray: function(object) {
- return object != null && typeof object == "object" &&
- 'splice' in object && 'join' in object;
- },
-
- isHash: function(object) {
- return object instanceof Hash;
- },
-
- isFunction: function(object) {
- return typeof object == "function";
- },
-
- isString: function(object) {
- return typeof object == "string";
- },
-
- isNumber: function(object) {
- return typeof object == "number";
- },
-
- isUndefined: function(object) {
- return typeof object == "undefined";
+ return Object.extend({}, object);
}
});
-Object.extend(Function.prototype, {
- argumentNames: function() {
- var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
- return names.length == 1 && !names[0] ? [] : names;
- },
+Function.prototype.bind = function() {
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function() {
+ return __method.apply(object, args.concat($A(arguments)));
+ }
+}
- bind: function() {
- if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
- var __method = this, args = $A(arguments), object = args.shift();
- return function() {
- return __method.apply(object, args.concat($A(arguments)));
- }
- },
+Function.prototype.bindAsEventListener = function(object) {
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function(event) {
+ return __method.apply(object, [event || window.event].concat(args));
+ }
+}
- bindAsEventListener: function() {
- var __method = this, args = $A(arguments), object = args.shift();
- return function(event) {
- return __method.apply(object, [event || window.event].concat(args));
- }
+Object.extend(Number.prototype, {
+ toColorPart: function() {
+ return this.toPaddedString(2, 16);
},
- curry: function() {
- if (!arguments.length) return this;
- var __method = this, args = $A(arguments);
- return function() {
- return __method.apply(this, args.concat($A(arguments)));
- }
+ succ: function() {
+ return this + 1;
},
- delay: function() {
- var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
- return window.setTimeout(function() {
- return __method.apply(__method, args);
- }, timeout);
+ times: function(iterator) {
+ $R(0, this, true).each(iterator);
+ return this;
},
- wrap: function(wrapper) {
- var __method = this;
- return function() {
- return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
- }
+ toPaddedString: function(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
},
- methodize: function() {
- if (this._methodized) return this._methodized;
- var __method = this;
- return this._methodized = function() {
- return __method.apply(null, [this].concat($A(arguments)));
- };
+ toJSON: function() {
+ return isFinite(this) ? this.toString() : 'null';
}
});
-Function.prototype.defer = Function.prototype.delay.curry(0.01);
-
Date.prototype.toJSON = function() {
- return '"' + this.getUTCFullYear() + '-' +
- (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
- this.getUTCDate().toPaddedString(2) + 'T' +
- this.getUTCHours().toPaddedString(2) + ':' +
- this.getUTCMinutes().toPaddedString(2) + ':' +
- this.getUTCSeconds().toPaddedString(2) + 'Z"';
+ return '"' + this.getFullYear() + '-' +
+ (this.getMonth() + 1).toPaddedString(2) + '-' +
+ this.getDate().toPaddedString(2) + 'T' +
+ this.getHours().toPaddedString(2) + ':' +
+ this.getMinutes().toPaddedString(2) + ':' +
+ this.getSeconds().toPaddedString(2) + '"';
};
var Try = {
@@ -268,22 +155,17 @@
try {
returnValue = lambda();
break;
- } catch (e) { }
+ } catch (e) {}
}
return returnValue;
}
-};
+}
-RegExp.prototype.match = RegExp.prototype.test;
-
-RegExp.escape = function(str) {
- return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
-};
-
/*--------------------------------------------------------------------------*/
-var PeriodicalExecuter = Class.create({
+var PeriodicalExecuter = Class.create();
+PeriodicalExecuter.prototype = {
initialize: function(callback, frequency) {
this.callback = callback;
this.frequency = frequency;
@@ -296,10 +178,6 @@
this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
},
- execute: function() {
- this.callback(this);
- },
-
stop: function() {
if (!this.timer) return;
clearInterval(this.timer);
@@ -310,13 +188,13 @@
if (!this.currentlyExecuting) {
try {
this.currentlyExecuting = true;
- this.execute();
+ this.callback(this);
} finally {
this.currentlyExecuting = false;
}
}
}
-});
+}
Object.extend(String, {
interpret: function(value) {
return value == null ? '' : String(value);
@@ -350,7 +228,7 @@
sub: function(pattern, replacement, count) {
replacement = this.gsub.prepareReplacement(replacement);
- count = Object.isUndefined(count) ? 1 : count;
+ count = count === undefined ? 1 : count;
return this.gsub(pattern, function(match) {
if (--count < 0) return match[0];
@@ -360,14 +238,14 @@
scan: function(pattern, iterator) {
this.gsub(pattern, iterator);
- return String(this);
+ return this;
},
truncate: function(length, truncation) {
length = length || 30;
- truncation = Object.isUndefined(truncation) ? '...' : truncation;
+ truncation = truncation === undefined ? '...' : truncation;
return this.length > length ?
- this.slice(0, length - truncation.length) + truncation : String(this);
+ this.slice(0, length - truncation.length) + truncation : this;
},
strip: function() {
@@ -401,7 +279,7 @@
},
unescapeHTML: function() {
- var div = new Element('div');
+ var div = document.createElement('div');
div.innerHTML = this.stripTags();
return div.childNodes[0] ? (div.childNodes.length > 1 ?
$A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
@@ -410,16 +288,16 @@
toQueryParams: function(separator) {
var match = this.strip().match(/([^?#]*)(#.*)?$/);
- if (!match) return { };
+ if (!match) return {};
- return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ return match[1].split(separator || '&').inject({}, function(hash, pair) {
if ((pair = pair.split('='))[0]) {
var key = decodeURIComponent(pair.shift());
var value = pair.length > 1 ? pair.join('=') : pair[0];
if (value != undefined) value = decodeURIComponent(value);
if (key in hash) {
- if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ if (hash[key].constructor != Array) hash[key] = [hash[key]];
hash[key].push(value);
}
else hash[key] = value;
@@ -438,7 +316,9 @@
},
times: function(count) {
- return count < 1 ? '' : new Array(count + 1).join(this);
+ var result = '';
+ for (var i = 0; i < count; i++) result += this;
+ return result;
},
camelize: function() {
@@ -484,17 +364,11 @@
return this.sub(filter || Prototype.JSONFilter, '#{1}');
},
- isJSON: function() {
- var str = this;
- if (str.blank()) return false;
- str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
- return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
- },
-
evalJSON: function(sanitize) {
var json = this.unfilterJSON();
try {
- if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ if (!sanitize || (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(json)))
+ return eval('(' + json + ')');
} catch (e) { }
throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
},
@@ -518,10 +392,6 @@
blank: function() {
return /^\s*$/.test(this);
- },
-
- interpolate: function(object, pattern) {
- return new Template(this, pattern).evaluate(object);
}
});
@@ -535,10 +405,10 @@
});
String.prototype.gsub.prepareReplacement = function(replacement) {
- if (Object.isFunction(replacement)) return replacement;
+ if (typeof replacement == 'function') return replacement;
var template = new Template(replacement);
return function(match) { return template.evaluate(match) };
-};
+}
String.prototype.parseQuery = String.prototype.toQueryParams;
@@ -549,47 +419,28 @@
with (String.prototype.escapeHTML) div.appendChild(text);
-var Template = Class.create({
+var Template = Class.create();
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+Template.prototype = {
initialize: function(template, pattern) {
this.template = template.toString();
- this.pattern = pattern || Template.Pattern;
+ this.pattern = pattern || Template.Pattern;
},
evaluate: function(object) {
- if (Object.isFunction(object.toTemplateReplacements))
- object = object.toTemplateReplacements();
-
return this.template.gsub(this.pattern, function(match) {
- if (object == null) return '';
-
- var before = match[1] || '';
+ var before = match[1];
if (before == '\\') return match[2];
-
- var ctx = object, expr = match[3];
- var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
- match = pattern.exec(expr);
- if (match == null) return before;
-
- while (match != null) {
- var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
- ctx = ctx[comp];
- if (null == ctx || '' == match[3]) break;
- expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
- match = pattern.exec(expr);
- }
-
- return before + String.interpret(ctx);
+ return before + String.interpret(object[match[3]]);
});
}
-});
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+}
-var $break = { };
+var $break = {}, $continue = new Error('"throw $continue" is deprecated, use "return" instead');
var Enumerable = {
- each: function(iterator, context) {
+ each: function(iterator) {
var index = 0;
- iterator = iterator.bind(context);
try {
this._each(function(value) {
iterator(value, index++);
@@ -600,45 +451,40 @@
return this;
},
- eachSlice: function(number, iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ eachSlice: function(number, iterator) {
var index = -number, slices = [], array = this.toArray();
while ((index += number) < array.length)
slices.push(array.slice(index, index+number));
- return slices.collect(iterator, context);
+ return slices.map(iterator);
},
- all: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ all: function(iterator) {
var result = true;
this.each(function(value, index) {
- result = result && !!iterator(value, index);
+ result = result && !!(iterator || Prototype.K)(value, index);
if (!result) throw $break;
});
return result;
},
- any: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ any: function(iterator) {
var result = false;
this.each(function(value, index) {
- if (result = !!iterator(value, index))
+ if (result = !!(iterator || Prototype.K)(value, index))
throw $break;
});
return result;
},
- collect: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ collect: function(iterator) {
var results = [];
this.each(function(value, index) {
- results.push(iterator(value, index));
+ results.push((iterator || Prototype.K)(value, index));
});
return results;
},
- detect: function(iterator, context) {
- iterator = iterator.bind(context);
+ detect: function(iterator) {
var result;
this.each(function(value, index) {
if (iterator(value, index)) {
@@ -649,8 +495,7 @@
return result;
},
- findAll: function(iterator, context) {
- iterator = iterator.bind(context);
+ findAll: function(iterator) {
var results = [];
this.each(function(value, index) {
if (iterator(value, index))
@@ -659,24 +504,17 @@
return results;
},
- grep: function(filter, iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ grep: function(pattern, iterator) {
var results = [];
-
- if (Object.isString(filter))
- filter = new RegExp(filter);
-
this.each(function(value, index) {
- if (filter.match(value))
- results.push(iterator(value, index));
- });
+ var stringValue = value.toString();
+ if (stringValue.match(pattern))
+ results.push((iterator || Prototype.K)(value, index));
+ })
return results;
},
include: function(object) {
- if (Object.isFunction(this.indexOf))
- if (this.indexOf(object) != -1) return true;
-
var found = false;
this.each(function(value) {
if (value == object) {
@@ -688,15 +526,14 @@
},
inGroupsOf: function(number, fillWith) {
- fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+ fillWith = fillWith === undefined ? null : fillWith;
return this.eachSlice(number, function(slice) {
while(slice.length < number) slice.push(fillWith);
return slice;
});
},
- inject: function(memo, iterator, context) {
- iterator = iterator.bind(context);
+ inject: function(memo, iterator) {
this.each(function(value, index) {
memo = iterator(memo, value, index);
});
@@ -710,33 +547,30 @@
});
},
- max: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ max: function(iterator) {
var result;
this.each(function(value, index) {
- value = iterator(value, index);
- if (result == null || value >= result)
+ value = (iterator || Prototype.K)(value, index);
+ if (result == undefined || value >= result)
result = value;
});
return result;
},
- min: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ min: function(iterator) {
var result;
this.each(function(value, index) {
- value = iterator(value, index);
- if (result == null || value < result)
+ value = (iterator || Prototype.K)(value, index);
+ if (result == undefined || value < result)
result = value;
});
return result;
},
- partition: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
+ partition: function(iterator) {
var trues = [], falses = [];
this.each(function(value, index) {
- (iterator(value, index) ?
+ ((iterator || Prototype.K)(value, index) ?
trues : falses).push(value);
});
return [trues, falses];
@@ -744,14 +578,13 @@
pluck: function(property) {
var results = [];
- this.each(function(value) {
+ this.each(function(value, index) {
results.push(value[property]);
});
return results;
},
- reject: function(iterator, context) {
- iterator = iterator.bind(context);
+ reject: function(iterator) {
var results = [];
this.each(function(value, index) {
if (!iterator(value, index))
@@ -760,8 +593,7 @@
return results;
},
- sortBy: function(iterator, context) {
- iterator = iterator.bind(context);
+ sortBy: function(iterator) {
return this.map(function(value, index) {
return {value: value, criteria: iterator(value, index)};
}).sort(function(left, right) {
@@ -776,7 +608,7 @@
zip: function() {
var iterator = Prototype.K, args = $A(arguments);
- if (Object.isFunction(args.last()))
+ if (typeof args.last() == 'function')
iterator = args.pop();
var collections = [this].concat(args).map($A);
@@ -792,42 +624,46 @@
inspect: function() {
return '#<Enumerable:' + this.toArray().inspect() + '>';
}
-};
+}
Object.extend(Enumerable, {
map: Enumerable.collect,
find: Enumerable.detect,
select: Enumerable.findAll,
- filter: Enumerable.findAll,
member: Enumerable.include,
- entries: Enumerable.toArray,
- every: Enumerable.all,
- some: Enumerable.any
+ entries: Enumerable.toArray
});
-function $A(iterable) {
+var $A = Array.from = function(iterable) {
if (!iterable) return [];
- if (iterable.toArray) return iterable.toArray();
- var length = iterable.length || 0, results = new Array(length);
- while (length--) results[length] = iterable[length];
- return results;
+ if (iterable.toArray) {
+ return iterable.toArray();
+ } else {
+ var results = [];
+ for (var i = 0, length = iterable.length; i < length; i++)
+ results.push(iterable[i]);
+ return results;
+ }
}
if (Prototype.Browser.WebKit) {
- $A = function(iterable) {
+ $A = Array.from = function(iterable) {
if (!iterable) return [];
- if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
- iterable.toArray) return iterable.toArray();
- var length = iterable.length || 0, results = new Array(length);
- while (length--) results[length] = iterable[length];
- return results;
- };
+ if (!(typeof iterable == 'function' && iterable == '[object NodeList]') &&
+ iterable.toArray) {
+ return iterable.toArray();
+ } else {
+ var results = [];
+ for (var i = 0, length = iterable.length; i < length; i++)
+ results.push(iterable[i]);
+ return results;
+ }
+ }
}
-Array.from = $A;
-
Object.extend(Array.prototype, Enumerable);
-if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+if (!Array.prototype._reverse)
+ Array.prototype._reverse = Array.prototype.reverse;
Object.extend(Array.prototype, {
_each: function(iterator) {
@@ -856,7 +692,7 @@
flatten: function() {
return this.inject([], function(array, value) {
- return array.concat(Object.isArray(value) ?
+ return array.concat(value && value.constructor == Array ?
value.flatten() : [value]);
});
},
@@ -868,6 +704,12 @@
});
},
+ indexOf: function(object) {
+ for (var i = 0, length = this.length; i < length; i++)
+ if (this[i] == object) return i;
+ return -1;
+ },
+
reverse: function(inline) {
return (inline !== false ? this : this.toArray())._reverse();
},
@@ -884,12 +726,6 @@
});
},
- intersect: function(array) {
- return this.uniq().findAll(function(item) {
- return array.detect(function(value) { return item === value });
- });
- },
-
clone: function() {
return [].concat(this);
},
@@ -906,35 +742,15 @@
var results = [];
this.each(function(object) {
var value = Object.toJSON(object);
- if (!Object.isUndefined(value)) results.push(value);
+ if (value !== undefined) results.push(value);
});
return '[' + results.join(', ') + ']';
}
});
-// use native browser JS 1.6 implementation if available
-if (Object.isFunction(Array.prototype.forEach))
- Array.prototype._each = Array.prototype.forEach;
-
-if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
- i || (i = 0);
- var length = this.length;
- if (i < 0) i = length + i;
- for (; i < length; i++)
- if (this[i] === item) return i;
- return -1;
-};
-
-if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
- i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
- var n = this.slice(0, i).reverse().indexOf(item);
- return (n < 0) ? n : i - n - 1;
-};
-
Array.prototype.toArray = Array.prototype.clone;
function $w(string) {
- if (!Object.isString(string)) return [];
string = string.strip();
return string ? string.split(/\s+/) : [];
}
@@ -944,7 +760,7 @@
var array = [];
for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
for (var i = 0, length = arguments.length; i < length; i++) {
- if (Object.isArray(arguments[i])) {
+ if (arguments[i].constructor == Array) {
for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
array.push(arguments[i][j]);
} else {
@@ -952,135 +768,136 @@
}
}
return array;
- };
+ }
}
-Object.extend(Number.prototype, {
- toColorPart: function() {
- return this.toPaddedString(2, 16);
- },
+var Hash = function(object) {
+ if (object instanceof Hash) this.merge(object);
+ else Object.extend(this, object || {});
+};
- succ: function() {
- return this + 1;
- },
+Object.extend(Hash, {
+ toQueryString: function(obj) {
+ var parts = [];
+ parts.add = arguments.callee.addPair;
- times: function(iterator) {
- $R(0, this, true).each(iterator);
- return this;
- },
+ this.prototype._each.call(obj, function(pair) {
+ if (!pair.key) return;
+ var value = pair.value;
- toPaddedString: function(length, radix) {
- var string = this.toString(radix || 10);
- return '0'.times(length - string.length) + string;
+ if (value && typeof value == 'object') {
+ if (value.constructor == Array) value.each(function(value) {
+ parts.add(pair.key, value);
+ });
+ return;
+ }
+ parts.add(pair.key, value);
+ });
+
+ return parts.join('&');
},
- toJSON: function() {
- return isFinite(this) ? this.toString() : 'null';
+ toJSON: function(object) {
+ var results = [];
+ this.prototype._each.call(object, function(pair) {
+ var value = Object.toJSON(pair.value);
+ if (value !== undefined) results.push(pair.key.toJSON() + ': ' + value);
+ });
+ return '{' + results.join(', ') + '}';
}
});
-$w('abs round ceil floor').each(function(method){
- Number.prototype[method] = Math[method].methodize();
-});
-function $H(object) {
- return new Hash(object);
-};
+Hash.toQueryString.addPair = function(key, value, prefix) {
+ key = encodeURIComponent(key);
+ if (value === undefined) this.push(key);
+ else this.push(key + '=' + (value == null ? '' : encodeURIComponent(value)));
+}
-var Hash = Class.create(Enumerable, (function() {
+Object.extend(Hash.prototype, Enumerable);
+Object.extend(Hash.prototype, {
+ _each: function(iterator) {
+ for (var key in this) {
+ var value = this[key];
+ if (value && value == Hash.prototype[key]) continue;
- function toQueryPair(key, value) {
- if (Object.isUndefined(value)) return key;
- return key + '=' + encodeURIComponent(String.interpret(value));
- }
+ var pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ },
- return {
- initialize: function(object) {
- this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
- },
+ keys: function() {
+ return this.pluck('key');
+ },
- _each: function(iterator) {
- for (var key in this._object) {
- var value = this._object[key], pair = [key, value];
- pair.key = key;
- pair.value = value;
- iterator(pair);
- }
- },
+ values: function() {
+ return this.pluck('value');
+ },
- set: function(key, value) {
- return this._object[key] = value;
- },
+ merge: function(hash) {
+ return $H(hash).inject(this, function(mergedHash, pair) {
+ mergedHash[pair.key] = pair.value;
+ return mergedHash;
+ });
+ },
- get: function(key) {
- return this._object[key];
- },
-
- unset: function(key) {
- var value = this._object[key];
- delete this._object[key];
- return value;
- },
-
- toObject: function() {
- return Object.clone(this._object);
- },
-
- keys: function() {
- return this.pluck('key');
- },
-
- values: function() {
- return this.pluck('value');
- },
-
- index: function(value) {
- var match = this.detect(function(pair) {
- return pair.value === value;
- });
- return match && match.key;
- },
-
- merge: function(object) {
- return this.clone().update(object);
- },
-
- update: function(object) {
- return new Hash(object).inject(this, function(result, pair) {
- result.set(pair.key, pair.value);
- return result;
- });
- },
-
- toQueryString: function() {
- return this.map(function(pair) {
- var key = encodeURIComponent(pair.key), values = pair.value;
-
- if (values && typeof values == 'object') {
- if (Object.isArray(values))
- return values.map(toQueryPair.curry(key)).join('&');
+ remove: function() {
+ var result;
+ for(var i = 0, length = arguments.length; i < length; i++) {
+ var value = this[arguments[i]];
+ if (value !== undefined){
+ if (result === undefined) result = value;
+ else {
+ if (result.constructor != Array) result = [result];
+ result.push(value)
}
- return toQueryPair(key, values);
- }).join('&');
- },
+ }
+ delete this[arguments[i]];
+ }
+ return result;
+ },
- inspect: function() {
- return '#<Hash:{' + this.map(function(pair) {
- return pair.map(Object.inspect).join(': ');
- }).join(', ') + '}>';
- },
+ toQueryString: function() {
+ return Hash.toQueryString(this);
+ },
- toJSON: function() {
- return Object.toJSON(this.toObject());
- },
+ inspect: function() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ },
- clone: function() {
- return new Hash(this);
- }
+ toJSON: function() {
+ return Hash.toJSON(this);
}
-})());
+});
-Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
-Hash.from = $H;
-var ObjectRange = Class.create(Enumerable, {
+function $H(object) {
+ if (object instanceof Hash) return object;
+ return new Hash(object);
+};
+
+// Safari iterates over shadowed properties
+if (function() {
+ var i = 0, Test = function(value) { this.key = value };
+ Test.prototype.key = 'foo';
+ for (var property in new Test('bar')) i++;
+ return i > 1;
+}()) Hash.prototype._each = function(iterator) {
+ var cache = [];
+ for (var key in this) {
+ var value = this[key];
+ if ((value && value == Hash.prototype[key]) || cache.include(key)) continue;
+ cache.push(key);
+ var pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+};
+ObjectRange = Class.create();
+Object.extend(ObjectRange.prototype, Enumerable);
+Object.extend(ObjectRange.prototype, {
initialize: function(start, end, exclusive) {
this.start = start;
this.end = end;
@@ -1106,7 +923,7 @@
var $R = function(start, end, exclusive) {
return new ObjectRange(start, end, exclusive);
-};
+}
var Ajax = {
getTransport: function() {
@@ -1118,7 +935,7 @@
},
activeRequestCount: 0
-};
+}
Ajax.Responders = {
responders: [],
@@ -1138,10 +955,10 @@
dispatch: function(callback, request, transport, json) {
this.each(function(responder) {
- if (Object.isFunction(responder[callback])) {
+ if (typeof responder[callback] == 'function') {
try {
responder[callback].apply(responder, [request, transport, json]);
- } catch (e) { }
+ } catch (e) {}
}
});
}
@@ -1150,38 +967,42 @@
Object.extend(Ajax.Responders, Enumerable);
Ajax.Responders.register({
- onCreate: function() { Ajax.activeRequestCount++ },
- onComplete: function() { Ajax.activeRequestCount-- }
+ onCreate: function() {
+ Ajax.activeRequestCount++;
+ },
+ onComplete: function() {
+ Ajax.activeRequestCount--;
+ }
});
-Ajax.Base = Class.create({
- initialize: function(options) {
+Ajax.Base = function() {};
+Ajax.Base.prototype = {
+ setOptions: function(options) {
this.options = {
method: 'post',
asynchronous: true,
contentType: 'application/x-www-form-urlencoded',
encoding: 'UTF-8',
- parameters: '',
- evalJSON: true,
- evalJS: true
- };
- Object.extend(this.options, options || { });
+ parameters: ''
+ }
+ Object.extend(this.options, options || {});
this.options.method = this.options.method.toLowerCase();
-
- if (Object.isString(this.options.parameters))
+ if (typeof this.options.parameters == 'string')
this.options.parameters = this.options.parameters.toQueryParams();
- else if (Object.isHash(this.options.parameters))
- this.options.parameters = this.options.parameters.toObject();
}
-});
+}
-Ajax.Request = Class.create(Ajax.Base, {
+Ajax.Request = Class.create();
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
_complete: false,
- initialize: function($super, url, options) {
- $super(options);
+ initialize: function(url, options) {
this.transport = Ajax.getTransport();
+ this.setOptions(options);
this.request(url);
},
@@ -1198,7 +1019,7 @@
this.parameters = params;
- if (params = Object.toQueryString(params)) {
+ if (params = Hash.toQueryString(params)) {
// when GET, append parameters to URL
if (this.method == 'get')
this.url += (this.url.include('?') ? '&' : '?') + params;
@@ -1207,14 +1028,14 @@
}
try {
- var response = new Ajax.Response(this);
- if (this.options.onCreate) this.options.onCreate(response);
- Ajax.Responders.dispatch('onCreate', this, response);
+ if (this.options.onCreate) this.options.onCreate(this.transport);
+ Ajax.Responders.dispatch('onCreate', this, this.transport);
this.transport.open(this.method.toUpperCase(), this.url,
this.options.asynchronous);
- if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+ if (this.options.asynchronous)
+ setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);
this.transport.onreadystatechange = this.onStateChange.bind(this);
this.setRequestHeaders();
@@ -1262,7 +1083,7 @@
if (typeof this.options.requestHeaders == 'object') {
var extras = this.options.requestHeaders;
- if (Object.isFunction(extras.push))
+ if (typeof extras.push == 'function')
for (var i = 0, length = extras.length; i < length; i += 2)
headers[extras[i]] = extras[i+1];
else
@@ -1274,39 +1095,33 @@
},
success: function() {
- var status = this.getStatus();
- return !status || (status >= 200 && status < 300);
+ return !this.transport.status
+ || (this.transport.status >= 200 && this.transport.status < 300);
},
- getStatus: function() {
- try {
- return this.transport.status || 0;
- } catch (e) { return 0 }
- },
-
respondToReadyState: function(readyState) {
- var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+ var state = Ajax.Request.Events[readyState];
+ var transport = this.transport, json = this.evalJSON();
if (state == 'Complete') {
try {
this._complete = true;
- (this.options['on' + response.status]
+ (this.options['on' + this.transport.status]
|| this.options['on' + (this.success() ? 'Success' : 'Failure')]
- || Prototype.emptyFunction)(response, response.headerJSON);
+ || Prototype.emptyFunction)(transport, json);
} catch (e) {
this.dispatchException(e);
}
- var contentType = response.getHeader('Content-type');
- if (this.options.evalJS == 'force'
- || (this.options.evalJS && this.isSameOrigin() && contentType
- && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
- this.evalResponse();
+ var contentType = this.getHeader('Content-type');
+ if (contentType && contentType.strip().
+ match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
+ this.evalResponse();
}
try {
- (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
- Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ (this.options['on' + state] || Prototype.emptyFunction)(transport, json);
+ Ajax.Responders.dispatch('on' + state, this, transport, json);
} catch (e) {
this.dispatchException(e);
}
@@ -1317,18 +1132,16 @@
}
},
- isSameOrigin: function() {
- var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
- return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
- protocol: location.protocol,
- domain: document.domain,
- port: location.port ? ':' + location.port : ''
- }));
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name);
+ } catch (e) { return null }
},
- getHeader: function(name) {
+ evalJSON: function() {
try {
- return this.transport.getResponseHeader(name) || null;
+ var json = this.getHeader('X-JSON');
+ return json ? json.evalJSON() : null;
} catch (e) { return null }
},
@@ -1346,128 +1159,57 @@
}
});
-Ajax.Request.Events =
- ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+Ajax.Updater = Class.create();
-Ajax.Response = Class.create({
- initialize: function(request){
- this.request = request;
- var transport = this.transport = request.transport,
- readyState = this.readyState = transport.readyState;
-
- if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
- this.status = this.getStatus();
- this.statusText = this.getStatusText();
- this.responseText = String.interpret(transport.responseText);
- this.headerJSON = this._getHeaderJSON();
- }
-
- if(readyState == 4) {
- var xml = transport.responseXML;
- this.responseXML = Object.isUndefined(xml) ? null : xml;
- this.responseJSON = this._getResponseJSON();
- }
- },
-
- status: 0,
- statusText: '',
-
- getStatus: Ajax.Request.prototype.getStatus,
-
- getStatusText: function() {
- try {
- return this.transport.statusText || '';
- } catch (e) { return '' }
- },
-
- getHeader: Ajax.Request.prototype.getHeader,
-
- getAllHeaders: function() {
- try {
- return this.getAllResponseHeaders();
- } catch (e) { return null }
- },
-
- getResponseHeader: function(name) {
- return this.transport.getResponseHeader(name);
- },
-
- getAllResponseHeaders: function() {
- return this.transport.getAllResponseHeaders();
- },
-
- _getHeaderJSON: function() {
- var json = this.getHeader('X-JSON');
- if (!json) return null;
- json = decodeURIComponent(escape(json));
- try {
- return json.evalJSON(this.request.options.sanitizeJSON ||
- !this.request.isSameOrigin());
- } catch (e) {
- this.request.dispatchException(e);
- }
- },
-
- _getResponseJSON: function() {
- var options = this.request.options;
- if (!options.evalJSON || (options.evalJSON != 'force' &&
- !(this.getHeader('Content-type') || '').include('application/json')) ||
- this.responseText.blank())
- return null;
- try {
- return this.responseText.evalJSON(options.sanitizeJSON ||
- !this.request.isSameOrigin());
- } catch (e) {
- this.request.dispatchException(e);
- }
- }
-});
-
-Ajax.Updater = Class.create(Ajax.Request, {
- initialize: function($super, container, url, options) {
+Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
+ initialize: function(container, url, options) {
this.container = {
success: (container.success || container),
failure: (container.failure || (container.success ? null : container))
- };
+ }
- options = Object.clone(options);
- var onComplete = options.onComplete;
- options.onComplete = (function(response, json) {
- this.updateContent(response.responseText);
- if (Object.isFunction(onComplete)) onComplete(response, json);
+ this.transport = Ajax.getTransport();
+ this.setOptions(options);
+
+ var onComplete = this.options.onComplete || Prototype.emptyFunction;
+ this.options.onComplete = (function(transport, param) {
+ this.updateContent();
+ onComplete(transport, param);
}).bind(this);
- $super(url, options);
+ this.request(url);
},
- updateContent: function(responseText) {
- var receiver = this.container[this.success() ? 'success' : 'failure'],
- options = this.options;
+ updateContent: function() {
+ var receiver = this.container[this.success() ? 'success' : 'failure'];
+ var response = this.transport.responseText;
- if (!options.evalScripts) responseText = responseText.stripScripts();
+ if (!this.options.evalScripts) response = response.stripScripts();
if (receiver = $(receiver)) {
- if (options.insertion) {
- if (Object.isString(options.insertion)) {
- var insertion = { }; insertion[options.insertion] = responseText;
- receiver.insert(insertion);
- }
- else options.insertion(receiver, responseText);
- }
- else receiver.update(responseText);
+ if (this.options.insertion)
+ new this.options.insertion(receiver, response);
+ else
+ receiver.update(response);
}
+
+ if (this.success()) {
+ if (this.onComplete)
+ setTimeout(this.onComplete.bind(this), 10);
+ }
}
});
-Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
- initialize: function($super, container, url, options) {
- $super(options);
+Ajax.PeriodicalUpdater = Class.create();
+Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
+ initialize: function(container, url, options) {
+ this.setOptions(options);
this.onComplete = this.options.onComplete;
this.frequency = (this.options.frequency || 2);
this.decay = (this.options.decay || 1);
- this.updater = { };
+ this.updater = {};
this.container = container;
this.url = url;
@@ -1485,14 +1227,15 @@
(this.onComplete || Prototype.emptyFunction).apply(this, arguments);
},
- updateComplete: function(response) {
+ updateComplete: function(request) {
if (this.options.decay) {
- this.decay = (response.responseText == this.lastText ?
+ this.decay = (request.responseText == this.lastText ?
this.decay * this.options.decay : 1);
- this.lastText = response.responseText;
+ this.lastText = request.responseText;
}
- this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ this.timer = setTimeout(this.onTimerEvent.bind(this),
+ this.decay * this.frequency * 1000);
},
onTimerEvent: function() {
@@ -1505,7 +1248,7 @@
elements.push($(arguments[i]));
return elements;
}
- if (Object.isString(element))
+ if (typeof element == 'string')
element = document.getElementById(element);
return Element.extend(element);
}
@@ -1516,52 +1259,66 @@
var query = document.evaluate(expression, $(parentElement) || document,
null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0, length = query.snapshotLength; i < length; i++)
- results.push(Element.extend(query.snapshotItem(i)));
+ results.push(query.snapshotItem(i));
return results;
};
-}
+ document.getElementsByClassName = function(className, parentElement) {
+ var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
+ return document._getElementsByXPath(q, parentElement);
+ }
+
+} else document.getElementsByClassName = function(className, parentElement) {
+ var children = ($(parentElement) || document.body).getElementsByTagName('*');
+ var elements = [], child;
+ for (var i = 0, length = children.length; i < length; i++) {
+ child = children[i];
+ if (Element.hasClassName(child, className))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+};
+
/*--------------------------------------------------------------------------*/
-if (!window.Node) var Node = { };
+if (!window.Element) var Element = {};
-if (!Node.ELEMENT_NODE) {
- // DOM level 2 ECMAScript Language Binding
- Object.extend(Node, {
- ELEMENT_NODE: 1,
- ATTRIBUTE_NODE: 2,
- TEXT_NODE: 3,
- CDATA_SECTION_NODE: 4,
- ENTITY_REFERENCE_NODE: 5,
- ENTITY_NODE: 6,
- PROCESSING_INSTRUCTION_NODE: 7,
- COMMENT_NODE: 8,
- DOCUMENT_NODE: 9,
- DOCUMENT_TYPE_NODE: 10,
- DOCUMENT_FRAGMENT_NODE: 11,
- NOTATION_NODE: 12
- });
-}
+Element.extend = function(element) {
+ var F = Prototype.BrowserFeatures;
+ if (!element || !element.tagName || element.nodeType == 3 ||
+ element._extended || F.SpecificElementExtensions || element == window)
+ return element;
-(function() {
- var element = this.Element;
- this.Element = function(tagName, attributes) {
- attributes = attributes || { };
- tagName = tagName.toLowerCase();
- var cache = Element.cache;
- if (Prototype.Browser.IE && attributes.name) {
- tagName = '<' + tagName + ' name="' + attributes.name + '">';
- delete attributes.name;
- return Element.writeAttribute(document.createElement(tagName), attributes);
- }
- if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
- return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
- };
- Object.extend(this.Element, element || { });
-}).call(window);
+ var methods = {}, tagName = element.tagName, cache = Element.extend.cache,
+ T = Element.Methods.ByTag;
-Element.cache = { };
+ // extend methods for all tags (Safari doesn't need this)
+ if (!F.ElementExtensions) {
+ Object.extend(methods, Element.Methods),
+ Object.extend(methods, Element.Methods.Simulated);
+ }
+ // extend methods for specific tags
+ if (T[tagName]) Object.extend(methods, T[tagName]);
+
+ for (var property in methods) {
+ var value = methods[property];
+ if (typeof value == 'function' && !(property in element))
+ element[property] = cache.findOrStore(value);
+ }
+
+ element._extended = Prototype.emptyFunction;
+ return element;
+};
+
+Element.extend.cache = {
+ findOrStore: function(value) {
+ return this[value] = this[value] || function() {
+ return value.apply(null, [this].concat($A(arguments)));
+ }
+ }
+};
+
Element.Methods = {
visible: function(element) {
return $(element).style.display != 'none';
@@ -1589,78 +1346,28 @@
return element;
},
- update: function(element, content) {
- element = $(element);
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) return element.update().insert(content);
- content = Object.toHTML(content);
- element.innerHTML = content.stripScripts();
- content.evalScripts.bind(content).defer();
+ update: function(element, html) {
+ html = typeof html == 'undefined' ? '' : html.toString();
+ $(element).innerHTML = html.stripScripts();
+ setTimeout(function() {html.evalScripts()}, 10);
return element;
},
- replace: function(element, content) {
+ replace: function(element, html) {
element = $(element);
- if (content && content.toElement) content = content.toElement();
- else if (!Object.isElement(content)) {
- content = Object.toHTML(content);
+ html = typeof html == 'undefined' ? '' : html.toString();
+ if (element.outerHTML) {
+ element.outerHTML = html.stripScripts();
+ } else {
var range = element.ownerDocument.createRange();
- range.selectNode(element);
- content.evalScripts.bind(content).defer();
- content = range.createContextualFragment(content.stripScripts());
+ range.selectNodeContents(element);
+ element.parentNode.replaceChild(
+ range.createContextualFragment(html.stripScripts()), element);
}
- element.parentNode.replaceChild(content, element);
+ setTimeout(function() {html.evalScripts()}, 10);
return element;
},
- insert: function(element, insertions) {
- element = $(element);
-
- if (Object.isString(insertions) || Object.isNumber(insertions) ||
- Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
- insertions = {bottom:insertions};
-
- var content, insert, tagName, childNodes;
-
- for (var position in insertions) {
- content = insertions[position];
- position = position.toLowerCase();
- insert = Element._insertionTranslations[position];
-
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) {
- insert(element, content);
- continue;
- }
-
- content = Object.toHTML(content);
-
- tagName = ((position == 'before' || position == 'after')
- ? element.parentNode : element).tagName.toUpperCase();
-
- childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
-
- if (position == 'top' || position == 'after') childNodes.reverse();
- childNodes.each(insert.curry(element));
-
- content.evalScripts.bind(content).defer();
- }
-
- return element;
- },
-
- wrap: function(element, wrapper, attributes) {
- element = $(element);
- if (Object.isElement(wrapper))
- $(wrapper).writeAttribute(attributes || { });
- else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
- else wrapper = new Element('div', wrapper);
- if (element.parentNode)
- element.parentNode.replaceChild(wrapper, element);
- wrapper.appendChild(element);
- return wrapper;
- },
-
inspect: function(element) {
element = $(element);
var result = '<' + element.tagName.toLowerCase();
@@ -1686,7 +1393,7 @@
},
descendants: function(element) {
- return $(element).select("*");
+ return $A($(element).getElementsByTagName('*')).each(Element.extend);
},
firstDescendant: function(element) {
@@ -1716,7 +1423,7 @@
},
match: function(element, selector) {
- if (Object.isString(selector))
+ if (typeof selector == 'string')
selector = new Selector(selector);
return selector.match($(element));
},
@@ -1725,86 +1432,56 @@
element = $(element);
if (arguments.length == 1) return $(element.parentNode);
var ancestors = element.ancestors();
- return Object.isNumber(expression) ? ancestors[expression] :
- Selector.findElement(ancestors, expression, index);
+ return expression ? Selector.findElement(ancestors, expression, index) :
+ ancestors[index || 0];
},
down: function(element, expression, index) {
element = $(element);
if (arguments.length == 1) return element.firstDescendant();
- return Object.isNumber(expression) ? element.descendants()[expression] :
- element.select(expression)[index || 0];
+ var descendants = element.descendants();
+ return expression ? Selector.findElement(descendants, expression, index) :
+ descendants[index || 0];
},
previous: function(element, expression, index) {
element = $(element);
if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
var previousSiblings = element.previousSiblings();
- return Object.isNumber(expression) ? previousSiblings[expression] :
- Selector.findElement(previousSiblings, expression, index);
+ return expression ? Selector.findElement(previousSiblings, expression, index) :
+ previousSiblings[index || 0];
},
next: function(element, expression, index) {
element = $(element);
if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
var nextSiblings = element.nextSiblings();
- return Object.isNumber(expression) ? nextSiblings[expression] :
- Selector.findElement(nextSiblings, expression, index);
+ return expression ? Selector.findElement(nextSiblings, expression, index) :
+ nextSiblings[index || 0];
},
- select: function() {
+ getElementsBySelector: function() {
var args = $A(arguments), element = $(args.shift());
return Selector.findChildElements(element, args);
},
- adjacent: function() {
- var args = $A(arguments), element = $(args.shift());
- return Selector.findChildElements(element.parentNode, args).without(element);
+ getElementsByClassName: function(element, className) {
+ return document.getElementsByClassName(className, element);
},
- identify: function(element) {
- element = $(element);
- var id = element.readAttribute('id'), self = arguments.callee;
- if (id) return id;
- do { id = 'anonymous_element_' + self.counter++ } while ($(id));
- element.writeAttribute('id', id);
- return id;
- },
-
readAttribute: function(element, name) {
element = $(element);
if (Prototype.Browser.IE) {
- var t = Element._attributeTranslations.read;
+ if (!element.attributes) return null;
+ var t = Element._attributeTranslations;
if (t.values[name]) return t.values[name](element, name);
- if (t.names[name]) name = t.names[name];
- if (name.include(':')) {
- return (!element.attributes || !element.attributes[name]) ? null :
- element.attributes[name].value;
- }
+ if (t.names[name]) name = t.names[name];
+ var attribute = element.attributes[name];
+ return attribute ? attribute.nodeValue : null;
}
return element.getAttribute(name);
},
- writeAttribute: function(element, name, value) {
- element = $(element);
- var attributes = { }, t = Element._attributeTranslations.write;
-
- if (typeof name == 'object') attributes = name;
- else attributes[name] = Object.isUndefined(value) ? true : value;
-
- for (var attr in attributes) {
- name = t.names[attr] || attr;
- value = attributes[attr];
- if (t.values[attr]) name = t.values[attr](element, value);
- if (value === false || value === null)
- element.removeAttribute(name);
- else if (value === true)
- element.setAttribute(name, name);
- else element.setAttribute(name, value);
- }
- return element;
- },
-
getHeight: function(element) {
return $(element).getDimensions().height;
},
@@ -1820,30 +1497,41 @@
hasClassName: function(element, className) {
if (!(element = $(element))) return;
var elementClassName = element.className;
- return (elementClassName.length > 0 && (elementClassName == className ||
- new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ if (elementClassName.length == 0) return false;
+ if (elementClassName == className ||
+ elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
+ return true;
+ return false;
},
addClassName: function(element, className) {
if (!(element = $(element))) return;
- if (!element.hasClassName(className))
- element.className += (element.className ? ' ' : '') + className;
+ Element.classNames(element).add(className);
return element;
},
removeClassName: function(element, className) {
if (!(element = $(element))) return;
- element.className = element.className.replace(
- new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ Element.classNames(element).remove(className);
return element;
},
toggleClassName: function(element, className) {
if (!(element = $(element))) return;
- return element[element.hasClassName(className) ?
- 'removeClassName' : 'addClassName'](className);
+ Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
+ return element;
},
+ observe: function() {
+ Event.observe.apply(Event, arguments);
+ return $A(arguments).first();
+ },
+
+ stopObserving: function() {
+ Event.stopObserving.apply(Event, arguments);
+ return $A(arguments).first();
+ },
+
// removes whitespace-only text node children
cleanWhitespace: function(element) {
element = $(element);
@@ -1863,30 +1551,14 @@
descendantOf: function(element, ancestor) {
element = $(element), ancestor = $(ancestor);
- var originalAncestor = ancestor;
-
- if (element.compareDocumentPosition)
- return (element.compareDocumentPosition(ancestor) & 8) === 8;
-
- if (element.sourceIndex && !Prototype.Browser.Opera) {
- var e = element.sourceIndex, a = ancestor.sourceIndex,
- nextAncestor = ancestor.nextSibling;
- if (!nextAncestor) {
- do { ancestor = ancestor.parentNode; }
- while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
- }
- if (nextAncestor && nextAncestor.sourceIndex)
- return (e > a && e < nextAncestor.sourceIndex);
- }
-
while (element = element.parentNode)
- if (element == originalAncestor) return true;
+ if (element == ancestor) return true;
return false;
},
scrollTo: function(element) {
element = $(element);
- var pos = element.cumulativeOffset();
+ var pos = Position.cumulativeOffset(element);
window.scrollTo(pos[0], pos[1]);
return element;
},
@@ -1907,20 +1579,16 @@
return $(element).getStyle('opacity');
},
- setStyle: function(element, styles) {
+ setStyle: function(element, styles, camelized) {
element = $(element);
- var elementStyle = element.style, match;
- if (Object.isString(styles)) {
- element.style.cssText += ';' + styles;
- return styles.include('opacity') ?
- element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
- }
+ var elementStyle = element.style;
+
for (var property in styles)
- if (property == 'opacity') element.setOpacity(styles[property]);
+ if (property == 'opacity') element.setOpacity(styles[property])
else
elementStyle[(property == 'float' || property == 'cssFloat') ?
- (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
- property] = styles[property];
+ (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
+ (camelized ? property : property.camelize())] = styles[property];
return element;
},
@@ -1987,8 +1655,8 @@
makeClipping: function(element) {
element = $(element);
if (element._overflow) return element;
- element._overflow = Element.getStyle(element, 'overflow') || 'auto';
- if (element._overflow !== 'hidden')
+ element._overflow = element.style.overflow || 'auto';
+ if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
element.style.overflow = 'hidden';
return element;
},
@@ -1999,253 +1667,28 @@
element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
element._overflow = null;
return element;
- },
-
- cumulativeOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- element = element.offsetParent;
- } while (element);
- return Element._returnOffset(valueL, valueT);
- },
-
- positionedOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- element = element.offsetParent;
- if (element) {
- if (element.tagName == 'BODY') break;
- var p = Element.getStyle(element, 'position');
- if (p !== 'static') break;
- }
- } while (element);
- return Element._returnOffset(valueL, valueT);
- },
-
- absolutize: function(element) {
- element = $(element);
- if (element.getStyle('position') == 'absolute') return;
- // Position.prepare(); // To be done manually by Scripty when it needs it.
-
- var offsets = element.positionedOffset();
- var top = offsets[1];
- var left = offsets[0];
- var width = element.clientWidth;
- var height = element.clientHeight;
-
- element._originalLeft = left - parseFloat(element.style.left || 0);
- element._originalTop = top - parseFloat(element.style.top || 0);
- element._originalWidth = element.style.width;
- element._originalHeight = element.style.height;
-
- element.style.position = 'absolute';
- element.style.top = top + 'px';
- element.style.left = left + 'px';
- element.style.width = width + 'px';
- element.style.height = height + 'px';
- return element;
- },
-
- relativize: function(element) {
- element = $(element);
- if (element.getStyle('position') == 'relative') return;
- // Position.prepare(); // To be done manually by Scripty when it needs it.
-
- element.style.position = 'relative';
- var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
- var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
- element.style.top = top + 'px';
- element.style.left = left + 'px';
- element.style.height = element._originalHeight;
- element.style.width = element._originalWidth;
- return element;
- },
-
- cumulativeScrollOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.scrollTop || 0;
- valueL += element.scrollLeft || 0;
- element = element.parentNode;
- } while (element);
- return Element._returnOffset(valueL, valueT);
- },
-
- getOffsetParent: function(element) {
- if (element.offsetParent) return $(element.offsetParent);
- if (element == document.body) return $(element);
-
- while ((element = element.parentNode) && element != document.body)
- if (Element.getStyle(element, 'position') != 'static')
- return $(element);
-
- return $(document.body);
- },
-
- viewportOffset: function(forElement) {
- var valueT = 0, valueL = 0;
-
- var element = forElement;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
-
- // Safari fix
- if (element.offsetParent == document.body &&
- Element.getStyle(element, 'position') == 'absolute') break;
-
- } while (element = element.offsetParent);
-
- element = forElement;
- do {
- if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
- valueT -= element.scrollTop || 0;
- valueL -= element.scrollLeft || 0;
- }
- } while (element = element.parentNode);
-
- return Element._returnOffset(valueL, valueT);
- },
-
- clonePosition: function(element, source) {
- var options = Object.extend({
- setLeft: true,
- setTop: true,
- setWidth: true,
- setHeight: true,
- offsetTop: 0,
- offsetLeft: 0
- }, arguments[2] || { });
-
- // find page position of source
- source = $(source);
- var p = source.viewportOffset();
-
- // find coordinate system to use
- element = $(element);
- var delta = [0, 0];
- var parent = null;
- // delta [0,0] will do fine with position: fixed elements,
- // position:absolute needs offsetParent deltas
- if (Element.getStyle(element, 'position') == 'absolute') {
- parent = element.getOffsetParent();
- delta = parent.viewportOffset();
- }
-
- // correct by body offsets (fixes Safari)
- if (parent == document.body) {
- delta[0] -= document.body.offsetLeft;
- delta[1] -= document.body.offsetTop;
- }
-
- // set position
- if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
- if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
- if (options.setWidth) element.style.width = source.offsetWidth + 'px';
- if (options.setHeight) element.style.height = source.offsetHeight + 'px';
- return element;
}
};
-Element.Methods.identify.counter = 1;
-
Object.extend(Element.Methods, {
- getElementsBySelector: Element.Methods.select,
+ childOf: Element.Methods.descendantOf,
childElements: Element.Methods.immediateDescendants
});
-Element._attributeTranslations = {
- write: {
- names: {
- className: 'class',
- htmlFor: 'for'
- },
- values: { }
- }
-};
-
if (Prototype.Browser.Opera) {
- Element.Methods.getStyle = Element.Methods.getStyle.wrap(
- function(proceed, element, style) {
- switch (style) {
- case 'left': case 'top': case 'right': case 'bottom':
- if (proceed(element, 'position') === 'static') return null;
- case 'height': case 'width':
- // returns '0px' for hidden elements; we want it to return null
- if (!Element.visible(element)) return null;
-
- // returns the border-box dimensions rather than the content-box
- // dimensions, so we subtract padding and borders from the value
- var dim = parseInt(proceed(element, style), 10);
-
- if (dim !== element['offset' + style.capitalize()])
- return dim + 'px';
-
- var properties;
- if (style === 'height') {
- properties = ['border-top-width', 'padding-top',
- 'padding-bottom', 'border-bottom-width'];
- }
- else {
- properties = ['border-left-width', 'padding-left',
- 'padding-right', 'border-right-width'];
- }
- return properties.inject(dim, function(memo, property) {
- var val = proceed(element, property);
- return val === null ? memo : memo - parseInt(val, 10);
- }) + 'px';
- default: return proceed(element, style);
- }
+ Element.Methods._getStyle = Element.Methods.getStyle;
+ Element.Methods.getStyle = function(element, style) {
+ switch(style) {
+ case 'left':
+ case 'top':
+ case 'right':
+ case 'bottom':
+ if (Element._getStyle(element, 'position') == 'static') return null;
+ default: return Element._getStyle(element, style);
}
- );
-
- Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
- function(proceed, element, attribute) {
- if (attribute === 'title') return element.title;
- return proceed(element, attribute);
- }
- );
+ };
}
-
else if (Prototype.Browser.IE) {
- // IE doesn't report offsets correctly for static elements, so we change them
- // to "relative" to get the values, then change them back.
- Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
- function(proceed, element) {
- element = $(element);
- var position = element.getStyle('position');
- if (position !== 'static') return proceed(element);
- element.setStyle({ position: 'relative' });
- var value = proceed(element);
- element.setStyle({ position: position });
- return value;
- }
- );
-
- $w('positionedOffset viewportOffset').each(function(method) {
- Element.Methods[method] = Element.Methods[method].wrap(
- function(proceed, element) {
- element = $(element);
- var position = element.getStyle('position');
- if (position !== 'static') return proceed(element);
- // Trigger hasLayout on the offset parent so that IE6 reports
- // accurate offsetTop and offsetLeft values for position: fixed.
- var offsetParent = element.getOffsetParent();
- if (offsetParent && offsetParent.getStyle('position') === 'fixed')
- offsetParent.setStyle({ zoom: 1 });
- element.setStyle({ position: 'relative' });
- var value = proceed(element);
- element.setStyle({ position: position });
- return value;
- }
- );
- });
-
Element.Methods.getStyle = function(element, style) {
element = $(element);
style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
@@ -2260,121 +1703,56 @@
if (value == 'auto') {
if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
- return element['offset' + style.capitalize()] + 'px';
+ return element['offset'+style.capitalize()] + 'px';
return null;
}
return value;
};
Element.Methods.setOpacity = function(element, value) {
- function stripAlpha(filter){
- return filter.replace(/alpha\([^\)]*\)/gi,'');
- }
element = $(element);
- var currentStyle = element.currentStyle;
- if ((currentStyle && !currentStyle.hasLayout) ||
- (!currentStyle && element.style.zoom == 'normal'))
- element.style.zoom = 1;
-
var filter = element.getStyle('filter'), style = element.style;
if (value == 1 || value === '') {
- (filter = stripAlpha(filter)) ?
- style.filter = filter : style.removeAttribute('filter');
+ style.filter = filter.replace(/alpha\([^\)]*\)/gi,'');
return element;
} else if (value < 0.00001) value = 0;
- style.filter = stripAlpha(filter) +
+ style.filter = filter.replace(/alpha\([^\)]*\)/gi, '') +
'alpha(opacity=' + (value * 100) + ')';
return element;
};
- Element._attributeTranslations = {
- read: {
- names: {
- 'class': 'className',
- 'for': 'htmlFor'
- },
- values: {
- _getAttr: function(element, attribute) {
- return element.getAttribute(attribute, 2);
- },
- _getAttrNode: function(element, attribute) {
- var node = element.getAttributeNode(attribute);
- return node ? node.value : "";
- },
- _getEv: function(element, attribute) {
- attribute = element.getAttribute(attribute);
- return attribute ? attribute.toString().slice(23, -2) : null;
- },
- _flag: function(element, attribute) {
- return $(element).hasAttribute(attribute) ? attribute : null;
- },
- style: function(element) {
- return element.style.cssText.toLowerCase();
- },
- title: function(element) {
- return element.title;
- }
+ // IE is missing .innerHTML support for TABLE-related elements
+ Element.Methods.update = function(element, html) {
+ element = $(element);
+ html = typeof html == 'undefined' ? '' : html.toString();
+ var tagName = element.tagName.toUpperCase();
+ if (['THEAD','TBODY','TR','TD'].include(tagName)) {
+ var div = document.createElement('div');
+ switch (tagName) {
+ case 'THEAD':
+ case 'TBODY':
+ div.innerHTML = '<table><tbody>' + html.stripScripts() + '</tbody></table>';
+ depth = 2;
+ break;
+ case 'TR':
+ div.innerHTML = '<table><tbody><tr>' + html.stripScripts() + '</tr></tbody></table>';
+ depth = 3;
+ break;
+ case 'TD':
+ div.innerHTML = '<table><tbody><tr><td>' + html.stripScripts() + '</td></tr></tbody></table>';
+ depth = 4;
}
+ $A(element.childNodes).each(function(node) { element.removeChild(node) });
+ depth.times(function() { div = div.firstChild });
+ $A(div.childNodes).each(function(node) { element.appendChild(node) });
+ } else {
+ element.innerHTML = html.stripScripts();
}
- };
-
- Element._attributeTranslations.write = {
- names: Object.extend({
- cellpadding: 'cellPadding',
- cellspacing: 'cellSpacing'
- }, Element._attributeTranslations.read.names),
- values: {
- checked: function(element, value) {
- element.checked = !!value;
- },
-
- style: function(element, value) {
- element.style.cssText = value ? value : '';
- }
- }
- };
-
- Element._attributeTranslations.has = {};
-
- $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
- 'encType maxLength readOnly longDesc').each(function(attr) {
- Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
- Element._attributeTranslations.has[attr.toLowerCase()] = attr;
- });
-
- (function(v) {
- Object.extend(v, {
- href: v._getAttr,
- src: v._getAttr,
- type: v._getAttr,
- action: v._getAttrNode,
- disabled: v._flag,
- checked: v._flag,
- readonly: v._flag,
- multiple: v._flag,
- onload: v._getEv,
- onunload: v._getEv,
- onclick: v._getEv,
- ondblclick: v._getEv,
- onmousedown: v._getEv,
- onmouseup: v._getEv,
- onmouseover: v._getEv,
- onmousemove: v._getEv,
- onmouseout: v._getEv,
- onfocus: v._getEv,
- onblur: v._getEv,
- onkeypress: v._getEv,
- onkeydown: v._getEv,
- onkeyup: v._getEv,
- onsubmit: v._getEv,
- onreset: v._getEv,
- onselect: v._getEv,
- onchange: v._getEv
- });
- })(Element._attributeTranslations.read.values);
+ setTimeout(function() { html.evalScripts() }, 10);
+ return element;
+ }
}
-
-else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+else if (Prototype.Browser.Gecko) {
Element.Methods.setOpacity = function(element, value) {
element = $(element);
element.style.opacity = (value == 1) ? 0.999999 :
@@ -2383,198 +1761,68 @@
};
}
-else if (Prototype.Browser.WebKit) {
- Element.Methods.setOpacity = function(element, value) {
- element = $(element);
- element.style.opacity = (value == 1 || value === '') ? '' :
- (value < 0.00001) ? 0 : value;
-
- if (value == 1)
- if(element.tagName == 'IMG' && element.width) {
- element.width++; element.width--;
- } else try {
- var n = document.createTextNode(' ');
- element.appendChild(n);
- element.removeChild(n);
- } catch (e) { }
-
- return element;
- };
-
- // Safari returns margins on body which is incorrect if the child is absolutely
- // positioned. For performance reasons, redefine Element#cumulativeOffset for
- // KHTML/WebKit only.
- Element.Methods.cumulativeOffset = function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- if (element.offsetParent == document.body)
- if (Element.getStyle(element, 'position') == 'absolute') break;
-
- element = element.offsetParent;
- } while (element);
-
- return Element._returnOffset(valueL, valueT);
- };
-}
-
-if (Prototype.Browser.IE || Prototype.Browser.Opera) {
- // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
- Element.Methods.update = function(element, content) {
- element = $(element);
-
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) return element.update().insert(content);
-
- content = Object.toHTML(content);
- var tagName = element.tagName.toUpperCase();
-
- if (tagName in Element._insertionTranslations.tags) {
- $A(element.childNodes).each(function(node) { element.removeChild(node) });
- Element._getContentFromAnonymousElement(tagName, content.stripScripts())
- .each(function(node) { element.appendChild(node) });
- }
- else element.innerHTML = content.stripScripts();
-
- content.evalScripts.bind(content).defer();
- return element;
- };
-}
-
-if ('outerHTML' in document.createElement('div')) {
- Element.Methods.replace = function(element, content) {
- element = $(element);
-
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) {
- element.parentNode.replaceChild(content, element);
- return element;
- }
-
- content = Object.toHTML(content);
- var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
-
- if (Element._insertionTranslations.tags[tagName]) {
- var nextSibling = element.next();
- var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
- parent.removeChild(element);
- if (nextSibling)
- fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
- else
- fragments.each(function(node) { parent.appendChild(node) });
- }
- else element.outerHTML = content.stripScripts();
-
- content.evalScripts.bind(content).defer();
- return element;
- };
-}
-
-Element._returnOffset = function(l, t) {
- var result = [l, t];
- result.left = l;
- result.top = t;
- return result;
-};
-
-Element._getContentFromAnonymousElement = function(tagName, html) {
- var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
- if (t) {
- div.innerHTML = t[0] + html + t[1];
- t[2].times(function() { div = div.firstChild });
- } else div.innerHTML = html;
- return $A(div.childNodes);
-};
-
-Element._insertionTranslations = {
- before: function(element, node) {
- element.parentNode.insertBefore(node, element);
+Element._attributeTranslations = {
+ names: {
+ colspan: "colSpan",
+ rowspan: "rowSpan",
+ valign: "vAlign",
+ datetime: "dateTime",
+ accesskey: "accessKey",
+ tabindex: "tabIndex",
+ enctype: "encType",
+ maxlength: "maxLength",
+ readonly: "readOnly",
+ longdesc: "longDesc"
},
- top: function(element, node) {
- element.insertBefore(node, element.firstChild);
- },
- bottom: function(element, node) {
- element.appendChild(node);
- },
- after: function(element, node) {
- element.parentNode.insertBefore(node, element.nextSibling);
- },
- tags: {
- TABLE: ['<table>', '</table>', 1],
- TBODY: ['<table><tbody>', '</tbody></table>', 2],
- TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
- TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
- SELECT: ['<select>', '</select>', 1]
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _flag: function(element, attribute) {
+ return $(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ var node = element.getAttributeNode('title');
+ return node.specified ? node.nodeValue : null;
+ }
}
};
(function() {
- Object.extend(this.tags, {
- THEAD: this.tags.TBODY,
- TFOOT: this.tags.TBODY,
- TH: this.tags.TD
+ Object.extend(this, {
+ href: this._getAttr,
+ src: this._getAttr,
+ type: this._getAttr,
+ disabled: this._flag,
+ checked: this._flag,
+ readonly: this._flag,
+ multiple: this._flag
});
-}).call(Element._insertionTranslations);
+}).call(Element._attributeTranslations.values);
Element.Methods.Simulated = {
hasAttribute: function(element, attribute) {
- attribute = Element._attributeTranslations.has[attribute] || attribute;
- var node = $(element).getAttributeNode(attribute);
+ var t = Element._attributeTranslations, node;
+ attribute = t.names[attribute] || attribute;
+ node = $(element).getAttributeNode(attribute);
return node && node.specified;
}
};
-Element.Methods.ByTag = { };
+Element.Methods.ByTag = {};
Object.extend(Element, Element.Methods);
if (!Prototype.BrowserFeatures.ElementExtensions &&
- document.createElement('div').__proto__) {
- window.HTMLElement = { };
+ document.createElement('div').__proto__) {
+ window.HTMLElement = {};
window.HTMLElement.prototype = document.createElement('div').__proto__;
Prototype.BrowserFeatures.ElementExtensions = true;
}
-Element.extend = (function() {
- if (Prototype.BrowserFeatures.SpecificElementExtensions)
- return Prototype.K;
-
- var Methods = { }, ByTag = Element.Methods.ByTag;
-
- var extend = Object.extend(function(element) {
- if (!element || element._extendedByPrototype ||
- element.nodeType != 1 || element == window) return element;
-
- var methods = Object.clone(Methods),
- tagName = element.tagName, property, value;
-
- // extend methods for specific tags
- if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
-
- for (property in methods) {
- value = methods[property];
- if (Object.isFunction(value) && !(property in element))
- element[property] = value.methodize();
- }
-
- element._extendedByPrototype = Prototype.emptyFunction;
- return element;
-
- }, {
- refresh: function() {
- // extend methods for all tags (Safari doesn't need this)
- if (!Prototype.BrowserFeatures.ElementExtensions) {
- Object.extend(Methods, Element.Methods);
- Object.extend(Methods, Element.Methods.Simulated);
- }
- }
- });
-
- extend.refresh();
- return extend;
-})();
-
Element.hasAttribute = function(element, attribute) {
if (element.hasAttribute) return element.hasAttribute(attribute);
return Element.Methods.Simulated.hasAttribute(element, attribute);
@@ -2599,26 +1847,26 @@
methods = arguments[1];
}
- if (!tagName) Object.extend(Element.Methods, methods || { });
+ if (!tagName) Object.extend(Element.Methods, methods || {});
else {
- if (Object.isArray(tagName)) tagName.each(extend);
+ if (tagName.constructor == Array) tagName.each(extend);
else extend(tagName);
}
function extend(tagName) {
tagName = tagName.toUpperCase();
if (!Element.Methods.ByTag[tagName])
- Element.Methods.ByTag[tagName] = { };
+ Element.Methods.ByTag[tagName] = {};
Object.extend(Element.Methods.ByTag[tagName], methods);
}
function copy(methods, destination, onlyIfAbsent) {
onlyIfAbsent = onlyIfAbsent || false;
+ var cache = Element.extend.cache;
for (var property in methods) {
var value = methods[property];
- if (!Object.isFunction(value)) continue;
if (!onlyIfAbsent || !(property in destination))
- destination[property] = value.methodize();
+ destination[property] = cache.findOrStore(value);
}
}
@@ -2642,7 +1890,7 @@
klass = 'HTML' + tagName.capitalize() + 'Element';
if (window[klass]) return window[klass];
- window[klass] = { };
+ window[klass] = {};
window[klass].prototype = document.createElement(tagName).__proto__;
return window[klass];
}
@@ -2655,84 +1903,169 @@
if (F.SpecificElementExtensions) {
for (var tag in Element.Methods.ByTag) {
var klass = findDOMClass(tag);
- if (Object.isUndefined(klass)) continue;
+ if (typeof klass == "undefined") continue;
copy(T[tag], klass.prototype);
}
}
Object.extend(Element, Element.Methods);
delete Element.ByTag;
-
- if (Element.extend.refresh) Element.extend.refresh();
- Element.cache = { };
};
-document.viewport = {
- getDimensions: function() {
- var dimensions = { };
- var B = Prototype.Browser;
- $w('width height').each(function(d) {
- var D = d.capitalize();
- dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] :
- (B.Opera) ? document.body['client' + D] : document.documentElement['client' + D];
- });
- return dimensions;
+var Toggle = { display: Element.toggle };
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.Insertion = function(adjacency) {
+ this.adjacency = adjacency;
+}
+
+Abstract.Insertion.prototype = {
+ initialize: function(element, content) {
+ this.element = $(element);
+ this.content = content.stripScripts();
+
+ if (this.adjacency && this.element.insertAdjacentHTML) {
+ try {
+ this.element.insertAdjacentHTML(this.adjacency, this.content);
+ } catch (e) {
+ var tagName = this.element.tagName.toUpperCase();
+ if (['TBODY', 'TR'].include(tagName)) {
+ this.insertContent(this.contentFromAnonymousTable());
+ } else {
+ throw e;
+ }
+ }
+ } else {
+ this.range = this.element.ownerDocument.createRange();
+ if (this.initializeRange) this.initializeRange();
+ this.insertContent([this.range.createContextualFragment(this.content)]);
+ }
+
+ setTimeout(function() {content.evalScripts()}, 10);
},
- getWidth: function() {
- return this.getDimensions().width;
+ contentFromAnonymousTable: function() {
+ var div = document.createElement('div');
+ div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
+ return $A(div.childNodes[0].childNodes[0].childNodes);
+ }
+}
+
+var Insertion = new Object();
+
+Insertion.Before = Class.create();
+Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
+ initializeRange: function() {
+ this.range.setStartBefore(this.element);
},
- getHeight: function() {
- return this.getDimensions().height;
+ insertContent: function(fragments) {
+ fragments.each((function(fragment) {
+ this.element.parentNode.insertBefore(fragment, this.element);
+ }).bind(this));
+ }
+});
+
+Insertion.Top = Class.create();
+Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
+ initializeRange: function() {
+ this.range.selectNodeContents(this.element);
+ this.range.collapse(true);
},
- getScrollOffsets: function() {
- return Element._returnOffset(
- window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
- window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ insertContent: function(fragments) {
+ fragments.reverse(false).each((function(fragment) {
+ this.element.insertBefore(fragment, this.element.firstChild);
+ }).bind(this));
}
-};
-/* Portions of the Selector class are derived from Jack Slocum�۪s DomQuery,
- * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
- * license. Please see http://www.yui-ext.com/ for more information. */
+});
-var Selector = Class.create({
- initialize: function(expression) {
- this.expression = expression.strip();
- this.compileMatcher();
+Insertion.Bottom = Class.create();
+Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
+ initializeRange: function() {
+ this.range.selectNodeContents(this.element);
+ this.range.collapse(this.element);
},
- shouldUseXPath: function() {
- if (!Prototype.BrowserFeatures.XPath) return false;
+ insertContent: function(fragments) {
+ fragments.each((function(fragment) {
+ this.element.appendChild(fragment);
+ }).bind(this));
+ }
+});
- var e = this.expression;
+Insertion.After = Class.create();
+Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
+ initializeRange: function() {
+ this.range.setStartAfter(this.element);
+ },
- // Safari 3 chokes on :*-of-type and :empty
- if (Prototype.Browser.WebKit &&
- (e.include("-of-type") || e.include(":empty")))
- return false;
+ insertContent: function(fragments) {
+ fragments.each((function(fragment) {
+ this.element.parentNode.insertBefore(fragment,
+ this.element.nextSibling);
+ }).bind(this));
+ }
+});
- // XPath can't do namespaced attributes, nor can it read
- // the "checked" property from DOM nodes
- if ((/(\[[\w-]*?:|:checked)/).test(this.expression))
- return false;
+/*--------------------------------------------------------------------------*/
- return true;
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = $(element);
},
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license. Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create();
+
+Selector.prototype = {
+ initialize: function(expression) {
+ this.expression = expression.strip();
+ this.compileMatcher();
+ },
+
compileMatcher: function() {
- if (this.shouldUseXPath())
+ // Selectors with namespaced attributes can't use the XPath version
+ if (Prototype.BrowserFeatures.XPath && !(/\[[\w-]*?:/).test(this.expression))
return this.compileXPathMatcher();
var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
c = Selector.criteria, le, p, m;
if (Selector._cache[e]) {
- this.matcher = Selector._cache[e];
- return;
+ this.matcher = Selector._cache[e]; return;
}
-
this.matcher = ["this.matcher = function(root) {",
"var r = root, h = Selector.handlers, c = false, n;"];
@@ -2741,7 +2074,7 @@
for (var i in ps) {
p = ps[i];
if (m = e.match(p)) {
- this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+ this.matcher.push(typeof c[i] == 'function' ? c[i](m) :
new Template(c[i]).evaluate(m));
e = e.replace(m[0], '');
break;
@@ -2756,7 +2089,7 @@
compileXPathMatcher: function() {
var e = this.expression, ps = Selector.patterns,
- x = Selector.xpath, le, m;
+ x = Selector.xpath, le, m;
if (Selector._cache[e]) {
this.xpath = Selector._cache[e]; return;
@@ -2767,7 +2100,7 @@
le = e;
for (var i in ps) {
if (m = e.match(ps[i])) {
- this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+ this.matcher.push(typeof x[i] == 'function' ? x[i](m) :
new Template(x[i]).evaluate(m));
e = e.replace(m[0], '');
break;
@@ -2786,39 +2119,7 @@
},
match: function(element) {
- this.tokens = [];
-
- var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
- var le, p, m;
-
- while (e && le !== e && (/\S/).test(e)) {
- le = e;
- for (var i in ps) {
- p = ps[i];
- if (m = e.match(p)) {
- // use the Selector.assertions methods unless the selector
- // is too complex.
- if (as[i]) {
- this.tokens.push([i, Object.clone(m)]);
- e = e.replace(m[0], '');
- } else {
- // reluctantly do a document-wide search
- // and look for a match in the array
- return this.findElements(document).include(element);
- }
- }
- }
- }
-
- var match = true, name, matches;
- for (var i = 0, token; token = this.tokens[i]; i++) {
- name = token[0], matches = token[1];
- if (!Selector.assertions[name](element, matches)) {
- match = false; break;
- }
- }
-
- return match;
+ return this.findElements(document).include(element);
},
toString: function() {
@@ -2828,10 +2129,10 @@
inspect: function() {
return "#<Selector:" + this.expression.inspect() + ">";
}
-});
+};
Object.extend(Selector, {
- _cache: { },
+ _cache: {},
xpath: {
descendant: "//*",
@@ -2845,19 +2146,15 @@
},
className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
id: "[@id='#{1}']",
- attrPresence: function(m) {
- m[1] = m[1].toLowerCase();
- return new Template("[@#{1}]").evaluate(m);
- },
+ attrPresence: "[@#{1}]",
attr: function(m) {
- m[1] = m[1].toLowerCase();
m[3] = m[5] || m[6];
return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
},
pseudo: function(m) {
var h = Selector.xpath.pseudos[m[1]];
if (!h) return '';
- if (Object.isFunction(h)) return h(m);
+ if (typeof h === 'function') return h(m);
return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
},
operators: {
@@ -2879,14 +2176,14 @@
'enabled': "[not(@disabled)]",
'not': function(m) {
var e = m[6], p = Selector.patterns,
- x = Selector.xpath, le, v;
+ x = Selector.xpath, le, m, v;
var exclusion = [];
while (e && le != e && (/\S/).test(e)) {
le = e;
for (var i in p) {
if (m = e.match(p[i])) {
- v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+ v = typeof x[i] == 'function' ? x[i](m) : new Template(x[i]).evaluate(m);
exclusion.push("(" + v.substring(1, v.length - 1) + ")");
e = e.replace(m[0], '');
break;
@@ -2936,15 +2233,15 @@
},
criteria: {
- tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
- className: 'n = h.className(n, r, "#{1}", c); c = false;',
- id: 'n = h.id(n, r, "#{1}", c); c = false;',
- attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
attr: function(m) {
m[3] = (m[5] || m[6]);
- return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
},
- pseudo: function(m) {
+ pseudo: function(m) {
if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
},
@@ -2966,36 +2263,11 @@
tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
id: /^#([\w\-\*]+)(\b|$)/,
className: /^\.([\w\-\*]+)(\b|$)/,
- pseudo:
-/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
+ pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|\s|(?=:))/,
attrPresence: /^\[([\w]+)\]/,
- attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
+ attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\]]*?)\4|([^'"][^\]]*?)))?\]/
},
- // for Selector.match and Element#match
- assertions: {
- tagName: function(element, matches) {
- return matches[1].toUpperCase() == element.tagName.toUpperCase();
- },
-
- className: function(element, matches) {
- return Element.hasClassName(element, matches[1]);
- },
-
- id: function(element, matches) {
- return element.id === matches[1];
- },
-
- attrPresence: function(element, matches) {
- return Element.hasAttribute(element, matches[1]);
- },
-
- attr: function(element, matches) {
- var nodeValue = Element.readAttribute(element, matches[1]);
- return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
- }
- },
-
handlers: {
// UTILITY FUNCTIONS
// joins two collections
@@ -3007,15 +2279,14 @@
// marks an array of nodes for counting
mark: function(nodes) {
- var _true = Prototype.emptyFunction;
for (var i = 0, node; node = nodes[i]; i++)
- node._countedByPrototype = _true;
+ node._counted = true;
return nodes;
},
unmark: function(nodes) {
for (var i = 0, node; node = nodes[i]; i++)
- node._countedByPrototype = undefined;
+ node._counted = undefined;
return nodes;
},
@@ -3023,15 +2294,15 @@
// "ofType" flag indicates whether we're indexing for nth-of-type
// rather than nth-child
index: function(parentNode, reverse, ofType) {
- parentNode._countedByPrototype = Prototype.emptyFunction;
+ parentNode._counted = true;
if (reverse) {
for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
- var node = nodes[i];
- if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ node = nodes[i];
+ if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
}
} else {
for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
- if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
}
},
@@ -3040,8 +2311,8 @@
if (nodes.length == 0) return nodes;
var results = [], n;
for (var i = 0, l = nodes.length; i < l; i++)
- if (!(n = nodes[i])._countedByPrototype) {
- n._countedByPrototype = Prototype.emptyFunction;
+ if (!(n = nodes[i])._counted) {
+ n._counted = true;
results.push(Element.extend(n));
}
return Selector.handlers.unmark(results);
@@ -3058,7 +2329,7 @@
child: function(nodes) {
var h = Selector.handlers;
for (var i = 0, results = [], node; node = nodes[i]; i++) {
- for (var j = 0, child; child = node.childNodes[j]; j++)
+ for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
if (child.nodeType == 1 && child.tagName != '!') results.push(child);
}
return results;
@@ -3093,7 +2364,7 @@
// TOKEN FUNCTIONS
tagName: function(nodes, root, tagName, combinator) {
- var uTagName = tagName.toUpperCase();
+ tagName = tagName.toUpperCase();
var results = [], h = Selector.handlers;
if (nodes) {
if (combinator) {
@@ -3106,15 +2377,14 @@
if (tagName == "*") return nodes;
}
for (var i = 0, node; node = nodes[i]; i++)
- if (node.tagName.toUpperCase() === uTagName) results.push(node);
+ if (node.tagName.toUpperCase() == tagName) results.push(node);
return results;
} else return root.getElementsByTagName(tagName);
},
id: function(nodes, root, id, combinator) {
var targetNode = $(id), h = Selector.handlers;
- if (!targetNode) return [];
- if (!nodes && root == document) return [targetNode];
+ if (!nodes && root == document) return targetNode ? [targetNode] : [];
if (nodes) {
if (combinator) {
if (combinator == 'child') {
@@ -3153,18 +2423,15 @@
return results;
},
- attrPresence: function(nodes, root, attr, combinator) {
- if (!nodes) nodes = root.getElementsByTagName("*");
- if (nodes && combinator) nodes = this[combinator](nodes);
+ attrPresence: function(nodes, root, attr) {
var results = [];
for (var i = 0, node; node = nodes[i]; i++)
if (Element.hasAttribute(node, attr)) results.push(node);
return results;
},
- attr: function(nodes, root, attr, value, operator, combinator) {
+ attr: function(nodes, root, attr, value, operator) {
if (!nodes) nodes = root.getElementsByTagName("*");
- if (nodes && combinator) nodes = this[combinator](nodes);
var handler = Selector.operators[operator], results = [];
for (var i = 0, node; node = nodes[i]; i++) {
var nodeValue = Element.readAttribute(node, attr);
@@ -3243,7 +2510,7 @@
var h = Selector.handlers, results = [], indexed = [], m;
h.mark(nodes);
for (var i = 0, node; node = nodes[i]; i++) {
- if (!node.parentNode._countedByPrototype) {
+ if (!node.parentNode._counted) {
h.index(node.parentNode, reverse, ofType);
indexed.push(node.parentNode);
}
@@ -3281,7 +2548,7 @@
var exclusions = new Selector(selector).findElements(root);
h.mark(exclusions);
for (var i = 0, results = [], node; node = nodes[i]; i++)
- if (!node._countedByPrototype) results.push(node);
+ if (!node._counted) results.push(node);
h.unmark(exclusions);
return results;
},
@@ -3315,32 +2582,27 @@
'|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
},
- split: function(expression) {
- var expressions = [];
- expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
- expressions.push(m[1].strip());
- });
- return expressions;
- },
-
matchElements: function(elements, expression) {
- var matches = $$(expression), h = Selector.handlers;
+ var matches = new Selector(expression).findElements(), h = Selector.handlers;
h.mark(matches);
for (var i = 0, results = [], element; element = elements[i]; i++)
- if (element._countedByPrototype) results.push(element);
+ if (element._counted) results.push(element);
h.unmark(matches);
return results;
},
findElement: function(elements, expression, index) {
- if (Object.isNumber(expression)) {
+ if (typeof expression == 'number') {
index = expression; expression = false;
}
return Selector.matchElements(elements, expression || '*')[index || 0];
},
findChildElements: function(element, expressions) {
- expressions = Selector.split(expressions.join(','));
+ var exprs = expressions.join(','), expressions = [];
+ exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+ expressions.push(m[1].strip());
+ });
var results = [], h = Selector.handlers;
for (var i = 0, l = expressions.length, selector; i < l; i++) {
selector = new Selector(expressions[i].strip());
@@ -3350,25 +2612,6 @@
}
});
-if (Prototype.Browser.IE) {
- Object.extend(Selector.handlers, {
- // IE returns comment nodes on getElementsByTagName("*").
- // Filter them out.
- concat: function(a, b) {
- for (var i = 0, node; node = b[i]; i++)
- if (node.tagName !== "!") a.push(node);
- return a;
- },
-
- // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
- unmark: function(nodes) {
- for (var i = 0, node; node = nodes[i]; i++)
- node.removeAttribute('_countedByPrototype');
- return nodes;
- }
- });
-}
-
function $$() {
return Selector.findChildElements(document, $A(arguments));
}
@@ -3378,19 +2621,13 @@
return form;
},
- serializeElements: function(elements, options) {
- if (typeof options != 'object') options = { hash: !!options };
- else if (Object.isUndefined(options.hash)) options.hash = true;
- var key, value, submitted = false, submit = options.submit;
-
- var data = elements.inject({ }, function(result, element) {
+ serializeElements: function(elements, getHash) {
+ var data = elements.inject({}, function(result, element) {
if (!element.disabled && element.name) {
- key = element.name; value = $(element).getValue();
- if (value != null && (element.type != 'submit' || (!submitted &&
- submit !== false && (!submit || key == submit) && (submitted = true)))) {
- if (key in result) {
- // a key is already present; construct an array of values
- if (!Object.isArray(result[key])) result[key] = [result[key]];
+ var key = element.name, value = $(element).getValue();
+ if (value != null) {
+ if (key in result) {
+ if (result[key].constructor != Array) result[key] = [result[key]];
result[key].push(value);
}
else result[key] = value;
@@ -3399,13 +2636,13 @@
return result;
});
- return options.hash ? data : Object.toQueryString(data);
+ return getHash ? data : Hash.toQueryString(data);
}
};
Form.Methods = {
- serialize: function(form, options) {
- return Form.serializeElements(Form.getElements(form), options);
+ serialize: function(form, getHash) {
+ return Form.serializeElements(Form.getElements(form), getHash);
},
getElements: function(form) {
@@ -3447,16 +2684,10 @@
},
findFirstElement: function(form) {
- var elements = $(form).getElements().findAll(function(element) {
- return 'hidden' != element.type && !element.disabled;
+ return $(form).getElements().find(function(element) {
+ return element.type != 'hidden' && !element.disabled &&
+ ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
});
- var firstByIndex = elements.findAll(function(element) {
- return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
- }).sortBy(function(element) { return element.tabIndex }).first();
-
- return firstByIndex ? firstByIndex : elements.find(function(element) {
- return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
- });
},
focusFirstElement: function(form) {
@@ -3466,23 +2697,22 @@
},
request: function(form, options) {
- form = $(form), options = Object.clone(options || { });
+ form = $(form), options = Object.clone(options || {});
- var params = options.parameters, action = form.readAttribute('action') || '';
- if (action.blank()) action = window.location.href;
+ var params = options.parameters;
options.parameters = form.serialize(true);
if (params) {
- if (Object.isString(params)) params = params.toQueryParams();
+ if (typeof params == 'string') params = params.toQueryParams();
Object.extend(options.parameters, params);
}
if (form.hasAttribute('method') && !options.method)
options.method = form.method;
- return new Ajax.Request(action, options);
+ return new Ajax.Request(form.readAttribute('action'), options);
}
-};
+}
/*--------------------------------------------------------------------------*/
@@ -3496,7 +2726,7 @@
$(element).select();
return element;
}
-};
+}
Form.Element.Methods = {
serialize: function(element) {
@@ -3504,9 +2734,9 @@
if (!element.disabled && element.name) {
var value = element.getValue();
if (value != undefined) {
- var pair = { };
+ var pair = {};
pair[element.name] = value;
- return Object.toQueryString(pair);
+ return Hash.toQueryString(pair);
}
}
return '';
@@ -3518,13 +2748,6 @@
return Form.Element.Serializers[method](element);
},
- setValue: function(element, value) {
- element = $(element);
- var method = element.tagName.toLowerCase();
- Form.Element.Serializers[method](element, value);
- return element;
- },
-
clear: function(element) {
$(element).value = '';
return element;
@@ -3539,9 +2762,9 @@
try {
element.focus();
if (element.select && (element.tagName.toLowerCase() != 'input' ||
- !['button', 'reset', 'submit'].include(element.type)))
+ !['button', 'reset', 'submit'].include(element.type)))
element.select();
- } catch (e) { }
+ } catch (e) {}
return element;
},
@@ -3557,7 +2780,7 @@
element.disabled = false;
return element;
}
-};
+}
/*--------------------------------------------------------------------------*/
@@ -3567,44 +2790,27 @@
/*--------------------------------------------------------------------------*/
Form.Element.Serializers = {
- input: function(element, value) {
+ input: function(element) {
switch (element.type.toLowerCase()) {
case 'checkbox':
case 'radio':
- return Form.Element.Serializers.inputSelector(element, value);
+ return Form.Element.Serializers.inputSelector(element);
default:
- return Form.Element.Serializers.textarea(element, value);
+ return Form.Element.Serializers.textarea(element);
}
},
- inputSelector: function(element, value) {
- if (Object.isUndefined(value)) return element.checked ? element.value : null;
- else element.checked = !!value;
+ inputSelector: function(element) {
+ return element.checked ? element.value : null;
},
- textarea: function(element, value) {
- if (Object.isUndefined(value)) return element.value;
- else element.value = value;
+ textarea: function(element) {
+ return element.value;
},
- select: function(element, index) {
- if (Object.isUndefined(index))
- return this[element.type == 'select-one' ?
- 'selectOne' : 'selectMany'](element);
- else {
- var opt, value, single = !Object.isArray(index);
- for (var i = 0, length = element.length; i < length; i++) {
- opt = element.options[i];
- value = this.optionValue(opt);
- if (single) {
- if (value == index) {
- opt.selected = true;
- return;
- }
- }
- else opt.selected = index.include(value);
- }
- }
+ select: function(element) {
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
},
selectOne: function(element) {
@@ -3627,34 +2833,45 @@
// extend element because hasAttribute may not be native
return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
}
-};
+}
/*--------------------------------------------------------------------------*/
-Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
- initialize: function($super, element, frequency, callback) {
- $super(callback, frequency);
+Abstract.TimedObserver = function() {}
+Abstract.TimedObserver.prototype = {
+ initialize: function(element, frequency, callback) {
+ this.frequency = frequency;
this.element = $(element);
+ this.callback = callback;
+
this.lastValue = this.getValue();
+ this.registerCallback();
},
- execute: function() {
+ registerCallback: function() {
+ setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ onTimerEvent: function() {
var value = this.getValue();
- if (Object.isString(this.lastValue) && Object.isString(value) ?
- this.lastValue != value : String(this.lastValue) != String(value)) {
+ var changed = ('string' == typeof this.lastValue && 'string' == typeof value
+ ? this.lastValue != value : String(this.lastValue) != String(value));
+ if (changed) {
this.callback(this.element, value);
this.lastValue = value;
}
}
-});
+}
-Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+Form.Element.Observer = Class.create();
+Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
getValue: function() {
return Form.Element.getValue(this.element);
}
});
-Form.Observer = Class.create(Abstract.TimedObserver, {
+Form.Observer = Class.create();
+Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
getValue: function() {
return Form.serialize(this.element);
}
@@ -3662,7 +2879,8 @@
/*--------------------------------------------------------------------------*/
-Abstract.EventObserver = Class.create({
+Abstract.EventObserver = function() {}
+Abstract.EventObserver.prototype = {
initialize: function(element, callback) {
this.element = $(element);
this.callback = callback;
@@ -3683,7 +2901,7 @@
},
registerFormCallbacks: function() {
- Form.getElements(this.element).each(this.registerCallback, this);
+ Form.getElements(this.element).each(this.registerCallback.bind(this));
},
registerCallback: function(element) {
@@ -3699,20 +2917,24 @@
}
}
}
-});
+}
-Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+Form.Element.EventObserver = Class.create();
+Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
getValue: function() {
return Form.Element.getValue(this.element);
}
});
-Form.EventObserver = Class.create(Abstract.EventObserver, {
+Form.EventObserver = Class.create();
+Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
getValue: function() {
return Form.serialize(this.element);
}
});
-if (!window.Event) var Event = { };
+if (!window.Event) {
+ var Event = new Object();
+}
Object.extend(Event, {
KEY_BACKSPACE: 8,
@@ -3728,339 +2950,100 @@
KEY_END: 35,
KEY_PAGEUP: 33,
KEY_PAGEDOWN: 34,
- KEY_INSERT: 45,
- cache: { },
+ element: function(event) {
+ return $(event.target || event.srcElement);
+ },
- relatedTarget: function(event) {
- var element;
- switch(event.type) {
- case 'mouseover': element = event.fromElement; break;
- case 'mouseout': element = event.toElement; break;
- default: return null;
- }
- return Element.extend(element);
- }
-});
+ isLeftClick: function(event) {
+ return (((event.which) && (event.which == 1)) ||
+ ((event.button) && (event.button == 1)));
+ },
-Event.Methods = (function() {
- var isButton;
+ pointerX: function(event) {
+ return event.pageX || (event.clientX +
+ (document.documentElement.scrollLeft || document.body.scrollLeft));
+ },
- if (Prototype.Browser.IE) {
- var buttonMap = { 0: 1, 1: 4, 2: 2 };
- isButton = function(event, code) {
- return event.button == buttonMap[code];
- };
+ pointerY: function(event) {
+ return event.pageY || (event.clientY +
+ (document.documentElement.scrollTop || document.body.scrollTop));
+ },
- } else if (Prototype.Browser.WebKit) {
- isButton = function(event, code) {
- switch (code) {
- case 0: return event.which == 1 && !event.metaKey;
- case 1: return event.which == 1 && event.metaKey;
- default: return false;
- }
- };
-
- } else {
- isButton = function(event, code) {
- return event.which ? (event.which === code + 1) : (event.button === code);
- };
- }
-
- return {
- isLeftClick: function(event) { return isButton(event, 0) },
- isMiddleClick: function(event) { return isButton(event, 1) },
- isRightClick: function(event) { return isButton(event, 2) },
-
- element: function(event) {
- var node = Event.extend(event).target;
- return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
- },
-
- findElement: function(event, expression) {
- var element = Event.element(event);
- if (!expression) return element;
- var elements = [element].concat(element.ancestors());
- return Selector.findElement(elements, expression, 0);
- },
-
- pointer: function(event) {
- return {
- x: event.pageX || (event.clientX +
- (document.documentElement.scrollLeft || document.body.scrollLeft)),
- y: event.pageY || (event.clientY +
- (document.documentElement.scrollTop || document.body.scrollTop))
- };
- },
-
- pointerX: function(event) { return Event.pointer(event).x },
- pointerY: function(event) { return Event.pointer(event).y },
-
- stop: function(event) {
- Event.extend(event);
+ stop: function(event) {
+ if (event.preventDefault) {
event.preventDefault();
event.stopPropagation();
- event.stopped = true;
+ } else {
+ event.returnValue = false;
+ event.cancelBubble = true;
}
- };
-})();
+ },
-Event.extend = (function() {
- var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
- m[name] = Event.Methods[name].methodize();
- return m;
- });
+ // find the first node with the given tagName, starting from the
+ // node the event was triggered on; traverses the DOM upwards
+ findElement: function(event, tagName) {
+ var element = Event.element(event);
+ while (element.parentNode && (!element.tagName ||
+ (element.tagName.toUpperCase() != tagName.toUpperCase())))
+ element = element.parentNode;
+ return element;
+ },
- if (Prototype.Browser.IE) {
- Object.extend(methods, {
- stopPropagation: function() { this.cancelBubble = true },
- preventDefault: function() { this.returnValue = false },
- inspect: function() { return "[object Event]" }
- });
+ observers: false,
- return function(event) {
- if (!event) return false;
- if (event._extendedByPrototype) return event;
-
- event._extendedByPrototype = Prototype.emptyFunction;
- var pointer = Event.pointer(event);
- Object.extend(event, {
- target: event.srcElement,
- relatedTarget: Event.relatedTarget(event),
- pageX: pointer.x,
- pageY: pointer.y
- });
- return Object.extend(event, methods);
- };
-
- } else {
- Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
- Object.extend(Event.prototype, methods);
- return Prototype.K;
- }
-})();
-
-Object.extend(Event, (function() {
- var cache = Event.cache;
-
- function getEventID(element) {
- if (element._prototypeEventID) return element._prototypeEventID[0];
- arguments.callee.id = arguments.callee.id || 1;
- return element._prototypeEventID = [++arguments.callee.id];
- }
-
- function getDOMEventName(eventName) {
- if (eventName && eventName.include(':')) return "dataavailable";
- return eventName;
- }
-
- function getCacheForID(id) {
- return cache[id] = cache[id] || { };
- }
-
- function getWrappersForEventName(id, eventName) {
- var c = getCacheForID(id);
- return c[eventName] = c[eventName] || [];
- }
-
- function createWrapper(element, eventName, handler) {
- var id = getEventID(element);
- var c = getWrappersForEventName(id, eventName);
- if (c.pluck("handler").include(handler)) return false;
-
- var wrapper = function(event) {
- if (!Event || !Event.extend ||
- (event.eventName && event.eventName != eventName))
- return false;
-
- Event.extend(event);
- handler.call(element, event);
- };
-
- wrapper.handler = handler;
- c.push(wrapper);
- return wrapper;
- }
-
- function findWrapper(id, eventName, handler) {
- var c = getWrappersForEventName(id, eventName);
- return c.find(function(wrapper) { return wrapper.handler == handler });
- }
-
- function destroyWrapper(id, eventName, handler) {
- var c = getCacheForID(id);
- if (!c[eventName]) return false;
- c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
- }
-
- function destroyCache() {
- for (var id in cache)
- for (var eventName in cache[id])
- cache[id][eventName] = null;
- }
-
- if (window.attachEvent) {
- window.attachEvent("onunload", destroyCache);
- }
-
- return {
- observe: function(element, eventName, handler) {
- element = $(element);
- var name = getDOMEventName(eventName);
-
- var wrapper = createWrapper(element, eventName, handler);
- if (!wrapper) return element;
-
- if (element.addEventListener) {
- element.addEventListener(name, wrapper, false);
- } else {
- element.attachEvent("on" + name, wrapper);
- }
-
- return element;
- },
-
- stopObserving: function(element, eventName, handler) {
- element = $(element);
- var id = getEventID(element), name = getDOMEventName(eventName);
-
- if (!handler && eventName) {
- getWrappersForEventName(id, eventName).each(function(wrapper) {
- element.stopObserving(eventName, wrapper.handler);
- });
- return element;
-
- } else if (!eventName) {
- Object.keys(getCacheForID(id)).each(function(eventName) {
- element.stopObserving(eventName);
- });
- return element;
- }
-
- var wrapper = findWrapper(id, eventName, handler);
- if (!wrapper) return element;
-
- if (element.removeEventListener) {
- element.removeEventListener(name, wrapper, false);
- } else {
- element.detachEvent("on" + name, wrapper);
- }
-
- destroyWrapper(id, eventName, handler);
-
- return element;
- },
-
- fire: function(element, eventName, memo) {
- element = $(element);
- if (element == document && document.createEvent && !element.dispatchEvent)
- element = document.documentElement;
-
- var event;
- if (document.createEvent) {
- event = document.createEvent("HTMLEvents");
- event.initEvent("dataavailable", true, true);
- } else {
- event = document.createEventObject();
- event.eventType = "ondataavailable";
- }
-
- event.eventName = eventName;
- event.memo = memo || { };
-
- if (document.createEvent) {
- element.dispatchEvent(event);
- } else {
- element.fireEvent(event.eventType, event);
- }
-
- return Event.extend(event);
+ _observeAndCache: function(element, name, observer, useCapture) {
+ if (!this.observers) this.observers = [];
+ if (element.addEventListener) {
+ this.observers.push([element, name, observer, useCapture]);
+ element.addEventListener(name, observer, useCapture);
+ } else if (element.attachEvent) {
+ this.observers.push([element, name, observer, useCapture]);
+ element.attachEvent('on' + name, observer);
}
- };
-})());
+ },
-Object.extend(Event, Event.Methods);
-
-Element.addMethods({
- fire: Event.fire,
- observe: Event.observe,
- stopObserving: Event.stopObserving
-});
-
-Object.extend(document, {
- fire: Element.Methods.fire.methodize(),
- observe: Element.Methods.observe.methodize(),
- stopObserving: Element.Methods.stopObserving.methodize(),
- loaded: false
-});
-
-(function() {
- /* Support for the DOMContentLoaded event is based on work by Dan Webb,
- Matthias Miller, Dean Edwards and John Resig. */
-
- var timer;
-
- function fireContentLoadedEvent() {
- if (document.loaded) return;
- if (timer) window.clearInterval(timer);
- document.fire("dom:loaded");
- document.loaded = true;
- }
-
- if (document.addEventListener) {
- if (Prototype.Browser.WebKit) {
- timer = window.setInterval(function() {
- if (/loaded|complete/.test(document.readyState))
- fireContentLoadedEvent();
- }, 0);
-
- Event.observe(window, "load", fireContentLoadedEvent);
-
- } else {
- document.addEventListener("DOMContentLoaded",
- fireContentLoadedEvent, false);
+ unloadCache: function() {
+ if (!Event.observers) return;
+ for (var i = 0, length = Event.observers.length; i < length; i++) {
+ Event.stopObserving.apply(this, Event.observers[i]);
+ Event.observers[i][0] = null;
}
+ Event.observers = false;
+ },
- } else {
- document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
- $("__onDOMContentLoaded").onreadystatechange = function() {
- if (this.readyState == "complete") {
- this.onreadystatechange = null;
- fireContentLoadedEvent();
- }
- };
- }
-})();
-/*------------------------------- DEPRECATED -------------------------------*/
+ observe: function(element, name, observer, useCapture) {
+ element = $(element);
+ useCapture = useCapture || false;
-Hash.toQueryString = Object.toQueryString;
+ if (name == 'keypress' &&
+ (Prototype.Browser.WebKit || element.attachEvent))
+ name = 'keydown';
-var Toggle = { display: Element.toggle };
-
-Element.Methods.childOf = Element.Methods.descendantOf;
-
-var Insertion = {
- Before: function(element, content) {
- return Element.insert(element, {before:content});
+ Event._observeAndCache(element, name, observer, useCapture);
},
- Top: function(element, content) {
- return Element.insert(element, {top:content});
- },
+ stopObserving: function(element, name, observer, useCapture) {
+ element = $(element);
+ useCapture = useCapture || false;
- Bottom: function(element, content) {
- return Element.insert(element, {bottom:content});
- },
+ if (name == 'keypress' &&
+ (Prototype.Browser.WebKit || element.attachEvent))
+ name = 'keydown';
- After: function(element, content) {
- return Element.insert(element, {after:content});
+ if (element.removeEventListener) {
+ element.removeEventListener(name, observer, useCapture);
+ } else if (element.detachEvent) {
+ try {
+ element.detachEvent('on' + name, observer);
+ } catch (e) {}
+ }
}
-};
+});
-var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
-
-// This should be moved to script.aculo.us; notice the deprecated methods
-// further below, that map to the newer Element methods.
+/* prevent memory leaks in IE */
+if (Prototype.Browser.IE)
+ Event.observe(window, 'unload', Event.unloadCache, false);
var Position = {
// set to true if needed, warning: firefox performance problems
// NOT neeeded for page scrolling, only if draggable contained in
@@ -4080,13 +3063,59 @@
|| 0;
},
+ realOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if(element.tagName=='BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p == 'relative' || p == 'absolute') break;
+ }
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ offsetParent: function(element) {
+ if (element.offsetParent) return element.offsetParent;
+ if (element == document.body) return element;
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return element;
+
+ return document.body;
+ },
+
// caches x/y coordinate pair to use with overlap
within: function(element, x, y) {
if (this.includeScrollOffsets)
return this.withinIncludingScrolloffsets(element, x, y);
this.xcomp = x;
this.ycomp = y;
- this.offset = Element.cumulativeOffset(element);
+ this.offset = this.cumulativeOffset(element);
return (y >= this.offset[1] &&
y < this.offset[1] + element.offsetHeight &&
@@ -4095,11 +3124,11 @@
},
withinIncludingScrolloffsets: function(element, x, y) {
- var offsetcache = Element.cumulativeScrollOffset(element);
+ var offsetcache = this.realOffset(element);
this.xcomp = x + offsetcache[0] - this.deltaX;
this.ycomp = y + offsetcache[1] - this.deltaY;
- this.offset = Element.cumulativeOffset(element);
+ this.offset = this.cumulativeOffset(element);
return (this.ycomp >= this.offset[1] &&
this.ycomp < this.offset[1] + element.offsetHeight &&
@@ -4118,104 +3147,125 @@
element.offsetWidth;
},
- // Deprecation layer -- use newer Element methods now (1.5.2).
+ page: function(forElement) {
+ var valueT = 0, valueL = 0;
- cumulativeOffset: Element.Methods.cumulativeOffset,
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
- positionedOffset: Element.Methods.positionedOffset,
+ // Safari fix
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element,'position')=='absolute') break;
- absolutize: function(element) {
- Position.prepare();
- return Element.absolutize(element);
- },
+ } while (element = element.offsetParent);
- relativize: function(element) {
- Position.prepare();
- return Element.relativize(element);
+ element = forElement;
+ do {
+ if (!window.opera || element.tagName=='BODY') {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return [valueL, valueT];
},
- realOffset: Element.Methods.cumulativeScrollOffset,
+ clone: function(source, target) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || {})
- offsetParent: Element.Methods.getOffsetParent,
+ // find page position of source
+ source = $(source);
+ var p = Position.page(source);
- page: Element.Methods.viewportOffset,
+ // find coordinate system to use
+ target = $(target);
+ var delta = [0, 0];
+ var parent = null;
+ // delta [0,0] will do fine with position: fixed elements,
+ // position:absolute needs offsetParent deltas
+ if (Element.getStyle(target,'position') == 'absolute') {
+ parent = Position.offsetParent(target);
+ delta = Position.page(parent);
+ }
- clone: function(source, target, options) {
- options = options || { };
- return Element.clonePosition(target, source, options);
- }
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
- function iter(name) {
- return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
- }
-
- instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
- function(element, className) {
- className = className.toString().strip();
- var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
- return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
- } : function(element, className) {
- className = className.toString().strip();
- var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
- if (!classNames && !className) return elements;
-
- var nodes = $(element).getElementsByTagName('*');
- className = ' ' + className + ' ';
-
- for (var i = 0, child, cn; child = nodes[i]; i++) {
- if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
- (classNames && classNames.all(function(name) {
- return !name.toString().blank() && cn.include(' ' + name + ' ');
- }))))
- elements.push(Element.extend(child));
+ // correct by body offsets (fixes Safari)
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
}
- return elements;
- };
- return function(className, parentElement) {
- return $(parentElement || document.body).getElementsByClassName(className);
- };
-}(Element.Methods);
+ // set position
+ if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if(options.setWidth) target.style.width = source.offsetWidth + 'px';
+ if(options.setHeight) target.style.height = source.offsetHeight + 'px';
+ },
-/*--------------------------------------------------------------------------*/
+ absolutize: function(element) {
+ element = $(element);
+ if (element.style.position == 'absolute') return;
+ Position.prepare();
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
- initialize: function(element) {
- this.element = $(element);
- },
+ var offsets = Position.positionedOffset(element);
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
- _each: function(iterator) {
- this.element.className.split(/\s+/).select(function(name) {
- return name.length > 0;
- })._each(iterator);
- },
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
- set: function(className) {
- this.element.className = className;
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
},
- add: function(classNameToAdd) {
- if (this.include(classNameToAdd)) return;
- this.set($A(this).concat(classNameToAdd).join(' '));
- },
+ relativize: function(element) {
+ element = $(element);
+ if (element.style.position == 'relative') return;
+ Position.prepare();
- remove: function(classNameToRemove) {
- if (!this.include(classNameToRemove)) return;
- this.set($A(this).without(classNameToRemove).join(' '));
- },
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
- toString: function() {
- return $A(this).join(' ');
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
}
-};
+}
-Object.extend(Element.ClassNames.prototype, Enumerable);
+// Safari returns margins on body which is incorrect if the child is absolutely
+// positioned. For performance reasons, redefine Position.cumulativeOffset for
+// KHTML/WebKit only.
+if (Prototype.Browser.WebKit) {
+ Position.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
-/*--------------------------------------------------------------------------*/
+ element = element.offsetParent;
+ } while (element);
+ return [valueL, valueT];
+ }
+}
+
Element.addMethods();
\ No newline at end of file
Modified: branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/scriptaculous.js
===================================================================
--- branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/scriptaculous.js 2008-07-15 17:58:47 UTC (rev 11455)
+++ branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/scriptaculous.js 2008-07-15 18:04:27 UTC (rev 11456)
@@ -1,4 +1,4 @@
-// script.aculo.us scriptaculous.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008
+// script.aculo.us scriptaculous.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//
@@ -24,12 +24,12 @@
// For details, see the script.aculo.us web site: http://script.aculo.us/
var Scriptaculous = {
- Version: '1.8.1',
+ Version: '1.7.1_beta3',
require: function(libraryName) {
// inserting via DOM fails in Safari 2.0, so brute force approach
- document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
+ document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
},
- REQUIRED_PROTOTYPE: '1.6.0',
+ REQUIRED_PROTOTYPE: '1.5.1',
load: function() {
function convertVersionString(versionString){
var r = versionString.split('.');
Modified: branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/slider.js
===================================================================
--- branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/slider.js 2008-07-15 17:58:47 UTC (rev 11455)
+++ branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/slider.js 2008-07-15 18:04:27 UTC (rev 11456)
@@ -1,11 +1,12 @@
-// script.aculo.us slider.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008
+// script.aculo.us slider.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
// Copyright (c) 2005-2007 Marty Haught, Thomas Fuchs
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/
-if (!Control) var Control = { };
+if(!Control) var Control = {};
+Control.Slider = Class.create();
// options:
// axis: 'vertical', or 'horizontal' (default)
@@ -13,18 +14,18 @@
// callbacks:
// onChange(value)
// onSlide(value)
-Control.Slider = Class.create({
+Control.Slider.prototype = {
initialize: function(handle, track, options) {
var slider = this;
- if (Object.isArray(handle)) {
+ if(handle instanceof Array) {
this.handles = handle.collect( function(e) { return $(e) });
} else {
this.handles = [$(handle)];
}
this.track = $(track);
- this.options = options || { };
+ this.options = options || {};
this.axis = this.options.axis || 'horizontal';
this.increment = this.options.increment || 1;
@@ -58,11 +59,11 @@
this.dragging = false;
this.disabled = false;
- if (this.options.disabled) this.setDisabled();
+ if(this.options.disabled) this.setDisabled();
// Allowed values array
this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
- if (this.allowedValues) {
+ if(this.allowedValues) {
this.minimum = this.allowedValues.min();
this.maximum = this.allowedValues.max();
}
@@ -75,15 +76,16 @@
this.handles.each( function(h,i) {
i = slider.handles.length-1-i;
slider.setValue(parseFloat(
- (Object.isArray(slider.options.sliderValue) ?
+ (slider.options.sliderValue instanceof Array ?
slider.options.sliderValue[i] : slider.options.sliderValue) ||
slider.range.start), i);
- h.makePositioned().observe("mousedown", slider.eventMouseDown);
+ Element.makePositioned(h); // fix IE
+ Event.observe(h, "mousedown", slider.eventMouseDown);
});
- this.track.observe("mousedown", this.eventMouseDown);
- document.observe("mouseup", this.eventMouseUp);
- document.observe("mousemove", this.eventMouseMove);
+ Event.observe(this.track, "mousedown", this.eventMouseDown);
+ Event.observe(document, "mouseup", this.eventMouseUp);
+ Event.observe(document, "mousemove", this.eventMouseMove);
this.initialized = true;
},
@@ -103,36 +105,36 @@
this.disabled = false;
},
getNearestValue: function(value){
- if (this.allowedValues){
- if (value >= this.allowedValues.max()) return(this.allowedValues.max());
- if (value <= this.allowedValues.min()) return(this.allowedValues.min());
+ if(this.allowedValues){
+ if(value >= this.allowedValues.max()) return(this.allowedValues.max());
+ if(value <= this.allowedValues.min()) return(this.allowedValues.min());
var offset = Math.abs(this.allowedValues[0] - value);
var newValue = this.allowedValues[0];
this.allowedValues.each( function(v) {
var currentOffset = Math.abs(v - value);
- if (currentOffset <= offset){
+ if(currentOffset <= offset){
newValue = v;
offset = currentOffset;
}
});
return newValue;
}
- if (value > this.range.end) return this.range.end;
- if (value < this.range.start) return this.range.start;
+ if(value > this.range.end) return this.range.end;
+ if(value < this.range.start) return this.range.start;
return value;
},
setValue: function(sliderValue, handleIdx){
- if (!this.active) {
+ if(!this.active) {
this.activeHandleIdx = handleIdx || 0;
this.activeHandle = this.handles[this.activeHandleIdx];
this.updateStyles();
}
handleIdx = handleIdx || this.activeHandleIdx || 0;
- if (this.initialized && this.restricted) {
- if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
+ if(this.initialized && this.restricted) {
+ if((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
sliderValue = this.values[handleIdx-1];
- if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
+ if((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
sliderValue = this.values[handleIdx+1];
}
sliderValue = this.getNearestValue(sliderValue);
@@ -143,7 +145,7 @@
this.translateToPx(sliderValue);
this.drawSpans();
- if (!this.dragging || !this.event) this.updateFinished();
+ if(!this.dragging || !this.event) this.updateFinished();
},
setValueBy: function(delta, handleIdx) {
this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
@@ -171,24 +173,24 @@
(this.track.offsetHeight != 0 ? this.track.offsetHeight :
this.track.style.height.replace(/px$/,"")) - this.alignY :
(this.track.offsetWidth != 0 ? this.track.offsetWidth :
- this.track.style.width.replace(/px$/,"")) - this.alignX);
+ this.track.style.width.replace(/px$/,"")) - this.alignY);
},
isVertical: function(){
return (this.axis == 'vertical');
},
drawSpans: function() {
var slider = this;
- if (this.spans)
+ if(this.spans)
$R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
- if (this.options.startSpan)
+ if(this.options.startSpan)
this.setSpan(this.options.startSpan,
$R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
- if (this.options.endSpan)
+ if(this.options.endSpan)
this.setSpan(this.options.endSpan,
$R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
},
setSpan: function(span, range) {
- if (this.isVertical()) {
+ if(this.isVertical()) {
span.style.top = this.translateToPx(range.start);
span.style.height = this.translateToPx(range.end - range.start + this.range.start);
} else {
@@ -201,14 +203,14 @@
Element.addClassName(this.activeHandle, 'selected');
},
startDrag: function(event) {
- if (Event.isLeftClick(event)) {
- if (!this.disabled){
+ if(Event.isLeftClick(event)) {
+ if(!this.disabled){
this.active = true;
var handle = Event.element(event);
var pointer = [Event.pointerX(event), Event.pointerY(event)];
var track = handle;
- if (track==this.track) {
+ if(track==this.track) {
var offsets = Position.cumulativeOffset(this.track);
this.event = event;
this.setValue(this.translateToValue(
@@ -222,7 +224,7 @@
while((this.handles.indexOf(handle) == -1) && handle.parentNode)
handle = handle.parentNode;
- if (this.handles.indexOf(handle)!=-1) {
+ if(this.handles.indexOf(handle)!=-1) {
this.activeHandle = handle;
this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
this.updateStyles();
@@ -237,10 +239,10 @@
}
},
update: function(event) {
- if (this.active) {
- if (!this.dragging) this.dragging = true;
+ if(this.active) {
+ if(!this.dragging) this.dragging = true;
this.draw(event);
- if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ if(Prototype.Browser.WebKit) window.scrollBy(0,0);
Event.stop(event);
}
},
@@ -251,11 +253,11 @@
pointer[1] -= this.offsetY + offsets[1];
this.event = event;
this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
- if (this.initialized && this.options.onSlide)
+ if(this.initialized && this.options.onSlide)
this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
},
endDrag: function(event) {
- if (this.active && this.dragging) {
+ if(this.active && this.dragging) {
this.finishDrag(event, true);
Event.stop(event);
}
@@ -268,8 +270,8 @@
this.updateFinished();
},
updateFinished: function() {
- if (this.initialized && this.options.onChange)
+ if(this.initialized && this.options.onChange)
this.options.onChange(this.values.length>1 ? this.values : this.value, this);
this.event = null;
}
-});
+}
\ No newline at end of file
Modified: branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/unittest.js
===================================================================
--- branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/unittest.js 2008-07-15 17:58:47 UTC (rev 11455)
+++ branches/JBoss_Portal_Branch_2_6/theme/src/bin/portal-ajax-war/dyna/unittest.js 2008-07-15 18:04:27 UTC (rev 11456)
@@ -1,4 +1,4 @@
-// script.aculo.us unittest.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008
+// script.aculo.us unittest.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
@@ -524,19 +524,15 @@
shouldNotBe: 'assertReturnsFalse',
shouldRespondTo: 'assertRespondsTo'
};
- var makeAssertion = function(assertion, args, object) {
- this[assertion].apply(this,(args || []).concat([object]));
+ Test.BDDMethods = {};
+ for(m in METHODMAP) {
+ Test.BDDMethods[m] = eval(
+ 'function(){'+
+ 'var args = $A(arguments);'+
+ 'var scope = args.shift();'+
+ 'scope.'+METHODMAP[m]+'.apply(scope,(args || []).concat([this])); }');
}
-
- Test.BDDMethods = {};
- $H(METHODMAP).each(function(pair) {
- Test.BDDMethods[pair.key] = function() {
- var args = $A(arguments);
- var scope = args.shift();
- makeAssertion.apply(scope, [pair.value, args, this]); };
- });
-
- [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
+ [Array.prototype, String.prototype, Number.prototype].each(
function(p){ Object.extend(p, Test.BDDMethods) }
);
}
15 years, 11 months
JBoss Portal SVN: r11455 - branches/JBoss_Portal_Branch_2_7/core-wsrp/src/resources/portal-wsrp-admin-war/jsf/consumers.
by portal-commits@lists.jboss.org
Author: chris.laprun(a)jboss.com
Date: 2008-07-15 13:58:47 -0400 (Tue, 15 Jul 2008)
New Revision: 11455
Modified:
branches/JBoss_Portal_Branch_2_7/core-wsrp/src/resources/portal-wsrp-admin-war/jsf/consumers/editConsumer.xhtml
Log:
- Fixed incorrect markup.
Modified: branches/JBoss_Portal_Branch_2_7/core-wsrp/src/resources/portal-wsrp-admin-war/jsf/consumers/editConsumer.xhtml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-wsrp/src/resources/portal-wsrp-admin-war/jsf/consumers/editConsumer.xhtml 2008-07-15 15:53:56 UTC (rev 11454)
+++ branches/JBoss_Portal_Branch_2_7/core-wsrp/src/resources/portal-wsrp-admin-war/jsf/consumers/editConsumer.xhtml 2008-07-15 17:58:47 UTC (rev 11455)
@@ -74,38 +74,75 @@
</td>
</tr>
<c:if test="#{consumer.localInfoPresent}">
- <tr>
- <th>#{i18n.edit_consumer_registration}</th>
- <td>
- <c:choose>
- <c:when test="#{consumer.localInfoPresent}">
- <h3 class="portlet-area-header">#{i18n.edit_consumer_registration_current}</h3>
+<tr>
+ <th>#{i18n.edit_consumer_registration}</th>
+ <td>
+ <c:choose>
+ <c:when test="#{consumer.localInfoPresent}">
+ <h3 class="portlet-area-header">#{i18n.edit_consumer_registration_current}</h3>
+ <h:panelGroup styleClass="portlet-area-body">
+ <c:choose>
+ <c:when test="#{!empty consumer.producerInfo.registrationInfo.registrationProperties}">
+ <table class="registration-prop-table #{consumer.active ? 'active' : 'inactive'}">
+ <tr>
+ <th class="nameColumn">#{i18n.edit_consumer_prop_name}</th>
+ <th class="descColumn">#{i18n.edit_consumer_prop_desc}</th>
+ <th>#{i18n.edit_consumer_prop_value}</th>
+ </tr>
+ <tr jsfc="ui:repeat" value="#{consumer.producerInfo.registrationInfo.registrationProperties}"
+ var="prop" title="#{prop.value.description.label.value}">
+ <td>#{prop.value..name}</td>
+ <td>#{prop.value.description.label.value}</td>
+ <td>
+ <h:inputText value="#{prop.value.value}" size="50"
+ valueChangeListener="#{consumer.regPropListener}"
+ disabled="#{consumer.registrationModified}"/>
+ <h:outputText styleClass="portlet-msg-error" value="#{prop.value.status}"
+ rendered="#{prop.value.determinedInvalid}"/>
+ </td>
+ </tr>
+ </table>
+ <h:commandLink action="#{consumer.update}"
+ value="#{i18n.edit_consumer_registration_update_props}"
+ rendered="#{consumer.registered}"
+ styleClass="portlet-form-button portlet-section-buttonrow"/>
+ </c:when>
+ <c:otherwise>
+ #{i18n.edit_consumer_registration_no_props}
+ </c:otherwise>
+ </c:choose>
+ <h:commandLink action="#{consumer.modifyRegistration}"
+ value="#{i18n.edit_consumer_registration_modify}"
+ rendered="#{consumer.registrationLocallyModified}"
+ title="#{i18n.edit_consumer_registration_modify_title}"
+ styleClass="portlet-form-button portlet-section-buttonrow"/>
+ <br style="clear:both;"/>
+ </h:panelGroup>
+
+ <br/>
+
+ <c:if test="#{consumer.registrationModified}">
+ <h3 class="portlet-area-header">#{i18n.edit_consumer_registration_expected}</h3>
<h:panelGroup styleClass="portlet-area-body">
<c:choose>
- <c:when test="#{!empty consumer.producerInfo.registrationInfo.registrationProperties}">
+ <c:when test="#{!empty consumer.expectedRegistrationInfo.registrationProperties}">
<table class="registration-prop-table #{consumer.active ? 'active' : 'inactive'}">
<tr>
<th class="nameColumn">#{i18n.edit_consumer_prop_name}</th>
<th class="descColumn">#{i18n.edit_consumer_prop_desc}</th>
<th>#{i18n.edit_consumer_prop_value}</th>
</tr>
- <tr jsfc="ui:repeat" value="#{consumer.producerInfo.registrationInfo.registrationProperties}"
- var="prop" title="#{prop.description.label.value}">
- <td>#{prop.name}</td>
- <td>#{prop.description.label.value}</td>
+ <tr jsfc="ui:repeat" value="#{consumer.expectedRegistrationInfo.registrationProperties}"
+ var="prop" title="#{prop.value.description.label.value}">
+ <td>#{prop.value.name}</td>
+ <td>#{prop.value.description.label.value}</td>
<td>
- <h:inputText value="#{prop.value}" size="50"
- valueChangeListener="#{consumer.regPropListener}"
- disabled="#{consumer.registrationModified}"/>
- <h:outputText styleClass="portlet-msg-error" value="#{prop.status}"
- rendered="#{prop.determinedInvalid}"/>
+ <h:inputText value="#{prop.value.value}" size="50"/>
+ <h:outputText styleClass="portlet-msg-error" value="#{prop.value.status}"
+ rendered="#{prop.value.determinedInvalid}"/>
</td>
</tr>
</table>
- <h:commandLink action="#{consumer.update}"
- value="#{i18n.edit_consumer_registration_update_props}"
- rendered="#{consumer.registered}"
- styleClass="portlet-form-button portlet-section-buttonrow"/>
</c:when>
<c:otherwise>
#{i18n.edit_consumer_registration_no_props}
@@ -113,78 +150,31 @@
</c:choose>
<h:commandLink action="#{consumer.modifyRegistration}"
value="#{i18n.edit_consumer_registration_modify}"
- rendered="#{consumer.registrationLocallyModified}"
title="#{i18n.edit_consumer_registration_modify_title}"
styleClass="portlet-form-button portlet-section-buttonrow"/>
<br style="clear:both;"/>
</h:panelGroup>
-
- <br/>
-
- <c:if test="#{consumer.registrationModified}">
- <h3 class="portlet-area-header">#{i18n.edit_consumer_registration_expected}</h3>
- <h:panelGroup styleClass="portlet-area-body">
- <c:choose>
- <c:when test="#{!empty consumer.expectedRegistrationInfo.registrationProperties}">
- <table class="registration-prop-table #{consumer.active ? 'active' : 'inactive'}">
- <tr>
- <th class="nameColumn">#{i18n.edit_consumer_prop_name}</th>
- <th class="descColumn">#{i18n.edit_consumer_prop_desc}</th>
- <th>#{i18n.edit_consumer_prop_value}</th>
- </tr>
- <tr jsfc="ui:repeat" value="#{consumer.expectedRegistrationInfo.registrationProperties}"
- var="prop" title="#{prop.description.label.value}">
- <td>#{prop.name}</td>
- <td>#{prop.description.label.value}</td>
- <td>
- <h:inputText value="#{prop.value}" size="50"/>
- <h:outputText styleClass="portlet-msg-error" value="#{prop.status}"
- rendered="#{prop.determinedInvalid}"/>
- </td>
- </tr>
- <c:forEach var="prop" items="#{consumer.expectedRegistrationInfo.registrationProperties}">
- <tr title="#{prop.value.description.label.value}">
- <td>#{prop.value.name}</td>
- <td>#{prop.value.description.label.value}</td>
- <td>
- <h:inputText value="#{prop.value.value}" size="50"/>
- <h:outputText styleClass="portlet-msg-error" value="#{prop.value.status}"
- rendered="#{prop.value.determinedInvalid}"/></td>
- </tr>
- </c:forEach>
- </table>
- </c:when>
- <c:otherwise>
- #{i18n.edit_consumer_registration_no_props}
- </c:otherwise>
- </c:choose>
- <h:commandLink action="#{consumer.modifyRegistration}"
- value="#{i18n.edit_consumer_registration_modify}"
- title="#{i18n.edit_consumer_registration_modify_title}"
- styleClass="portlet-form-button portlet-section-buttonrow"/>
- <br style="clear:both;"/>
- </h:panelGroup>
- </c:if>
- </c:when>
- <c:when test="#{consumer.registrationChecked and !consumer.registrationRequired}">
- #{i18n.edit_consumer_no_registration}
- </c:when>
- </c:choose>
+ </c:if>
+ </c:when>
+ <c:when test="#{consumer.registrationChecked and !consumer.registrationRequired}">
+ #{i18n.edit_consumer_no_registration}
+ </c:when>
+ </c:choose>
+ </td>
+</tr>
+<c:if test="#{!empty consumer.producerInfo.registrationInfo.registrationHandle}">
+ <tr>
+ <th>#{i18n.edit_consumer_registration_context}</th>
+ <td id="handle">
+ #{i18n.edit_consumer_registration_context_handle} <h:outputText
+ value="#{consumer.producerInfo.registrationInfo.registrationHandle}"/>
+ <h:commandLink action="confirmEraseRegistration" value="#{i18n.edit_consumer_registration_context_erase}"
+ title="#{i18n.edit_consumer_registration_context_erase_title}"
+ styleClass="portlet-form-button"/>
</td>
</tr>
- <c:if test="#{!empty consumer.producerInfo.registrationInfo.registrationHandle}">
- <tr>
- <th>#{i18n.edit_consumer_registration_context}</th>
- <td id="handle">
- #{i18n.edit_consumer_registration_context_handle} <h:outputText
- value="#{consumer.producerInfo.registrationInfo.registrationHandle}"/>
- <h:commandLink action="confirmEraseRegistration" value="#{i18n.edit_consumer_registration_context_erase}"
- title="#{i18n.edit_consumer_registration_context_erase_title}"
- styleClass="portlet-form-button"/>
- </td>
- </tr>
- </c:if>
</c:if>
+</c:if>
<tr>
<th/>
<td class="portlet-section-buttonrow">
15 years, 11 months
JBoss Portal SVN: r11454 - in branches/JBoss_Portal_Branch_2_7: wsrp/src/main/org/jboss/portal/wsrp/consumer/portlet/info and 1 other directory.
by portal-commits@lists.jboss.org
Author: thomas.heute(a)jboss.com
Date: 2008-07-15 11:53:56 -0400 (Tue, 15 Jul 2008)
New Revision: 11454
Modified:
branches/JBoss_Portal_Branch_2_7/build/build-thirdparty.xml
branches/JBoss_Portal_Branch_2_7/wsrp/src/main/org/jboss/portal/wsrp/consumer/portlet/info/WSRPPortletInfo.java
Log:
Use latest modules
Modified: branches/JBoss_Portal_Branch_2_7/build/build-thirdparty.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/build/build-thirdparty.xml 2008-07-15 15:53:15 UTC (rev 11453)
+++ branches/JBoss_Portal_Branch_2_7/build/build-thirdparty.xml 2008-07-15 15:53:56 UTC (rev 11454)
@@ -43,9 +43,9 @@
<componentref name="jboss-portal/modules/common" version="1.2.0"/>
<componentref name="jboss-portal/modules/web" version="1.2.0"/>
- <componentref name="jboss-portal/modules/test" version="1.0-SNAPSHOT"/>
- <componentref name="jboss-portal/modules/portlet" version="trunk-SNAPSHOT"/>
- <componentref name="jboss-portal/modules/identity" version="1.0-SNAPSHOT"/>
+ <componentref name="jboss-portal/modules/test" version="1.0.2"/>
+ <componentref name="jboss-portal/modules/portlet" version="2.0.1"/>
+ <componentref name="jboss-portal/modules/identity" version="1.0.4"/>
<componentref name="antlr" version="2.7.6.ga"/>
<componentref name="apache-ant" version="1.6.5"/>
<componentref name="jackrabbit" version="1.1.1"/>
Modified: branches/JBoss_Portal_Branch_2_7/wsrp/src/main/org/jboss/portal/wsrp/consumer/portlet/info/WSRPPortletInfo.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/wsrp/src/main/org/jboss/portal/wsrp/consumer/portlet/info/WSRPPortletInfo.java 2008-07-15 15:53:15 UTC (rev 11453)
+++ branches/JBoss_Portal_Branch_2_7/wsrp/src/main/org/jboss/portal/wsrp/consumer/portlet/info/WSRPPortletInfo.java 2008-07-15 15:53:56 UTC (rev 11454)
@@ -495,6 +495,18 @@
return Collections.unmodifiableSet(mimeTypeInfo.modes);
}
+
+ public ModeInfo getMode(Mode mode)
+ {
+ for (ModeInfo info: modes)
+ {
+ if (info.getMode().equals(mode))
+ {
+ return info;
+ }
+ }
+ return null;
+ }
public Set<WindowStateInfo> getAllWindowStates()
{
@@ -512,6 +524,18 @@
return Collections.unmodifiableSet(mimeTypeInfo.windowStates);
}
+ public WindowStateInfo getWindowState(WindowState windowState)
+ {
+ for (WindowStateInfo info: windowStates)
+ {
+ if (info.getWindowState().equals(windowState))
+ {
+ return info;
+ }
+ }
+ return null;
+ }
+
public Set<Locale> getAllLocales()
{
return locales;
15 years, 11 months
JBoss Portal SVN: r11453 - in docs/branches/JBoss_Portal_Branch_2_7: referenceGuide/en and 1 other directories.
by portal-commits@lists.jboss.org
Author: thomas.heute(a)jboss.com
Date: 2008-07-15 11:53:15 -0400 (Tue, 15 Jul 2008)
New Revision: 11453
Modified:
docs/branches/JBoss_Portal_Branch_2_7/quickstartuser/en/master.xml
docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/master.xml
docs/branches/JBoss_Portal_Branch_2_7/userGuide/en/modules/intro.xml
Log:
Minor
Modified: docs/branches/JBoss_Portal_Branch_2_7/quickstartuser/en/master.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_7/quickstartuser/en/master.xml 2008-07-15 15:49:02 UTC (rev 11452)
+++ docs/branches/JBoss_Portal_Branch_2_7/quickstartuser/en/master.xml 2008-07-15 15:53:15 UTC (rev 11453)
@@ -5,7 +5,7 @@
<bookinfo>
<title>JBoss Portal 2.7.0</title>
<subtitle>Quickstart User Guide</subtitle>
- <releaseinfo>Release 2.7.0</releaseinfo>
+ <releaseinfo>July 2008</releaseinfo>
<author>
<firstname>Kevin</firstname>
Modified: docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/master.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/master.xml 2008-07-15 15:49:02 UTC (rev 11452)
+++ docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/master.xml 2008-07-15 15:53:15 UTC (rev 11453)
@@ -5,7 +5,6 @@
<bookinfo>
<title><trademark class="registered">JBoss</trademark> Portal 2.7.0</title>
<subtitle>Reference Guide</subtitle>
- <releaseinfo>Release 2.7.0</releaseinfo>
<releaseinfo>July 2008</releaseinfo>
<author>
<firstname>Thomas</firstname>
Modified: docs/branches/JBoss_Portal_Branch_2_7/userGuide/en/modules/intro.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_7/userGuide/en/modules/intro.xml 2008-07-15 15:49:02 UTC (rev 11452)
+++ docs/branches/JBoss_Portal_Branch_2_7/userGuide/en/modules/intro.xml 2008-07-15 15:53:15 UTC (rev 11453)
@@ -242,7 +242,7 @@
screen where you can enter your credentials:
<mediaobject>
<imageobject>
- <imagedata fileref="images/intro/login_ss.gif" format="GIF"/>
+ <imagedata fileref="images/intro/login_ss.png" format="PNG"/>
</imageobject>
</mediaobject>
@@ -364,7 +364,7 @@
<para>
<mediaobject>
<imageobject>
- <imagedata fileref="images/intro/cms_portlet.gif" format="GIF" scalefit="1"/>
+ <imagedata fileref="images/intro/cms_portlet.png" format="PNG" scalefit="1"/>
</imageobject>
</mediaobject>
Portal includes a basic Content Management System (CMS). Portal provides a CMS portlet which allows users
15 years, 11 months
JBoss Portal SVN: r11452 - docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/modules.
by portal-commits@lists.jboss.org
Author: thomas.heute(a)jboss.com
Date: 2008-07-15 11:49:02 -0400 (Tue, 15 Jul 2008)
New Revision: 11452
Modified:
docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/modules/installation.xml
docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/modules/supported.xml
Log:
Changed supported versions
Modified: docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/modules/installation.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/modules/installation.xml 2008-07-15 14:12:50 UTC (rev 11451)
+++ docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/modules/installation.xml 2008-07-15 15:49:02 UTC (rev 11452)
@@ -1,193 +1,391 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter id="installation">
<title>Installation</title>
- <para>Depending on your needs, there are several different methods to install JBoss Portal. Pre-configured clustered versions (<computeroutput>JBoss Portal Binary (Clustered)</computeroutput>) are available from the
- <ulink url="http://labs.jboss.com/portal/jbossportal/download/index.html">JBoss Portal Downloads</ulink> page. Clustered versions of JBoss Portal must be deployed in the <filename>JBOSS_INSTALLATION_DIRECTORY/server/all/deploy/</filename> directory. All JBoss AS instances must reference the same datasource. Refer to <xref linkend="install_source_env"/> for details on how to configure JBoss Portal for clustering.
+ <para>
+ Depending on your needs, there are several different methods to install JBoss
+ Portal. Pre-configured clustered versions (
+ <computeroutput>JBoss Portal Binary (Clustered)</computeroutput>
+ ) are available from the
+ <ulink url="http://labs.jboss.com/portal/jbossportal/download/index.html">
+ JBoss Portal Downloads
+ </ulink>
+ page. Clustered versions of JBoss Portal must be deployed in the
+ <filename>JBOSS_INSTALLATION_DIRECTORY/server/all/deploy/</filename>
+ directory. All JBoss AS instances must reference the same datasource. Refer to
+ <xref linkend="install_source_env" />
+ for details on how to configure JBoss Portal for clustering.
</para>
<para>
- An environment variable, <computeroutput>JBOSS_HOME</computeroutput>, is configured in <xref linkend="install_source_env"/>. References to <computeroutput>$JBOSS_HOME</computeroutput> assume this to be your <replaceable>JBOSS_INSTALLATION_DIRECTORY</replaceable>.
- </para>
+ An environment variable,
+ <computeroutput>JBOSS_HOME</computeroutput>
+ , is configured in
+ <xref linkend="install_source_env" />
+ . References to
+ <computeroutput>$JBOSS_HOME</computeroutput>
+ assume this to be your
+ <replaceable>JBOSS_INSTALLATION_DIRECTORY</replaceable>
+ .
+ </para>
<sect1 id="install_bundle">
<title>The JBoss Portal and JBoss AS Bundle</title>
- <para>This is the easiest and fastest way to get JBoss Portal installed and running. The JBoss Portal and JBoss AS bundle contains JBoss AS, JBoss Portal, and the embedded Hypersonic SQL database. To install the JBoss Portal and JBoss AS bundle:
+ <para>
+ This is the easiest and fastest way to get JBoss Portal installed and running.
+ The JBoss Portal and JBoss AS bundle contains JBoss AS, JBoss Portal, and the
+ embedded Hypersonic SQL database. To install the JBoss Portal and JBoss AS
+ bundle:
</para>
<para>
- <orderedlist>
- <listitem>
- <para>
- <emphasis role="bold">Get the bundle:</emphasis> the bundle is available from the <ulink url="http://labs.jboss.com/portal/jbossportal/download/index.html">JBoss Portal Downloads</ulink> page. Bundles use the <computeroutput>JBoss Portal + JBoss AS</computeroutput> naming convention.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis role="bold">Extract the bundle:</emphasis> extract the ZIP archive. It does not matter which directory is used. On Windows, the recommended directory is <filename>C:\jboss-<replaceable>version-number</replaceable></filename>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis role="bold">Start the server:</emphasis> change into the <filename>JBOSS_PORTAL_INSTALLATION_DIRECTORY/bin/</filename> directory. On Windows, execute <command>run.bat</command>. On Linux, run the <command>sh run.sh</command> command. To specify a configuration to use, for example, the default configuration, append the <command> -c default</command> option to the <command>run.bat</command> or <command>sh run.sh</command> commands.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis role="bold">Log in to JBoss Portal:</emphasis> using a Web browser, navigate to <ulink url="http://localhost:8080/portal"></ulink> to open the JBoss Portal homepage. Log in using one of the two default accounts: username <emphasis>user</emphasis>, password <emphasis>user</emphasis>, or username <emphasis>admin</emphasis>, password <emphasis>admin</emphasis>:
- </para>
- </listitem>
- </orderedlist>
- </para>
- <para>
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/common/frontpage.png" scalefit="1"/>
- </imageobject>
- </mediaobject>
- </para>
- <formalpara>
- <title>SQL Errors</title>
- <para>
- Tables are automatically created the first time JBoss Portal starts. When deployed for the first time, JBoss Portal checks for the existence of the initial tables, which have not been created yet. This causes errors such as the following, which can safely be ignored:
- </para>
- </formalpara>
- <para>
- <programlisting><![CDATA[
+ <orderedlist>
+ <listitem>
+ <para>
+ <emphasis role="bold">Get the bundle:</emphasis>
+ the bundle is available from the
+ <ulink
+ url="http://labs.jboss.com/portal/jbossportal/download/index.html">
+ JBoss Portal Downloads
+ </ulink>
+ page. Bundles use the
+ <computeroutput>JBoss Portal + JBoss AS</computeroutput>
+ naming convention.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis role="bold">Extract the bundle:</emphasis>
+ extract the ZIP archive. It does not matter which directory is used. On
+ Windows, the recommended directory is
+ <filename>
+ C:\jboss-
+ <replaceable>version-number</replaceable>
+ </filename>
+ .
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis role="bold">Start the server:</emphasis>
+ change into the
+ <filename>JBOSS_PORTAL_INSTALLATION_DIRECTORY/bin/</filename>
+ directory. On Windows, execute
+ <command>run.bat</command>
+ . On Linux, run the
+ <command>sh run.sh</command>
+ command. To specify a configuration to use, for example, the default
+ configuration, append the
+ <command>-c default</command>
+ option to the
+ <command>run.bat</command>
+ or
+ <command>sh run.sh</command>
+ commands.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis role="bold">Log in to JBoss Portal:</emphasis>
+ using a Web browser, navigate to
+ <ulink url="http://localhost:8080/portal"></ulink>
+ to open the JBoss Portal homepage. Log in using one of the two default
+ accounts: username
+ <emphasis>user</emphasis>
+ , password
+ <emphasis>user</emphasis>
+ , or username
+ <emphasis>admin</emphasis>
+ , password
+ <emphasis>admin</emphasis>
+ :
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ <para>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" valign="middle"
+ fileref="images/common/frontpage.png" scalefit="1" />
+ </imageobject>
+ </mediaobject>
+ </para>
+ <formalpara>
+ <title>SQL Errors</title>
+ <para>
+ Tables are automatically created the first time JBoss Portal starts. When
+ deployed for the first time, JBoss Portal checks for the existence of the
+ initial tables, which have not been created yet. This causes errors such as
+ the following, which can safely be ignored:
+ </para>
+ </formalpara>
+ <para>
+ <programlisting><![CDATA[
WARN [JDBCExceptionReporter] SQL Error: -22, SQLState: S0002
ERROR [JDBCExceptionReporter] Table not found in statement ...
WARN [JDBCExceptionReporter] SQL Error: 1146, SQLState: 42S02
ERROR [JDBCExceptionReporter] Table 'jbossportal.jbp_cms_repositoryentry' doesn't exist
WARN [JDBCExceptionReporter] SQL Error: 1146, SQLState: 42S02
ERROR [JDBCExceptionReporter] Table 'jbossportal.jbp_cms_version_refs' doesn't exist]]></programlisting>
- </para>
- </sect1>
+ </para>
+ </sect1>
<sect1 id="install_binary">
<title>Installing the Binary Download</title>
- <para>The binary package typically consists of the
- <filename>jboss-portal.sar/</filename> directory, documentation such as the JBoss Portal User Guide and the JBoss Portal Reference Guide, and a set of pre-configured Datasource descriptors that allow
- JBoss Portal to communicate with an external database. This installation method is recommended for users who already have JBoss EAP or JBoss AS installed, or those who need to install JBoss Portal in a clustered environment.</para>
+ <para>
+ The binary package typically consists of the
+ <filename>jboss-portal.sar/</filename>
+ directory, documentation such as the JBoss Portal User Guide and the JBoss Portal
+ Reference Guide, and a set of pre-configured Datasource descriptors that allow
+ JBoss Portal to communicate with an external database. This installation method
+ is recommended for users who already have JBoss EAP or JBoss AS installed, or
+ those who need to install JBoss Portal in a clustered environment.
+ </para>
<sect2>
<title>Setting up your Environment</title>
<sect3 id="install_binarydownload">
<title>Getting the Binary</title>
<para>
- The binary download is available from the <ulink url="http://labs.jboss.com/portal/jbossportal/download/index.html">JBoss Portal Downloads</ulink> page. Look for the <computeroutput>JBoss Portal Binary</computeroutput> package. Once the binary ZIP file has been downloaded and extracted, the folder hierarchy will look similar to the following:
- </para>
- <para>
+ The binary download is available from the
+ <ulink
+ url="http://labs.jboss.com/portal/jbossportal/download/index.html">
+ JBoss Portal Downloads
+ </ulink>
+ page. Look for the
+ <computeroutput>JBoss Portal Binary</computeroutput>
+ package. Once the binary ZIP file has been downloaded and extracted, the
+ folder hierarchy will look similar to the following:
+ </para>
+ <para>
<mediaobject>
<imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/package.png"/>
+ <imagedata align="center" valign="middle"
+ fileref="images/setup/package.png" />
</imageobject>
</mediaobject>
- </para>
- <para>
- Files contained in this download are used in later sections. Download and extract the JBoss Portal binary ZIP file before proceeding.
</para>
+ <para>
+ Files contained in this download are used in later sections. Download and
+ extract the JBoss Portal binary ZIP file before proceeding.
+ </para>
</sect3>
<sect3>
<title>JBoss EAP and JBoss AS Setup</title>
- <para>Before deploying JBoss Portal, make sure you have JBoss EAP or JBoss AS installed. Customers who have access to the <ulink url="https://support.redhat.com/portal/login.html">JBoss Customer Support Portal (CSP)</ulink> are advised to download and install JBoss EAP 4.3. Customers who do not have access to the JBoss CSP are advised to use <ulink url="http://labs.jboss.com/jbossas/downloads/">JBoss AS</ulink>. For JBoss AS installation instructions, please refer to the <ulink url="http://labs.jboss.com/jbossas/docs/index.html">JBoss AS Installation Guide</ulink>.
- </para>
- <warning>
- <title>Use the JBoss EAP and JBoss AS ZIP file</title>
- <para>
- Only use the JBoss EAP and JBoss AS ZIP file versions. <emphasis role="bold">DO NOT ATTEMPT to deploy JBoss Portal on the installer version of JBoss EAP or JBoss AS.</emphasis>
- </para>
- </warning>
- </sect3>
- <sect3 id="install_source_env_0">
- <title>Operating System Environment Settings</title>
- <para>For JBoss EAP, JBoss AS, and build targets to work, you must configure a <filename>JBOSS_HOME</filename> environment variable. This environment variable must point to the root directory of the JBoss EAP or JBoss AS installation directory, which is the directory where the JBoss EAP or JBoss AS files were extracted to.
- </para>
- <para>On Windows, this is accomplished by going to
- <emphasis>Start > Settings > Control Panel > System > Advanced > Environment Variables</emphasis>. Under the
- <emphasis>System Variables</emphasis>
- section, click
- <emphasis>New</emphasis>. Set the <filename>JBOSS_HOME</filename>
- environment variable to the location of your JBoss EAP or JBoss AS installation directory:
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/win_envsetup.gif"/>
- </imageobject>
- </mediaobject>
- </para>
- <para>
- To configure the <filename>JBOSS_HOME</filename> environment variable on Linux:
- </para>
- <para>
- <orderedlist>
- <listitem>
- <para>
- Add the following line to the <filename>~/.bashrc</filename> file. Note: this must be configured while logged in as the user who runs JBoss EAP or JBoss AS:
- </para>
- <para>
-<programlisting>
-export JBOSS_HOME=/path/to/jboss/installation/
-</programlisting>
- </para>
- </listitem>
- <listitem>
- <para>
- Run the following command to enable the <filename>JBOSS_HOME</filename> environment variable:
- </para>
- <para>
-<programlisting>
-source ~/.bashrc
-</programlisting>
- </para>
- </listitem>
- </orderedlist>
- </para>
- <note>
- <title>JBoss EAP <filename>JBOSS_HOME</filename> Environment Variable</title>
- <para>
- If you are running JBoss EAP, configure the <filename>JBOSS_HOME</filename> environment variable to point to the <filename>/path/to/jboss-eap-<replaceable>version</replaceable>/jboss-as/</filename> directory.
- </para>
- </note>
- </sect3>
+ <para>
+ Before deploying JBoss Portal, make sure you have JBoss EAP or JBoss AS
+ installed. Customers who have access to the
+ <ulink url="https://support.redhat.com/portal/login.html">
+ JBoss Customer Support Portal (CSP)
+ </ulink>
+ are advised to download and install JBoss EAP 4.3. Customers who do not
+ have access to the JBoss CSP are advised to use
+ <ulink url="http://labs.jboss.com/jbossas/downloads/">JBoss AS</ulink>
+ . For JBoss AS installation instructions, please refer to the
+ <ulink url="http://labs.jboss.com/jbossas/docs/index.html">
+ JBoss AS Installation Guide
+ </ulink>
+ .
+ </para>
+ <warning>
+ <title>Use the JBoss EAP and JBoss AS ZIP file</title>
+ <para>
+ Only use the JBoss EAP and JBoss AS ZIP file versions.
+ <emphasis role="bold">
+ DO NOT ATTEMPT to deploy JBoss Portal on the installer version of
+ JBoss EAP or JBoss AS.
+ </emphasis>
+ </para>
+ </warning>
+ </sect3>
+ <sect3 id="install_source_env_0">
+ <title>Operating System Environment Settings</title>
+ <para>
+ For JBoss EAP, JBoss AS, and build targets to work, you must configure a
+ <filename>JBOSS_HOME</filename>
+ environment variable. This environment variable must point to the root
+ directory of the JBoss EAP or JBoss AS installation directory, which is the
+ directory where the JBoss EAP or JBoss AS files were extracted to.
+ </para>
+ <para>
+ On Windows, this is accomplished by going to
+ <emphasis>
+ Start > Settings > Control Panel > System > Advanced > Environment
+ Variables
+ </emphasis>
+ . Under the
+ <emphasis>System Variables</emphasis>
+ section, click
+ <emphasis>New</emphasis>
+ . Set the
+ <filename>JBOSS_HOME</filename>
+ environment variable to the location of your JBoss EAP or JBoss AS
+ installation directory:
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" valign="middle"
+ fileref="images/setup/win_envsetup.gif" />
+ </imageobject>
+ </mediaobject>
+ </para>
+ <para>
+ To configure the
+ <filename>JBOSS_HOME</filename>
+ environment variable on Linux:
+ </para>
+ <para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Add the following line to the
+ <filename>~/.bashrc</filename>
+ file. Note: this must be configured while logged in as the user
+ who runs JBoss EAP or JBoss AS:
+ </para>
+ <para>
+ <programlisting>
+ export JBOSS_HOME=/path/to/jboss/installation/
+ </programlisting>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Run the following command to enable the
+ <filename>JBOSS_HOME</filename>
+ environment variable:
+ </para>
+ <para>
+ <programlisting>source ~/.bashrc</programlisting>
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ <note>
+ <title>
+ JBoss EAP
+ <filename>JBOSS_HOME</filename>
+ Environment Variable
+ </title>
+ <para>
+ If you are running JBoss EAP, configure the
+ <filename>JBOSS_HOME</filename>
+ environment variable to point to the
+ <filename>
+ /path/to/jboss-eap-
+ <replaceable>version</replaceable>
+ /jboss-as/
+ </filename>
+ directory.
+ </para>
+ </note>
+ </sect3>
<sect3>
<title>Database Setup</title>
- <para>
- A database is required for JBoss Portal to run. JBoss EAP and JBoss AS include an embedded Hypersonic SQL database that JBoss Portal can use; however, this is only recommended for developer use. The following databases are recommended for production use, and have had test suites run against them: <trademark class="registered">MySQL</trademark> 4 and 5, <trademark class="registered">Microsoft</trademark> <trademark class="registered">SQL Server</trademark>, PostgreSQL 8, and <trademark class="registered">Oracle</trademark> Database 9 and 10. JBoss Portal can use any database that is supported by Hibernate.
- </para>
- <para>
- To configure a database to use with JBoss Portal:
- </para>
- <para>
+ <para>
+ A database is required for JBoss Portal to run. JBoss EAP and JBoss AS
+ include an embedded Hypersonic SQL database that JBoss Portal can use;
+ however, this is only recommended for developer use. The following
+ databases are recommended for production use, and have had test suites run
+ against them:
+ <trademark class="registered">MySQL</trademark>
+ 4 and 5,
+ <trademark class="registered">Microsoft</trademark>
+ <trademark class="registered">SQL Server</trademark>
+ , PostgreSQL 8, and
+ <trademark class="registered">Oracle</trademark>
+ Database 9 and 10. JBoss Portal can use any database that is supported by
+ Hibernate.
+ </para>
+ <para>To configure a database to use with JBoss Portal:</para>
+ <para>
<orderedlist>
<listitem>
<para>
- <emphasis role="bold">Create a new database:</emphasis> this guide assumes that the new database is called <emphasis>jbossportal</emphasis>.
+ <emphasis role="bold">Create a new database:</emphasis>
+ this guide assumes that the new database is called
+ <emphasis>jbossportal</emphasis>
+ .
</para>
</listitem>
<listitem>
<para>
- <emphasis role="bold">Grant access rights for a user to the <emphasis>jbossportal</emphasis> database:</emphasis> JBoss Portal needs to create tables and modify table data. Grant access rights to a desired user to the <emphasis>jbossportal</emphasis> database. Configure the same username and password in the Datasource descriptor.
+ <emphasis role="bold">
+ Grant access rights for a user to the
+ <emphasis>jbossportal</emphasis>
+ database:
+ </emphasis>
+ JBoss Portal needs to create tables and modify table data. Grant
+ access rights to a desired user to the
+ <emphasis>jbossportal</emphasis>
+ database. Configure the same username and password in the
+ Datasource descriptor.
</para>
</listitem>
<listitem>
- <para>
- <emphasis role="bold">Deploy an RDBMS <trademark class="trade">JDBC</trademark> connector:</emphasis> an RDBMS JDBC connector is required for JBoss Portal to communicate with a database. Copy the connector into the <filename>$JBOSS_HOME/server/default/lib/</filename> directory. For example, an RDBMS JDBC connector for MySQL can be download from <ulink url="http://www.mysql.com/products/connector/j/"></ulink>. For the correct RDMBS JDBC connector, please refer to the database documentation.
+ <para>
+ <emphasis role="bold">
+ Deploy an RDBMS
+ <trademark class="trade">JDBC</trademark>
+ connector:
+ </emphasis>
+ an RDBMS JDBC connector is required for JBoss Portal to
+ communicate with a database. Copy the connector into the
+ <filename>$JBOSS_HOME/server/default/lib/</filename>
+ directory. For example, an RDBMS JDBC connector for MySQL can be
+ download from
+ <ulink url="http://www.mysql.com/products/connector/j/"></ulink>
+ . For the correct RDMBS JDBC connector, please refer to the
+ database documentation.
</para>
</listitem>
</orderedlist>
- </para>
+ </para>
</sect3>
<sect3>
<title>Datasource Descriptors</title>
- <para>
- The JBoss Portal binary download that was extracted in <xref linkend="install_binarydownload"/>, contains pre-configured Datasource descriptors for the more popular databases. Datasource descriptors are provided for the MySQL 4 and 5, PostgreSQL, Microsoft SQL Server, and Oracle databases, and can be found in the <filename>setup</filename> subdirectory where the JBoss Portal binary was extracted to:
- </para>
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/dsfiles.png"/>
- </imageobject>
- </mediaobject>
- <para>
- Copy the Datasource descriptor that matches your database into the <filename>$JBOSS_HOME/server/<replaceable>configuration</replaceable>/deploy/</filename> directory, where <replaceable>configuration</replaceable> is either all, default, minimal or production. The production configuration only exists on JBoss EAP, and not JBoss AS. For example, if you are using the all configuration, copy the Datasource descriptor into the <filename>$JBOSS_HOME/server/all/deploy/</filename> directory.
- </para>
- <para>
- After the Datasource descriptor has been copied into the <filename>deploy</filename> directory, make sure the <computeroutput>user-name</computeroutput>, <computeroutput>password</computeroutput>, <computeroutput>connection-url</computeroutput>, and <computeroutput>driver-class</computeroutput>, are correct for your chosen database. Datasource descriptor files can be deployed to test before being used in production. The following is an example Datasource descriptor for a PostgreSQL database:
- </para>
-<programlisting role="XML">
-<![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+ <para>
+ The JBoss Portal binary download that was extracted in
+ <xref linkend="install_binarydownload" />
+ , contains pre-configured Datasource descriptors for the more popular
+ databases. Datasource descriptors are provided for the MySQL 4 and 5,
+ PostgreSQL, Microsoft SQL Server, and Oracle databases, and can be found in
+ the
+ <filename>setup</filename>
+ subdirectory where the JBoss Portal binary was extracted to:
+ </para>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" valign="middle"
+ fileref="images/setup/dsfiles.png" />
+ </imageobject>
+ </mediaobject>
+ <para>
+ Copy the Datasource descriptor that matches your database into the
+ <filename>
+ $JBOSS_HOME/server/
+ <replaceable>configuration</replaceable>
+ /deploy/
+ </filename>
+ directory, where
+ <replaceable>configuration</replaceable>
+ is either all, default, minimal or production. The production configuration
+ only exists on JBoss EAP, and not JBoss AS. For example, if you are using
+ the all configuration, copy the Datasource descriptor into the
+ <filename>$JBOSS_HOME/server/all/deploy/</filename>
+ directory.
+ </para>
+ <para>
+ After the Datasource descriptor has been copied into the
+ <filename>deploy</filename>
+ directory, make sure the
+ <computeroutput>user-name</computeroutput>
+ ,
+ <computeroutput>password</computeroutput>
+ ,
+ <computeroutput>connection-url</computeroutput>
+ , and
+ <computeroutput>driver-class</computeroutput>
+ , are correct for your chosen database. Datasource descriptor files can be
+ deployed to test before being used in production. The following is an
+ example Datasource descriptor for a PostgreSQL database:
+ </para>
+ <programlisting role="XML">
+ <![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>PortalDS</jndi-name>
@@ -197,43 +395,87 @@
<password>portalpassword</password>
</local-tx-datasource>
</datasources>]]></programlisting>
- <para>
- For further details about Datasource descriptors, please refer to the <ulink url="http://wiki.jboss.org/wiki/Wiki.jsp?page=CreateAJDBCDataSource">JBoss JDBC Datasource Wiki page</ulink>.
- </para>
+ <para>
+ For further details about Datasource descriptors, please refer to the
+ <ulink
+ url="http://wiki.jboss.org/wiki/Wiki.jsp?page=CreateAJDBCDataSource">
+ JBoss JDBC Datasource Wiki page
+ </ulink>
+ .
+ </para>
</sect3>
</sect2>
<sect2>
<title>Deploying JBoss Portal</title>
- <para>
- To start JBoss EAP or JBoss AS and deploy JBoss Portal:
- </para>
+ <para>To start JBoss EAP or JBoss AS and deploy JBoss Portal:</para>
<para>
<orderedlist>
<listitem>
<para>
- <emphasis role="bold">Datasource descriptor:</emphasis> if you have not done so already, change into the <filename>setup</filename> subdirectory where the JBoss Portal binary was extracted to. Copy the correct Datasource descriptor file (<filename>*-ds.xml</filename>) you modified in the previous steps into the <filename>$JBOSS_HOME/server/<replaceable>configuration</replaceable>/deploy/</filename> directory.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis role="bold">Start the server:</emphasis> change into the <filename>$JBOSS_HOME/bin/</filename> directory. On Windows, execute <command>run.bat</command>. On Linux, run the <command>sh run.sh</command> command. To specify a configuration to use, for example, the default configuration, append the <command> -c default</command> option to the <command>run.bat</command> or <command>sh run.sh</command> commands.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis role="bold">Log in to JBoss Portal:</emphasis> using a Web browser, navigate to <ulink url="http://localhost:8080/portal"></ulink> to open the JBoss Portal homepage. Log in using one of the two default accounts: username <emphasis>user</emphasis>, password <emphasis>user</emphasis>, or username <emphasis>admin</emphasis>, password <emphasis>admin</emphasis>.
- </para>
- </listitem>
- </orderedlist>
- </para>
- <formalpara>
- <title>SQL Errors</title>
- <para>
- Tables are automatically created the first time JBoss Portal starts. When deployed for the first time, JBoss Portal checks for the existence of the initial tables, which have not been created yet. This causes errors such as the following, which can safely be ignored:
- </para>
- </formalpara>
- <para>
-<programlisting><![CDATA[
+ <emphasis role="bold">Datasource descriptor:</emphasis>
+ if you have not done so already, change into the
+ <filename>setup</filename>
+ subdirectory where the JBoss Portal binary was extracted to. Copy the
+ correct Datasource descriptor file (
+ <filename>*-ds.xml</filename>
+ ) you modified in the previous steps into the
+ <filename>
+ $JBOSS_HOME/server/
+ <replaceable>configuration</replaceable>
+ /deploy/
+ </filename>
+ directory.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis role="bold">Start the server:</emphasis>
+ change into the
+ <filename>$JBOSS_HOME/bin/</filename>
+ directory. On Windows, execute
+ <command>run.bat</command>
+ . On Linux, run the
+ <command>sh run.sh</command>
+ command. To specify a configuration to use, for example, the default
+ configuration, append the
+ <command>-c default</command>
+ option to the
+ <command>run.bat</command>
+ or
+ <command>sh run.sh</command>
+ commands.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis role="bold">Log in to JBoss Portal:</emphasis>
+ using a Web browser, navigate to
+ <ulink url="http://localhost:8080/portal"></ulink>
+ to open the JBoss Portal homepage. Log in using one of the two
+ default accounts: username
+ <emphasis>user</emphasis>
+ , password
+ <emphasis>user</emphasis>
+ , or username
+ <emphasis>admin</emphasis>
+ , password
+ <emphasis>admin</emphasis>
+ .
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ <formalpara>
+ <title>SQL Errors</title>
+ <para>
+ Tables are automatically created the first time JBoss Portal starts. When
+ deployed for the first time, JBoss Portal checks for the existence of the
+ initial tables, which have not been created yet. This causes errors such as
+ the following, which can safely be ignored:
+ </para>
+ </formalpara>
+ <para>
+ <programlisting><![CDATA[
WARN [JDBCExceptionReporter] SQL Error: -22, SQLState: S0002
ERROR [JDBCExceptionReporter] Table not found in statement ...
WARN [JDBCExceptionReporter] SQL Error: 1146, SQLState: 42S02
@@ -241,400 +483,535 @@
WARN [JDBCExceptionReporter] SQL Error: 1146, SQLState: 42S02
ERROR [JDBCExceptionReporter] Table 'jbossportal.jbp_cms_version_refs' doesn't exist
]]></programlisting>
- </para>
+ </para>
</sect2>
</sect1>
<sect1 id="install_source">
<title>Installing from the Sources</title>
<sect2>
<title>Getting the Sources</title>
- <para>
- The JBoss Portal source files can be obtained from the
- <ulink url="http://labs.jboss.com/portal/jbossportal/download/index.html">JBoss Portal Downloads</ulink> page. The source files download uses a <filename>JBoss Portal Source Code</filename> naming convention. As well, the sources can be obtained from SVN. The latest sources for the 2.6.<replaceable>x</replaceable> versions are located at <ulink url="http://anonsvn.jboss.org/repos/portal/branches/JBoss_Portal_Branch_2_6" />.
- </para>
- <para>
- Several modules have been extracted from the JBoss Portal SVN repository. These modules have a different lifecycle and a different version scheme. The following is a list of modules used in JBoss Portal 2.6.5, and the locations of their source code:
- </para>
- <para>
- <itemizedlist>
- <listitem>
- <para>
- JBoss Portal Common 1.1.1: <emphasis>http://anonsvn.jboss.org/repos/portal/modules/common/tags/JBP_COMMON_1_1_1</emphasis>
- </para>
- </listitem>
- <listitem>
- <para>
- JBoss Portal Web 1.1.0: <emphasis>http://anonsvn.jboss.org/repos/portal/modules/web/tags/JBP_WEB_1_1_0</emphasis>
- </para>
- </listitem>
- <listitem>
- <para>
- JBoss Portal Test 1.0.1: <emphasis>http://anonsvn.jboss.org/repos/portal/modules/test/tags/JBP_TEST_1_0_1</emphasis>
- </para>
- </listitem>
- <listitem>
- <para>
- JBoss Portal Portlet 1.0.3: <emphasis>http://anonsvn.jboss.org/repos/portal/modules/portlet/tags/JBP_PORTLET_1_0_3</emphasis>
- </para>
- </listitem>
- <listitem>
- <para>
- JBoss Portal Identity 1.0.3: <emphasis>http://anonsvn.jboss.org/repos/portal/modules/identity/tags/JBP_IDENTITY_...</emphasis>
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- After checking out the source from SVN, or after extracting the <filename>JBoss Portal Source Code</filename> ZIP file, a directory structure similar to the following will be created:
- </para>
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/svncodir.png"/>
- </imageobject>
- </mediaobject>
- <para>
- If the source files were obtained from SVN, change into the <filename>trunk/src/</filename> directory to see the directories from the above image. As well, there is an empty <filename>thirdparty</filename> directory. This directory contains files after building the JBoss Portal source code (refer to <xref linkend="building_deploying_from_source" />). For more information about the JBoss Portal SVN repository, and accessing different versions of the JBoss Portal codebase, refer to the <ulink url="http://wiki.jboss.org/wiki/Wiki.jsp?page=PortalSVNRepo">JBoss Portal SVN Repo</ulink> page on the JBoss Wiki.
- </para>
- </sect2>
+ <para>
+ The JBoss Portal source files can be obtained from the
+ <ulink url="http://labs.jboss.com/portal/jbossportal/download/index.html">
+ JBoss Portal Downloads
+ </ulink>
+ page. The source files download uses a
+ <filename>JBoss Portal Source Code</filename>
+ naming convention. As well, the sources can be obtained from SVN. The latest
+ sources for the 2.7.
+ <replaceable>x</replaceable>
+ versions are located at
+ <ulink
+ url="http://anonsvn.jboss.org/repos/portal/branches/JBoss_Portal_Branch_2_7" />
+ .
+ </para>
+ <para>
+ Several modules have been extracted from the JBoss Portal SVN repository.
+ These modules have a different lifecycle and a different version scheme. The
+ following is a list of modules used in JBoss Portal 2.7.0, and the locations
+ of their source code:
+ </para>
+ <para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ JBoss Portal Common 1.2.0:
+ <emphasis>
+ http://anonsvn.jboss.org/repos/portal/modules/common/tags/JBP_COMMON_1_2_0
+ </emphasis>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ JBoss Portal Web 1.2.0:
+ <emphasis>
+ http://anonsvn.jboss.org/repos/portal/modules/web/tags/JBP_WEB_1_2_0
+ </emphasis>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ JBoss Portal Test 1.0.2:
+ <emphasis>
+ http://anonsvn.jboss.org/repos/portal/modules/test/tags/JBP_TEST_1_0_2
+ </emphasis>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ JBoss Portal Portlet 2.0.1:
+ <emphasis>
+ http://anonsvn.jboss.org/repos/portal/modules/portlet/tags/JBP_PORTLET_2_0_1
+ </emphasis>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ JBoss Portal Identity 1.0.4:
+ <emphasis>
+ http://anonsvn.jboss.org/repos/portal/modules/identity/tags/JBP_IDENTITY_...
+ </emphasis>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ After checking out the source from SVN, or after extracting the
+ <filename>JBoss Portal Source Code</filename>
+ ZIP file, a directory structure similar to the following will be created:
+ </para>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" valign="middle"
+ fileref="images/setup/svncodir.png" />
+ </imageobject>
+ </mediaobject>
+ <para>
+ If the source files were obtained from SVN, change into the
+ <filename>trunk/src/</filename>
+ directory to see the directories from the above image. As well, there is an
+ empty
+ <filename>thirdparty</filename>
+ directory. This directory contains files after building the JBoss Portal
+ source code (refer to
+ <xref linkend="building_deploying_from_source" />
+ ). For more information about the JBoss Portal SVN repository, and accessing
+ different versions of the JBoss Portal codebase, refer to the
+ <ulink url="http://wiki.jboss.org/wiki/Wiki.jsp?page=PortalSVNRepo">
+ JBoss Portal SVN Repo
+ </ulink>
+ page on the JBoss Wiki.
+ </para>
+ </sect2>
<sect2>
- <title>JBoss EAP and JBoss AS Setup</title>
+ <title>JBoss EAP and JBoss AS Setup</title>
<sect3>
<title>JBoss Application Server Setup</title>
- <para>Before deploying JBoss Portal, make sure you have JBoss EAP or JBoss AS installed. Customers who have access to the <ulink url="https://support.redhat.com/portal/login.html">JBoss Customer Support Portal (CSP)</ulink> are advised to download and install JBoss EAP 4.3. Customers who do not have access to the JBoss CSP are advised to use <ulink url="http://labs.jboss.com/jbossas/downloads/">JBoss AS</ulink>. For JBoss AS installation instructions, please refer to the <ulink url="http://labs.jboss.com/jbossas/docs/index.html">JBoss AS Installation Guide</ulink>.
- </para>
- <warning>
- <title>Use the JBoss EAP and JBoss AS ZIP file</title>
- <para>
- Only use the JBoss EAP and JBoss AS ZIP file versions. <emphasis role="bold">DO NOT ATTEMPT to deploy JBoss Portal on the installer version of JBoss EAP or JBoss AS.</emphasis> We are currently working on aligning the Application installer with JBoss Portal.
- </para>
- </warning>
+ <para>
+ Before deploying JBoss Portal, make sure you have JBoss EAP or JBoss AS
+ installed. Customers who have access to the
+ <ulink url="https://support.redhat.com/portal/login.html">
+ JBoss Customer Support Portal (CSP)
+ </ulink>
+ are advised to download and install JBoss EAP 4.3. Customers who do not
+ have access to the JBoss CSP are advised to use
+ <ulink url="http://labs.jboss.com/jbossas/downloads/">JBoss AS</ulink>
+ . For JBoss AS installation instructions, please refer to the
+ <ulink url="http://labs.jboss.com/jbossas/docs/index.html">
+ JBoss AS Installation Guide
+ </ulink>
+ .
+ </para>
+ <warning>
+ <title>Use the JBoss EAP and JBoss AS ZIP file</title>
+ <para>
+ Only use the JBoss EAP and JBoss AS ZIP file versions.
+ <emphasis role="bold">
+ DO NOT ATTEMPT to deploy JBoss Portal on the installer version of
+ JBoss EAP or JBoss AS.
+ </emphasis>
+ We are currently working on aligning the Application installer with
+ JBoss Portal.
+ </para>
+ </warning>
</sect3>
<sect3 id="install_source_env">
<title>Operating System Environment Settings</title>
- <para>For JBoss EAP, JBoss AS, and build targets to work, you must configure a <filename>JBOSS_HOME</filename> environment variable. This environment variable must point to the root directory of the JBoss EAP or JBoss AS installation directory, which is the directory where the JBoss EAP or JBoss AS files were extracted to.
- </para>
- <para>On Windows, this is accomplished by going to
- <emphasis>Start > Settings > Control Panel > System > Advanced > Environment Variables</emphasis>. Under the
+ <para>
+ For JBoss EAP, JBoss AS, and build targets to work, you must configure a
+ <filename>JBOSS_HOME</filename>
+ environment variable. This environment variable must point to the root
+ directory of the JBoss EAP or JBoss AS installation directory, which is the
+ directory where the JBoss EAP or JBoss AS files were extracted to.
+ </para>
+ <para>
+ On Windows, this is accomplished by going to
+ <emphasis>
+ Start > Settings > Control Panel > System > Advanced > Environment
+ Variables
+ </emphasis>
+ . Under the
<emphasis>System Variables</emphasis>
section, click
- <emphasis>New</emphasis>. Set the <filename>JBOSS_HOME</filename>
- environment variable to the location of your JBoss EAP or JBoss AS installation directory:
+ <emphasis>New</emphasis>
+ . Set the
+ <filename>JBOSS_HOME</filename>
+ environment variable to the location of your JBoss EAP or JBoss AS
+ installation directory:
<mediaobject>
<imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/win_envsetup.gif"/>
+ <imagedata align="center" valign="middle"
+ fileref="images/setup/win_envsetup.gif" />
</imageobject>
</mediaobject>
</para>
<para>
- To configure the <filename>JBOSS_HOME</filename> environment variable on Linux:
- </para>
- <para>
- <orderedlist>
- <listitem>
- <para>
- Add the following line to the <filename>~/.bashrc</filename> file. Note: this must be configured while logged in as the user who runs JBoss EAP or JBoss AS:
- </para>
- <para>
-<programlisting>
-export JBOSS_HOME=/path/to/jboss/installation/
-</programlisting>
- </para>
- </listitem>
- <listitem>
- <para>
- Run the following command to enable the <filename>JBOSS_HOME</filename> environment variable:
- </para>
- <para>
-<programlisting>
-source ~/.bashrc
-</programlisting>
- </para>
- </listitem>
- </orderedlist>
- </para>
- <note>
- <title>JBoss EAP <filename>JBOSS_HOME</filename> Environment Variable</title>
- <para>
- If you are running JBoss EAP, configure the <filename>JBOSS_HOME</filename> environment variable to point to the <filename>/path/to/jboss-eap-<replaceable>version</replaceable>/jboss-as/</filename> directory.
- </para>
- </note>
- </sect3>
+ To configure the
+ <filename>JBOSS_HOME</filename>
+ environment variable on Linux:
+ </para>
+ <para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Add the following line to the
+ <filename>~/.bashrc</filename>
+ file. Note: this must be configured while logged in as the user
+ who runs JBoss EAP or JBoss AS:
+ </para>
+ <para>
+ <programlisting>
+ export JBOSS_HOME=/path/to/jboss/installation/
+ </programlisting>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Run the following command to enable the
+ <filename>JBOSS_HOME</filename>
+ environment variable:
+ </para>
+ <para>
+ <programlisting>source ~/.bashrc</programlisting>
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ <note>
+ <title>
+ JBoss EAP
+ <filename>JBOSS_HOME</filename>
+ Environment Variable
+ </title>
+ <para>
+ If you are running JBoss EAP, configure the
+ <filename>JBOSS_HOME</filename>
+ environment variable to point to the
+ <filename>
+ /path/to/jboss-eap-
+ <replaceable>version</replaceable>
+ /jboss-as/
+ </filename>
+ directory.
+ </para>
+ </note>
+ </sect3>
</sect2>
- <sect2 id="building_deploying_from_source">
+ <sect2 id="building_deploying_from_source">
<title>Building and Deploying from the Sources</title>
- <para>
- During the first build, third-party libraries are obtained from an online
- repository, so you must be connected to the Internet, and if you are behind a proxy server, you need to define your proxy server address and proxy server port number. To define a proxy server, add the following line to the <filename>$JBOSS_HOME/bin/run.conf</filename> file:
- </para>
- <para>
-<programlisting><xi:include href="extras/runconf_javaops.xmlt" parse="text" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include></programlisting>
-<!--JAVA_OPTS=-Dhttp.proxyHost=<<replaceable>proxy-hostname </replaceable>>-Dhttp.proxyPort=<<replaceable>proxy-port</replaceable>> -->
- </para>
- <para>
- Replace <replaceable>proxy-hostname</replaceable> with the proxy server's hostname, and <replaceable>proxy-port</replaceable> with the correct proxy server port number.
- </para>
- <para>To build and deploy JBoss Portal from the sources, change into the <filename>JBOSS_PORTAL_SOURCE_DIRECTORY/build/</filename> directory, where <filename>JBOSS_PORTAL_SOURCE_DIRECTORY</filename> is the directory where the JBoss Portal source code was downloaded to. Then, Windows users need to run the <command>build.bat deploy</command> command, and Linux users need to run the <command>sh build.sh deploy</command> command.
- </para>
- <para>
- At the end of the build process, the <filename>jboss-portal.sar</filename> file is copied into the <filename>$JBOSS_HOME/server/default/deploy/</filename> directory:
- </para>
- <para>
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/build_deploy.png" scalefit="1"/>
- </imageobject>
+ <para>
+ During the first build, third-party libraries are obtained from an online
+ repository, so you must be connected to the Internet, and if you are behind a
+ proxy server, you need to define your proxy server address and proxy server
+ port number. To define a proxy server, add the following line to the
+ <filename>$JBOSS_HOME/bin/run.conf</filename>
+ file:
+ </para>
+ <para>
+ <programlisting>
+ <xi:include href="extras/runconf_javaops.xmlt" parse="text"
+ xmlns:xi="http://www.w3.org/2001/XInclude">
+ </xi:include>
+ </programlisting>
+ <!--JAVA_OPTS=-Dhttp.proxyHost=<<replaceable>proxy-hostname </replaceable>>-Dhttp.proxyPort=<<replaceable>proxy-port</replaceable>> -->
+ </para>
+ <para>
+ Replace
+ <replaceable>proxy-hostname</replaceable>
+ with the proxy server's hostname, and
+ <replaceable>proxy-port</replaceable>
+ with the correct proxy server port number.
+ </para>
+ <para>
+ To build and deploy JBoss Portal from the sources, change into the
+ <filename>JBOSS_PORTAL_SOURCE_DIRECTORY/build/</filename>
+ directory, where
+ <filename>JBOSS_PORTAL_SOURCE_DIRECTORY</filename>
+ is the directory where the JBoss Portal source code was downloaded to. Then,
+ Windows users need to run the
+ <command>build.bat deploy</command>
+ command, and Linux users need to run the
+ <command>sh build.sh deploy</command>
+ command.
+ </para>
+ <para>
+ At the end of the build process, the
+ <filename>jboss-portal.sar</filename>
+ file is copied into the
+ <filename>$JBOSS_HOME/server/default/deploy/</filename>
+ directory:
+ </para>
+ <para>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" valign="middle"
+ fileref="images/setup/build_deploy.png" scalefit="1" />
+ </imageobject>
</mediaobject>
- </para>
- <para>
- <note>
- <title>Portal Modules</title>
- <para>
- The previous steps install a bare version of JBoss Portal. In previous versions, several additional modules were deployed as well, but this has since been modularized to provide greater flexibility. To deploy additional modules, refer to the <ulink url="http://wiki.jboss.org/wiki/Wiki.jsp?page=PortalModules">Portal's module list</ulink> for more information. To deploy all modules at once, change into the <filename>build</filename> directory. If you are running Linux, run the <command>sh build.sh deploy-all</command> command. On Windows, run the <command>build.bat deploy-all</command> command.
- </para>
- </note>
- </para>
- <para>
- To build the clustered version on Linux operating systems:
- </para>
- <para>
- <orderedlist>
- <listitem>
- <para>
- Change into the <filename>JBOSS_PORTAL_SOURCE_DIRECTORY/build/</filename> directory, and run the following command:
- </para>
- <para>
-<programlisting>
-sh build.sh main
-</programlisting>
- </para>
- </listitem>
- <listitem>
- <para>
- Change into the <filename>JBOSS_PORTAL_SOURCE_DIRECTORY/core/</filename> directory, and run the following command:
- </para>
- <para>
-<programlisting>
-sh build.sh deploy-ha
-</programlisting>
- </para>
- <para>
- After the <command>sh build.sh deploy-ha</command> command completes, the <filename>jboss-portal-ha.sar</filename> file is copied into the <filename>$JBOSS_HOME/server/all/deploy/</filename> directory.
- </para>
- </listitem>
- </orderedlist>
- </para>
- <para>
- To build the clustered version on Windows, repeat the previous steps, replacing <command>sh build.sh</command> with <command>build.bat</command>.
- </para>
- </sect2>
- <sect2>
- <title>Database Setup</title>
- <para>
- A database is required for JBoss Portal to run. JBoss EAP and JBoss AS include an embedded Hypersonic SQL database that JBoss Portal can use; however, this is only recommended for developer use. The following databases are recommended for production use, and have had test suites run against them: MySQL 4 and 5, Microsoft SQL Server, PostgreSQL 8, and Oracle Database 9 and 10. JBoss Portal can use any database that is supported by Hibernate.
- </para>
- <para>
- To configure a database to use with JBoss Portal:
- </para>
- <para>
- <orderedlist>
- <listitem>
- <para>
- <emphasis role="bold">Create a new database:</emphasis> this guide assumes that the new database is called <emphasis>jbossportal</emphasis>.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis role="bold">Grant access rights for a user to the <emphasis>jbossportal</emphasis> database:</emphasis> JBoss Portal needs to create tables and modify table data. Grant access rights to a desired user to the <emphasis>jbossportal</emphasis> database. Configure the same username and password in the Datasource descriptor.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis role="bold">Deploy an RDBMS JDBC connector:</emphasis> an RDBMS JDBC connector is required for JBoss Portal to communicate with a database. Copy the connector into the <filename>$JBOSS_HOME/server/default/lib/</filename> directory. For example, an RDBMS JDBC connector for MySQL can be download from <ulink url="http://www.mysql.com/products/connector/j/"></ulink>. For the correct RDMBS JDBC connector, please refer to the database documentation.
- </para>
- </listitem>
- </orderedlist>
- </para>
- </sect2>
- <sect2>
- <title>Datasource Configuration</title>
- <para>
- The JBoss Portal binary download that was extracted in <xref linkend="install_binarydownload"/>, contains pre-configured Datasource descriptors for the more popular databases. Datasource descriptors are provided for the MySQL 4 and 5, PostgreSQL, Microsoft SQL Server, and Oracle databases, and can be found in the <filename>setup</filename> subdirectory where the JBoss Portal binary was extracted to:
- </para>
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/dsfiles.png"/>
- </imageobject>
- </mediaobject>
- <para>
- Copy the Datasource descriptor that matches your database into the <filename>$JBOSS_HOME/server/<replaceable>configuration</replaceable>/deploy/</filename> directory, where <replaceable>configuration</replaceable> is either all, default, minimal, or production. For example, if you are using the production configuration, copy the Datasource descriptor into the <filename>$JBOSS_HOME/server/production/deploy/</filename> directory. The production configuration only exists on JBoss EAP installations, and not JBoss AS.
- </para>
- <para>
- After the Datasource descriptor has been copied into the <filename>deploy</filename> directory, make sure the <computeroutput>user-name</computeroutput>, <computeroutput>password</computeroutput>, <computeroutput>connection-url</computeroutput>, and <computeroutput>driver-class</computeroutput>, are correct for your chosen database. Datasource descriptor files can be deployed to test before being used in production. The following is an example Datasource descriptor for a PostgreSQL database:
- </para>
- <programlisting role="XML"><![CDATA[
-<?xml version="1.0" encoding="UTF-8"?>
-<datasources>
- <local-tx-datasource>
- <jndi-name>PortalDS</jndi-name>
- <connection-url>jdbc:postgresql:jbossportal</connection-url>
- <driver-class>org.postgresql.Driver</driver-class>
- <user-name>portal</user-name>
- <password>portalpassword</password>
- </local-tx-datasource>
-</datasources>
- ]]></programlisting>
- <para>
- For further details about Datasource descriptors, please refer to the <ulink url="http://wiki.jboss.org/wiki/Wiki.jsp?page=CreateAJDBCDataSource">JBoss JDBC Datasource Wiki page</ulink>.
- </para>
- </sect2>
-</sect1>
- <sect1>
- <title>Deploying JBoss Portal</title>
- <para>
- To start JBoss EAP or JBoss AS and deploy JBoss Portal:
- </para>
- <para>
- <orderedlist>
- <listitem>
- <para>
- <emphasis role="bold">Datasource descriptor:</emphasis> if you have not done so already, change into the <filename>setup</filename> subdirectory where the JBoss Portal binary was extracted to. Copy the correct Datasource descriptor file (<filename>*-ds.xml</filename>) you modified in the previous steps into the <filename>$JBOSS_HOME/server/<replaceable>configuration</replaceable>/deploy/</filename> directory.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis role="bold">Start the server:</emphasis> change into the <filename>$JBOSS_HOME/bin/</filename> directory. On Windows, execute <command>run.bat</command>. On Linux, run the <command>sh run.sh</command> command. To specify a configuration to use, for example, the default configuration, append the <command> -c default</command> option to the <command>run.bat</command> or <command>sh run.sh</command> commands.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis role="bold">Log in to JBoss Portal:</emphasis> using a Web browser, navigate to <ulink url="http://localhost:8080/portal"></ulink> to open the JBoss Portal homepage. Log in using one of the two default accounts: username <emphasis>user</emphasis>, password <emphasis>user</emphasis>, or username <emphasis>admin</emphasis>, password <emphasis>admin</emphasis>.
- </para>
- </listitem>
- </orderedlist>
- </para>
- <formalpara>
- <title>SQL Errors</title>
- <para>
- Tables are automatically created the first time JBoss Portal starts. When deployed for the first time, JBoss Portal checks for the existence of the initial tables, which have not been created yet. This causes errors such as the following, which can safely be ignored:
- </para>
- </formalpara>
- <para>
-<programlisting><![CDATA[
-WARN [JDBCExceptionReporter] SQL Error: -22, SQLState: S0002
-ERROR [JDBCExceptionReporter] Table not found in statement ...
-WARN [JDBCExceptionReporter] SQL Error: 1146, SQLState: 42S02
-ERROR [JDBCExceptionReporter] Table 'jbossportal.jbp_cms_repositoryentry' doesn't exist
-WARN [JDBCExceptionReporter] SQL Error: 1146, SQLState: 42S02
-ERROR [JDBCExceptionReporter] Table 'jbossportal.jbp_cms_version_refs' doesn't exist
-]]></programlisting>
- </para>
-</sect1>
-
- <!--<sect1 id="install_installer">
- <title>Installing using the JEMS Installer</title>
- <para>As of JBoss 4.0.4GA, users are able to install JBoss Portal using the
- <emphasis>portal</emphasis>
- configuration in the installer process. This method often makes it easier to install AS + Portal, and allows
- for running JBoss Seam portlets by incorporating required libraries.
- <warning>This method will normally not supply you with the latest version of JBoss Portal. An alternative, is
- to run through the entire install process, and then replace the portal binary with the latest from the JBoss
- Portal download site.
- </warning>
- </para>
- <sect2>
- <title>Running the Installer</title>
+ </para>
<para>
+ <note>
+ <title>Portal Modules</title>
+ <para>
+ The previous steps install a bare version of JBoss Portal. In previous
+ versions, several additional modules were deployed as well, but this has
+ since been modularized to provide greater flexibility. To deploy
+ additional modules, refer to the
+ <ulink url="http://wiki.jboss.org/wiki/Wiki.jsp?page=PortalModules">
+ Portal's module list
+ </ulink>
+ for more information. To deploy all modules at once, change into the
+ <filename>build</filename>
+ directory. If you are running Linux, run the
+ <command>sh build.sh deploy-all</command>
+ command. On Windows, run the
+ <command>build.bat deploy-all</command>
+ command.
+ </para>
+ </note>
+ </para>
+ <para>To build the clustered version on Linux operating systems:</para>
+ <para>
<orderedlist>
<listitem>
- <para>Download the installer package from the JEMS installer page,
- <ulink
- url="http://labs.jboss.com/portal/jemsinstaller/downloads">
- here
- </ulink>
- .
- <warning>DO NOT use the JBoss Application Server Installer, as it will not contain the
- portal configuration! You must use this JEMS installer!
- </warning>
+ <para>
+ Change into the
+ <filename>JBOSS_PORTAL_SOURCE_DIRECTORY/build/</filename>
+ directory, and run the following command:
</para>
- </listitem>
- <listitem>
- <para>After you have downloaded the installer jar, you can execute it with
- <command>java -jar xxxx-installer.jar</command>
+ <para>
+ <programlisting>sh build.sh main</programlisting>
</para>
</listitem>
<listitem>
- <para>Select your language.
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/inst_lang.gif"/>
- </imageobject>
- </mediaobject>
+ <para>
+ Change into the
+ <filename>JBOSS_PORTAL_SOURCE_DIRECTORY/core/</filename>
+ directory, and run the following command:
</para>
- </listitem>
- <listitem>
- <para>Select an install path.
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/inst_path.gif"/>
- </imageobject>
- </mediaobject>
+ <para>
+ <programlisting>sh build.sh deploy-ha</programlisting>
</para>
- </listitem>
- <listitem>
- <para>Select the portal configuration.
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/inst_portal.gif"/>
- </imageobject>
- </mediaobject>
+ <para>
+ After the
+ <command>sh build.sh deploy-ha</command>
+ command completes, the
+ <filename>jboss-portal-ha.sar</filename>
+ file is copied into the
+ <filename>$JBOSS_HOME/server/all/deploy/</filename>
+ directory.
</para>
</listitem>
+ </orderedlist>
+ </para>
+ <para>
+ To build the clustered version on Windows, repeat the previous steps,
+ replacing
+ <command>sh build.sh</command>
+ with
+ <command>build.bat</command>
+ .
+ </para>
+ </sect2>
+ <sect2>
+ <title>Database Setup</title>
+ <para>
+ A database is required for JBoss Portal to run. JBoss EAP and JBoss AS include
+ an embedded Hypersonic SQL database that JBoss Portal can use; however, this
+ is only recommended for developer use. The following databases are recommended
+ for production use, and have had test suites run against them: MySQL 4 and 5,
+ Microsoft SQL Server, PostgreSQL 8, and Oracle Database 9 and 10. JBoss Portal
+ can use any database that is supported by Hibernate.
+ </para>
+ <para>To configure a database to use with JBoss Portal:</para>
+ <para>
+ <orderedlist>
<listitem>
- <para>Select the packs to install (normally, you would leave this alone).
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/inst_packs.gif"/>
- </imageobject>
- </mediaobject>
+ <para>
+ <emphasis role="bold">Create a new database:</emphasis>
+ this guide assumes that the new database is called
+ <emphasis>jbossportal</emphasis>
+ .
</para>
</listitem>
<listitem>
- <para>This is not portal specific, but it is good practice to secure your deployment here.
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/inst_secure.gif"/>
- </imageobject>
- </mediaobject>
+ <para>
+ <emphasis role="bold">
+ Grant access rights for a user to the
+ <emphasis>jbossportal</emphasis>
+ database:
+ </emphasis>
+ JBoss Portal needs to create tables and modify table data. Grant
+ access rights to a desired user to the
+ <emphasis>jbossportal</emphasis>
+ database. Configure the same username and password in the Datasource
+ descriptor.
</para>
</listitem>
<listitem>
- <para>Fin.
- <mediaobject>
- <imageobject>
- <imagedata align="center" valign="middle" fileref="images/setup/inst_fin.gif"/>
- </imageobject>
- </mediaobject>
+ <para>
+ <emphasis role="bold">Deploy an RDBMS JDBC connector:</emphasis>
+ an RDBMS JDBC connector is required for JBoss Portal to communicate
+ with a database. Copy the connector into the
+ <filename>$JBOSS_HOME/server/default/lib/</filename>
+ directory. For example, an RDBMS JDBC connector for MySQL can be
+ download from
+ <ulink url="http://www.mysql.com/products/connector/j/"></ulink>
+ . For the correct RDMBS JDBC connector, please refer to the database
+ documentation.
</para>
</listitem>
- <listitem>
- <para>Now, start JBoss AS, by executing
- <command>INSTALL_PATH/bin/run.bat</command>
- . The initial startup process will create all of the necessary portal tables in the embedded
- Hypersonic database.
- <note>This will require JDK5+</note>
- </para>
- </listitem>
- <listitem>
- <para>Point your browser to
- <ulink url="http://localhost:8080/portal">http://localhost:8080/portal</ulink>
- to view JBoss Portal.
-
- </para>
- </listitem>
</orderedlist>
</para>
</sect2>
+ <sect2>
+ <title>Datasource Configuration</title>
+ <para>
+ The JBoss Portal binary download that was extracted in
+ <xref linkend="install_binarydownload" />
+ , contains pre-configured Datasource descriptors for the more popular
+ databases. Datasource descriptors are provided for the MySQL 4 and 5,
+ PostgreSQL, Microsoft SQL Server, and Oracle databases, and can be found in
+ the
+ <filename>setup</filename>
+ subdirectory where the JBoss Portal binary was extracted to:
+ </para>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="center" valign="middle"
+ fileref="images/setup/dsfiles.png" />
+ </imageobject>
+ </mediaobject>
+ <para>
+ Copy the Datasource descriptor that matches your database into the
+ <filename>
+ $JBOSS_HOME/server/
+ <replaceable>configuration</replaceable>
+ /deploy/
+ </filename>
+ directory, where
+ <replaceable>configuration</replaceable>
+ is either all, default, minimal, or production. For example, if you are using
+ the production configuration, copy the Datasource descriptor into the
+ <filename>$JBOSS_HOME/server/production/deploy/</filename>
+ directory. The production configuration only exists on JBoss EAP
+ installations, and not JBoss AS.
+ </para>
+ <para>
+ After the Datasource descriptor has been copied into the
+ <filename>deploy</filename>
+ directory, make sure the
+ <computeroutput>user-name</computeroutput>
+ ,
+ <computeroutput>password</computeroutput>
+ ,
+ <computeroutput>connection-url</computeroutput>
+ , and
+ <computeroutput>driver-class</computeroutput>
+ , are correct for your chosen database. Datasource descriptor files can be
+ deployed to test before being used in production. The following is an example
+ Datasource descriptor for a PostgreSQL database:
+ </para>
+ <programlisting role="XML"><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+<datasources>
+ <local-tx-datasource>
+ <jndi-name>PortalDS</jndi-name>
+ <connection-url>jdbc:postgresql:jbossportal</connection-url>
+ <driver-class>org.postgresql.Driver</driver-class>
+ <user-name>portal</user-name>
+ <password>portalpassword</password>
+ </local-tx-datasource>
+</datasources>
+ ]]></programlisting>
+ <para>
+ For further details about Datasource descriptors, please refer to the
+ <ulink url="http://wiki.jboss.org/wiki/Wiki.jsp?page=CreateAJDBCDataSource">
+ JBoss JDBC Datasource Wiki page
+ </ulink>
+ .
+ </para>
+ </sect2>
+ </sect1>
+ <sect1>
+ <title>Deploying JBoss Portal</title>
+ <para>To start JBoss EAP or JBoss AS and deploy JBoss Portal:</para>
+ <para>
+ <orderedlist>
+ <listitem>
+ <para>
+ <emphasis role="bold">Datasource descriptor:</emphasis>
+ if you have not done so already, change into the
+ <filename>setup</filename>
+ subdirectory where the JBoss Portal binary was extracted to. Copy the
+ correct Datasource descriptor file (
+ <filename>*-ds.xml</filename>
+ ) you modified in the previous steps into the
+ <filename>
+ $JBOSS_HOME/server/
+ <replaceable>configuration</replaceable>
+ /deploy/
+ </filename>
+ directory.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis role="bold">Start the server:</emphasis>
+ change into the
+ <filename>$JBOSS_HOME/bin/</filename>
+ directory. On Windows, execute
+ <command>run.bat</command>
+ . On Linux, run the
+ <command>sh run.sh</command>
+ command. To specify a configuration to use, for example, the default
+ configuration, append the
+ <command>-c default</command>
+ option to the
+ <command>run.bat</command>
+ or
+ <command>sh run.sh</command>
+ commands.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <emphasis role="bold">Log in to JBoss Portal:</emphasis>
+ using a Web browser, navigate to
+ <ulink url="http://localhost:8080/portal"></ulink>
+ to open the JBoss Portal homepage. Log in using one of the two default
+ accounts: username
+ <emphasis>user</emphasis>
+ , password
+ <emphasis>user</emphasis>
+ , or username
+ <emphasis>admin</emphasis>
+ , password
+ <emphasis>admin</emphasis>
+ .
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ <formalpara>
+ <title>SQL Errors</title>
+ <para>
+ Tables are automatically created the first time JBoss Portal starts. When
+ deployed for the first time, JBoss Portal checks for the existence of the
+ initial tables, which have not been created yet. This causes errors such as
+ the following, which can safely be ignored:
+ </para>
+ </formalpara>
+ <para>
+ <programlisting><![CDATA[
+WARN [JDBCExceptionReporter] SQL Error: -22, SQLState: S0002
+ERROR [JDBCExceptionReporter] Table not found in statement ...
+WARN [JDBCExceptionReporter] SQL Error: 1146, SQLState: 42S02
+ERROR [JDBCExceptionReporter] Table 'jbossportal.jbp_cms_repositoryentry' doesn't exist
+WARN [JDBCExceptionReporter] SQL Error: 1146, SQLState: 42S02
+ERROR [JDBCExceptionReporter] Table 'jbossportal.jbp_cms_version_refs' doesn't exist
+]]></programlisting>
+ </para>
+ </sect1>
- </sect1>-->
-
</chapter>
Modified: docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/modules/supported.xml
===================================================================
--- docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/modules/supported.xml 2008-07-15 14:12:50 UTC (rev 11451)
+++ docs/branches/JBoss_Portal_Branch_2_7/referenceGuide/en/modules/supported.xml 2008-07-15 15:49:02 UTC (rev 11452)
@@ -36,7 +36,7 @@
</sect1>
<sect1>
<title>JBoss Application Server</title>
- <para>JBoss Portal 2.6.5 is tested with JBoss Application Server (AS) 4.2.1, JBoss AS 4.2.2, JBoss Enterprise Application Platform (EAP) 4.2 and JBoss EAP 4.3. It is highly recommended that customers who have access to the <ulink url="https://support.redhat.com/portal/login.html">JBoss Customer Support Portal (CSP)</ulink> use JBoss EAP 4.3 (It is mandatory to get access to professional support). Customers who do not have access to the JBoss CSP should use <ulink url="http://labs.jboss.com/jbossas/">JBoss AS</ulink>.
+ <para>JBoss Portal 2.7.0 is tested with JBoss Application Server (AS) JBoss AS 4.2.2, JBoss Enterprise Application Platform (EAP) 4.2 and JBoss EAP 4.3. It is highly recommended that customers who have access to the <ulink url="https://support.redhat.com/portal/login.html">JBoss Customer Support Portal (CSP)</ulink> use JBoss EAP 4.3. Customers who do not have access to the JBoss CSP should use <ulink url="http://labs.jboss.com/jbossas/">JBoss AS</ulink>.
</para>
<warning>
<para>JBoss AS versions 4.0.<replaceable>x</replaceable> are not supported.</para>
15 years, 11 months
JBoss Portal SVN: r11451 - in branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF: jsp/users and 1 other directory.
by portal-commits@lists.jboss.org
Author: sviluppatorefico
Date: 2008-07-15 10:12:50 -0400 (Tue, 15 Jul 2008)
New Revision: 11451
Modified:
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/jsp/users/help.jsp
branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/portlet.xml
Log:
added help support into current users portlet
Modified: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/jsp/users/help.jsp
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/jsp/users/help.jsp 2008-07-15 13:52:13 UTC (rev 11450)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/jsp/users/help.jsp 2008-07-15 14:12:50 UTC (rev 11451)
@@ -1,41 +1,38 @@
-<%--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ JBoss, a division of Red Hat ~
- ~ Copyright 2006, Red Hat Middleware, LLC, and individual ~
- ~ contributors as indicated by the @authors tag. See the ~
- ~ copyright.txt in the distribution for a full listing of ~
- ~ individual contributors. ~
- ~ ~
- ~ This is free software; you can redistribute it and/or modify it ~
- ~ under the terms of the GNU Lesser General Public License as ~
- ~ published by the Free Software Foundation; either version 2.1 of ~
- ~ the License, or (at your option) any later version. ~
- ~ ~
- ~ This software is distributed in the hope that it will be useful, ~
- ~ but WITHOUT ANY WARRANTY; without even the implied warranty of ~
- ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ~
- ~ Lesser General Public License for more details. ~
- ~ ~
- ~ You should have received a copy of the GNU Lesser General Public ~
- ~ License along with this software; if not, write to the Free ~
- ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ~
- ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org. ~
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--%>
-
-<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
-
-<portlet:defineObjects />
-
-<div class="portlet-font" style="font-size: larger; font-weight: bold">Current
-Users Portlet Help:</div>
-</div>
-<br />
-<div class="portlet-font">Description: The Current users Portlet
-shows current users actually connected. You can to see both guest and
-logged users number and to see which users are logged.</div>
-<br />
-<div class="portlet-font">You can to manage what to show to users.
-You can to choose paragraphes to show, clicking the checkboxes</div>
-<br />
-<br />
-<div class="portlet-font"><a
+<%--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ JBoss, a division of Red Hat ~
+ ~ Copyright 2006, Red Hat Middleware, LLC, and individual ~
+ ~ contributors as indicated by the @authors tag. See the ~
+ ~ copyright.txt in the distribution for a full listing of ~
+ ~ individual contributors. ~
+ ~ ~
+ ~ This is free software; you can redistribute it and/or modify it ~
+ ~ under the terms of the GNU Lesser General Public License as ~
+ ~ published by the Free Software Foundation; either version 2.1 of ~
+ ~ the License, or (at your option) any later version. ~
+ ~ ~
+ ~ This software is distributed in the hope that it will be useful, ~
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of ~
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ~
+ ~ Lesser General Public License for more details. ~
+ ~ ~
+ ~ You should have received a copy of the GNU Lesser General Public ~
+ ~ License along with this software; if not, write to the Free ~
+ ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ~
+ ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org. ~
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--%>
+
+<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
+
+<portlet:defineObjects />
+
+<div class="portlet-font" style="font-size: larger; font-weight: bold">Current
+Users Portlet Help:</div>
+</div>
+<br />
+<div class="portlet-font">Description: The Current users Portlet
+shows current users actually connected. You can to see both guest and
+logged users number and to see which users are logged.</div>
+<br />
+<br />
+<div class="portlet-font"><a
href="<portlet:renderURL portletMode='view'/>">Back</a></div>
\ No newline at end of file
Modified: branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/portlet.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/portlet.xml 2008-07-15 13:52:13 UTC (rev 11450)
+++ branches/JBoss_Portal_Branch_2_7/core-samples/src/resources/portal-users-samples-war/WEB-INF/portlet.xml 2008-07-15 14:12:50 UTC (rev 11451)
@@ -47,7 +47,8 @@
<portlet-class>org.jboss.portal.core.samples.users.CurrentUsersPortlet</portlet-class>
<supports>
<mime-type>text/html</mime-type>
- <portlet-mode>VIEW</portlet-mode>
+ <portlet-mode>VIEW</portlet-mode>
+ <portlet-mode>HELP</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
<supported-locale>it</supported-locale>
15 years, 11 months
JBoss Portal SVN: r11450 - in branches/JBoss_Portal_Branch_2_7: cms/src/main/org/jboss/portal/cms/impl and 9 other directories.
by portal-commits@lists.jboss.org
Author: thomas.heute(a)jboss.com
Date: 2008-07-15 09:52:13 -0400 (Tue, 15 Jul 2008)
New Revision: 11450
Added:
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/util/ResourceUtil.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileSize.java
Modified:
branches/JBoss_Portal_Branch_2_7/cms/build.xml
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/CMSObjectImpl.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/ContentImpl.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/FileImpl.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ACLEnforcer.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentCreateCommand.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentGetCommand.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentGetVersionsCommand.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileCreateCommand.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileGetListCommand.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileUpdateAndVersionCommand.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileUpdateCommand.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FolderCreateCommand.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/StoreArchiveCommand.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/model/Content.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/model/File.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileArchiveUpload.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileCreate.java
branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFolderCreate.java
branches/JBoss_Portal_Branch_2_7/core-cms/src/main/org/jboss/portal/core/cms/ui/admin/CMSAdminPortlet.java
branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource.properties
branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/create.jsp
branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/edit.jsp
branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/folderlist.jsp
branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/pending_items.jsp
Log:
Merging changes from Sohil made on Branch 2.6:
JBPORTAL-2046 - Exception is thrown upon clicking the '+' symbol of the 'Root Folder' node when moving content
JBPORTAL-2015 - CMS content object should return a long for the size
JBPORTAL-2016 - CMS content object should have a method to return the size of the latest version of the file
JBPORTAL-2031 - Create CMS content which contains a slash '/' fails
JBPORTAL-2002 - VersionException thrown when you try to upload an archive (ZIP) that contains files that already exists in the repository
JBPORTAL-2033 - User with only read-permissions on a folder cannot read a folder
JBPORTAL-1929 , JBPORTAL-1982 - Relative links in CMS content munged by WYSIWYG editor
Modified: branches/JBoss_Portal_Branch_2_7/cms/build.xml
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/build.xml 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/build.xml 2008-07-15 13:52:13 UTC (rev 11450)
@@ -407,6 +407,7 @@
<test todir="${test.reports}" name="org.jboss.portal.test.cms.commands.TestFileCreateFailed"/>
<test todir="${test.reports}" name="org.jboss.portal.test.cms.commands.TestFileDelete"/>
<test todir="${test.reports}" name="org.jboss.portal.test.cms.commands.TestSearch"/>
+ <test todir="${test.reports}" name="org.jboss.portal.test.cms.commands.TestFileSize"/>
<test todir="${test.reports}" name="org.jboss.portal.test.cms.commands.TestFolderCopy"/>
<test todir="${test.reports}" name="org.jboss.portal.test.cms.commands.TestFolderCreate"/>
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/CMSObjectImpl.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/CMSObjectImpl.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/CMSObjectImpl.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -23,6 +23,7 @@
package org.jboss.portal.cms.impl;
import org.jboss.portal.cms.model.CMSObject;
+import org.jboss.portal.cms.util.FileUtil;
import java.io.Serializable;
import java.util.Date;
@@ -87,12 +88,12 @@
public String getBasePath()
{
- return basePath;
+ return FileUtil.cleanDoubleSlashes(basePath);
}
public void setBasePath(String basePath)
- {
- this.basePath = basePath;
+ {
+ this.basePath = FileUtil.cleanDoubleSlashes(basePath);
}
public String getBaseUUID()
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/ContentImpl.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/ContentImpl.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/ContentImpl.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -60,7 +60,7 @@
protected String mimeType;
- protected int size;
+ protected long size;
protected boolean isWaitingForPublishApproval = false;
protected String approvalProcessId = null;
@@ -166,7 +166,7 @@
isLive = live;
}
- public int getSize()
+ public long getSize()
{
return this.size;
}
@@ -181,7 +181,7 @@
this.mimeType = mimeType;
}
- public void setSize(int size)
+ public void setSize(long size)
{
this.size = size;
}
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/FileImpl.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/FileImpl.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/FileImpl.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -34,19 +34,8 @@
{
/** The serialVersionUID */
private static final long serialVersionUID = 7700626816158921578L;
- protected long fileSize;
protected Content content;
- public long getFileSize()
- {
- return fileSize;
- }
-
- public void setFileSize(long fileSize)
- {
- this.fileSize = fileSize;
- }
-
public void setContent(Locale locale, Content content)
{
this.content = content;
@@ -64,5 +53,10 @@
return this.content;
}
+
+ public long getSize()
+ {
+ return this.content.getSize();
+ }
}
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/interceptors/ACLInterceptor.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -232,44 +232,52 @@
JCRCommand command = (JCRCommand)securityContext.getAttribute("command");
try
{
- if (filteredResponse instanceof Folder)
+ //UI-level filtering of resources for the CMSAdmin tool
+ if(JCRCMS.isUISecurityFilterActive())
{
- Folder folder = (Folder)filteredResponse;
- List filteredFolders = new ArrayList();
- List filteredFiles = new ArrayList();
- securityContext.removeAttribute("command");
- if (folder.getFolders() != null)
+ if (filteredResponse instanceof Folder)
{
- for (Iterator itr = folder.getFolders().iterator(); itr.hasNext();)
+ Folder folder = (Folder)filteredResponse;
+ List filteredFolders = new ArrayList();
+ List filteredFiles = new ArrayList();
+ securityContext.removeAttribute("command");
+ if (folder.getFolders() != null)
{
- Folder cour = (Folder)itr.next();
- securityContext.setAttribute("applyFilter", cour.getBasePath());
- PortalPermission cmsPermission = new CMSPermission(securityContext);
- boolean allow = this.authorizationManager.checkPermission(cmsPermission);
- if (allow)
+ for (Iterator itr = folder.getFolders().iterator(); itr.hasNext();)
{
- filteredFolders.add(cour);
+ Folder cour = (Folder)itr.next();
+ securityContext.setAttribute("applyFilter", cour.getBasePath());
+ securityContext.setAttribute("isFolder", Boolean.TRUE);
+ PortalPermission cmsPermission = new CMSPermission(securityContext);
+ boolean allow = this.authorizationManager.checkPermission(cmsPermission);
+ if (allow)
+ {
+ filteredFolders.add(cour);
+ }
}
}
- }
- if (folder.getFiles() != null)
- {
- for (Iterator itr = folder.getFiles().iterator(); itr.hasNext();)
+ if (folder.getFiles() != null)
{
- File cour = (File)itr.next();
- securityContext.setAttribute("applyFilter", cour.getBasePath());
- PortalPermission cmsPermission = new CMSPermission(securityContext);
- boolean allow = this.authorizationManager.checkPermission(cmsPermission);
- if (allow)
+ for (Iterator itr = folder.getFiles().iterator(); itr.hasNext();)
{
- filteredFiles.add(cour);
+ File cour = (File)itr.next();
+ securityContext.setAttribute("applyFilter", cour.getBasePath());
+ securityContext.setAttribute("isFolder", Boolean.FALSE);
+ PortalPermission cmsPermission = new CMSPermission(securityContext);
+ boolean allow = this.authorizationManager.checkPermission(cmsPermission);
+ if (allow)
+ {
+ filteredFiles.add(cour);
+ }
}
}
+ folder.setFolders(filteredFolders);
+ folder.setFiles(filteredFiles);
}
- folder.setFolders(filteredFolders);
- folder.setFiles(filteredFiles);
}
- else if ((filteredResponse instanceof List) && (command instanceof SearchCommand))
+
+ //Filtering of resources in the context of Search
+ if ((filteredResponse instanceof List) && (command instanceof SearchCommand))
{
List list = (List)filteredResponse;
List filteredFiles = new ArrayList();
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/JCRCMS.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -132,6 +132,30 @@
{
turnOffWorkflow.set(null);
}
+
+ /**
+ *
+ */
+ protected static ThreadLocal applyUISecurityFilter = new ThreadLocal();
+ public static void enableUISecurityFilter()
+ {
+ applyUISecurityFilter.set(Boolean.TRUE);
+ }
+ public static void disableUISecurityFilter()
+ {
+ applyUISecurityFilter.set(null);
+ }
+ public static boolean isUISecurityFilterActive()
+ {
+ boolean isUISecurityFilterActive = false;
+
+ if(applyUISecurityFilter.get() != null && ((Boolean)applyUISecurityFilter.get()))
+ {
+ isUISecurityFilterActive = true;
+ }
+
+ return isUISecurityFilterActive;
+ }
public JCRCMS()
{
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ACLEnforcer.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ACLEnforcer.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ACLEnforcer.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -35,7 +35,6 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -146,7 +145,15 @@
if (cmsSecurityContext.getAttribute("applyFilter") != null)
{
String path = (String)cmsSecurityContext.getAttribute("applyFilter");
- hasAccess = this.computeToolAccess(loggedInUser, path);
+ Boolean isFolder = (Boolean)cmsSecurityContext.getAttribute("isFolder");
+ if(isFolder)
+ {
+ hasAccess = this.hasReadAccess(loggedInUser, path);
+ }
+ else
+ {
+ hasAccess = this.hasWriteAccess(loggedInUser, path);
+ }
}
else if (cmsSecurityContext.getAttribute("path") != null)
{
@@ -211,22 +218,33 @@
path = ((FileGetListCommand)command).sFilePath;
}
- hasReadAccess = this.computeAccess(user, path, "read");
- if (!hasReadAccess)
+ hasReadAccess = this.hasReadAccess(user, path);
+
+ return hasReadAccess;
+ }
+
+ /**
+ *
+ * @param user
+ * @param path
+ * @return
+ */
+ private boolean hasReadAccess(User user, String path)
+ {
+ boolean hasAccess = this.computeAccess(user, path, "read");
+ if (!hasAccess)
{
//make sure implied write is not available
- hasReadAccess = this.computeAccess(user, path, "write");
- if (!hasReadAccess)
+ hasAccess = this.computeAccess(user, path, "write");
+ if (!hasAccess)
{
//make sure implied manage is not available
- hasReadAccess = this.computeAccess(user, path, "manage");
+ hasAccess = this.computeAccess(user, path, "manage");
}
}
-
- return hasReadAccess;
+ return hasAccess;
}
- //-------------------------------------------------------------------------------------------------------------------------------------------
/**
* @param user
* @param command
@@ -275,8 +293,24 @@
return hasWriteAccess;
}
+
+ /**
+ *
+ * @param user
+ * @param path
+ * @return
+ */
+ private boolean hasWriteAccess(User user, String path)
+ {
+ boolean hasAccess = this.computeAccess(user, path, "write");
+ if (!hasAccess)
+ {
+ //make sure implied manage is not available
+ hasAccess = this.computeAccess(user, path, "manage");
+ }
+ return hasAccess;
+ }
- //-----------------------------------------------------------------------------------------------------------------------------------------
/**
* @param user
* @param command
@@ -315,8 +349,7 @@
return hasManageAccess;
}
-
- //-----------------------------------------------------------------------------------------------------------------------------------------
+ //----------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
*
*/
@@ -461,82 +494,9 @@
}
/**
- * This is used to filter out cms resources in the CMS Admin tool, so that the user can see only the resources that
- * he has write/manage access to
- *
* @param user
- * @param path
* @return
*/
- private boolean computeToolAccess(User user, String path)
- {
- boolean toolAccess = false;
-
- //to prevent any administration issues, if the user is the 'cmsRoot'
- //treat him like a super user with access to everything in the cms
- User root = this.authorizationManager.getProvider().getRoot();
- if (user != null && user.getUserName() != null && user.getUserName().equals(root.getUserName()))
- {
- return true;
- }
-
- //get the permissions available for the user in question
- Collection userPermissions = this.getPermissions(user);
-
- //check against permissions that are explicitly specified on this node (file or folder)
- Collection specificPermissions = this.getPermissions(path);
- for (Iterator itr = specificPermissions.iterator(); itr.hasNext();)
- {
- Permission specificPermission = (Permission)itr.next();
- if ((specificPermission.getService().equals("cms")) &&
- (specificPermission.getAction().equals("write") || specificPermission.getAction().equals("manage"))
- )
- {
- for (Iterator itr2 = userPermissions.iterator(); itr2.hasNext();)
- {
- Permission userPermission = (Permission)itr2.next();
- if ((userPermission.getService().equals("cms")) &&
- (userPermission.getAction().equals("write") || userPermission.getAction().equals("manage"))
- )
- {
- String pathCriteria = userPermission.findCriteriaValue("path");
- if (pathCriteria.equals(path))
- {
- //this means this user has read access to this path
- toolAccess = true;
- }
- }
- }
- }
- }
-
- if (specificPermissions != null && !specificPermissions.isEmpty())
- {
- //explicit permissions on this node have been specified....
- //which override any permissions that could be inherited via the path hierarchy
- return toolAccess;
- }
-
- //if i am here...calculate based on permissions inherited via path hierarchy
- Collection writeOrMoreCriteria = this.getWriteOrMore(userPermissions);
- for (Iterator itr = writeOrMoreCriteria.iterator(); itr.hasNext();)
- {
- Criteria cour = (Criteria)itr.next();
- if (this.doesPathMatchPattern(path, cour.getValue()))
- {
-
- toolAccess = true;
- break;
- }
- }
-
- return toolAccess;
- }
-
- /**
- * @param user
- * @return
- */
private boolean computeWorkflowManagementAccess(User user, Set managerRoles)
{
if (managerRoles == null || managerRoles.isEmpty())
@@ -614,106 +574,6 @@
}
/**
- * @param allPermissions
- * @return
- */
- private Collection getWriteOrMore(Collection allPermissions)
- {
- Collection writeOrMore = new HashSet();
-
- if (allPermissions != null)
- {
- for (Iterator itr = allPermissions.iterator(); itr.hasNext();)
- {
- Permission cour = (Permission)itr.next();
- if ((cour.getService().equals("cms")) &&
- (cour.getAction().equals("write") || cour.getAction().equals("manage"))
- )
- {
- writeOrMore.addAll(cour.getCriteria());
- }
- }
- }
-
- return writeOrMore;
- }
-
- /**
- * @param path
- * @param pattern
- * @return
- */
- private boolean doesPathMatchPattern(String path, String pattern)
- {
- boolean match = true;
-
- //format the path first before starting to match it with the specified pattern
- if (!path.startsWith("/"))
- {
- path = "/" + path;
- }
- if (!path.endsWith("/"))
- {
- path = path + "/";
- }
-
- StringTokenizer patternTokenizer = new StringTokenizer(pattern, "/");
- StringTokenizer pathTokenizer = new StringTokenizer(path, "/");
- StringBuffer pathMatched = new StringBuffer("/");
- StringBuffer patternMatched = new StringBuffer();
- if (pattern.startsWith("/"))
- {
- patternMatched.append("/");
- }
- while (
- patternTokenizer.hasMoreTokens() &&
- pathTokenizer.hasMoreTokens()
- )
- {
- String patternToken = patternTokenizer.nextToken();
- String pathToken = pathTokenizer.nextToken();
-
- //setup token tracking
- pathMatched.append(pathToken + "/");
- if (patternTokenizer.hasMoreTokens())
- {
- patternMatched.append(patternToken + "/");
- }
- else
- {
- patternMatched.append(patternToken);
- }
-
- //perform token matching
- if (!match)
- {
- continue;
- }
- int wildCardIndex = patternToken.indexOf('*');
- //if wildCard is not relevant
- if (wildCardIndex <= 0)
- {
- //if wildCardIndex == 0 then this token matches...
- if (wildCardIndex != 0 && !pathToken.equals(patternToken))
- {
- match = false;
- }
- }
- else
- {
- String wildPath = pathToken.substring(0, wildCardIndex);
- String wildPattern = patternToken.substring(0, wildCardIndex);
- if (!wildPath.equals(wildPattern))
- {
- match = false;
- }
- }
- }
-
- return match;
- }
-
- /**
* @param action
* @param impliedTarget
* @return
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentCreateCommand.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentCreateCommand.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentCreateCommand.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -62,6 +62,8 @@
contentNode.setProperty("portalcms:description", new StringValue(mFile.getContent().getDescription()));
contentNode.setProperty("portalcms:title", new StringValue(mFile.getContent().getTitle()));
contentNode.setProperty("portalcms:language", new StringValue(mFile.getContent().getLocale().getLanguage()));
+ contentNode.setProperty("portalcms:size", new StringValue(String
+ .valueOf(mFile.getContent().getBytes().length)));
if (mFile.getContent().getMimeType() != null)
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentGetCommand.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentGetCommand.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentGetCommand.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -102,6 +102,11 @@
content.setLastModified(contentNode.getProperty("jcr:lastModified").getDate().getTime());
content.setBasePath(this.msPath + "/" + this.mlocale.getLanguage());
content.setDescription(contentNode.getProperty("portalcms:description").getString());
+ if (contentNode.hasProperty("portalcms:size"))
+ {
+ long size = Long.parseLong(contentNode.getProperty("portalcms:size").getString());
+ content.setSize(size);
+ }
if (this.msVersionNumber == null) // get LIVE
{
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentGetVersionsCommand.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentGetVersionsCommand.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/ContentGetVersionsCommand.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -95,10 +95,10 @@
content.setVersionUUID(node.getUUID());
content.setBytes("".getBytes());
- int size = 0;
+ long size = 0;
if (node.hasProperty("portalcms:size"))
{
- size = Integer.parseInt(node.getProperty("portalcms:size").getString());
+ size = Long.parseLong(node.getProperty("portalcms:size").getString());
}
content.setSize(size);
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileCreateCommand.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileCreateCommand.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileCreateCommand.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -22,10 +22,14 @@
******************************************************************************/
package org.jboss.portal.cms.impl.jcr.command;
+import org.apache.log4j.Logger;
+
import org.apache.jackrabbit.value.DateValue;
+import org.jboss.portal.cms.CMSException;
import org.jboss.portal.cms.impl.jcr.JCRCommand;
import org.jboss.portal.cms.model.File;
import org.jboss.portal.cms.util.NodeUtil;
+import org.jboss.portal.cms.impl.jcr.util.ResourceUtil;
import javax.jcr.Node;
import java.util.Calendar;
@@ -38,6 +42,8 @@
{
/** The serialVersionUID */
private static final long serialVersionUID = -653823238247348749L;
+ private static Logger log = Logger.getLogger(FileCreateCommand.class);
+
File mFile;
public FileCreateCommand(File file)
@@ -49,28 +55,37 @@
{
try
{
+ //Validate the FilePath
+ boolean isValid = NodeUtil.isValidPath(mFile.getBasePath());
+ if(!isValid)
+ {
+ throw new CMSException("Path: "+mFile.getBasePath()+" is invalid");
+ }
+
JCRCommand existsCMD = (JCRCommand)context.getCommandFactory().createItemExistsCommand(mFile.getBasePath());
Boolean bExists = (Boolean)context.execute(existsCMD);
- if (!bExists.booleanValue()) // if fileNode exists already, ignore the creation.
+
+ //If fileNode exists already, ignore the creation.
+ if (!bExists.booleanValue())
{
String parentPath = NodeUtil.getParentPath(mFile.getBasePath());
String nodeName = NodeUtil.getNodeName(mFile.getBasePath());
-
+
+ //Make sure the Path hierarchy is complete
+ ResourceUtil.createParentHierarchy(context, parentPath);
+
Node parentNode = (Node)context.getSession().getItem(parentPath);
Node fileNode = parentNode.addNode(nodeName, "portalcms:file");
parentNode.setProperty("jcr:lastModified", new DateValue(Calendar.getInstance()));
parentNode.setProperty("portalcms:lastmodified", new DateValue(Calendar.getInstance()));
fileNode.setProperty("jcr:lastModified", new DateValue(Calendar.getInstance()));
parentNode.save();
- }
- else
- {
- // TODO: Do something !
- }
+ }
}
catch (Exception e)
{
- e.printStackTrace();
+ log.error(this, e);
+ throw new CMSException(e);
}
return null;
}
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileGetListCommand.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileGetListCommand.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileGetListCommand.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -81,6 +81,11 @@
content.setEncoding(contentNode.getProperty("jcr:encoding").getString());
content.setStream(contentNode.getProperty("jcr:data").getStream());
content.setLocale(new Locale(contentNode.getProperty("portalcms:language").getString()));
+ if (contentNode.hasProperty("portalcms:size"))
+ {
+ long size = Long.parseLong(contentNode.getProperty("portalcms:size").getString());
+ content.setSize(size);
+ }
contents.add(content);
}
}
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileUpdateAndVersionCommand.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileUpdateAndVersionCommand.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileUpdateAndVersionCommand.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -24,6 +24,7 @@
import org.apache.jackrabbit.value.BinaryValue;
import org.apache.jackrabbit.value.DateValue;
+import org.apache.jackrabbit.value.StringValue;
import org.jboss.portal.cms.CMSMimeMappings;
import org.jboss.portal.cms.impl.jcr.JCRCommand;
import org.jboss.portal.cms.impl.jcr.util.VersionUtil;
@@ -66,6 +67,8 @@
contentNode.setProperty("jcr:encoding", "UTF-8");
contentNode.setProperty("jcr:data", new BinaryValue(mFile.getContent().getBytes()));
contentNode.setProperty("jcr:lastModified", timestamp);
+ contentNode.setProperty("portalcms:size", new StringValue(String
+ .valueOf(mFile.getContent().getBytes().length)));
if (mFile.getContent().getMimeType() != null)
{
@@ -91,7 +94,7 @@
//Update the lastModified Property of the FileNode of this content
Node fileNode = (Node)context.getSession().getItem(mFile.getBasePath());
- fileNode.setProperty("jcr:lastModified", timestamp);
+ fileNode.setProperty("jcr:lastModified", timestamp);
// Update the folder modified date
fileNode.getParent().setProperty("portalcms:lastmodified", timestamp);
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileUpdateCommand.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileUpdateCommand.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FileUpdateCommand.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -24,6 +24,7 @@
import org.apache.jackrabbit.value.BinaryValue;
import org.apache.jackrabbit.value.DateValue;
+import org.apache.jackrabbit.value.StringValue;
import org.jboss.portal.cms.CMSMimeMappings;
import org.jboss.portal.cms.impl.jcr.JCRCommand;
import org.jboss.portal.cms.model.File;
@@ -65,6 +66,8 @@
contentNode.setProperty("jcr:encoding", "UTF-8");
contentNode.setProperty("jcr:data", new BinaryValue(mFile.getContent().getBytes()));
contentNode.setProperty("jcr:lastModified", timestamp);
+ contentNode.setProperty("portalcms:size", new StringValue(String
+ .valueOf(mFile.getContent().getBytes().length)));
if (mFile.getContent().getMimeType() != null)
{
@@ -86,7 +89,7 @@
//Update the lastModified Property of the FileNode of this content
Node fileNode = (Node)context.getSession().getItem(mFile.getBasePath());
- fileNode.setProperty("jcr:lastModified", timestamp);
+ fileNode.setProperty("jcr:lastModified", timestamp);
// Update the folder modified date
fileNode.getParent().setProperty("portalcms:lastmodified", timestamp);
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FolderCreateCommand.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FolderCreateCommand.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/FolderCreateCommand.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -22,9 +22,13 @@
******************************************************************************/
package org.jboss.portal.cms.impl.jcr.command;
+import org.apache.log4j.Logger;
import org.apache.jackrabbit.value.DateValue;
import org.apache.jackrabbit.value.StringValue;
+
+import org.jboss.portal.cms.CMSException;
import org.jboss.portal.cms.impl.jcr.JCRCommand;
+import org.jboss.portal.cms.impl.jcr.util.ResourceUtil;
import org.jboss.portal.cms.model.Folder;
import org.jboss.portal.cms.util.NodeUtil;
@@ -40,6 +44,8 @@
{
/** The serialVersionUID */
private static final long serialVersionUID = -3007711915681479942L;
+ private static Logger log = Logger.getLogger(FolderCreateCommand.class);
+
Folder mFolder;
public FolderCreateCommand(Folder folder)
@@ -51,8 +57,18 @@
{
try
{
+ //Validate the FolderPath
+ boolean isValid = NodeUtil.isValidPath(mFolder.getBasePath());
+ if(!isValid)
+ {
+ throw new CMSException("Path: "+mFolder.getBasePath()+" is invalid");
+ }
+
String parentPath = NodeUtil.getParentPath(mFolder.getBasePath());
String nodeName = NodeUtil.getNodeName(mFolder.getBasePath());
+
+ //Make sure the Path hierarchy is complete
+ ResourceUtil.createParentHierarchy(context, parentPath);
Node parentNode = (Node)context.getSession().getItem(parentPath);
Node folderNode = parentNode.addNode(nodeName, "portalcms:folder");
@@ -71,7 +87,8 @@
}
catch (Exception e)
{
- e.printStackTrace();
+ log.error(this, e);
+ throw new CMSException(e);
}
return null;
}
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/StoreArchiveCommand.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/StoreArchiveCommand.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/command/StoreArchiveCommand.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -113,25 +113,23 @@
content.setBasePath(sBasePath + "/" + this.msLanguage);
content.setBytes(zipBytes);
file.setContent(new Locale(this.msLanguage), content);
-
- // in case folder does not exist, yet.
- String sParentPath = NodeUtil.getParentPath(sBasePath);
- JCRCommand nodeExists = (JCRCommand)context.getCommandFactory().createItemExistsCommand(sParentPath);
+
+ //Store the file
+ JCRCommand nodeExists = (JCRCommand)context.getCommandFactory().createItemExistsCommand(file.getBasePath());
Boolean bExists = (Boolean)context.execute(nodeExists);
if (!bExists.booleanValue())
{
- this.createParentHierarchy(sParentPath);
+ //Create new file
+ JCRCommand newFile = (JCRCommand)context.getCommandFactory().createNewFileCommand(file, content);
+ context.execute(newFile);
}
-
- JCRCommand fileSave = (JCRCommand)context.getCommandFactory().createFileSaveCommand(file);
- context.execute(fileSave);
-
- JCRCommand saveContentCMD = (JCRCommand)context.getCommandFactory().createContentSaveCommand(file);
- context.execute(saveContentCMD);
-
- //Add this content to the repository
- JCRCommand createContent = (JCRCommand)context.getCommandFactory().createContentCreateNewVersionCommand(content, true);
- context.execute(createContent);
+ else
+ {
+ //Update the existing one, and make the new version created
+ //in return as live
+ JCRCommand updateFile = (JCRCommand)context.getCommandFactory().createUpdateFileCommand(file, content, true);
+ context.execute(updateFile);
+ }
}
else // isDirectory
{
Copied: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/util/ResourceUtil.java (from rev 11235, branches/JBoss_Portal_Branch_2_6/cms/src/main/org/jboss/portal/cms/impl/jcr/util/ResourceUtil.java)
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/util/ResourceUtil.java (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/impl/jcr/util/ResourceUtil.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -0,0 +1,121 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.cms.impl.jcr.util;
+
+import java.util.Calendar;
+import java.util.StringTokenizer;
+import java.util.Date;
+
+import javax.jcr.Node;
+
+import org.apache.jackrabbit.value.DateValue;
+import org.apache.jackrabbit.value.StringValue;
+import org.jboss.portal.cms.CMSException;
+import org.jboss.portal.cms.model.Folder;
+import org.jboss.portal.cms.util.NodeUtil;
+import org.jboss.portal.cms.impl.jcr.JCRCommand;
+import org.jboss.portal.cms.impl.jcr.JCRCommandContext;
+import org.jboss.portal.cms.impl.FolderImpl;
+
+/**
+ * @author <a href="mailto:sshah@redhat.com">Sohil Shah</a>
+ *
+ */
+public class ResourceUtil
+{
+ /** @param parentPath */
+ public static void createParentHierarchy(JCRCommandContext context, String parentPath) throws CMSException
+ {
+ try
+ {
+ StringTokenizer tokenizer = new StringTokenizer(parentPath, "/");
+
+ StringBuffer buffer = new StringBuffer("/");
+ while (tokenizer.hasMoreTokens())
+ {
+ buffer.append(tokenizer.nextToken());
+ String cour = buffer.toString();
+
+ JCRCommand nodeExists = (JCRCommand)context.getCommandFactory().createItemExistsCommand(cour);
+ Boolean bExists = (Boolean)context.execute(nodeExists);
+ if (!bExists.booleanValue())
+ {
+ ResourceUtil.createFolder(context, cour);
+ }
+ else
+ {
+ //Make Sure this resource is not a file. You don't want to create a Folder inside a File
+ Node node = (Node)context.getSession().getItem(cour);
+ if(NodeTypeUtil.isFile(node))
+ {
+ throw new CMSException("Invalid Path: "+ parentPath + " : Trying to create a Folder inside a File");
+ }
+ }
+
+ if (tokenizer.hasMoreTokens())
+ {
+ buffer.append("/");
+ }
+ }
+ }
+ catch(Exception e)
+ {
+ throw new CMSException(e);
+ }
+ }
+
+ /**
+ * @param folderPath
+ * @throws CMSException
+ */
+ private static void createFolder(JCRCommandContext context, String folderPath) throws CMSException
+ {
+ try
+ {
+ Folder folder = new FolderImpl();
+ folder.setName(folderPath);
+ folder.setDescription(folderPath);
+ folder.setTitle(folderPath);
+ folder.setLastModified(new Date());
+ folder.setBasePath(folderPath);
+
+ String parentPath = NodeUtil.getParentPath(folder.getBasePath());
+ String nodeName = NodeUtil.getNodeName(folder.getBasePath());
+
+ Node parentNode = (Node)context.getSession().getItem(parentPath);
+ Node folderNode = parentNode.addNode(nodeName, "portalcms:folder");
+ folderNode.setProperty("portalcms:description", new StringValue(folder.getDescription()));
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(folder.getLastModified());
+ DateValue dv = new DateValue(calendar);
+ parentNode.setProperty("portalcms:lastmodified", dv);
+ folderNode.setProperty("portalcms:lastmodified", dv);
+ parentNode.save();
+ }
+ catch(Exception e)
+ {
+ throw new CMSException(e);
+ }
+ }
+}
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/model/Content.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/model/Content.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/model/Content.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -38,9 +38,9 @@
void setMimeType(String type);
/** @return the */
- int getSize();
+ long getSize();
- void setSize(int size);
+ void setSize(long size);
/** @return Returns the content. */
InputStream getStream();
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/model/File.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/model/File.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/cms/model/File.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -38,4 +38,6 @@
void setContent(Locale locale, Content content);
Content getContent();
+
+ long getSize();
}
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileArchiveUpload.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileArchiveUpload.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileArchiveUpload.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -26,6 +26,7 @@
import org.jboss.portal.cms.CMSException;
import org.jboss.portal.cms.Command;
import org.jboss.portal.cms.model.Folder;
+import org.jboss.portal.cms.model.File;
import org.jboss.portal.common.io.IOTools;
import java.io.FileInputStream;
@@ -77,13 +78,76 @@
public void testArchiveUpload() throws CMSException, IOException
{
+ //create archive
+ this.runArchive();
+ this.assertArchiveUploadCreate();
+
+ //update archive
+ this.runArchive();
+ this.assertArchiveUploadUpdate();
+
+ }
+
+ private void runArchive() throws IOException
+ {
service.setDefaultLocale(Locale.ENGLISH.getLanguage());
- InputStream is = IOTools.safeBufferedWrapper(new FileInputStream(sZipFile));
- Command storearchiveCMD = service.getCommandFactory().createStoreArchiveCommand("", is, "en");
- service.execute(storearchiveCMD);
- is.close();
+ InputStream is = null;
+ try
+ {
+ is = IOTools.safeBufferedWrapper(new FileInputStream(sZipFile));
+ Command storearchiveCMD = service.getCommandFactory().createStoreArchiveCommand("", is, "en");
+ service.execute(storearchiveCMD);
+ }
+ finally
+ {
+ if(is != null)
+ {
+ is.close();
+ }
+ }
+ }
+
+ private void assertArchiveUploadCreate()
+ {
+ //retrieve list
+ Command listCMD = service.getCommandFactory().createFolderGetListCommand("/ziptest/poop");
+ Folder whopper = (Folder)service.execute(listCMD);
+ List folders = whopper.getFolders();
+ List files = whopper.getFiles();
+ assertEquals("Folder Size incorrect", folders.size(), 1);
+ assertEquals("File Size incorrect", files.size(), 1);
// retrieve list
+ Command listCMD2 = service.getCommandFactory().createFolderGetListCommand("/ziptest/poop/music");
+ Folder whopper2 = (Folder)service.execute(listCMD2);
+ List folders2 = whopper2.getFolders();
+ List files2 = whopper2.getFiles();
+ assertEquals("Folder Size incorrect", folders2.size(), 0);
+ assertEquals("File Size incorrect", files2.size(), 1);
+
+ //Look for single versions of files
+ for(int i=0; i<files.size(); i++)
+ {
+ File file = (File)files.get(i);
+
+ Command versionsCMD = service.getCommandFactory().createContentGetVersionsCommand(file.getBasePath()+"/en");
+ List versions = (List)service.execute(versionsCMD);
+ assertEquals("Multiple Versions not Found", versions.size(), 1);
+ }
+
+ for(int i=0; i<files2.size(); i++)
+ {
+ File file = (File)files2.get(i);
+
+ Command versionsCMD = service.getCommandFactory().createContentGetVersionsCommand(file.getBasePath()+"/en");
+ List versions = (List)service.execute(versionsCMD);
+ assertEquals("Multiple Versions not Found", versions.size(), 1);
+ }
+ }
+
+ private void assertArchiveUploadUpdate()
+ {
+ //retrieve list
Command listCMD = service.getCommandFactory().createFolderGetListCommand("/ziptest/poop");
Folder whopper = (Folder)service.execute(listCMD);
List folders = whopper.getFolders();
@@ -98,11 +162,24 @@
List files2 = whopper2.getFiles();
assertEquals("Folder Size incorrect", folders2.size(), 0);
assertEquals("File Size incorrect", files2.size(), 1);
-
- // retrieve list
- Command listCMD3 = service.getCommandFactory().createFolderGetListCommand("/");
- Folder whopper3 = (Folder)service.execute(listCMD3);
- List folders3 = whopper3.getFolders();
- List files3 = whopper3.getFiles();
+
+ //Look for multiple versions of files
+ for(int i=0; i<files.size(); i++)
+ {
+ File file = (File)files.get(i);
+
+ Command versionsCMD = service.getCommandFactory().createContentGetVersionsCommand(file.getBasePath()+"/en");
+ List versions = (List)service.execute(versionsCMD);
+ assertEquals("Multiple Versions not Found", versions.size(), 2);
+ }
+
+ for(int i=0; i<files2.size(); i++)
+ {
+ File file = (File)files2.get(i);
+
+ Command versionsCMD = service.getCommandFactory().createContentGetVersionsCommand(file.getBasePath()+"/en");
+ List versions = (List)service.execute(versionsCMD);
+ assertEquals("Multiple Versions not Found", versions.size(), 2);
+ }
}
}
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileCreate.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileCreate.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileCreate.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -23,6 +23,8 @@
package org.jboss.portal.test.cms.commands;
import junit.framework.TestSuite;
+
+import org.jboss.portal.cms.CMSException;
import org.jboss.portal.cms.Command;
import org.jboss.portal.cms.impl.ContentImpl;
import org.jboss.portal.cms.impl.FileImpl;
@@ -149,4 +151,73 @@
session.logout();
}
+
+
+ public void testRootFileCreate() throws Exception
+ {
+ try
+ {
+ this.fileCreate("/");
+ }
+ catch(CMSException e)
+ {
+ String message = e.getMessage();
+ assertTrue("Invalid Path Not Validated", message.contains("Path: / is invalid"));
+ }
+ }
+
+ public void testRecursiveFileCreate() throws Exception
+ {
+ //Create a legal file
+ this.fileCreate("/level-1/blah");
+
+ //Assert
+ Command fileGet = service.getCommandFactory().createFileGetCommand("/level-1/blah", Locale.ENGLISH);
+ File cour = (File)service.execute(fileGet);
+ assertNotNull("File was not created", cour);
+ assertEquals("Content Incorrect", new String(cour.getContent().getBytes()), "1234567890");
+
+ //Try to create a file that should not be allowed
+ try
+ {
+ this.fileCreate("/level-1/blah/blah2");
+ }
+ catch(CMSException e)
+ {
+ String message = e.getMessage();
+ assertTrue("Invalid Parent Hierarchy Not Validated", message.contains("Trying to create a Folder inside a File"));
+ }
+
+ //Try to create a file way down the path hierarchy
+ this.fileCreate("/level-1/level-2/level-3/blah");
+
+ //Assert
+ fileGet = service.getCommandFactory().createFileGetCommand("/level-1/level-2/level-3/blah", Locale.ENGLISH);
+ cour = (File)service.execute(fileGet);
+ assertNotNull("File was not created", cour);
+ assertEquals("Content Incorrect", new String(cour.getContent().getBytes()), "1234567890");
+ }
+
+ /**
+ *
+ * @param path
+ */
+ private void fileCreate(String path)
+ {
+ //create file english
+ File file = new FileImpl();
+ file.setBasePath(path);
+
+ Content content = new ContentImpl();
+ content.setEncoding("UTF-8");
+ content.setTitle("English Title");
+ content.setDescription("English Description");
+ content.setBasePath(path + "/" + Locale.ENGLISH.getLanguage());
+ content.setBytes("1234567890".getBytes());
+ content.setMimeType("image/gif");
+ file.setContent(Locale.ENGLISH, content);
+
+ Command createFileCMD = service.getCommandFactory().createNewFileCommand(file, content);
+ service.execute(createFileCMD);
+ }
}
Copied: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileSize.java (from rev 11230, branches/JBoss_Portal_Branch_2_6/cms/src/main/org/jboss/portal/test/cms/commands/TestFileSize.java)
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileSize.java (rev 0)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFileSize.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -0,0 +1,178 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.test.cms.commands;
+
+import junit.framework.TestSuite;
+import org.jboss.portal.cms.Command;
+import org.jboss.portal.cms.impl.ContentImpl;
+import org.jboss.portal.cms.impl.FileImpl;
+import org.jboss.portal.cms.model.Content;
+import org.jboss.portal.cms.model.File;
+
+import java.util.Locale;
+
+
+/**
+ *
+ * @author <a href="mailto:sshah@redhat.com">Sohil Shah</a>
+ *
+ */
+public class TestFileSize extends AbstractCommandTestCase
+{
+ String sFilePath = "/testdoc.gif";
+
+ String sCopyToFilePath = "/testdoccopy.gif";
+
+ // zip vars
+ String sZipPath = "/poop";
+
+ String sZipFile = "resources/test/jcr/ziptest.zip";
+
+ String sJPG = "/hibernate_logo.gif";
+
+ String sText = "/training.txt";
+
+
+ /**
+ *
+ *
+ */
+ public TestFileSize()
+ {
+ }
+
+ /**
+ *
+ *
+ */
+ public static TestSuite suite() throws Exception
+ {
+ return createTestSuite(TestFileSize.class);
+ }
+
+ /**
+ *
+ *
+ */
+ public void testFileCreate() throws Exception
+ {
+ // create file english
+ File file = new FileImpl();
+ file.setBasePath(sFilePath);
+
+ Content content = new ContentImpl();
+ content.setEncoding("UTF-8");
+ content.setTitle("English Title");
+ content.setDescription("English Description");
+ content.setBasePath(sFilePath + "/" + Locale.ENGLISH.getLanguage());
+ content.setBytes("1234567890".getBytes());
+ content.setMimeType("image/gif");
+ file.setContent(Locale.ENGLISH, content);
+
+ // save english file
+ Command saveFileCMD = service.getCommandFactory().createFileSaveCommand(file);
+ service.execute(saveFileCMD);
+
+ //save english content
+ Command saveContentCMD = service.getCommandFactory().createContentSaveCommand(file);
+ service.execute(saveContentCMD);
+
+ // version the english content node
+ Command verCMD = service.getCommandFactory().createContentCreateNewVersionCommand(content, true);
+ service.execute(verCMD);
+
+ Command fileGet = service.getCommandFactory().createFileGetCommand(sFilePath, Locale.ENGLISH);
+ File cour = (File)service.execute(fileGet);
+ assertEquals("File Size Incorrect", cour.getSize(), "1234567890".length());
+
+
+ //create content spanish
+ Content contentSP = new ContentImpl();
+ contentSP.setEncoding("UTF-8");
+ contentSP.setTitle("Spanish Title");
+ contentSP.setDescription("Spanish Description");
+ contentSP.setBasePath(sFilePath + "/es");
+ contentSP.setBytes("0987654321/es".getBytes());
+ contentSP.setMimeType("image/gif");
+ file.setContent(new Locale("es"), contentSP);
+
+ //save spanish content
+ Command saveSPContentCMD = service.getCommandFactory().createContentSaveCommand(file);
+ service.execute(saveSPContentCMD);
+
+ // version the spanish content node
+ Command verSPCMD = service.getCommandFactory().createContentCreateNewVersionCommand(contentSP, true);
+ service.execute(verSPCMD);
+
+ fileGet = service.getCommandFactory().createFileGetCommand(sFilePath, new Locale("es"));
+ cour = (File)service.execute(fileGet);
+ assertEquals("File Size Incorrect", cour.getSize(), "0987654321/es".length());
+ }
+
+ /**
+ *
+ *
+ */
+ public void testFileUpdate() throws Exception
+ {
+ // create file english
+ File file = new FileImpl();
+ file.setBasePath(sFilePath);
+
+ Content content = new ContentImpl();
+ content.setEncoding("UTF-8");
+ content.setTitle("English Title");
+ content.setDescription("English Description");
+ content.setBasePath(sFilePath + "/" + Locale.ENGLISH.getLanguage());
+ content.setBytes("1234567890".getBytes());
+ content.setMimeType("image/gif");
+ file.setContent(Locale.ENGLISH, content);
+
+ // save english file
+ Command saveFileCMD = service.getCommandFactory().createFileSaveCommand(file);
+ service.execute(saveFileCMD);
+
+ //save english content
+ Command saveContentCMD = service.getCommandFactory().createContentSaveCommand(file);
+ service.execute(saveContentCMD);
+
+ // version the english content node
+ Command verCMD = service.getCommandFactory().createContentCreateNewVersionCommand(content, true);
+ service.execute(verCMD);
+
+ Command fileGet = service.getCommandFactory().createFileGetCommand(sFilePath, Locale.ENGLISH);
+ File cour = (File)service.execute(fileGet);
+ assertEquals("File Size Incorrect", cour.getSize(), "1234567890".length());
+ assertEquals("File Content Incorrect", new String(cour.getContent().getBytes()), "1234567890");
+
+ //Now Update this content and create a new version
+ content.setBytes("1234567890/updated".getBytes());
+ Command cmdUpdate = service.getCommandFactory().createUpdateFileCommand(file, content, true);
+ service.execute(cmdUpdate);
+
+ fileGet = service.getCommandFactory().createFileGetCommand(sFilePath, Locale.ENGLISH);
+ cour = (File)service.execute(fileGet);
+ assertEquals("File Size Incorrect", cour.getSize(), "1234567890/updated".length());
+ assertEquals("File Content Incorrect", new String(cour.getContent().getBytes()), "1234567890/updated");
+ }
+}
Modified: branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFolderCreate.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFolderCreate.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/cms/src/main/org/jboss/portal/test/cms/commands/TestFolderCreate.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -96,4 +96,45 @@
assertNotNull("Folder description is null", description);
assertTrue("Incorrect description for " + sFolderPath, description.getString().equals("Folder description"));
}
+
+ public void testRecursiveFolderCreate() throws Exception
+ {
+ this.createFolder("/level-1/blah");
+ this.assertFolder("/level-1/blah");
+
+ //Create a deeper folder
+ this.createFolder("/level-1/level-2/level-3/blah");
+ this.assertFolder("/level-1/level-2/level-3/blah");
+ }
+
+ private void createFolder(String folderPath)
+ {
+ //create folder object
+ Folder folder = new FolderImpl();
+ folder.setCreationDate(new Date());
+ folder.setDescription("Folder description");
+ folder.setTitle("Folder Title");
+ folder.setLastModified(new Date());
+ folder.setName("Alpha Folder");
+ folder.setBasePath(folderPath);
+
+ // save folder
+ Command saveCMD = service.getCommandFactory().createFolderSaveCommand(folder);
+ service.execute(saveCMD);
+ }
+
+ private void assertFolder(String folderPath) throws Exception
+ {
+ String[] cour = folderPath.split("/");
+ String folderName = cour[cour.length-1];
+
+ Session session = RepositoryUtil.login(service.getRepository(), "anonid", "");
+ Node folderNode = (Node)session.getItem(folderPath);
+ assertNotNull("FolderNodeis null", folderNode);
+ assertTrue("Incorrect primarynodetype", folderNode.getPrimaryNodeType().getName().equals("portalcms:folder"));
+ assertTrue("Incorrect Name for " + sFolderPath, folderNode.getName().equals(folderName));
+ Property description = folderNode.getProperty("portalcms:description");
+ assertNotNull("Folder description is null", description);
+ assertTrue("Incorrect description for " + sFolderPath, description.getString().equals("Folder description"));
+ }
}
Modified: branches/JBoss_Portal_Branch_2_7/core-cms/src/main/org/jboss/portal/core/cms/ui/admin/CMSAdminPortlet.java
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-cms/src/main/org/jboss/portal/core/cms/ui/admin/CMSAdminPortlet.java 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/core-cms/src/main/org/jboss/portal/core/cms/ui/admin/CMSAdminPortlet.java 2008-07-15 13:52:13 UTC (rev 11450)
@@ -44,6 +44,7 @@
import org.jboss.portal.cms.util.NodeUtil;
import org.jboss.portal.cms.workflow.ApprovePublish;
import org.jboss.portal.cms.workflow.CMSWorkflowUtil;
+import org.jboss.portal.cms.impl.jcr.JCRCMS;
import org.jboss.portal.core.cms.ui.Util;
import org.jboss.portal.core.cms.command.StreamContentCommand;
import org.jboss.portal.core.controller.ControllerContext;
@@ -148,19 +149,16 @@
this.resources = config.getResourceBundle(Locale.getDefault());
}
-
-
+ /**
+ *
+ */
protected void doView(final JBossRenderRequest rReq, final JBossRenderResponse rRes)
throws PortletException, IOException, UnavailableException
{
//check and make sure the CMSAdminPortlet is accessible to the current user
if (!this.isPortletAccessible(rReq))
{
- rRes.setContentType("text/html");
- PrintWriter writer = rRes.getWriter();
- String sHTML = "<h2>Access Denied</h2>";
- writer.write(sHTML);
- writer.close();
+ this.showAccessDeniedScreen(rRes);
return;
}
@@ -170,29 +168,27 @@
{
if (!this.isSecurityConsoleAccessible(rReq))
{
- rRes.setContentType("text/html");
- PrintWriter writer = rRes.getWriter();
- String sHTML = "<h2>Access Denied</h2>";
- writer.write(sHTML);
- writer.close();
+ this.showAccessDeniedScreen(rRes);
return;
}
}
-
try
{
if (rReq.getParameter("accessDenied") != null)
{
- throw new PortletException("Access to this resource is denied");
+ this.showAccessDeniedScreen(rRes);
}
- internalDoView(rReq, rRes);
+ else
+ {
+ internalDoView(rReq, rRes);
+ }
}
catch (CMSException e)
{
if (e.toString().indexOf("Access to this resource is denied") != -1)
{
- throw new PortletException("Access to this resource is denied");
+ this.showAccessDeniedScreen(rRes);
}
else
{
@@ -200,6 +196,30 @@
}
}
}
+
+ /**
+ *
+ * @param renderResponse
+ * @throws IOException
+ */
+ private void showAccessDeniedScreen(JBossRenderResponse renderResponse) throws IOException
+ {
+ renderResponse.setContentType("text/html");
+ PrintWriter writer = null;
+ try
+ {
+ writer = renderResponse.getWriter();
+ String sHTML = "<h2>Access Denied</h2>";
+ writer.write(sHTML);
+ }
+ finally
+ {
+ if(writer != null)
+ {
+ writer.close();
+ }
+ }
+ }
private void internalDoView(JBossRenderRequest rReq, JBossRenderResponse rRes)
throws CMSException, PortletException, IOException
@@ -217,11 +237,13 @@
{
sPath = "/";
}
-
+
+ JCRCMS.enableUISecurityFilter();
Command listCMD = CMSService.getCommandFactory().createFolderGetListCommand(sPath);
Folder mainFolder = (Folder)CMSService.execute(listCMD);
List folders = mainFolder.getFolders();
List files = mainFolder.getFiles();
+ JCRCMS.disableUISecurityFilter();
rRes.setContentType("text/html");
rReq.setAttribute("folders", folders);
@@ -253,34 +275,60 @@
}
else if (CMSAdminConstants.OP_CONFIRM_CREATE_COLLECTION.equals(op))
{
- String sNavPath = rReq.getParameter("navpath");
-
- List folders = this.getFolderList(sNavPath);
-
- rReq.setAttribute("folders", folders);
- rRes.setContentType("text/html");
- rReq.setAttribute("navpath", sNavPath);
-
- String sPath = rReq.getParameter("path");
- rRes.setContentType("text/html");
- rReq.setAttribute("createpath", sPath);
- javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/confirmcreatecollection.jsp");
- prd.include(rReq, rRes);
+ try
+ {
+ String sNavPath = rReq.getParameter("navpath");
+
+ List folders = this.getFolderList(sNavPath);
+ if((folders == null || folders.isEmpty()) &&
+ (sNavPath != null && !sNavPath.equals("/")))
+ {
+ sNavPath = NodeUtil.getParentPath(sNavPath);
+ folders = this.getFolderList(sNavPath);
+ }
+
+ rReq.setAttribute("folders", folders);
+ rRes.setContentType("text/html");
+ rReq.setAttribute("navpath", sNavPath);
+
+ String sPath = rReq.getParameter("path");
+ rRes.setContentType("text/html");
+ rReq.setAttribute("createpath", sPath);
+ javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/confirmcreatecollection.jsp");
+ prd.include(rReq, rRes);
+ }
+ catch(Exception e)
+ {
+ throw new PortletException(e);
+ }
}
else if (CMSAdminConstants.OP_UPLOADCONFIRM.equals(op))
{
- String sPath = rReq.getParameter("path");
- String sNavPath = rReq.getParameter("navpath");
-
- List folders = this.getFolderList(sNavPath);
-
- rReq.setAttribute("folders", folders);
- rRes.setContentType("text/html");
- rReq.setAttribute("currpath", sPath);
- rReq.setAttribute("navpath", sNavPath);
- rReq.setAttribute("defaultlocale", CMSService.getDefaultLocale());
- javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/upload.jsp");
- prd.include(rReq, rRes);
+ try
+ {
+ String sPath = rReq.getParameter("path");
+ String sNavPath = rReq.getParameter("navpath");
+
+ List folders = this.getFolderList(sNavPath);
+ if((folders == null || folders.isEmpty()) &&
+ (sNavPath != null && !sNavPath.equals("/")))
+ {
+ sNavPath = NodeUtil.getParentPath(sNavPath);
+ folders = this.getFolderList(sNavPath);
+ }
+
+ rReq.setAttribute("folders", folders);
+ rRes.setContentType("text/html");
+ rReq.setAttribute("currpath", sPath);
+ rReq.setAttribute("navpath", sNavPath);
+ rReq.setAttribute("defaultlocale", CMSService.getDefaultLocale());
+ javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/upload.jsp");
+ prd.include(rReq, rRes);
+ }
+ catch(Exception e)
+ {
+ throw new PortletException(e);
+ }
}
else if (CMSAdminConstants.OP_VIEWFILE.equals(op))
{
@@ -364,49 +412,88 @@
}
else if (CMSAdminConstants.OP_UPLOADARCHIVECONFIRM.equals(op))
{
- String sPath = rReq.getParameter("path");
- String sNavPath = rReq.getParameter("navpath");
-
- List folders = this.getFolderList(sNavPath);
-
- rReq.setAttribute("folders", folders);
- rRes.setContentType("text/html");
- rReq.setAttribute("currpath", sPath);
- rReq.setAttribute("navpath", sNavPath);
- javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/uploadarchive.jsp");
- prd.include(rReq, rRes);
+ try
+ {
+ String sPath = rReq.getParameter("path");
+ String sNavPath = rReq.getParameter("navpath");
+
+ List folders = this.getFolderList(sNavPath);
+ if((folders == null || folders.isEmpty()) &&
+ (sNavPath != null && !sNavPath.equals("/")))
+ {
+ sNavPath = NodeUtil.getParentPath(sNavPath);
+ folders = this.getFolderList(sNavPath);
+ }
+
+ rReq.setAttribute("folders", folders);
+ rRes.setContentType("text/html");
+ rReq.setAttribute("currpath", sPath);
+ rReq.setAttribute("navpath", sNavPath);
+ javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/uploadarchive.jsp");
+ prd.include(rReq, rRes);
+ }
+ catch(Exception e)
+ {
+ throw new PortletException(e);
+ }
}
else if (CMSAdminConstants.OP_CONFIRMCOPY.equals(op))
{
- String sPath = rReq.getParameter("path");
- String sNavPath = rReq.getParameter("navpath");
- String sType = rReq.getParameter("type");
-
- List folders = this.getFolderList(sNavPath);
-
- rReq.setAttribute("folders", folders);
- rRes.setContentType("text/html");
- rReq.setAttribute("currpath", sPath);
- rReq.setAttribute("navpath", sNavPath);
- rReq.setAttribute("type", sType);
- javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/confirmcopy.jsp");
- prd.include(rReq, rRes);
+ try
+ {
+ String sPath = rReq.getParameter("path");
+ String sNavPath = rReq.getParameter("navpath");
+ String sType = rReq.getParameter("type");
+
+ List folders = this.getFolderList(sNavPath);
+ if((folders == null || folders.isEmpty()) &&
+ (sNavPath != null && !sNavPath.equals("/")))
+ {
+ sNavPath = NodeUtil.getParentPath(sNavPath);
+ folders = this.getFolderList(sNavPath);
+ }
+
+ rReq.setAttribute("folders", folders);
+ rRes.setContentType("text/html");
+ rReq.setAttribute("currpath", sPath);
+ rReq.setAttribute("navpath", sNavPath);
+ rReq.setAttribute("type", sType);
+ javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/confirmcopy.jsp");
+ prd.include(rReq, rRes);
+ }
+ catch(Exception e)
+ {
+ throw new PortletException(e);
+ }
}
else if (CMSAdminConstants.OP_CONFIRMMOVE.equals(op))
{
- String sPath = rReq.getParameter("path");
- String sNavPath = rReq.getParameter("navpath");
- String sType = rReq.getParameter("type");
-
- List folders = this.getFolderList(sNavPath);
-
- rReq.setAttribute("folders", folders);
- rRes.setContentType("text/html");
- rReq.setAttribute("currpath", sPath);
- rReq.setAttribute("navpath", sNavPath);
- rReq.setAttribute("type", sType);
- javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/confirmmove.jsp");
- prd.include(rReq, rRes);
+ try
+ {
+ String sPath = rReq.getParameter("path");
+ String sNavPath = rReq.getParameter("navpath");
+ String sType = rReq.getParameter("type");
+
+ List folders = this.getFolderList(sNavPath);
+ if((folders == null || folders.isEmpty()) &&
+ (sNavPath != null && !sNavPath.equals("/")))
+ {
+ sNavPath = NodeUtil.getParentPath(sNavPath);
+ folders = this.getFolderList(sNavPath);
+ }
+
+ rReq.setAttribute("folders", folders);
+ rRes.setContentType("text/html");
+ rReq.setAttribute("currpath", sPath);
+ rReq.setAttribute("navpath", sNavPath);
+ rReq.setAttribute("type", sType);
+ javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/confirmmove.jsp");
+ prd.include(rReq, rRes);
+ }
+ catch(Exception e)
+ {
+ throw new PortletException(e);
+ }
}
else if (CMSAdminConstants.OP_CONFIRMDELETE.equals(op))
{
@@ -538,17 +625,30 @@
}
else if (CMSAdminConstants.OP_EXPORTARCHIVE.equals(op))
{
- String sPath = rReq.getParameter("path");
- String sNavPath = rReq.getParameter("navpath");
-
- List folders = this.getFolderList(sNavPath);
-
- rReq.setAttribute("folders", folders);
- rRes.setContentType("text/html");
- rReq.setAttribute("currpath", sPath);
- rReq.setAttribute("navpath", sNavPath);
- javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/exportarchive.jsp");
- prd.include(rReq, rRes);
+ try
+ {
+ String sPath = rReq.getParameter("path");
+ String sNavPath = rReq.getParameter("navpath");
+
+ List folders = this.getFolderList(sNavPath);
+ if((folders == null || folders.isEmpty()) &&
+ (sNavPath != null && !sNavPath.equals("/")))
+ {
+ sNavPath = NodeUtil.getParentPath(sNavPath);
+ folders = this.getFolderList(sNavPath);
+ }
+
+ rReq.setAttribute("folders", folders);
+ rRes.setContentType("text/html");
+ rReq.setAttribute("currpath", sPath);
+ rReq.setAttribute("navpath", sNavPath);
+ javax.portlet.PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(CMSAdminConstants.CMS_JSP_PATH + "/exportarchive.jsp");
+ prd.include(rReq, rRes);
+ }
+ catch(Exception e)
+ {
+ throw new PortletException(e);
+ }
}
else if (CMSAdminConstants.OP_EXPORTARCHIVE_PICKUP.equals(op))
{
@@ -1710,4 +1810,9 @@
this.setApprovePublish(null);
}
}
+
+ private void filterResourceBySecurity(List resources, PortalCMSSecurityContext securityContext)
+ {
+
+ }
}
\ No newline at end of file
Modified: branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource.properties
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource.properties 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/classes/Resource.properties 2008-07-15 13:52:13 UTC (rev 11450)
@@ -131,4 +131,4 @@
CMS_ADMIN_SELECT_ROLES=Select Roles that have access to this node.
CMS_ADMIN_SELECT_USERS=Select Users that have access to this node.
CMS_ADMIN_YOU_CAN_SELECT_CTRL_ROLES=You may select multiple roles by using CTRL+click on the role names.
-CMS_ADMIN_YOU_CAN_SELECT_CTRL_USERS=You may select multiple users by using CTRL+click on the user names.
\ No newline at end of file
+CMS_ADMIN_YOU_CAN_SELECT_CTRL_USERS=You may select multiple users by using CTRL+click on the user names.
Modified: branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/create.jsp
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/create.jsp 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/create.jsp 2008-07-15 13:52:13 UTC (rev 11450)
@@ -53,8 +53,8 @@
content_css : "<%= sCSSURL %>",
plugin_insertdate_dateFormat : "%Y-%m-%d",
plugin_insertdate_timeFormat : "%H:%M:%S",
- relative_urls : "false",
- document_base_url : "<%= sDocBase %>",
+ relative_urls : "true",
+ convert_urls: "false",
extended_valid_elements :
"style[type],a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],font[face|size|color],hr[class|width|size|noshade]"
});
Modified: branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/edit.jsp
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/edit.jsp 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/edit.jsp 2008-07-15 13:52:13 UTC (rev 11450)
@@ -38,8 +38,8 @@
content_css : "<%= sCSSURL %>",
plugin_insertdate_dateFormat : "%Y-%m-%d",
plugin_insertdate_timeFormat : "%H:%M:%S",
- relative_urls : "false",
- document_base_url : "<%= sDocBase %>",
+ relative_urls : "true",
+ convert_urls: "false",
extended_valid_elements :
"style[type],a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],font[face|size|color],hr[class|width|size|noshade]"
});
Modified: branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/folderlist.jsp
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/folderlist.jsp 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/folderlist.jsp 2008-07-15 13:52:13 UTC (rev 11450)
@@ -26,7 +26,7 @@
<a href="<portlet:renderURL>
<portlet:param name="op" value="<%= OP %>"/>
- <portlet:param name="path" value="/"/>
+ <portlet:param name="path" value="<%= sCurrPath %>"/>
<portlet:param name="navpath" value="/"/>
<%
if (sCMType != null)
@@ -103,25 +103,5 @@
folder.getBasePath().substring(folder.getBasePath().lastIndexOf("/") + 1, folder.getBasePath().length()) %></a>
<br>
-<%
- }
-}
-else
-{
-%>
-<a href="<portlet:renderURL>
- <portlet:param name="op" value="<%= OP %>"/>
- <portlet:param name="path" value="<%= sCurrPath %>"/>
- <portlet:param name="navpath" value="<%= NodeUtil.getParentPath(sNavPath) %>"/>
- <%
- if(sCMType != null)
- {
- %>
- <portlet:param name="type" value="<%= sCMType %>"/>
- <%
- }
- %>
-</portlet:renderURL>">Up</a>
-<%
- }
-%>
+<%}
+}%>
Modified: branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/pending_items.jsp
===================================================================
--- branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/pending_items.jsp 2008-07-15 11:31:57 UTC (rev 11449)
+++ branches/JBoss_Portal_Branch_2_7/core-cms/src/resources/portal-cms-war/WEB-INF/jsp/cms/admin/pending_items.jsp 2008-07-15 13:52:13 UTC (rev 11450)
@@ -120,8 +120,8 @@
content_css : "<%= sCSSURL %>",
plugin_insertdate_dateFormat : "%Y-%m-%d",
plugin_insertdate_timeFormat : "%H:%M:%S",
- relative_urls : "false",
- document_base_url : "<%= sDocBase %>",
+ relative_urls : "true",
+ convert_urls: "false",
extended_valid_elements :
"style[type],a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],font[face|size|color],hr[class|width|size|noshade]"
});
15 years, 11 months