JBoss-OSGI SVN: r86530 - in projects/jboss-osgi/trunk/service/webconsole: src/main/java/org/apache/felix/webconsole/internal/servlet and 2 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-03-31 08:34:42 -0400 (Tue, 31 Mar 2009)
New Revision: 86530
Removed:
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener.java
Modified:
projects/jboss-osgi/trunk/service/webconsole/pom.xml
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/jboss/osgi/service/webconsole/internal/WebConsole.java
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/OSGI-INF/metatype/metatype.xml
Log:
WIP: webconsole
Modified: projects/jboss-osgi/trunk/service/webconsole/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/pom.xml 2009-03-31 11:43:36 UTC (rev 86529)
+++ projects/jboss-osgi/trunk/service/webconsole/pom.xml 2009-03-31 12:34:42 UTC (rev 86530)
@@ -55,26 +55,14 @@
<Bundle-Vendor>JBoss, a division of RedHat</Bundle-Vendor>
<Bundle-Activator>org.jboss.osgi.service.webconsole.internal.WebConsoleActivator</Bundle-Activator>
<Export-Package>
- org.apache.felix.webconsole,
+ org.apache.felix.webconsole;version=${version.felix.webconsole},
org.osgi.service.obr
</Export-Package>
<Private-Package>
!org.apache.felix.webconsole,
org.apache.felix.webconsole.*,
org.jboss.osgi.service.webconsole.internal,
- org.jboss.osgi.service.webconsole.internal.*,
-
- <!--
- File Upload functionality
- -->
-
-
-
-
- <!-- Required by FileUpload and Util -->
- org.apache.commons.io,
- org.apache.commons.io.filefilter,
- org.apache.commons.io.output
+ org.jboss.osgi.service.webconsole.internal.*
</Private-Package>
<Import-Package>
org.apache.felix.scr;
@@ -84,10 +72,13 @@
</Import-Package>
<Embed-Dependency>
<!-- Import/Export-Package parsing, OBR -->
-
-
+ org.apache.felix.bundlerepository,
<!-- Required for JSON data transfer -->
- json
+ json,
+ <!-- File Upload functionality -->
+ commons-fileupload,
+ <!-- Required by FileUpload and Util -->
+ commons-io
</Embed-Dependency>
</instructions>
</configuration>
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener.java 2009-03-31 11:43:36 UTC (rev 86529)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener.java 2009-03-31 12:34:42 UTC (rev 86530)
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.webconsole.internal.servlet;
-
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.cm.ManagedService;
-
-
-class ConfigurationListener implements ManagedService
-{
-
- private final OsgiManager osgiManager;
-
-
- static ServiceRegistration create( OsgiManager osgiManager )
- {
- ConfigurationListener cl = new ConfigurationListener( osgiManager );
-
- Dictionary props = new Hashtable();
- props.put( Constants.SERVICE_VENDOR, "The Apache Software Foundation" );
- props.put( Constants.SERVICE_DESCRIPTION, "OSGi Management Console Configuration Receiver" );
- props.put( Constants.SERVICE_PID, OsgiManager.class.getName() );
-
- return osgiManager.getBundleContext().registerService( ManagedService.class.getName(), cl, props );
- }
-
-
- private ConfigurationListener( OsgiManager osgiManager )
- {
- this.osgiManager = osgiManager;
- }
-
-
- public void updated( Dictionary config )
- {
- osgiManager.updateConfiguration( config );
- }
-}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/jboss/osgi/service/webconsole/internal/WebConsole.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/jboss/osgi/service/webconsole/internal/WebConsole.java 2009-03-31 11:43:36 UTC (rev 86529)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/jboss/osgi/service/webconsole/internal/WebConsole.java 2009-03-31 12:34:42 UTC (rev 86530)
@@ -31,6 +31,9 @@
/**
* Web Console integration
*
+ * Improve console extensibility
+ * https://issues.apache.org/jira/browse/FELIX-1013
+ *
* @author thomas.diesler(a)jboss.com
* @since 12-Mar-2009
*/
Modified: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/OSGI-INF/metatype/metatype.xml
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/resources/OSGI-INF/metatype/metatype.xml 2009-03-31 11:43:36 UTC (rev 86529)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/resources/OSGI-INF/metatype/metatype.xml 2009-03-31 12:34:42 UTC (rev 86530)
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="OSGI-INF/metatype/metatype">
- <metatype:OCD id="org.apache.felix.webconsole.internal.servlet.OsgiManager" name="%manager.name" description="%manager.description">
+ <metatype:OCD id="org.jboss.osgi.service.webconsole.internal.WebConsole" name="%manager.name" description="%manager.description">
<metatype:AD id="realm" type="String" default="OSGi Management Console" name="%realm.name" description="%realm.description"/>
<metatype:AD id="manager.root" type="String" default="/jboss-osgi" name="%manager.root.name" description="%manager.root.description"/>
<metatype:AD id="default.render" type="String" default="bundles" name="%default.render.name" description="%default.render.description"/>
<metatype:AD id="username" type="String" default="admin" name="%username.name" description="%username.description"/>
<metatype:AD id="password" type="String" default="admin" name="%password.name" description="%password.description"/>
</metatype:OCD>
- <metatype:Designate pid="org.apache.felix.webconsole.internal.servlet.OsgiManager">
- <metatype:Object ocdref="org.apache.felix.webconsole.internal.servlet.OsgiManager"/>
+ <metatype:Designate pid="org.jboss.osgi.service.webconsole.internal.WebConsole">
+ <metatype:Object ocdref="org.jboss.osgi.service.webconsole.internal.WebConsole"/>
</metatype:Designate>
</metatype:MetaData>
15 years, 1 month
JBoss-OSGI SVN: r86528 - projects/jboss-osgi/trunk/build/hudson/hudson-home.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-03-31 07:35:46 -0400 (Tue, 31 Mar 2009)
New Revision: 86528
Modified:
projects/jboss-osgi/trunk/build/hudson/hudson-home/command.sh
Log:
Make hudson run independent of ${version.id}
Modified: projects/jboss-osgi/trunk/build/hudson/hudson-home/command.sh
===================================================================
--- projects/jboss-osgi/trunk/build/hudson/hudson-home/command.sh 2009-03-31 11:33:51 UTC (rev 86527)
+++ projects/jboss-osgi/trunk/build/hudson/hudson-home/command.sh 2009-03-31 11:35:46 UTC (rev 86528)
@@ -55,9 +55,9 @@
#
# Deploy distro
#
+cp $DISTRODIR/jboss-osgi-installer-*.jar $DISTRODIR/jboss-osgi-installer.jar
AUTO_INSTALL=$DISTRODIR/resources/auto-install-template.xml; cat $AUTO_INSTALL;
JAVA_CMD="java -jar $DISTRODIR/jboss-osgi-installer.jar $AUTO_INSTALL"
-cp $DISTRODIR/jboss-osgi-installer-*.jar $DISTRODIR/jboss-osgi-installer.jar
echo $JAVA_CMD; $JAVA_CMD
#
15 years, 1 month
JBoss-OSGI SVN: r86527 - in projects/jboss-osgi/trunk/build/hudson/hudson-home: jobs/Container-JDK1.5 and 2 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-03-31 07:33:51 -0400 (Tue, 31 Mar 2009)
New Revision: 86527
Modified:
projects/jboss-osgi/trunk/build/hudson/hudson-home/command.sh
projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-JDK1.5/config.xml
projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-JDK1.6/config.xml
projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-Matrix/config.xml
Log:
Make hudson run independent of ${version.id}
Modified: projects/jboss-osgi/trunk/build/hudson/hudson-home/command.sh
===================================================================
--- projects/jboss-osgi/trunk/build/hudson/hudson-home/command.sh 2009-03-31 11:24:35 UTC (rev 86526)
+++ projects/jboss-osgi/trunk/build/hudson/hudson-home/command.sh 2009-03-31 11:33:51 UTC (rev 86527)
@@ -56,7 +56,8 @@
# Deploy distro
#
AUTO_INSTALL=$DISTRODIR/resources/auto-install-template.xml; cat $AUTO_INSTALL;
-JAVA_CMD="java -jar $DISTRODIR/jboss-osgi-installer-$VERSION.jar $AUTO_INSTALL"
+JAVA_CMD="java -jar $DISTRODIR/jboss-osgi-installer.jar $AUTO_INSTALL"
+cp $DISTRODIR/jboss-osgi-installer-*.jar $DISTRODIR/jboss-osgi-installer.jar
echo $JAVA_CMD; $JAVA_CMD
#
Modified: projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-JDK1.5/config.xml
===================================================================
--- projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-JDK1.5/config.xml 2009-03-31 11:24:35 UTC (rev 86526)
+++ projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-JDK1.5/config.xml 2009-03-31 11:33:51 UTC (rev 86527)
@@ -41,7 +41,6 @@
OSGIDIR=$WORKSPACE/jboss-osgi
HUDSONDIR=$OSGIDIR/build/hudson
-export VERSION=(a)version.id@
export JBOSS_BINDADDR=(a)jboss.bind.address@
# copy the maven profile
Modified: projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-JDK1.6/config.xml
===================================================================
--- projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-JDK1.6/config.xml 2009-03-31 11:24:35 UTC (rev 86526)
+++ projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-JDK1.6/config.xml 2009-03-31 11:33:51 UTC (rev 86527)
@@ -41,7 +41,6 @@
OSGIDIR=$WORKSPACE/jboss-osgi
HUDSONDIR=$OSGIDIR/build/hudson
-export VERSION=(a)version.id@
export JBOSS_BINDADDR=(a)jboss.bind.address@
# copy the maven profile
Modified: projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-Matrix/config.xml
===================================================================
--- projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-Matrix/config.xml 2009-03-31 11:24:35 UTC (rev 86526)
+++ projects/jboss-osgi/trunk/build/hudson/hudson-home/jobs/Container-Matrix/config.xml 2009-03-31 11:33:51 UTC (rev 86527)
@@ -56,7 +56,6 @@
export CONTAINER=$container
-export VERSION=(a)version.id@
export JBOSS_BINDADDR=(a)jboss.bind.address@
# copy the maven profile
15 years, 1 month
JBoss-OSGI SVN: r86526 - in projects/jboss-osgi/trunk: service/webconsole and 4 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-03-31 07:24:35 -0400 (Tue, 31 Mar 2009)
New Revision: 86526
Added:
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/arrow_down.png
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/arrow_left.png
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/arrow_right.png
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_delete.png
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_refresh.png
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_start.png
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_stop.png
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/component_configure.png
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/component_disable.png
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/component_enable.png
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/components.js
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/jquery-1.3.2.min.js
Removed:
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/datatable.js
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/jquery-1.2.6.min.js
Modified:
projects/jboss-osgi/trunk/pom.xml
projects/jboss-osgi/trunk/service/webconsole/pom.xml
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/admin.css
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/bundles.js
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/configmanager.js
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/events.js
projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/ui.js
Log:
Upgrade to felix webconsole 1.2.8
Modified: projects/jboss-osgi/trunk/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/pom.xml 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/pom.xml 2009-03-31 11:24:35 UTC (rev 86526)
@@ -43,7 +43,7 @@
<version.felix.log>0.9.0-20090211-R743531</version.felix.log>
<version.felix.metatype>1.0.2</version.felix.metatype>
<version.felix.osgi.core>1.2.0</version.felix.osgi.core>
- <version.felix.webconsole>1.2.2</version.felix.webconsole>
+ <version.felix.webconsole>1.2.8</version.felix.webconsole>
<version.izpack>4.2.0</version.izpack>
<version.jbossas>5.0.1.GA</version.jbossas>
<version.jboss.aop>2.0.1.GA</version.jboss.aop>
Modified: projects/jboss-osgi/trunk/service/webconsole/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/pom.xml 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/service/webconsole/pom.xml 2009-03-31 11:24:35 UTC (rev 86526)
@@ -64,11 +64,13 @@
org.jboss.osgi.service.webconsole.internal,
org.jboss.osgi.service.webconsole.internal.*,
- <!-- File Upload functionality -->
- org.apache.commons.fileupload,
- org.apache.commons.fileupload.disk,
- org.apache.commons.fileupload.servlet,
+ <!--
+ File Upload functionality
+ -->
+
+
+
<!-- Required by FileUpload and Util -->
org.apache.commons.io,
org.apache.commons.io.filefilter,
@@ -82,8 +84,8 @@
</Import-Package>
<Embed-Dependency>
<!-- Import/Export-Package parsing, OBR -->
- org.apache.felix.bundlerepository,
-
+
+
<!-- Required for JSON data transfer -->
json
</Embed-Dependency>
@@ -101,6 +103,20 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>commons-fileupload</groupId>
+ <artifactId>commons-fileupload</artifactId>
+ <version>1.1.1</version>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.4</version>
+ <scope>provided</scope>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.osgi.compendium</artifactId>
<scope>provided</scope>
Modified: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java 2009-03-31 11:24:35 UTC (rev 86526)
@@ -52,6 +52,39 @@
/** The name of the request attribute containig the map of FileItems from the POST request */
public static final String ATTR_FILEUPLOAD = "org.apache.felix.webconsole.fileupload";
+ protected String getHeader()
+ {
+ String HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
+ + "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"xhtml1-transitional.dtd\">"
+ + "<html xmlns=\"http://www.w3.org/1999/xhtml\">"
+ + "<head>"
+ + "<meta http-equiv=\"Content-Type\" content=\"text/html; utf-8\">"
+ + "<link rel=\"icon\" href=\"{6}/res/imgs/favicon.ico\">"
+ + "<title>{0} - {2}</title>"
+ + "<script src=\"{5}/res/ui/jquery-1.3.2.min.js\" language=\"JavaScript\"></script>"
+ + "<script src=\"{5}/res/ui/jquery.tablesorter-2.0.3.min.js\" language=\"JavaScript\"></script>"
+ + "<script src=\"{5}/res/ui/admin.js\" language=\"JavaScript\"></script>"
+ + "<script src=\"{5}/res/ui/ui.js\" language=\"JavaScript\"></script>"
+ + "<script language=\"JavaScript\">"
+ + "appRoot = \"{5}\";"
+ + "pluginRoot = appRoot + \"/{6}\";"
+ + "</script>"
+ + "<link href=\"{5}/res/ui/admin.css\" rel=\"stylesheet\" type=\"text/css\">"
+ + "</head>"
+ + "<body>"
+ + "<div id=\"main\">"
+ + "<div id=\"lead\">"
+ + "<h1>"
+ + "{0}<br>{2}"
+ + "</h1>"
+ + "<p>"
+ + "<a target=\"_blank\" href=\"{3}\" title=\"{1}\"><img src=\"{5}/res/imgs/logo.png\" width=\"165\" height=\"63\" border=\"0\"></a>"
+ + "</p>" + "</div>";
+
+ return HEADER;
+ }
+
+
/**
String header = MessageFormat.format( HEADER, new Object[]
{ adminTitle, productName, getTitle(), productWeb, vendorName,
@@ -132,33 +165,6 @@
return bundleContext;
}
- protected String getHeader()
- {
- return "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"
- + "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"xhtml1-transitional.dtd\">"
- + "<html xmlns=\"http://www.w3.org/1999/xhtml\">"
- + "<head>"
- + "<meta http-equiv=\"Content-Type\" content=\"text/html; utf-8\">"
- + "<link rel=\"icon\" href=\"{6}/res/imgs/favicon.ico\">"
- + "<title>{0} - {2}</title>"
- + "<script src=\"{5}/res/ui/admin.js\" language=\"JavaScript\"></script>"
- + "<script src=\"{5}/res/ui/ui.js\" language=\"JavaScript\"></script>"
- + "<script language=\"JavaScript\">"
- + "appRoot = \"{5}\";"
- + "pluginRoot = appRoot + \"/{6}\";"
- + "</script>"
- + "<link href=\"{5}/res/ui/admin.css\" rel=\"stylesheet\" type=\"text/css\">"
- + "</head>"
- + "<body>"
- + "<div id=\"main\">"
- + "<div id=\"lead\">"
- + "<h1>"
- + "{0}<br>{2}"
- + "</h1>"
- + "<p>"
- + "<a target=\"_blank\" href=\"{3}\" title=\"{1}\"><img src=\"{5}/res/imgs/logo.png\" width=\"165\" height=\"63\" border=\"0\"></a>"
- + "</p>" + "</div>";
- }
protected PrintWriter startResponse( HttpServletRequest request, HttpServletResponse response ) throws IOException
{
@@ -310,4 +316,30 @@
// no valid string parameter, fail
return null;
}
+ /**
+ * Utility method to handle relative redirects.
+ * Some app servers like web sphere handle relative redirects differently
+ * therefore we should make an absolute url before invoking send redirect.
+ */
+ protected void sendRedirect(final HttpServletRequest request,
+ final HttpServletResponse response,
+ String redirectUrl) throws IOException {
+ // check for relative url
+ if ( !redirectUrl.startsWith("/") ) {
+ String base = request.getContextPath() + request.getServletPath() + request.getPathInfo();
+ int i = base.lastIndexOf('/');
+ if (i > -1) {
+ base = base.substring(0, i);
+ } else {
+ i = base.indexOf(':');
+ base = (i > -1) ? base.substring(i + 1, base.length()) : "";
+ }
+ if (!base.startsWith("/")) {
+ base = '/' + base;
+ }
+ redirectUrl = base + '/' + redirectUrl;
+
+ }
+ response.sendRedirect(redirectUrl);
+ }
}
Modified: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java 2009-03-31 11:24:35 UTC (rev 86526)
@@ -98,12 +98,6 @@
*/
private static final String PROP_PASSWORD = "password";
- /**
- * The default value for the {@link #PROP_MANAGER_ROOT} configuration
- * property (value is "/system/console").
- */
- private static final String DEFAULT_MANAGER_ROOT = "/system/console";
-
private static final String DEFAULT_PAGE = BundlesServlet.NAME;
private static final String DEFAULT_REALM = "OSGi Management Console";
@@ -112,6 +106,12 @@
private static final String DEFAULT_PASSWORD = "admin";
+ /**
+ * The default value for the {@link #PROP_MANAGER_ROOT} configuration
+ * property (value is "/system/console").
+ */
+ private static final String DEFAULT_MANAGER_ROOT = "/system/console";
+
private BundleContext bundleContext;
private Logger log;
@@ -140,6 +140,12 @@
private String webManagerRoot;
+ // true if the OsgiManager is registered as a Servlet with the HttpService
+ private boolean httpServletRegistered;
+
+ // true if the resources have been registered with the HttpService
+ private boolean httpResourcesRegistered;
+
private Dictionary configuration;
@@ -266,7 +272,7 @@
}
catch ( Throwable t )
{
- log( "Failed to instantiate plugin " + pluginClassName + ". Reason: " + t );
+ log.log( LogService.LOG_INFO, "Failed to instantiate plugin " + pluginClassName + ". Reason: " + t );
}
}
@@ -384,11 +390,11 @@
}
catch ( IOException ioe )
{
- this.log( ioe.getMessage(), ioe );
+ log.log( LogService.LOG_WARNING, ioe.getMessage(), ioe );
}
catch ( ServletException se )
{
- this.log( se.getMessage(), se.getRootCause() );
+ log.log( LogService.LOG_WARNING, se.getMessage(), se.getRootCause() );
}
// maybe overwrite redirect
@@ -439,12 +445,12 @@
public Object addingService( ServiceReference reference )
{
- Object operation = super.addingService( reference );
- if ( operation instanceof HttpService )
+ Object service = super.addingService( reference );
+ if ( service instanceof HttpService )
{
- osgiManager.bindHttpService( ( HttpService ) operation );
+ osgiManager.bindHttpService( ( HttpService ) service );
}
- return operation;
+ return service;
}
@@ -576,6 +582,14 @@
protected synchronized void bindHttpService( HttpService httpService )
{
+ // do not bind service, when we are already bound
+ if ( this.httpService != null )
+ {
+ log.log( LogService.LOG_DEBUG,
+ "bindHttpService: Already bound to an HTTP Service, ignoring further services" );
+ return;
+ }
+
Dictionary config = getConfiguration();
// get authentication details
@@ -590,13 +604,18 @@
Dictionary servletConfig = toStringConfig( config );
+ // register this servlet and take note of this
httpService.registerServlet( this.webManagerRoot, this, servletConfig, httpContext );
+ httpServletRegistered = true;
+
+ // register resources and take of this
httpService.registerResources( this.webManagerRoot + "/res", "/res", httpContext );
+ httpResourcesRegistered = true;
}
catch ( Exception e )
{
- log.log( LogService.LOG_ERROR, "Problem setting up", e );
+ log.log( LogService.LOG_ERROR, "bindHttpService: Problem setting up", e );
}
this.httpService = httpService;
@@ -605,13 +624,41 @@
protected synchronized void unbindHttpService( HttpService httpService )
{
- httpService.unregister( this.webManagerRoot + "/res" );
- httpService.unregister( this.webManagerRoot );
+ if ( this.httpService != httpService )
+ {
+ log.log( LogService.LOG_DEBUG,
+ "unbindHttpService: Ignoring unbind of an HttpService to which we are not registered" );
+ return;
+ }
- if ( this.httpService == httpService )
+ // drop the service reference
+ this.httpService = null;
+
+ if ( httpResourcesRegistered )
{
- this.httpService = null;
+ try
+ {
+ httpService.unregister( this.webManagerRoot + "/res" );
+ }
+ catch ( Throwable t )
+ {
+ log.log( LogService.LOG_WARNING, "unbindHttpService: Failed unregistering Resources", t );
+ }
+ httpResourcesRegistered = false;
}
+
+ if ( httpServletRegistered )
+ {
+ try
+ {
+ httpService.unregister( this.webManagerRoot );
+ }
+ catch ( Throwable t )
+ {
+ log.log( LogService.LOG_WARNING, "unbindHttpService: Failed unregistering Servlet", t );
+ }
+ httpServletRegistered = false;
+ }
}
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/arrow_down.png
===================================================================
(Binary files differ)
Property changes on: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/arrow_down.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/arrow_left.png
===================================================================
(Binary files differ)
Property changes on: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/arrow_left.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/arrow_right.png
===================================================================
(Binary files differ)
Property changes on: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/arrow_right.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_delete.png
===================================================================
(Binary files differ)
Property changes on: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_delete.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_refresh.png
===================================================================
(Binary files differ)
Property changes on: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_refresh.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_start.png
===================================================================
(Binary files differ)
Property changes on: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_start.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_stop.png
===================================================================
(Binary files differ)
Property changes on: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/bundle_stop.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/component_configure.png
===================================================================
(Binary files differ)
Property changes on: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/component_configure.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/component_disable.png
===================================================================
(Binary files differ)
Property changes on: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/component_disable.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/component_enable.png
===================================================================
(Binary files differ)
Property changes on: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/imgs/component_enable.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/admin.css
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/admin.css 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/admin.css 2009-03-31 11:24:35 UTC (rev 86526)
@@ -490,6 +490,13 @@
border-right: 1px solid #cccccc;
}
+.fileinput {
+ font-family: Verdana, Arial, Helvetica, san-serif;
+ font-size: 9px;
+ font-weight: normal;
+ color: #184054;
+}
+
.submit {
cursor: default;
width: 60px;
@@ -561,11 +568,14 @@
div.buttons {
background-color: #6181A9;
height: 30px;
+ text-align: right;
+ vertical-align: middle;
+ padding-right: 10px;
+ padding-top: 8px;
}
div.button {
- float:right;
- margin-top: 5px;
- margin-right: 10px;
+ display: inline-block;
+ margin-left: 10px;
}
div.fullwidth {
width: 100%;
@@ -575,7 +585,9 @@
background-color: #F5F5F5;
padding-left: 10px;
border: 1px solid #CCCCCC;
- font-size: 13px;
+ font-family: Verdana, Arial, Helvetica, san-serif;
+ font-size: 11px;
+ font-weight: normal;
color: #222222;
line-height: 19px;
margin-bottom: 10px;
@@ -637,3 +649,12 @@
table.tablelayout thead tr .headerSortDown, table.tablelayout thead tr .headerSortUp {
background-color: #8dbdd8;
}
+.col_Id {
+ width: 40px;
+}
+.col_Status {
+ width: 50px;
+}
+.col_Actions {
+ width: 95px;
+}
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/bundles.js
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/bundles.js 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/bundles.js 2009-03-31 11:24:35 UTC (rev 86526)
@@ -14,48 +14,224 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+function renderStatusLine() {
+ $("#plugin_content").append( "<div class='fullwidth'><div class='statusline'/></div>" );
+}
-function renderBundle( /* Array of Data Objects */ bundleData )
-{
+function renderView( /* Array of String */ columns, /* String */ buttons ) {
+ renderStatusLine();
+ renderButtons(buttons);
+ var txt = "<div class='table'><table id='plugin_table' class='tablelayout'><thead><tr>";
+ for ( var name in columns ) {
+ txt = txt + "<th class='col_" + columns[name] + "'>" + columns[name] + "</th>";
+ }
+ txt = txt + "</tr></thead><tbody></tbody></table></div>";
+ $("#plugin_content").append( txt );
+ renderButtons(buttons);
+ renderStatusLine();
+}
- // number of actions plus 3 -- id, name and state
- var columns = bundleData.numActions + 3;
- var startLevel = bundleData.startLevel;
-
- header( columns );
+function renderButtons( buttons ) {
+ $("#plugin_content").append( "<form method='post' enctype='multipart/form-data'><div class='fullwidth'><div class='buttons'>" +
+ buttons + "</div></div></form>" );
+}
- installForm( startLevel );
+function renderData( eventData ) {
+ $(".statusline").empty().append(eventData.status);
+ $("#plugin_table > tbody > tr").remove();
+ for ( var idx in eventData.data ) {
+ entry( eventData.data[idx] );
+ }
+ $("#plugin_table").trigger("update");
+ if ( drawDetails ) {
+ renderDetails(eventData);
+ }
+}
+
+function entry( /* Object */ dataEntry ) {
+ var trElement = tr( null, { id: "entry" + dataEntry.id } );
+ entryInternal( trElement, dataEntry );
+ $("#plugin_table > tbody").append(trElement);
+}
+
+function actionButton( /* Element */ parent, /* string */ id, /* Obj */ action ) {
+ var enabled = action.enabled;
+ var op = action.link;
+ var opLabel = action.name;
+ var img = action.image;
+
+ var input = createElement( "input", null, {
+ type: 'image',
+ style: {"margin-left": "10px"},
+ title: opLabel,
+ alt: opLabel,
+ src: imgRoot + '/bundle_' + img + '.png'
+ });
+ $(input).click(function() {changeDataEntryState(id, op)});
+
+ if (!enabled) {
+ $(input).attr("disabled", true);
+ }
+ parent.appendChild( input );
+}
+
+function entryInternal( /* Element */ parent, /* Object */ dataEntry ) {
+ var id = dataEntry.id;
+ var name = dataEntry.name;
+ var state = dataEntry.state;
- if (bundleData.error)
- {
- error( columns, bundleData.error );
+ var inputElement = createElement("img", "rightButton", {
+ src: appRoot + "/res/imgs/arrow_right.png",
+ style: {border: "none"},
+ id: 'img' + id,
+ title: "Details",
+ alt: "Details",
+ width: 14,
+ height: 14
+ });
+ $(inputElement).click(function() {showDetails(id)});
+ var titleElement;
+ if ( drawDetails ) {
+ titleElement = text(name);
+ } else {
+ titleElement = createElement ("a", null, {
+ href: window.location.pathname + "/" + id
+ });
+ titleElement.appendChild(text(name));
}
- else
- {
- data ( bundleData.data );
+
+ parent.appendChild( td( null, null, [ text( id ) ] ) );
+ parent.appendChild( td( null, null, [ inputElement, text(" "), titleElement ] ) );
+ parent.appendChild( td( null, null, [ text( state ) ] ) );
+ var actionsTd = td( null, null );
+ var div = createElement("div", null, {
+ style: { "text-align" : "left"}
+ });
+ actionsTd.appendChild(div);
+
+ for ( var a in dataEntry.actions ) {
+ actionButton( div, id, dataEntry.actions[a] );
}
+ parent.appendChild( actionsTd );
+}
- installForm( startLevel );
+function loadData() {
+ $.get(pluginRoot + "/.json", null, function(data) {
+ renderData(data);
+ }, "json");
+}
- footer( columns );
+function changeDataEntryState(/* long */ id, /* String */ action) {
+ $.post(pluginRoot + "/" + id, {"action":action}, function(data) {
+ renderData(data);
+ }, "json");
}
-function installForm( /* int */ startLevel )
-{
- document.write( "<form method='post' enctype='multipart/form-data'>" );
- document.write( "<tr class='content'>" );
- document.write( "<td class='content'> </td>" );
- document.write( "<td class='content'>" );
- document.write( "<input type='hidden' name='action' value='install' />" );
- document.write( "<input class='input' type='file' name='bundlefile' size='50'>" );
- document.write( " - Start <input class='checkradio' type='checkbox' name='bundlestart' value='start'>" );
- document.write( " - Start Level <input class='input' type='input' name='bundlestartelevel' value='" + startLevel + "' size='4'>" );
- document.write( "</td>" );
- document.write( "<td class='content' align='right' colspan='5' noWrap>" );
- document.write( "<input class='submit' style='width:auto' type='submit' value='Install or Update'>" );
- document.write( " " );
- document.write( "<input class='submit' style='width:auto' type='button' value='Refresh Packages' onClick='changeDataEntryState(0, \"refreshPackages\");'>" );
- document.write( "</td>" );
- document.write( "</tr>" );
- document.write( "</form>" );
+function refreshPackages() {
+ $.post(window.location.pathname, {"action": "refreshPackages"}, function(data) {
+ renderData(data);
+ }, "json");
}
+
+function showDetails( id ) {
+ $.get(pluginRoot + "/" + id + ".json", null, function(data) {
+ renderDetails(data);
+ }, "json");
+}
+
+function hideDetails( id ) {
+ $("#img" + id).each(function() {
+ $("#pluginInlineDetails").remove();
+ $(this).attr("src", appRoot + "/res/imgs/arrow_right.png");
+ $(this).attr("title", "Details");
+ $(this).attr("alt", "Details");
+ $(this).unbind('click').click(function() {showDetails(id)});
+ });
+}
+
+function renderDetails( data ) {
+ data = data.data[0];
+ $("#pluginInlineDetails").remove();
+ $("#entry" + data.id + " > td").eq(1).append("<div id='pluginInlineDetails'/>");
+ $("#img" + data.id).each(function() {
+ if ( drawDetails ) {
+ $(this).attr("src", appRoot + "/res/imgs/arrow_left.png");
+ $(this).attr("title", "Back");
+ $(this).attr("alt", "Back");
+ var ref = window.location.pathname;
+ ref = ref.substring(0, ref.lastIndexOf('/'));
+ $(this).unbind('click').click(function() {window.location = ref;});
+ } else {
+ $(this).attr("src", appRoot + "/res/imgs/arrow_down.png");
+ $(this).attr("title", "Hide Details");
+ $(this).attr("alt", "Hide Details");
+ $(this).unbind('click').click(function() {hideDetails(data.id)});
+ }
+ });
+ $("#pluginInlineDetails").append("<table border='0'><tbody></tbody></table>");
+ var details = data.props;
+ for (var idx in details) {
+ var prop = details[idx];
+
+ var txt = "<tr><td class='aligntop' noWrap='true' style='border:0px none'>" + prop.key + "</td><td class='aligntop' style='border:0px none'>";
+ if (prop.value) {
+ if ( prop.key == 'Bundle Documentation' ) {
+ txt = txt + "<a href='" + prop.value + "' target='_blank'>" + prop.value + "</a>";
+ } else {
+ if ( $.isArray(prop.value) ) {
+ var i = 0;
+ for(var pi in prop.value) {
+ var value = prop.value[pi];
+ if (i > 0) { txt = txt + "<br/>"; }
+ var span;
+ if (value.substring(0, 6) == "INFO: ") {
+ txt = txt + "<span style='color: grey;'>!!" + value.substring(5) + "</span>";
+ } else if (value.substring(0, 7) == "ERROR: ") {
+ txt = txt + "<span style='color: red;'>!!" + value.substring(6) + "</span>";
+ } else {
+ txt = txt + value;
+ }
+ i++;
+ }
+ } else {
+ txt = txt + prop.value;
+ }
+ }
+ } else {
+ txt = txt + "\u00a0";
+ }
+ txt = txt + "</td></tr>";
+ $("#pluginInlineDetails > table > tbody").append(txt);
+ }
+}
+
+function renderBundles(data) {
+ $(document).ready(function(){
+ renderView( ["Id", "Name", "Status", "Actions"],
+ "<input type='hidden' name='action' value='install'/>" +
+ "<input class='fileinput' type='file' name='bundlefile' style='margin-left:10px'/>" +
+ " - Start <input class='checkradio' type='checkbox' name='bundlestart' value='start' style='vertical-align:middle;'/>" +
+ " - Start Level <input class='input' type='input' name='bundlestartlevel' value='" + startLevel + "' size='4'/>" +
+ "<input type='submit' value='Install or Update' style='margin-left:60px'/>" +
+ "<button id='refreshPackages' type='button' name='refresh' style='margin-left:10px'>Refresh Packages</button>"
+ );
+ $("#refreshPackages").click(refreshPackages);
+ renderData(data);
+
+ var extractMethod = function(node) {
+ var link = node.getElementsByTagName("a");
+ if ( link && link.length == 1 ) {
+ return link[0].innerHTML;
+ }
+ return node.innerHTML;
+ };
+ $("#plugin_table").tablesorter({
+ headers: {
+ 0: { sorter:"digit"},
+ 3: { sorter: false }
+ },
+ sortList: [[1,0]],
+ textExtraction:extractMethod
+ });
+ });
+}
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/components.js
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/components.js (rev 0)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/components.js 2009-03-31 11:24:35 UTC (rev 86526)
@@ -0,0 +1,229 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+function renderStatusLine() {
+ $("#plugin_content").append( "<div class='fullwidth'><div class='statusline'/></div>" );
+}
+
+function renderView( /* Array of String */ columns, /* Array of String */ buttons ) {
+ renderStatusLine();
+ renderButtons(buttons);
+ var txt = "<div class='table'><table id='plugin_table' class='tablelayout'><thead><tr>";
+ for ( var name in columns ) {
+ txt = txt + "<th class='col_" + columns[name] + "'>" + columns[name] + "</th>";
+ }
+ txt = txt + "</tr></thead><tbody></tbody></table></div>";
+ $("#plugin_content").append( txt );
+ renderButtons(buttons);
+ renderStatusLine();
+}
+
+function renderButtons( buttons ) {
+ $("#plugin_content").append( "<form method='post' enctype='multipart/form-data'><div class='fullwidth'><div class='buttons'>" +
+ buttons + "</div></div></form>" );
+}
+
+function renderData( eventData ) {
+ $(".statusline").empty().append(eventData.status);
+ $("#plugin_table > tbody > tr").remove();
+ for ( var idx in eventData.data ) {
+ entry( eventData.data[idx] );
+ }
+ $("#plugin_table").trigger("update");
+ if ( drawDetails ) {
+ renderDetails(eventData);
+ }
+}
+
+function entry( /* Object */ dataEntry ) {
+ var trElement = tr( null, { id: "entry" + dataEntry.id } );
+ entryInternal( trElement, dataEntry );
+ $("#plugin_table > tbody").append(trElement);
+}
+
+function actionButton( /* Element */ parent, /* string */ id, /* Obj */ action, /* string */ pid ) {
+ var enabled = action.enabled;
+ var op = action.link;
+ var opLabel = action.name;
+ var img = action.image;
+
+ var arg = id;
+ if ( op == "configure" ) {
+ arg = pid
+ }
+ var input = createElement( "input", null, {
+ type: 'image',
+ title: opLabel,
+ alt: opLabel,
+ src: imgRoot + '/component_' + img + '.png',
+ style: {"margin-left": "10px"}
+ });
+ $(input).click(function() {changeDataEntryState(arg, op)});
+
+ if (!enabled) {
+ $(input).attr("disabled", true);
+ }
+ parent.appendChild( input );
+}
+
+function entryInternal( /* Element */ parent, /* Object */ dataEntry ) {
+ var id = dataEntry.id;
+ var name = dataEntry.name;
+ var state = dataEntry.state;
+
+ var inputElement = createElement("img", "rightButton", {
+ src: appRoot + "/res/imgs/arrow_right.png",
+ style: {"border": "none"},
+ id: 'img' + id,
+ title: "Details",
+ alt: "Details",
+ width: 14,
+ height: 14
+ });
+ $(inputElement).click(function() {showDetails(id)});
+ var titleElement;
+ if ( drawDetails ) {
+ titleElement = text(name);
+ } else {
+ titleElement = createElement ("a", null, {
+ href: window.location.pathname + "/" + id
+ });
+ titleElement.appendChild(text(name));
+ }
+
+ parent.appendChild( td( null, null, [ text( id ) ] ) );
+ parent.appendChild( td( null, null, [ inputElement, text(" "), titleElement ] ) );
+ parent.appendChild( td( null, null, [ text( state ) ] ) );
+ var actionsTd = td( null, null );
+ var div = createElement("div", null, {
+ style: { "text-align" : "left"}
+ });
+ actionsTd.appendChild(div);
+
+ for ( var a in dataEntry.actions ) {
+ actionButton( div, id, dataEntry.actions[a], dataEntry.pid );
+ }
+ parent.appendChild( actionsTd );
+}
+
+function changeDataEntryState(/* long */ id, /* String */ action) {
+ if ( action == "configure") {
+ window.location = appRoot + "/configMgr/" + id;
+ return;
+ }
+ $.post(pluginRoot + "/" + id, {"action":action}, function(data) {
+ renderData(data);
+ }, "json");
+}
+
+function showDetails( id ) {
+ $.get(pluginRoot + "/" + id + ".json", null, function(data) {
+ renderDetails(data);
+ }, "json");
+}
+
+function loadData() {
+ $.get(pluginRoot + "/.json", null, function(data) {
+ renderData(data);
+ }, "json");
+}
+
+function hideDetails( id ) {
+ $("#img" + id).each(function() {
+ $("#pluginInlineDetails").remove();
+ $(this).attr("src", appRoot + "/res/imgs/arrow_right.png");
+ $(this).attr("title", "Details");
+ $(this).attr("alt", "Details");
+ $(this).unbind('click').click(function() {showDetails(id)});
+ });
+}
+
+function renderDetails( data ) {
+ data = data.data[0];
+ $("#pluginInlineDetails").remove();
+ $("#entry" + data.id + " > td").eq(1).append("<div id='pluginInlineDetails'/>");
+ $("#img" + data.id).each(function() {
+ if ( drawDetails ) {
+ $(this).attr("src", appRoot + "/res/imgs/arrow_left.png");
+ $(this).attr("title", "Back");
+ $(this).attr("alt", "Back");
+ var ref = window.location.pathname;
+ ref = ref.substring(0, ref.lastIndexOf('/'));
+ $(this).unbind('click').click(function() {window.location = ref;});
+ } else {
+ $(this).attr("src", appRoot + "/res/imgs/arrow_down.png");
+ $(this).attr("title", "Hide Details");
+ $(this).attr("alt", "Hide Details");
+ $(this).unbind('click').click(function() {hideDetails(data.id)});
+ }
+ });
+ $("#pluginInlineDetails").append("<table border='0'><tbody></tbody></table>");
+ var details = data.props;
+ for (var idx in details) {
+ var prop = details[idx];
+
+ var txt = "<tr><td class='aligntop' noWrap='true' style='border:0px none'>" + prop.key + "</td><td class='aligntop' style='border:0px none'>";
+ if (prop.value) {
+ if ( $.isArray(prop.value) ) {
+ var i = 0;
+ for(var pi in prop.value) {
+ var value = prop.value[pi];
+ if (i > 0) { txt = txt + "<br/>"; }
+ var span;
+ if (value.substring(0, 2) == "!!") {
+ txt = txt + "<span style='color: red;'>" + value + "</span>";
+ } else {
+ txt = txt + value;
+ }
+ i++;
+ }
+ } else {
+ txt = txt + prop.value;
+ }
+ } else {
+ txt = txt + "\u00a0";
+ }
+ txt = txt + "</td></tr>";
+ $("#pluginInlineDetails > table > tbody").append(txt);
+ }
+}
+
+function renderComponents(data) {
+ $(document).ready(function(){
+ renderView( ["Id", "Name", "Status", "Actions"],
+ "<div class='button'><button class='reloadButton' type='button' name='reload'>Reload</button></div>");
+ renderData(data);
+
+ $(".reloadButton").click(loadData);
+
+ var extractMethod = function(node) {
+ var link = node.getElementsByTagName("a");
+ if ( link && link.length == 1 ) {
+ return link[0].innerHTML;
+ }
+ return node.innerHTML;
+ };
+ $("#plugin_table").tablesorter({
+ headers: {
+ 0: { sorter:"digit"},
+ 3: { sorter: false }
+ },
+ sortList: [[1,0]],
+ textExtraction:extractMethod
+ });
+ });
+}
+
Modified: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/configmanager.js
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/configmanager.js 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/configmanager.js 2009-03-31 11:24:35 UTC (rev 86526)
@@ -74,7 +74,7 @@
trEl.appendChild( tdEl );
var formEl = createElement( "form", null, {
- method: "post",
+ method: "POST",
action: pluginRoot + "/" + obj.pid
});
tdEl.appendChild( formEl );
@@ -220,9 +220,9 @@
}
else
{
- for (var vidx in attr.values)
+ for (var i=0;i<attr.values.length;i++)
{
- tdEl.appendChild( createSpan( prop, attr.values[vidx], attr.type ) );
+ tdEl.appendChild( createSpan( prop, attr.values[i], attr.type ) );
}
}
@@ -244,6 +244,8 @@
value: propList
})
);
+ // FIX for IE6 and above: checkbox can only be checked after it is in the DOM
+ $(".checked_box").attr("checked", true).removeClass("checked_box");
}
function printConfigurationInfo( /* Element */ parent, obj )
@@ -301,17 +303,25 @@
spanCounter++;
var newId = prop + spanCounter;
+ var addButton = createElement("input", "input",
+ { type: "button",
+ style: {width : "5%"},
+ value: "+"
+ }
+ );
+ $(addButton).click(function() {addValue(prop, newId)});
+ var remButton = createElement("input", "input",
+ { type: "button",
+ style: {width : "5%"},
+ value: "-"
+ }
+ );
+ $(remButton).click(function() {removeValue(newId)});
var spanEl = createElement( "span", null, { id: newId }, [
- createInput( prop, value, type, '89%' )
+ createInput( prop, value, type, '89%' ), addButton, remButton,
+ createElement("br")
]);
- // define this SPAN as innerHTML otherwise the onClick event handler
- // of the buttons is not accepted by IE...
- var innerHTML = "<input type='button' class='input' style='width:\"5%\"' value='+' onClick='addValue(\"" + prop + "\", \"" + newId + "\")' />";
- innerHTML += "<input type='button' class='input' style='width:\"5%\"' value='-' onClick='removeValue(\"" + newId + "\")' />";
- innerHTML += "<br />";
- spanEl.innerHTML += innerHTML;
-
return spanEl;
}
@@ -321,7 +331,7 @@
var inputEl = createElement( "input", "input", {
type: "checkbox",
name: prop,
- value: true
+ value: "true"
});
if (value && typeof(value) != "boolean")
@@ -330,16 +340,14 @@
}
if (value)
{
- inputEl.setAttribute( "checked", true );
+ $(inputEl).addClass("checked_box");
}
-
var hiddenEl = createElement( "input", "input", {
type: "hidden",
name: prop,
- value: false
+ value: "false"
});
-
- var divEl = createElement("div", "div");
+ var divEl = createElement("div");
divEl.appendChild(inputEl);
divEl.appendChild(hiddenEl);
return divEl;
@@ -368,7 +376,6 @@
return selectEl;
} else { // Simple
-
return createElement( "input", "input", {
type: "text",
name: prop,
@@ -418,6 +425,8 @@
}
var newSpan = createSpan(prop, '');
span.parentNode.insertBefore(newSpan, span.nextSibling);
+ // FIX for IE6 and above: checkbox can only be checked after it is in the DOM
+ $(".checked_box").attr("checked", true).removeClass("checked_box");
}
function removeValue(vidx)
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/datatable.js
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/datatable.js 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/datatable.js 2009-03-31 11:24:35 UTC (rev 86526)
@@ -1,327 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-function renderDataTable( /* Array of Data Objects */ components )
-{
- // number of actions plus 3 -- id, name and state
- var columns = components.numActions + 3;
-
- header( columns );
-
- if (components.error)
- {
- error( columns, components.error );
- }
- else
- {
- data ( components.data );
- }
-
- footer( columns );
-}
-
-
-function header( /* int */ columns )
-{
- document.write( "<table class='content' cellpadding='0' cellspacing='0' width='100%'>" );
-
- document.write( "<tr class='content'>" );
- document.write( "<td colspan='" + columns + "' class='content'> </th>" );
- document.write( "</tr>" );
-
- document.write( "<tr class='content'>" );
- document.write( "<th class='content'>ID</th>" );
- document.write( "<th class='content' width='100%'>Name</th>" );
- document.write( "<th class='content'>Status</th>" );
- document.write( "<th class='content' colspan='" + (columns - 3) + "'>Actions</th>" );
- document.write( "</tr>" );
-
-}
-
-
-function error( /* int */ columns, /* String */ message )
-{
- document.write( "<tr class='content'>" );
- document.write( "<td class='content'> </td>" );
- document.write( "<td class='content' colspan='" + (columns - 1) + "'>" + message + "</td>" );
- document.write( "</tr>" );
-}
-
-
-function data( /* Array of Object */ dataArray )
-{
- // render components
- if (dataArray.length == 1)
- {
- entry( dataArray[0], true );
- }
- else {
- for ( var idx in dataArray )
- {
- entry( dataArray[idx] );
- }
- }
-}
-
-
-function footer( /* int */ columns )
-{
- document.write( "<tr class='content'>" );
- document.write( "<td colspan='" + columns + "' class='content'> </th>" );
- document.write( "</tr>" );
-
- document.write( "</table>" );
-}
-
-
-function entry( /* Object */ dataEntry, /* boolean */ singleEntry )
-{
- var trElement = tr( null, { id: "entry" + dataEntry.id } );
- entryInternal( trElement, dataEntry, singleEntry );
- document.write( serialize( trElement ) );
-
- // dataEntry detailed properties
- trElement = tr( null, { id: "entry" + dataEntry.id + "_details" } );
- if (dataEntry.props)
- {
- getDataEntryDetails( trElement, dataEntry.props );
- }
- document.write( serialize( trElement ) );
-}
-
-
-function entryInternal( /* Element */ parent, /* Object */ dataEntry, /* boolean */ singleEntry )
-{
-
- var id = dataEntry.id;
- var name = dataEntry.name;
- var state = dataEntry.state;
- var icon = singleEntry ? "left" : (dataEntry.props ? "down" : "right");
- var event = singleEntry ? "history.back()" : "showDataEntryDetails(" + id + ")";
-
- parent.appendChild( td( "content right", null, [ text( id ) ] ) );
-
- parent.appendChild( td( "content", null, [
- createElement( "img", null, {
- src: appRoot + "/res/imgs/" + icon + ".gif",
- onClick: event,
- id: "entry" + id + "_inline"
- } ),
- text( "\u00a0" ),
- createElement( "a", null, {
- href: pluginRoot + "/" + id
- }, [ text( name ) ]
- )]
- )
- );
-
- parent.appendChild( td( "content center", null, [ text( state ) ] ) );
-
- for ( var aidx in dataEntry.actions )
- {
- var action = dataEntry.actions[aidx];
- parent.appendChild( actionButton( action.enabled, id, action.link, action.name, action.title ) );
- }
-}
-
-
-/* Element */ function actionButton( /* boolean */ enabled, /* long */ id, /* String */ op, /* String */ opLabel, /* String */ title )
-{
- var buttonTd = td( "content", { align: "right" } );
- if ( op )
- {
- var input = createElement( "input", "submit", {
- type: 'button',
- value: opLabel,
- onClick: 'changeDataEntryState(' + id + ', "' + op + '");'
- });
- if (!enabled)
- {
- input.setAttribute( "disabled", true );
- }
- if (title)
- {
- input.setAttribute( "title", title );
- }
- buttonTd.appendChild( input );
- }
- else
- {
- addText( buttonTd, "\u00a0" );
- }
-
- return buttonTd;
-}
-
-
-function getDataEntryDetails( /* Element */ parent, /* Array of Object */ details )
-{
- parent.appendChild( addText( td( "content"), "\u00a0" ) );
-
- var tdEl = td( "content", { colspan: 4 } );
- parent.appendChild( tdEl );
-
- var tableEl = createElement( "table", null, { border: 0 } );
- tdEl.appendChild( tableEl );
-
- var tbody = createElement( "tbody" );
- tableEl.appendChild( tbody );
- for (var idx in details)
- {
- var prop = details[idx];
-
-
- var trEl = tr();
- trEl.appendChild( addText( td( "aligntop", { noWrap: true } ), prop.key ) );
-
- var proptd = td( "aligntop" );
- trEl.appendChild( proptd );
-
- if (prop.value)
- {
- var values = new String( prop.value ).split( "<br />" );
- for (var i=0; i < values.length; i++)
- {
- if (i > 0) { proptd.appendChild( createElement( "br" ) ); }
-
- var span;
- if (values[i].substring(0, 2) == "!!") {
- span = createElement( "span", null, { style: { color: "red" } } );
- proptd.appendChild( span );
- } else {
- span = proptd;
- }
-
- addText( span, values[i] );
- }
- }
- else
- {
- addText( proptd, "\u00a0" );
- }
-
- tbody.appendChild( trEl );
- }
- }
-
-
-function showDetails(bundleId)
-{
- var span = document.getElementById('bundle' + bundleId + '_details');
-}
-
-
-function showDataEntryDetails( id )
-{
- var span = document.getElementById( 'entry' + id + '_details' );
- if (span)
- {
- if (span.firstChild)
- {
- clearChildren( span );
- newLinkValue( id, appRoot + "/res/imgs/right.gif" );
- }
- else
- {
- sendRequest( 'POST', pluginRoot + '/' + id, displayDataEntryDetails );
- newLinkValue( id, appRoot + "/res/imgs/down.gif" );
- }
- }
-}
-
-
-function newLinkValue( /* long */ id, /* String */ newLinkValue )
-{
-
- var link = document.getElementById( "entry" + id + "_inline" );
- if (link)
- {
- link.src = newLinkValue;
- }
-}
-
-
-function displayDataEntryDetails( obj )
-{
- var span = document.getElementById('entry' + obj.id + '_details');
- if (span)
- {
- clearChildren( span );
- getDataEntryDetails( span, obj.props );
- }
-
-}
-
-
-function changeDataEntryState(/* long */ id, /* String */ action)
-{
- var parm = pluginRoot + "/" + id + "?action=" + action;
- sendRequest('POST', parm, dataEntryStateChanged);
-}
-
-
-function dataEntryStateChanged(obj)
-{
- if (obj.reload)
- {
- document.location = document.location;
- }
- else
- {
- var id = obj.id;
- if (obj.state)
- {
- // has status, so draw the line
- if (obj.props)
- {
- var span = document.getElementById('entry' + id + '_details');
- if (span && span.firstChild)
- {
- clearChildren( span );
- getDataEntryDetails( span, obj.props );
- }
- else
- {
- obj.props = false;
- }
- }
-
- var span = document.getElementById('entry' + id);
- if (span)
- {
- clearChildren( span );
- entryInternal( span, obj );
- }
- }
- else
- {
- // no status, dataEntry has been removed/uninstalled
- var span = document.getElementById('entry' + id);
- if (span)
- {
- span.parentNode.removeChild(span);
- }
- var span = document.getElementById('entry' + id + '_details');
- if (span)
- {
- span.parentNode.removeChild(span);
- }
- }
- }
-}
-
-
Modified: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/events.js
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/events.js 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/events.js 2009-03-31 11:24:35 UTC (rev 86526)
@@ -15,53 +15,40 @@
* limitations under the License.
*/
function renderStatusLine() {
- document.write( "<div class='fullwidth'>");
- document.write( "<div class='statusline'></div>" );
- document.write( "</div>" );
+ $("#plugin_content").append( "<div class='fullwidth'><div class='statusline'/></div>" );
}
-function renderView( /* Array of String */ columns, /* Array of String */ buttons ) {
+function renderView( /* Array of String */ columns, /* String */ buttons ) {
renderStatusLine();
renderButtons(buttons);
- document.write( "<div class='table'>");
- document.write( "<table id='events' class='tablelayout'>" );
-
- document.write( "<thead><tr>" );
+ var txt = "<div class='table'><table id='plugin_table' class='tablelayout'><thead><tr>";
for ( var name in columns ) {
- document.write( "<th>" + columns[name] + "</th>" );
+ txt = txt + "<th class='col_" + columns[name] + "'>" + columns[name] + "</th>";
}
- document.write( "</tr></thead><tbody>" );
- document.write( "</tbody></table>" );
- document.write( "</div>");
+ txt = txt + "</tr></thead><tbody></tbody></table></div>";
+ $("#plugin_content").append( txt );
renderButtons(buttons);
renderStatusLine();
}
function renderButtons( buttons ) {
- document.write( "<div class='fullwidth'>");
- document.write( "<div class='buttons'>" );
- for( var b in buttons ) {
- document.write( "<div class='button'>");
- document.write(buttons[b]);
- document.write( "</div>");
- }
- document.write( "</div>" );
- document.write( "</div>" );
+ $("#plugin_content").append( "<form method='post' enctype='multipart/form-data'><div class='fullwidth'><div class='buttons'>" +
+ buttons + "</div></div></form>" );
}
function renderData( eventData ) {
$(".statusline").empty().append(eventData.status);
- $("#events > tbody > tr").remove();
+ $("#plugin_table > tbody > tr").remove();
for ( var idx in eventData.data ) {
entry( eventData.data[idx] );
}
- $("#events").trigger("update");
+ $("#plugin_table").trigger("update");
}
function entry( /* Object */ dataEntry ) {
var trElement = tr( null, { id: "entry" + dataEntry.id } );
entryInternal( trElement, dataEntry );
- $("#events > tbody").append(trElement);
+ $("#plugin_table > tbody").append(trElement);
}
@@ -83,9 +70,9 @@
for( var p in dataEntry.properties ) {
var c1 = td(null, null, [text(p)]);
- c1.setAttribute("style", "border:0px none;");
+ $(c1).css("border", "0px none");
var c2 = td(null, null, [text(dataEntry.properties[p])]);
- c2.setAttribute("style", "border:0px none;");
+ $(c2).css("border", "0px none");
bodyE.appendChild(tr(null, null, [ c1, c2 ]));
}
propE = tableE;
@@ -107,18 +94,19 @@
}
function renderEvents() {
- renderView( ["Received", "Topic", "Properties"],
- ["<button id='reloadButton' type='button' name='reload'>Reload</button>",
- "<button id='clearButton' type='button' name='clear'>Clear List</button>"]);
-
- loadData();
-
- $("#events").tablesorter();
- $("#reloadButton").click(loadData);
- $("#clearButton").click(function () {
- $("#events > tbody > tr").remove();
- $.post(pluginRoot, { "action":"clear" }, function(data) {
- renderData(data);
- }, "json");
- });
+ $(document).ready(function(){
+ renderView( ["Received", "Topic", "Properties"],
+ "<button class='clearButton' type='button' name='clear'>Clear List</button>" +
+ "<button class='reloadButton' type='button' name='reload'>Reload</button>");
+ loadData();
+
+ $("#plugin_table").tablesorter();
+ $(".reloadButton").click(loadData);
+ $(".clearButton").click(function () {
+ $("#plugin_table > tbody > tr").remove();
+ $.post(pluginRoot, { "action":"clear" }, function(data) {
+ renderData(data);
+ }, "json");
+ });
+ });
}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/jquery-1.2.6.min.js
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/jquery-1.2.6.min.js 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/jquery-1.2.6.min.js 2009-03-31 11:24:35 UTC (rev 86526)
@@ -1,32 +0,0 @@
-/*
- * jQuery 1.2.6 - New Wave Javascript
- *
- * Copyright (c) 2008 John Resig (jquery.com)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
- * $Rev: 5685 $
- */
-(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
-return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},cs!
s:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:funct!
ion(){return this.domManip(arguments,true,true,function(elem){if(this.
nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
-return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
-selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(valu!
e);}}return values;}else
-return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
-this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
-return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataTyp!
e:"script"});else
-jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&©&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;!
return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
-script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===fa!
lse)break;}else
-for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
-for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];!
}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
-jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i]!
)){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+=''!
;if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,func
tion(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j!
>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
-ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").repla!
ce(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
-while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
-while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQ!
uery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret!
=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery
.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}!
},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:!
[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegE
xp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").i!
ndexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},h!
eader:function(a){return/h\d/i.test(a.nodeName);},animated:function(a)
{return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(!
\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeN!
ame(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#
"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQue!
ry.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)!
/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuer
y.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.d!
ata(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.hand!
ler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,ty
pe){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
-for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefau!
lt;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];f!
or(var j in handlers){var handler=handlers[j];if(all||handler.type==na
mespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelB!
ubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:!
{ready:{setup:function(){bindReady();return;},teardown:function(){retu
rn;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQu!
ery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(!
jQuery.isReady)fn.call(document,jQuery);else
-jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser!
.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,pa!
rams,callback){if(typeof url!='string')return this._load(url);var off=
url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).v!
al();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout!
:0,contentType:"application/x-www-form-urlencoded",processData:true,as
ync:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[!
jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(!
script);return undefined;}var requestDone=false;var xhr=window.ActiveX
Object?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
-xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success!
"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
-jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return!
false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
-for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
-s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"t!
oggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt!
.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.cs
s(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
-e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed!
,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")t!
his.elem.style.display="block";},cur:function(force){if(this.elem[this
.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=j!
Query.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.dura!
tion);this.now=this.start+((this.end-this.start)*this.pos);this.update
();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParen!
t.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",tr!
ue));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0
;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(wi!
ndow).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
\ No newline at end of file
Added: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/jquery-1.3.2.min.js
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/jquery-1.3.2.min.js (rev 0)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/jquery-1.3.2.min.js 2009-03-31 11:24:35 UTC (rev 86526)
@@ -0,0 +1,19 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(!
H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(fun!
ction(){var G=this;while(G.firstChild){G=G.firstChild}return G}).appen
d(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.no!
CloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pu!
shStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,thi
s)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.!
makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;functi!
on K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getEl
ementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"}!
,isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?!
I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),fun
ction(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}ret!
urn o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("di!
v");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return
}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.le!
ngth){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}!
if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.spe
cified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}!
return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){retu!
rn o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"n
extSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeo!
f E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"q!
ueue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(
H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)!
}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){!
if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if
(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{!
"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementByI!
d!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NA
ME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}ret!
urn X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"sub!
mit"===T.type},image:function(T){return"image"===T.type},reset:functio
n(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}!
}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var !
M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].sourc
e+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplic!
ate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undef!
ined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=func
tion(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;f!
or(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.!
match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.rela
tive[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);!
H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort(!
).join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for
(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)!
}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaK!
ey newValue originalTarget pageX pageY prevValue relatedNode relatedTa
rget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},s!
pecial:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagatio!
nStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.
relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}r!
eturn this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/!
\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyLi
st:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,e!
rror").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.st!
yle.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noClo
neEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.s!
lice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o!
.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:fu
nction(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.dat!
a=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.h!
ost)){var H=document.getElementsByTagName("head")[0];var T=document.cr
eateElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState!
==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxSt!
op")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,
G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunctio!
n(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G]!
,"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F
;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cu!
r(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};retur!
n E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H
,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n)!
;n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.e!
lem)}return false}else{var J=G-this.startTime;this.state=J/this.option
s.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this!
[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{to!
p:N,left:I}}}o.offset={initialize:function(){if(this.initialized){retu
rn}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:functi!
on(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||th!
is[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&docum
ent.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/ui.js
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/ui.js 2009-03-31 11:13:36 UTC (rev 86525)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/resources/res/ui/ui.js 2009-03-31 11:24:35 UTC (rev 86526)
@@ -93,8 +93,7 @@
if (cssClass)
{
- element.setAttribute( "class", cssClass ); // non-IE
- element.setAttribute( "className", cssClass ); // IE
+ $(element).addClass(cssClass);
}
if (attrs)
@@ -106,12 +105,12 @@
var styles = attrs[lab];
for (var styleName in styles)
{
- element.style[styleName] = styles[styleName];
+ $(element).css(styleName, styles[styleName]);
}
}
else
{
- element.setAttribute( lab, attrs[lab] );
+ $(element).attr( lab, attrs[lab] );
}
}
}
15 years, 1 month
JBoss-OSGI SVN: r86518 - in projects/jboss-osgi/trunk/service/webconsole: src/main/java/org/apache/felix/webconsole and 2 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-03-31 06:14:25 -0400 (Tue, 31 Mar 2009)
New Revision: 86518
Removed:
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/Action.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/ConfigurationPrinter.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/Render.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/WebConsoleConstants.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/BaseManagementPlugin.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/BaseWebConsolePlugin.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/Logger.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerActivator.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerPlugin.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/Util.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/deppack/
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/RenderBridge.java
projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/system/
Modified:
projects/jboss-osgi/trunk/service/webconsole/pom.xml
Log:
Unpack felix webconsole rather than include the sources
Modified: projects/jboss-osgi/trunk/service/webconsole/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/pom.xml 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/pom.xml 2009-03-31 10:14:25 UTC (rev 86518)
@@ -22,21 +22,28 @@
<showDeprecation>false</showDeprecation>
</configuration>
</plugin>
- <!-- see resources/OSGI-INF/metatype.xml
<plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-scr-plugin</artifactId>
- <version>1.0.6</version>
+ <artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
- <id>generate-scr-scrdescriptor</id>
+ <id>copy</id>
+ <phase>process-resources</phase>
<goals>
- <goal>scr</goal>
+ <goal>unpack</goal>
</goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.webconsole</artifactId>
+ <type>jar</type>
+ <outputDirectory>target/classes</outputDirectory>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
</execution>
</executions>
</plugin>
- -->
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
@@ -71,6 +78,7 @@
org.apache.felix.scr;
org.apache.felix.shell;
org.osgi.service.*;resolution:=optional,*
+ javax.portlet;resolution:=optional,*;
</Import-Package>
<Embed-Dependency>
<!-- Import/Export-Package parsing, OBR -->
@@ -92,33 +100,15 @@
<version>2.4</version>
<scope>provided</scope>
</dependency>
-
- <!-- This adds commons-io transitively -->
<dependency>
- <groupId>commons-fileupload</groupId>
- <artifactId>commons-fileupload</artifactId>
- <version>1.1.1</version>
- <scope>compile</scope>
- <optional>true</optional>
- </dependency>
-
- <dependency>
<groupId>org.apache.felix</groupId>
- <artifactId>org.osgi.core</artifactId>
- <version>1.0.1</version>
+ <artifactId>org.osgi.compendium</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- <version>1.2.0</version>
+ <artifactId>org.apache.felix.webconsole</artifactId>
<scope>provided</scope>
- <exclusions>
- <exclusion>
- <groupId>org.apache.felix</groupId>
- <artifactId>javax.servlet</artifactId>
- </exclusion>
- </exclusions>
</dependency>
<dependency>
@@ -143,6 +133,5 @@
<scope>compile</scope>
<optional>true</optional>
</dependency>
-
</dependencies>
</project>
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/Action.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/Action.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/Action.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.felix.webconsole;
-
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-
-/**
- * The <code>Action</code> interface defines a service interface for actions
- * to be plugged into the web console.
- * <p>
- * <strong>NOTE: This interface is just an intermediate solution for making the
- * web console extensible. Future releases of the web console will remove this
- * and the {@link Render} interfaces and use the
- * <code>javax.servlet.Servlet</code> interface with predefined service
- * registration properties instead.</strong>
- *
- * @deprecated This interface will be removed when <a
- * href="https://issues.apache.org/jira/browse/FELIX-574">FELIX-574</a>
- * will be implemented.
- */
-public interface Action
-{
-
- static final String SERVICE = Action.class.getName();
-
- /**
- * The name of a request attribute, which may be set by performAction if
- * redirecting.
- */
- static final String ATTR_REDIRECT_PARAMETERS = "redirectParameters";
-
-
- String getName();
-
-
- String getLabel();
-
-
- /**
- * Performs the action the request data optionally sending a response to
- * the HTTP Servlet Response.
- *
- * @param request
- * @param response
- *
- * @return <code>true</code> the client should be redirected after the
- * action has been taken. <code>false</code> if this method also
- * provided response to the client and nore more processing is
- * required.
- *
- * @throws IOException May be thrown if an I/O error occurrs
- * @throws ServletException May be thrown if another error occurrs while
- * processing the action. The <code>rootCause</code> of the exception
- * should contain the cause of the error.
- */
- boolean performAction( HttpServletRequest request, HttpServletResponse response ) throws IOException,
- ServletException;
-
-}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/ConfigurationPrinter.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/ConfigurationPrinter.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/ConfigurationPrinter.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.webconsole;
-
-
-import java.io.PrintWriter;
-
-
-/**
- * The <code>ConfigurationPrinter</code> is a service interface to be used by
- * providers which want to hook into the display of the current configuration
- * of the OSGi framework.
- */
-public interface ConfigurationPrinter
-{
-
- /**
- * The service name under which services of this class must be registered
- * to be picked for inclusion in the configuration report.
- */
- static final String SERVICE = ConfigurationPrinter.class.getName();
-
-
- /**
- * Returns a human readable title string to be place in front of the configuration
- * report generated by the {@link #printConfiguration(PrintWriter)} method.
- */
- String getTitle();
-
-
- /**
- * Prints the configuration report to the given <code>printWriter</code>.
- * Implementations are free to print whatever information they deem useful.
- * The <code>printWriter</code> may be flushed but must not be closed.
- */
- void printConfiguration( PrintWriter printWriter );
-
-}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/Render.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/Render.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/Render.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.felix.webconsole;
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * The <code>Render</code> interface defines a service interface for
- * information renderings to be plugged into the web console.
- * <p>
- * <strong>NOTE: This interface is just an intermediate solution for making the
- * web console extensible. Future releases of the web console will remove this
- * and the {@link Action} interfaces and use the
- * <code>javax.servlet.Servlet</code> interface with predefined service
- * registration properties instead.</strong>
- *
- * @deprecated This interface will be removed when <a
- * href="https://issues.apache.org/jira/browse/FELIX-574">FELIX-574</a>
- * will be implemented.
- */
-public interface Render {
-
- static final String SERVICE = Render.class.getName();
-
- String getName();
-
- String getLabel();
-
- void render(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException;
-
-}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/WebConsoleConstants.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/WebConsoleConstants.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/WebConsoleConstants.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.webconsole;
-
-
-public interface WebConsoleConstants
-{
-
- /**
- * The name of the service to register as to be used as a "plugin" for
- * the OSGi Manager (value is "javax.servlet.Servlet").
- */
- public static final String SERVICE_NAME = "javax.servlet.Servlet";
-
- /**
- * The URI address label under which the OSGi Manager plugin is called by
- * the OSGi Manager (value is "felix.webconsole.label").
- * <p>
- * Only {@link #SERVICE_NAME} services with this service registration
- * property set to a non-empty String values are accepted by the OSGi
- * Manager as a plugin.
- */
- public static final String PLUGIN_LABEL = "felix.webconsole.label";
-
-}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/BaseManagementPlugin.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/BaseManagementPlugin.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/BaseManagementPlugin.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.webconsole.internal;
-
-
-import org.osgi.framework.BundleContext;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.service.startlevel.StartLevel;
-import org.osgi.util.tracker.ServiceTracker;
-
-
-public class BaseManagementPlugin implements OsgiManagerPlugin
-{
-
- private BundleContext bundleContext;
- private Logger log;
-
- private ServiceTracker startLevelService;
-
- private ServiceTracker packageAdmin;
-
-
- protected BaseManagementPlugin()
- {
- }
-
-
- public void activate( BundleContext bundleContext )
- {
- this.bundleContext = bundleContext;
- this.log = new Logger( bundleContext );
- }
-
-
- public void deactivate()
- {
- if ( log != null )
- {
- log.dispose();
- }
-
- if ( startLevelService != null )
- {
- startLevelService.close();
- startLevelService = null;
- }
-
- if ( packageAdmin != null )
- {
- packageAdmin.close();
- packageAdmin = null;
- }
- }
-
-
- protected BundleContext getBundleContext()
- {
- return bundleContext;
- }
-
-
- protected Logger getLog()
- {
- return log;
- }
-
-
- protected StartLevel getStartLevel()
- {
- if ( startLevelService == null )
- {
- startLevelService = new ServiceTracker( getBundleContext(), StartLevel.class.getName(), null );
- startLevelService.open();
- }
- return ( StartLevel ) startLevelService.getService();
- }
-
-
- protected PackageAdmin getPackageAdmin()
- {
- if ( packageAdmin == null )
- {
- packageAdmin = new ServiceTracker( getBundleContext(), PackageAdmin.class.getName(), null );
- packageAdmin.open();
- }
- return ( PackageAdmin ) packageAdmin.getService();
- }
-
-}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/BaseWebConsolePlugin.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/BaseWebConsolePlugin.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/BaseWebConsolePlugin.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.webconsole.internal;
-
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.service.startlevel.StartLevel;
-import org.osgi.util.tracker.ServiceTracker;
-
-
-public abstract class BaseWebConsolePlugin extends AbstractWebConsolePlugin implements OsgiManagerPlugin
-{
-
- private static String PACKAGE_ADMIN_NAME = PackageAdmin.class.getName();
- private static String START_LEVEL_NAME = StartLevel.class.getName();
-
- private Logger log;
-
- private Map services = new HashMap();
-
-
- public void deactivate()
- {
- for ( Iterator ti = services.values().iterator(); ti.hasNext(); )
- {
- ServiceTracker tracker = ( ServiceTracker ) ti.next();
- tracker.close();
- ti.remove();
- }
-
- if ( log != null )
- {
- log.dispose();
- log = null;
- }
- }
-
-
- protected Logger getLog()
- {
- if ( log == null )
- {
- log = new Logger( getBundleContext() );
- }
-
- return log;
- }
-
-
- protected StartLevel getStartLevel()
- {
- return ( StartLevel ) getService( START_LEVEL_NAME );
- }
-
-
- protected PackageAdmin getPackageAdmin()
- {
- return ( PackageAdmin ) getService( PACKAGE_ADMIN_NAME );
- }
-
-
- protected Object getService( String serviceName )
- {
- ServiceTracker serviceTracker = ( ServiceTracker ) services.get( serviceName );
- if ( serviceTracker == null )
- {
- serviceTracker = new ServiceTracker( getBundleContext(), serviceName, null );
- serviceTracker.open();
-
- services.put( serviceName, serviceTracker );
- }
-
- return serviceTracker.getService();
- }
-}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/Logger.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/Logger.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/Logger.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.webconsole.internal;
-
-
-import org.osgi.framework.BundleContext;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-
-public class Logger
-{
-
- private ServiceTracker logTracker;
-
-
- public Logger( BundleContext bundleContext )
- {
- logTracker = new ServiceTracker( bundleContext, LogService.class.getName(), null );
- logTracker.open();
- }
-
-
- public void dispose()
- {
- if ( logTracker != null )
- {
- logTracker.close();
- }
- }
-
-
- public void log( int logLevel, String message )
- {
- log( logLevel, message, null );
- }
-
-
- public void log( int logLevel, String message, Throwable t )
- {
- Object log = logTracker.getService();
- if ( log != null )
- {
- ( ( LogService ) log ).log( logLevel, message, t );
- }
- else
- {
- String level;
- switch ( logLevel )
- {
- case LogService.LOG_DEBUG:
- level = "*DEBUG*";
- break;
- case LogService.LOG_INFO:
- level = "*INFO *";
- break;
- case LogService.LOG_WARNING:
- level = "*WARN *";
- break;
- case LogService.LOG_ERROR:
- level = "*ERROR*";
- break;
- default:
- level = "*" + logLevel + "*";
- break;
- }
-
- if ( message == null && t != null )
- {
- message = t.getMessage();
- }
-
- System.out.println( level + " " + message );
- if ( t != null )
- {
- t.printStackTrace( System.out );
- }
- }
- }
-}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerActivator.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerActivator.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerActivator.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.webconsole.internal;
-
-
-import org.apache.felix.webconsole.internal.servlet.OsgiManager;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-
-public class OsgiManagerActivator implements BundleActivator
-{
-
- private OsgiManager osgiManager;
-
-
- public void start( BundleContext bundleContext )
- {
- osgiManager = new OsgiManager( bundleContext );
- }
-
-
- public void stop( BundleContext arg0 )
- {
- if ( osgiManager != null )
- {
- osgiManager.dispose();
- }
- }
-
-}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerPlugin.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerPlugin.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerPlugin.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.webconsole.internal;
-
-
-import org.osgi.framework.BundleContext;
-
-
-public interface OsgiManagerPlugin
-{
-
- void activate( BundleContext bundleContext );
-
-
- void deactivate();
-
-}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/Util.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/Util.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/Util.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,195 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.felix.webconsole.internal;
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.util.Arrays;
-import java.util.Comparator;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.io.IOUtils;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Version;
-
-
-/**
- * The <code>Util</code> TODO
- */
-public class Util
-{
-
- /** web apps subpage */
- public static final String PAGE_WEBAPPS = "/webapps";
-
- /** vm statistics subpage */
- public static final String PAGE_VM_STAT = "/vmstat";
-
- /** Logs subpage */
- public static final String PAGE_LOGS = "/logs";
-
- /** Parameter name */
- public static final String PARAM_ACTION = "action";
-
- /** Parameter name */
- public static final String PARAM_CONTENT = "content";
-
- /** Parameter name */
- public static final String PARAM_SHUTDOWN = "shutdown";
-
- /** Parameter value */
- public static final String VALUE_SHUTDOWN = "shutdown";
-
-
- public static void startScript( PrintWriter pw )
- {
- pw.println( "<script type='text/javascript'>" );
- pw.println( "// <![CDATA[" );
- }
-
-
- public static void endScript( PrintWriter pw )
- {
- pw.println( "// ]]>" );
- pw.println( "</script>" );
- }
-
-
- public static void spool( String res, HttpServletResponse resp ) throws IOException
- {
- InputStream ins = getResource( res );
- if ( ins != null )
- {
- try
- {
- IOUtils.copy( ins, resp.getOutputStream() );
- }
- finally
- {
- IOUtils.closeQuietly( ins );
- }
- }
- }
-
-
- private static InputStream getResource( String resource )
- {
- return Util.class.getResourceAsStream( resource );
- }
-
-
- /**
- * Return a display name for the given <code>bundle</code>:
- * <ol>
- * <li>If the bundle has a non-empty <code>Bundle-Name</code> manifest
- * header that value is returned.</li>
- * <li>Otherwise the symbolic name is returned if set</li>
- * <li>Otherwise the bundle's location is returned if defined</li>
- * <li>Finally, as a last ressort, the bundles id is returned</li>
- * </ol>
- */
- public static String getName( Bundle bundle )
- {
- String name = ( String ) bundle.getHeaders().get( Constants.BUNDLE_NAME );
- if ( name == null || name.length() == 0 )
- {
- name = bundle.getSymbolicName();
- if ( name == null )
- {
- name = bundle.getLocation();
- if ( name == null )
- {
- name = String.valueOf( bundle.getBundleId() );
- }
- }
- }
- return name;
- }
-
-
- /**
- * Orders the bundles according to their name as returned by
- * {@link #getName(Bundle)}, with the exception that the system bundle is
- * always place as the first entry. If two bundles have the same name, they
- * are ordered according to their version. If they have the same version,
- * the bundle with the lower bundle id comes before the other.
- */
- public static void sort( Bundle[] bundles )
- {
- Arrays.sort( bundles, BUNDLE_NAME_COMPARATOR );
- }
-
- // ---------- inner classes ------------------------------------------------
-
- private static final Comparator BUNDLE_NAME_COMPARATOR = new Comparator()
- {
- public int compare( Object o1, Object o2 )
- {
- return compare( ( Bundle ) o1, ( Bundle ) o2 );
- }
-
-
- public int compare( Bundle b1, Bundle b2 )
- {
-
- // the same bundles
- if ( b1 == b2 || b1.getBundleId() == b2.getBundleId() )
- {
- return 0;
- }
-
- // special case for system bundle, which always is first
- if ( b1.getBundleId() == 0 )
- {
- return -1;
- }
- else if ( b2.getBundleId() == 0 )
- {
- return 1;
- }
-
- // compare the symbolic names
- int snComp = Util.getName( b1 ).compareToIgnoreCase( Util.getName( b2 ) );
- if ( snComp != 0 )
- {
- return snComp;
- }
-
- // same names, compare versions
- Version v1 = Version.parseVersion( ( String ) b1.getHeaders().get( Constants.BUNDLE_VERSION ) );
- Version v2 = Version.parseVersion( ( String ) b2.getHeaders().get( Constants.BUNDLE_VERSION ) );
- int vComp = v1.compareTo( v2 );
- if ( vComp != 0 )
- {
- return vComp;
- }
-
- // same version ? Not really, but then, we compare by bundle id
- if ( b1.getBundleId() < b2.getBundleId() )
- {
- return -1;
- }
-
- // b1 id must be > b2 id because equality is already checked
- return 1;
- }
- };
-}
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,260 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.felix.webconsole.internal.servlet;
-
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URL;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.osgi.service.http.HttpContext;
-import org.osgi.service.http.HttpService;
-
-
-final class OsgiManagerHttpContext implements HttpContext
-{
-
- private static final String HEADER_WWW_AUTHENTICATE = "WWW-Authenticate";
-
- private static final String HEADER_AUTHORIZATION = "Authorization";
-
- private static final String AUTHENTICATION_SCHEME_BASIC = "Basic";
-
- /**
- * The encoding table which causes BaseFlex encoding/deconding to work like
- * Base64 encoding/deconding.
- */
- private static final String base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
- /**
- * The pad character used in Base64 encoding/deconding.
- */
- private static final char base64Pad = '=';
-
- String realm;
-
- String userId;
- String user;
-
- private final HttpContext base;
-
-
- OsgiManagerHttpContext( HttpService httpService, String realm, String userId, String password )
- {
- this.base = httpService.createDefaultHttpContext();
- this.realm = realm;
- this.userId = userId;
- this.user = encode( userId, password );
- }
-
-
- public String getMimeType( String name )
- {
- return this.base.getMimeType( name );
- }
-
-
- public URL getResource( String name )
- {
- URL url = this.base.getResource( name );
- if ( url == null && name.endsWith( "/" ) )
- {
- return this.base.getResource( name.substring( 0, name.length() - 1 ) );
- }
- return url;
- }
-
-
- /**
- * Checks the <code>Authorization</code> header of the request for Basic
- * authentication user name and password. If contained, the credentials are
- * compared to the user name and password set for the OSGi Console.
- * <p>
- * If no user name is set, the <code>Authorization</code> header is
- * ignored and the client is assumed to be authenticated.
- *
- * @param request The HTTP request used to get the
- * <code>Authorization</code> header.
- * @param response The HTTP response used to send the authentication request
- * if authentication is required but not satisfied.
- * @return <code>true</code> if authentication is required and not
- * satisfied by the request.
- */
- public boolean handleSecurity( HttpServletRequest request, HttpServletResponse response )
- {
-
- // don't care for authentication if no user name is configured
- if ( this.user == null )
- {
- return true;
- }
-
- // Return immediately if the header is missing
- String authHeader = request.getHeader( HEADER_AUTHORIZATION );
- if ( authHeader != null && authHeader.length() > 0 )
- {
-
- // Get the authType (Basic, Digest) and authInfo (user/password)
- // from
- // the header
- authHeader = authHeader.trim();
- int blank = authHeader.indexOf( ' ' );
- if ( blank > 0 )
- {
- String authType = authHeader.substring( 0, blank );
- String authInfo = authHeader.substring( blank ).trim();
-
- // Check whether authorization type matches
- if ( authType.equalsIgnoreCase( AUTHENTICATION_SCHEME_BASIC ) && this.user.equals( authInfo ) )
- {
-
- // as per the spec, set attributes
- request.setAttribute( HttpContext.AUTHENTICATION_TYPE, "" );
- request.setAttribute( HttpContext.REMOTE_USER, this.userId );
-
- // succeed
- return true;
- }
- }
- }
-
- // request authentication
- response.setHeader( HEADER_WWW_AUTHENTICATE, AUTHENTICATION_SCHEME_BASIC + " realm=\"" + this.realm + "\"" );
- try
- {
- response.sendError( HttpServletResponse.SC_UNAUTHORIZED );
- }
- catch ( IOException ioe )
- {
- // failed sending the error, fall back to setting the status
- response.setStatus( HttpServletResponse.SC_UNAUTHORIZED );
- }
-
- // inform HttpService that authentication failed
- return false;
- }
-
-
- /**
- * Base64 encodes the user name and password for comparison to the value of
- * a Basic encoded HTTP header authentication.
- *
- * @param user The name of the user in the username/password pair
- * @param password The password in the username/password pair
- * @return The Base64 encoded username/password pair or <code>null</code>
- * if <code>user</code> is <code>null</code> or empty.
- */
- public static String encode( String user, String password )
- {
-
- /* check arguments */
- if ( user == null || user.length() == 0 )
- return null;
-
- String srcString = user + ":";
- if ( password != null && password.length() > 0 )
- {
- srcString += password;
- }
-
- // need bytes
- byte[] src;
- try
- {
- src = srcString.getBytes( "ISO-8859-1" );
- }
- catch ( UnsupportedEncodingException uee )
- {
- // we do not expect this, the API presribes ISO-8859-1 to be present
- // anyway, fallback to platform default
- src = srcString.getBytes();
- }
-
- int srcsize = src.length;
- int tbllen = base64Table.length();
-
- StringBuffer result = new StringBuffer( srcsize );
-
- /* encode */
- int tblpos = 0;
- int bitpos = 0;
- int bitsread = -1;
- int inpos = 0;
- int pos = 0;
-
- while ( inpos <= srcsize )
- {
-
- if ( bitsread < 0 )
- {
- if ( inpos < srcsize )
- {
- pos = src[inpos++];
- }
- else
- {
- // inpos++;
- // pos = 0;
- break;
- }
- bitsread = 7;
- }
-
- tblpos = 0;
- bitpos = tbllen / 2;
- while ( bitpos > 0 )
- {
- if ( bitsread < 0 )
- {
- pos = ( inpos < srcsize ) ? src[inpos] : '\0';
- inpos++;
- bitsread = 7;
- }
-
- /* test if bit at pos <bitpos> in <pos> is set.. */
- if ( ( ( 1 << bitsread ) & pos ) != 0 )
- tblpos += bitpos;
-
- bitpos /= 2;
- bitsread--;
- }
-
- // got one
- result.append( base64Table.charAt( tblpos ) );
- }
-
- /* add the padding bytes */
- while ( bitsread != -1 )
- {
- bitpos = tbllen / 2;
- while ( bitpos > 0 )
- {
- if ( bitsread < 0 )
- bitsread = 7;
- bitpos /= 2;
- bitsread--;
- }
-
- result.append( base64Pad );
- }
-
- return result.toString();
- }
-}
\ No newline at end of file
Deleted: projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/RenderBridge.java
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/RenderBridge.java 2009-03-31 09:51:56 UTC (rev 86517)
+++ projects/jboss-osgi/trunk/service/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/RenderBridge.java 2009-03-31 10:14:25 UTC (rev 86518)
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.felix.webconsole.internal.servlet;
-
-
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.felix.webconsole.AbstractWebConsolePlugin;
-import org.apache.felix.webconsole.Render;
-
-
-public class RenderBridge extends AbstractWebConsolePlugin
-{
-
- /** Pseudo class version ID to keep the IDE quite. */
- private static final long serialVersionUID = 1L;
-
- private final Render render;
-
-
- RenderBridge( Render render )
- {
- this.render = render;
- }
-
-
- public Render getRender()
- {
- return render;
- }
-
-
- public String getTitle()
- {
- return render.getLabel();
- }
-
-
- public String getLabel()
- {
- return render.getName();
- }
-
-
- protected void renderContent( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
- IOException
- {
- render.render( request, response );
- }
-
-}
15 years, 1 month
JBoss-OSGI SVN: r86464 - in projects/jboss-osgi/trunk: build/distribution and 13 other directories.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-03-30 05:28:45 -0400 (Mon, 30 Mar 2009)
New Revision: 86464
Modified:
projects/jboss-osgi/trunk/build/distribution/pom.xml
projects/jboss-osgi/trunk/build/docbook/pom.xml
projects/jboss-osgi/trunk/microcontainer/osgi-int/pom.xml
projects/jboss-osgi/trunk/microcontainer/pom.xml
projects/jboss-osgi/trunk/pom.xml
projects/jboss-osgi/trunk/repository/api/pom.xml
projects/jboss-osgi/trunk/repository/pom.xml
projects/jboss-osgi/trunk/runtime/deployer/pom.xml
projects/jboss-osgi/trunk/runtime/felix/pom.xml
projects/jboss-osgi/trunk/runtime/pom.xml
projects/jboss-osgi/trunk/runtime/spi/pom.xml
projects/jboss-osgi/trunk/service/logging/pom.xml
projects/jboss-osgi/trunk/service/pom.xml
projects/jboss-osgi/trunk/service/webconsole/pom.xml
projects/jboss-osgi/trunk/testsuite/pom.xml
Log:
version=1.0.0.Beta1
Modified: projects/jboss-osgi/trunk/build/distribution/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/build/distribution/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/build/distribution/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -24,7 +24,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
<relativePath>../../pom.xml</relativePath>
</parent>
Modified: projects/jboss-osgi/trunk/build/docbook/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/build/docbook/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -23,7 +23,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
<relativePath>../../pom.xml</relativePath>
</parent>
Modified: projects/jboss-osgi/trunk/microcontainer/osgi-int/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/microcontainer/osgi-int/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/microcontainer/osgi-int/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -8,7 +8,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi-microcontainer</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<build>
Modified: projects/jboss-osgi/trunk/microcontainer/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/microcontainer/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/microcontainer/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -8,7 +8,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<modules>
Modified: projects/jboss-osgi/trunk/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -7,7 +7,7 @@
<artifactId>jboss-osgi</artifactId>
<packaging>pom</packaging>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
<parent>
<groupId>org.jboss</groupId>
Modified: projects/jboss-osgi/trunk/repository/api/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/repository/api/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/repository/api/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -8,7 +8,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi-repository</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<!-- Do not add version information here, use ../pom.xml instead -->
Modified: projects/jboss-osgi/trunk/repository/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/repository/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/repository/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -8,7 +8,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<modules>
Modified: projects/jboss-osgi/trunk/runtime/deployer/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/runtime/deployer/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/runtime/deployer/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -12,7 +12,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi-runtime</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<!-- Properties -->
Modified: projects/jboss-osgi/trunk/runtime/felix/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/runtime/felix/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/runtime/felix/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -12,7 +12,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi-runtime</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<!-- Properties -->
Modified: projects/jboss-osgi/trunk/runtime/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/runtime/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/runtime/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -8,7 +8,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<modules>
Modified: projects/jboss-osgi/trunk/runtime/spi/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/runtime/spi/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/runtime/spi/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -13,7 +13,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi-runtime</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<!-- Dependencies -->
Modified: projects/jboss-osgi/trunk/service/logging/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/service/logging/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/service/logging/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -12,7 +12,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi-service</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<!-- Properties -->
Modified: projects/jboss-osgi/trunk/service/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/service/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/service/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -8,7 +8,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<modules>
Modified: projects/jboss-osgi/trunk/service/webconsole/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/service/webconsole/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/service/webconsole/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -11,7 +11,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<build>
Modified: projects/jboss-osgi/trunk/testsuite/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/testsuite/pom.xml 2009-03-30 08:31:00 UTC (rev 86463)
+++ projects/jboss-osgi/trunk/testsuite/pom.xml 2009-03-30 09:28:45 UTC (rev 86464)
@@ -12,7 +12,7 @@
<parent>
<groupId>org.jboss.osgi</groupId>
<artifactId>jboss-osgi</artifactId>
- <version>1.0.0.Alpha3</version>
+ <version>1.0.0.Beta1</version>
</parent>
<!-- Properties -->
15 years, 1 month
JBoss-OSGI SVN: r86435 - projects/jboss-osgi/trunk/build/docbook/en/modules.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-03-27 14:48:29 -0400 (Fri, 27 Mar 2009)
New Revision: 86435
Modified:
projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml
Log:
Update download location
Modified: projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml 2009-03-27 18:34:02 UTC (rev 86434)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml 2009-03-27 18:48:29 UTC (rev 86435)
@@ -12,7 +12,7 @@
<title>Installing JBossOSGi</title>
<para>JBossOSGi is distributed as an <ulink url="http://izpack.org">IzPack</ulink> installer archive.
- The JBossOSGi Installer is available from the JBossOSGi <ulink url="https://sourceforge.net/project/showfiles.php?group_id=22866&package_...">download area</ulink>.</para>
+ The installer is available from the JBossOSGi <ulink url="https://sourceforge.net/project/showfiles.php?group_id=22866&package_...">download area</ulink>.</para>
<para>To run the installer execute the following command:</para>
15 years, 1 month
JBoss-OSGI SVN: r86434 - projects/jboss-osgi/trunk/build/docbook/en/modules.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-03-27 14:34:02 -0400 (Fri, 27 Mar 2009)
New Revision: 86434
Modified:
projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml
Log:
Update download location
Modified: projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml 2009-03-27 18:32:27 UTC (rev 86433)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml 2009-03-27 18:34:02 UTC (rev 86434)
@@ -12,16 +12,12 @@
<title>Installing JBossOSGi</title>
<para>JBossOSGi is distributed as an <ulink url="http://izpack.org">IzPack</ulink> installer archive.
- Currently, the JBossOSGi Installer is available from the <ulink url="http://repository.jboss.org/maven2">JBoss Maven Repository</ulink>.
- You can download the latest version from <ulink url="http://repository.jboss.org/maven2/org/jboss/osgi/jboss-osgi-distribution">jboss-osgi-distribution</ulink> directory.
- To run the installer execute the following command:</para>
+ The JBossOSGi Installer is available from the JBossOSGi <ulink url="https://sourceforge.net/project/showfiles.php?group_id=22866&package_...">download area</ulink>.</para>
+
+ <para>To run the installer execute the following command:</para>
- <note>
- <title>TODO: Provide better download support</title>
- </note>
-
<programlisting>
- java -jar jboss-osgi-distribution-1.0.0.Alpha3-installer.jar
+ java -jar jboss-osgi-installer-1.0.0.Alpha3.jar
</programlisting>
<para>The installer first shows a welcome screen</para>
15 years, 1 month
JBoss-OSGI SVN: r86433 - in projects/jboss-osgi: tags and 1 other directory.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-03-27 14:32:27 -0400 (Fri, 27 Mar 2009)
New Revision: 86433
Added:
projects/jboss-osgi/tags/jboss-osgi-1.0.0.Alpha3/
Removed:
projects/jboss-osgi/branches/jboss-osgi-1.0.0.Alpha3/
Log:
Release jboss-osgi-1.0.0.Alpha3
Copied: projects/jboss-osgi/tags/jboss-osgi-1.0.0.Alpha3 (from rev 86432, projects/jboss-osgi/branches/jboss-osgi-1.0.0.Alpha3)
15 years, 1 month
JBoss-OSGI SVN: r86432 - projects/jboss-osgi/branches/jboss-osgi-1.0.0.Alpha3/build/docbook/en/modules.
by jboss-osgi-commits@lists.jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2009-03-27 13:51:14 -0400 (Fri, 27 Mar 2009)
New Revision: 86432
Modified:
projects/jboss-osgi/branches/jboss-osgi-1.0.0.Alpha3/build/docbook/en/modules/gettingstarted.xml
Log:
Update download location
Modified: projects/jboss-osgi/branches/jboss-osgi-1.0.0.Alpha3/build/docbook/en/modules/gettingstarted.xml
===================================================================
--- projects/jboss-osgi/branches/jboss-osgi-1.0.0.Alpha3/build/docbook/en/modules/gettingstarted.xml 2009-03-27 17:50:40 UTC (rev 86431)
+++ projects/jboss-osgi/branches/jboss-osgi-1.0.0.Alpha3/build/docbook/en/modules/gettingstarted.xml 2009-03-27 17:51:14 UTC (rev 86432)
@@ -12,7 +12,7 @@
<title>Installing JBossOSGi</title>
<para>JBossOSGi is distributed as an <ulink url="http://izpack.org">IzPack</ulink> installer archive.
- The JBossOSGi Installer is available from the <ulink url="https://sourceforge.net/project/showfiles.php?group_id=22866&package_...">JBossOSGi Download Area</ulink>.</para>
+ The JBossOSGi Installer is available from the JBossOSGi <ulink url="https://sourceforge.net/project/showfiles.php?group_id=22866&package_...">download area</ulink>.</para>
<para>To run the installer execute the following command:</para>
15 years, 1 month