JBoss Rich Faces SVN: r10004 - in trunk/samples: extendedDataTable-sample and 2 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-08-10 09:03:42 -0400 (Sun, 10 Aug 2008)
New Revision: 10004
Added:
trunk/samples/extendedDataTable-sample/
Removed:
trunk/samples/extendedDataTable-sample/src/main/java/i18n/
Modified:
trunk/samples/extendedDataTable-sample/pom.xml
trunk/samples/extendedDataTable-sample/src/main/webapp/pages/index.jsp
trunk/samples/pom.xml
Log:
Extended data table moved to main build
Copied: trunk/samples/extendedDataTable-sample (from rev 10001, trunk/sandbox/samples/extendedDataTable-sample)
Property changes on: trunk/samples/extendedDataTable-sample
___________________________________________________________________
Name: svn:ignore
+ target
Modified: trunk/samples/extendedDataTable-sample/pom.xml
===================================================================
--- trunk/sandbox/samples/extendedDataTable-sample/pom.xml 2008-08-08 19:50:34 UTC (rev 10001)
+++ trunk/samples/extendedDataTable-sample/pom.xml 2008-08-10 13:03:42 UTC (rev 10004)
@@ -1,38 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?><project>
<parent>
<artifactId>samples</artifactId>
- <groupId>org.richfaces.sandbox</groupId>
+ <groupId>org.richfaces</groupId>
<version>3.2.2-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <groupId>org.richfaces.sandbox</groupId>
+ <groupId>org.richfaces</groupId>
<artifactId>extendedDataTable-sample</artifactId>
<packaging>war</packaging>
<name>extendedDataTable-sample Maven Webapp</name>
- <version>3.2.2-SNAPSHOT</version>
- <url>http://maven.apache.org</url>
<build>
<finalName>extendedDataTable-sample</finalName>
</build>
<dependencies>
<dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.richfaces.ui</groupId>
- <artifactId>core</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
<groupId>org.richfaces.samples</groupId>
<artifactId>skins</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
- <groupId>org.richfaces.sandbox.ui</groupId>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>richfaces-ui</artifactId>
+ <version>${project.version}</version>
+ <type>jar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
<artifactId>extendedDataTable</artifactId>
<version>${project.version}</version>
<type>jar</type>
Modified: trunk/samples/extendedDataTable-sample/src/main/webapp/pages/index.jsp
===================================================================
--- trunk/sandbox/samples/extendedDataTable-sample/src/main/webapp/pages/index.jsp 2008-08-08 19:50:34 UTC (rev 10001)
+++ trunk/samples/extendedDataTable-sample/src/main/webapp/pages/index.jsp 2008-08-10 13:03:42 UTC (rev 10004)
@@ -2,7 +2,7 @@
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich" %>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %>
-<%@ taglib uri="http://labs.jboss.com/jbossrichfaces/ui/ui/extendedDataTable" prefix="extdt" %>
+<%@ taglib uri="http://labs.jboss.com/jbossrichfaces/ui/extendedDataTable" prefix="extdt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<f:view>
<html>
Modified: trunk/samples/pom.xml
===================================================================
--- trunk/samples/pom.xml 2008-08-10 13:02:22 UTC (rev 10003)
+++ trunk/samples/pom.xml 2008-08-10 13:03:42 UTC (rev 10004)
@@ -482,6 +482,7 @@
<module>hotKey-sample</module>
<module>beanValidatorSample</module>
<module>state-sample</module>
+ <module>extendedDataTable-sample</module>
</modules>
</profile>
</profiles>
16 years, 5 months
JBoss Rich Faces SVN: r10003 - in trunk/ui: extendedDataTable and 2 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-08-10 09:02:22 -0400 (Sun, 10 Aug 2008)
New Revision: 10003
Added:
trunk/ui/extendedDataTable/
Removed:
trunk/ui/extendedDataTable/src/main/templates/org/richfaces/sandbox/
Modified:
trunk/ui/extendedDataTable/pom.xml
trunk/ui/extendedDataTable/src/main/java/org/richfaces/renderkit/html/RichTableMenuRenderer.java
trunk/ui/pom.xml
Log:
Extended data table moved to main build
Copied: trunk/ui/extendedDataTable (from rev 10001, trunk/sandbox/ui/extendedDataTable)
Modified: trunk/ui/extendedDataTable/pom.xml
===================================================================
--- trunk/sandbox/ui/extendedDataTable/pom.xml 2008-08-08 19:50:34 UTC (rev 10001)
+++ trunk/ui/extendedDataTable/pom.xml 2008-08-10 13:02:22 UTC (rev 10003)
@@ -1,11 +1,11 @@
<?xml version="1.0"?><project>
<parent>
<artifactId>ui</artifactId>
- <groupId>org.richfaces.sandbox</groupId>
+ <groupId>org.richfaces</groupId>
<version>3.2.2-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <groupId>org.richfaces.sandbox.ui</groupId>
+ <groupId>org.richfaces.ui</groupId>
<artifactId>extendedDataTable</artifactId>
<name>extendedDataTable</name>
<build>
@@ -24,7 +24,7 @@
</executions>
<configuration>
<library>
- <prefix>org.richfaces.sandbox</prefix>
+ <prefix>org.richfaces</prefix>
<taglib>
<shortName>extendedDataTable</shortName>
</taglib>
@@ -68,13 +68,41 @@
</dependency>
<dependency>
<groupId>org.richfaces.ui</groupId>
- <artifactId>richfaces-ui</artifactId>
+ <artifactId>drag-drop</artifactId>
<version>3.2.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>dataTable</artifactId>
+ <version>3.2.2-SNAPSHOT</version>
</dependency>
- <dependency>
- <groupId>org.richfaces.sandbox</groupId>
- <artifactId>richfaces-sandbox-impl</artifactId>
- <version>3.2.2-SNAPSHOT</version>
- </dependency>
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>menu-components</artifactId>
+ <version>3.2.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>contextMenu</artifactId>
+ <version>3.2.2-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>jquery</artifactId>
+ <version>3.2.2-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>componentControl</artifactId>
+ <version>3.2.2-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>scrollableDataTable</artifactId>
+ <version>3.2.2-SNAPSHOT</version>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
Modified: trunk/ui/extendedDataTable/src/main/java/org/richfaces/renderkit/html/RichTableMenuRenderer.java
===================================================================
--- trunk/sandbox/ui/extendedDataTable/src/main/java/org/richfaces/renderkit/html/RichTableMenuRenderer.java 2008-08-08 19:50:34 UTC (rev 10001)
+++ trunk/ui/extendedDataTable/src/main/java/org/richfaces/renderkit/html/RichTableMenuRenderer.java 2008-08-10 13:02:22 UTC (rev 10003)
@@ -20,7 +20,7 @@
import org.richfaces.component.html.ContextMenu;
import org.richfaces.component.html.HtmlMenuGroup;
import org.richfaces.component.html.HtmlMenuItem;
-import org.richfaces.component.util.SandboxMessageUtil;
+import org.richfaces.component.util.ComponentMessageUtil;
/**
* Renderer class for table menu.
@@ -149,7 +149,7 @@
// add menu items for changing column visibility
UIMenuGroup group = (HtmlMenuGroup) context.getApplication()
.createComponent(UIMenuGroup.COMPONENT_TYPE);
- group.setValue(SandboxMessageUtil.getMessage(context, MSG_COLUMNS,
+ group.setValue(ComponentMessageUtil.getMessage(context, MSG_COLUMNS,
new Object[] {}).getSummary());
group.setIcon(iconColumnsURI);
menu.getChildren().add(group);
@@ -203,7 +203,7 @@
} else {
menuItem.setDisabled(true);
}
- menuItem.setValue(SandboxMessageUtil.getMessage(context,
+ menuItem.setValue(ComponentMessageUtil.getMessage(context,
(asc ? MSG_SORT_ASC : MSG_SORT_DESC), new Object[] {})
.getSummary());
menuItem.setIcon((asc ? iconSortAscURI : iconSortDescURI));
@@ -257,7 +257,7 @@
menuItem.setDisabled(true);
}
- menuItem.setValue(SandboxMessageUtil.getMessage(context,
+ menuItem.setValue(ComponentMessageUtil.getMessage(context,
(isGroupingColumn ? MSG_GROUP_OFF : MSG_GROUP_ON),
new Object[] {}).getSummary());
menuItem.setIcon(iconGroupURI);
Modified: trunk/ui/pom.xml
===================================================================
--- trunk/ui/pom.xml 2008-08-10 13:01:09 UTC (rev 10002)
+++ trunk/ui/pom.xml 2008-08-10 13:02:22 UTC (rev 10003)
@@ -129,6 +129,7 @@
<module>hotKey</module>
<module>beanValidator</module>
<module>state</module>
+ <module>extendedDataTable</module>
</modules>
<dependencies>
<dependency>
16 years, 5 months
JBoss Rich Faces SVN: r10002 - in trunk/framework: api/src/main/java/org/richfaces/model and 4 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-08-10 09:01:09 -0400 (Sun, 10 Aug 2008)
New Revision: 10002
Added:
trunk/framework/api/src/main/java/org/richfaces/event/extdt/
trunk/framework/api/src/main/java/org/richfaces/model/DataProvider.java
trunk/framework/impl/src/main/java/org/richfaces/component/util/ComponentMessageUtil.java
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedDataTableModifiableModel.java
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModel.java
trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModelWrapper.java
trunk/framework/impl/src/main/resources/org/richfaces/component/
trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_en.properties
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_pl.properties
Log:
Extended data table moved to main build
Copied: trunk/framework/api/src/main/java/org/richfaces/event/extdt (from rev 10001, trunk/sandbox/api/src/main/java/org/richfaces/event/extdt)
Copied: trunk/framework/api/src/main/java/org/richfaces/model/DataProvider.java (from rev 10001, trunk/sandbox/api/src/main/java/org/richfaces/model/DataProvider.java)
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/DataProvider.java (rev 0)
+++ trunk/framework/api/src/main/java/org/richfaces/model/DataProvider.java 2008-08-10 13:01:09 UTC (rev 10002)
@@ -0,0 +1,50 @@
+/**
+ *
+ */
+package org.richfaces.model;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * G3DataProvider is an interface that defines methods for manage loading data.<br>
+ * Usage:
+ * <pre>
+ * G3DataProvider<SomeDataType> dataProvider = new G3DataProvider<SomeDataType>();
+ * </pre>
+ * @author pawelgo
+ *
+ */
+public interface DataProvider<T> extends Serializable {
+
+ /**
+ * Get number of all rows.
+ * @return number of rows.
+ */
+ public int getRowCount();
+
+ /**
+ * Loads elements from given range.
+ * Starting from startRow, and up to but excluding endRow.
+ * @param firstRow first row to load
+ * @param endRow end row to load
+ * @return element list
+ */
+ public List<T> getItemsByRange(int firstRow, int endRow);
+
+ /**
+ * Load single element by given key.
+ * @param key element key to be loaded.
+ * @return element or null, if not found
+ */
+ public T getItemByKey(Object key);
+
+ /**
+ * Get element key.
+ * If key is not instance of Integer or org.richfaces.model.ScrollableTableDataModel.SimpleRowKey,
+ * it is necessary to implement javax.faces.convert.Converter for key type.
+ * @param item element, which key to be get
+ * @return element key
+ */
+ public Object getKey(T item);
+}
Added: trunk/framework/impl/src/main/java/org/richfaces/component/util/ComponentMessageUtil.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/component/util/ComponentMessageUtil.java (rev 0)
+++ trunk/framework/impl/src/main/java/org/richfaces/component/util/ComponentMessageUtil.java 2008-08-10 13:01:09 UTC (rev 10002)
@@ -0,0 +1,41 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces - Ajax4jsf Component Library
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.component.util;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+
+/**
+ * @author Nick Belaevski
+ * @since 3.2.2
+ */
+
+public class ComponentMessageUtil extends AbstractMessageUtil {
+
+ public static final String MESSAGE_BUNDLE_NAME = "org.richfaces.component.messages";
+
+ public static final FacesMessage getMessage(FacesContext context, String messageId,
+ Object[] parameters) {
+
+ return AbstractMessageUtil.getMessage(context, messageId, parameters, MESSAGE_BUNDLE_NAME);
+ }
+}
Added: trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedDataTableModifiableModel.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedDataTableModifiableModel.java (rev 0)
+++ trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedDataTableModifiableModel.java 2008-08-10 13:01:09 UTC (rev 10002)
@@ -0,0 +1,196 @@
+/**
+ *
+ */
+package org.richfaces.model;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.faces.model.DataModelListener;
+
+import org.ajax4jsf.model.DataVisitor;
+import org.ajax4jsf.model.ExtendedDataModel;
+import org.ajax4jsf.model.Range;
+import org.ajax4jsf.model.SequenceRange;
+import org.ajax4jsf.model.SerializableDataModel;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.richfaces.model.FilterField;
+import org.richfaces.model.SortField2;
+import org.richfaces.model.impl.expressive.JavaBeanWrapper;
+import org.richfaces.model.impl.expressive.ObjectWrapperFactory;
+import org.richfaces.model.impl.expressive.WrappedBeanComparator2;
+import org.richfaces.model.impl.expressive.WrappedBeanFilter;
+
+/**
+ * @author pawelgo
+ *
+ */
+public class ExtendedDataTableModifiableModel<T> extends ExtendedDataModel {
+
+ private static final Log log = LogFactory.getLog(ExtendedDataTableModifiableModel.class);
+
+ private ExtendedDataModel delegate;
+
+ private ExtendedTableDataModel<T> originalModel;
+
+ private ExtendedDataModel modifiedModel;
+
+ private String var;
+
+ private List<FilterField> filterFields;
+ private List<SortField2> sortFields;
+
+ /**
+ * @param originalModel
+ * @param var
+ * @param filterFields
+ * @param sortFields
+ */
+ public ExtendedDataTableModifiableModel(ExtendedTableDataModel<T> originalModel,
+ String var, List<FilterField> filterFields,
+ List<SortField2> sortFields) {
+ this.originalModel = originalModel;
+ this.delegate = originalModel;
+ this.var = var;
+ this.filterFields = filterFields;
+ this.sortFields = sortFields;
+ }
+
+ public void addDataModelListener(DataModelListener listener) {
+ originalModel.addDataModelListener(listener);
+ }
+
+ public DataModelListener[] getDataModelListeners() {
+ return originalModel.getDataModelListeners();
+ }
+
+ public int getRowCount() {
+ return delegate.getRowCount();
+ }
+
+ public Object getRowData() {
+ return delegate.getRowData();
+ }
+
+ public int getRowIndex() {
+ return delegate.getRowIndex();
+ }
+
+ public Object getRowKey() {
+ return delegate.getRowKey();
+ }
+
+ public SerializableDataModel getSerializableModel(Range range) {
+ return delegate.getSerializableModel(range);
+ }
+
+ public Object getWrappedData() {
+ return delegate.getWrappedData();
+ }
+
+ public boolean isRowAvailable() {
+ return delegate.isRowAvailable();
+ }
+
+ public void removeDataModelListener(DataModelListener listener) {
+ delegate.removeDataModelListener(listener);
+ }
+
+ public void setRowIndex(int rowIndex) {
+ delegate.setRowIndex(rowIndex);
+ }
+
+ public void setRowKey(Object key) {
+ delegate.setRowKey(key);
+ }
+
+ public void setWrappedData(Object data) {
+ delegate.setWrappedData(data);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void walk(FacesContext context, DataVisitor visitor, Range range,
+ Object argument) throws IOException {
+
+ if (shouldSort() || shouldFilter()) {
+ if (modifiedModel == null) {
+ modifiedModel = new ExtendedTableDataModelWrapper<T>(originalModel.getDataProvider(), (List<T>) prepareCollection());
+ }
+ delegate = modifiedModel;
+ } else {
+ delegate = originalModel;
+ }
+
+ delegate.walk(context, visitor, range, argument);
+ }
+
+ private boolean shouldSort() {
+ return sortFields != null && !sortFields.isEmpty();
+ }
+
+ private boolean shouldFilter() {
+ return filterFields != null && !filterFields.isEmpty();
+ }
+
+ private List<?> prepareCollection() {
+ int rowCount = originalModel.getRowCount();
+ final List<Object> collection;
+
+ if (rowCount > 0) {
+ collection = new ArrayList<Object>(rowCount);
+ } else {
+ collection = new ArrayList<Object>();
+ }
+
+ FacesContext context = FacesContext.getCurrentInstance();
+ try {
+
+ originalModel.walk(context, new DataVisitor() {
+ public void process(FacesContext context, Object rowKey,
+ Object argument) throws IOException {
+ originalModel.setRowKey(rowKey);
+ if (originalModel.isRowAvailable()) {
+ collection.add(originalModel.getRowData());
+ }
+ }
+ }, new SequenceRange(0, -1),
+ null);
+ } catch (IOException e) {
+ log.error(e.getMessage(), e);
+ }
+
+ List<Object> modifedcollection = collection;
+
+ if (shouldFilter()) {
+ List <Object> filteredCollection = new ArrayList<Object>();
+ ObjectWrapperFactory wrapperFactory = new ObjectWrapperFactory(
+ context, var, filterFields);
+ WrappedBeanFilter wrappedBeanFilter = new WrappedBeanFilter(filterFields);
+ wrapperFactory.wrapList(modifedcollection);
+ for (Object object : modifedcollection) {
+ if(wrappedBeanFilter.accept((JavaBeanWrapper)object)) {
+ filteredCollection.add(object);
+ }
+ }
+ modifedcollection = filteredCollection;
+ wrapperFactory.unwrapList(modifedcollection);
+ }
+
+ if (shouldSort()) {
+ ObjectWrapperFactory wrapperFactory = new ObjectWrapperFactory(
+ context, var, sortFields);
+ WrappedBeanComparator2 wrappedBeanComparator = new WrappedBeanComparator2(
+ sortFields);
+ wrapperFactory.wrapList(modifedcollection);
+ Collections.sort(modifedcollection, wrappedBeanComparator);
+ wrapperFactory.unwrapList(modifedcollection);
+ }
+ return modifedcollection;
+
+ }
+
+}
Added: trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModel.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModel.java (rev 0)
+++ trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModel.java 2008-08-10 13:01:09 UTC (rev 10002)
@@ -0,0 +1,353 @@
+/**
+ *
+ */
+package org.richfaces.model;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.faces.context.FacesContext;
+
+import org.ajax4jsf.model.DataVisitor;
+import org.ajax4jsf.model.Range;
+import org.ajax4jsf.model.SequenceRange;
+import org.ajax4jsf.model.SerializableDataModel;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Data model class for table components.<br>
+ * Usage:
+ * <pre>
+ * G3TableDataModel<SomeDataType> dataModel = new G3TableDataModel<SomeDataType>(new G3DataProvider <SomeDataType>());
+ * </pre>
+ * @author pawelgo
+ *
+ */
+public class ExtendedTableDataModel<T> extends SerializableDataModel {
+
+// /**
+// * Cache container for data presented in data model.
+// * It prevents load the same data many times.
+// * @author pawelgo
+// *
+// * @param <T> data type
+// */
+// private static class DataCache<T> implements Serializable {
+// private static final long serialVersionUID = 8409239905346930920L;
+// private int startRow;
+// private int endRow;
+// //private SortOrder sortOrder;
+// private List<T> loadedData;
+//
+// public DataCache(int startRow, int endRow,
+// List<T> loadedData) {
+// super();
+// this.startRow = startRow;
+// this.endRow = endRow;
+// //this.sortOrder = deepCopy(sortOrder);
+// this.loadedData = loadedData;
+// }
+//
+// /**
+// * Returns a deep copy of an object
+// */
+// @SuppressWarnings("unused")
+// private SortOrder deepCopy(SortOrder sortOrder) {
+// if (sortOrder == null)
+// return null;
+// SortOrder order = new SortOrder();
+// if (sortOrder.getFields() != null) {
+// SortField[] fields = new SortField[sortOrder.getFields().length];
+// for (int i = 0; i < sortOrder.getFields().length; i++) {
+// SortField f = sortOrder.getFields()[i];
+// fields[i] = new SortField(f.getName(), f.getIndex(), f
+// .getAscending());
+// }//for
+// order.setFields(fields);
+// }//if
+// return order;
+// }//deepCopy
+//
+// /**
+// * Returns a deep copy of an object using serialization.
+// */
+// static public Object deepCopy(Object oldObj) throws Exception {
+// ObjectOutputStream oos = null;
+// ObjectInputStream ois = null;
+// try {
+// ByteArrayOutputStream bos = new ByteArrayOutputStream();
+// oos = new ObjectOutputStream(bos);
+// // serialize and pass the object
+// oos.writeObject(oldObj);
+// oos.flush();
+// ByteArrayInputStream bin = new ByteArrayInputStream(bos
+// .toByteArray());
+// ois = new ObjectInputStream(bin);
+// // return the new object
+// return ois.readObject();
+// } catch (Exception e) {
+// if (log.isErrorEnabled())
+// log.error("Exception in ObjectCloner = " + e);
+// throw (e);
+// } finally {
+// oos.close();
+// ois.close();
+// }
+// }//deepCopy
+//
+// public boolean match(int s, int e) {
+// return s == startRow && e == endRow;
+// //&& sortOrdersMatch(sortOrder, this.sortOrder);
+// }//match
+//
+// @SuppressWarnings("unused")
+// private boolean sortOrdersMatch(SortOrder sortOrder1,
+// SortOrder sortOrder2) {
+// boolean result = sortOrder1 == sortOrder2;
+//
+// if (sortOrder1 != null && sortOrder2 != null) {
+// result = sortOrder1.equals(sortOrder2);
+// }
+//
+// return result;
+// }//sortOrdersMatch
+//
+// }//DataCache
+
+ private static final long serialVersionUID = 7374505108088114161L;
+
+ private static final Log log = LogFactory.getLog(ExtendedTableDataModel.class);
+
+ private DataProvider<T> dataProvider;
+ private Object rowKey;
+ //private Map<Object,T> wrappedData = new HashMap<Object,T>();
+ private List<Object> wrappedKeys = null;
+ private boolean detached = false;
+ private Map<Object, T> wrappedData = new HashMap<Object, T>();
+
+ //private DataCache<T> dataCache;
+
+ public ExtendedTableDataModel(DataProvider<T> dataProvider) {
+ this.dataProvider = dataProvider;
+ }
+
+ /* (non-Javadoc)
+ * @see org.ajax4jsf.model.SerializableDataModel#update()
+ */
+ public void update() {
+ ;
+ }
+
+ /**
+ * This method never called from framework.
+ * (non-Javadoc)
+ * @see org.ajax4jsf.model.ExtendedDataModel#getRowKey()
+ */
+ public Object getRowKey() {
+ return rowKey;
+ }
+
+ /**
+ * This method normally called by Visitor before request Data Row.
+ * (non-Javadoc)
+ * @see org.ajax4jsf.model.ExtendedDataModel#setRowKey(java.lang.Object)
+ */
+ public void setRowKey(Object key) {
+ rowKey = key;
+ }
+
+ /**
+ * This is main part of Visitor pattern. Method called by framework many times during request processing.
+ * (non-Javadoc)
+ * @see org.ajax4jsf.model.ExtendedDataModel#walk(javax.faces.context.FacesContext, org.ajax4jsf.model.DataVisitor, org.ajax4jsf.model.Range, java.lang.Object)
+ */
+ public void walk(FacesContext context, DataVisitor visitor, Range range,
+ Object argument) throws IOException {
+ int rowC = getRowCount();
+ int firstRow = ((SequenceRange) range).getFirstRow();
+ int numberOfRows = ((SequenceRange) range).getRows();
+ if (numberOfRows <= 0) {
+ numberOfRows = rowC;
+ }
+ if (detached) { // Is this serialized model
+ // Here we just ignore current Rage and use whatever data was saved in serialized model.
+ // Such approach uses much more getByPk() operations, instead of just one request by range.
+ // Concrete case may be different from that, so you can just load data from data provider by range.
+ // We are using wrappedKeys list only to preserve actual order of items.
+ for (Object key : wrappedKeys) {
+ setRowKey(key);
+ visitor.process(context, key, argument);
+ }
+ } else { // if not serialized, than we request data from data provider
+ wrappedKeys = new ArrayList<Object>();
+ int endRow = firstRow + numberOfRows;
+ if (endRow > rowC){
+ endRow = rowC;
+ }
+ for (T item : loadData(firstRow, endRow)) {
+ Object key = getKey(item);
+ wrappedKeys.add(key);
+ wrappedData.put(key, item);
+ visitor.process(context, key, argument);
+ }
+ }
+ }//walk
+
+ /**
+ * Load range of data items from the source.
+ * Starting from startRow, and up to but excluding endRow
+ * @param startRow
+ * @param endRow
+ * @return list of ordered data
+ */
+ protected List<T> loadData(int startRow, int endRow) {
+ if (log.isDebugEnabled())
+ log.debug("load data from range: " + startRow + " - " + endRow);
+ if (startRow < 0){
+ startRow = 0;
+ throw new IllegalArgumentException("Illegal start index value: " + startRow);
+ }
+ int rowCount = getRowCount();
+ if (endRow > rowCount){
+ endRow = rowCount;
+ throw new IllegalArgumentException("Illegal end index value: " + endRow);
+ }
+ /*
+ if (dataCache == null || !dataCache.match(startRow, endRow)) {
+ if (log.isDebugEnabled())
+ log.debug("load and store in cache");
+ List<T> data = dataProvider.getItemsByRange(startRow, endRow);
+ dataCache = new DataCache<T>(startRow, endRow, data);
+ }
+ return dataCache.loadedData;
+ */
+ //load all from provider and get sublist
+ return dataProvider.getItemsByRange(0, rowCount).subList(startRow, endRow);
+ }//loadData
+
+ /**
+ * This method must return actual data rows count from the Data Provider. It is used by pagination control
+ * to determine total number of data items.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#getRowCount()
+ */
+ private Integer rowCount; // better to buffer row count locally
+
+ public int getRowCount() {
+ if (rowCount == null) {
+ rowCount = new Integer(dataProvider.getRowCount());
+ } else {
+ return rowCount.intValue();
+ }
+ return rowCount.intValue();
+ //return dataProvider.getRowCount();
+ }
+
+ /**
+ * This is main way to obtain data row. It is intensively used by framework.
+ * We strongly recommend use of local cache in that method.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#getRowData()
+ */
+ public T getRowData() {
+ if (rowKey == null) {
+ return null;
+ } else {
+ return getObjectByKey(rowKey);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object getKey(T o) {
+ return dataProvider.getKey(o);
+ }
+
+ public T getObjectByKey(Object key) {
+ T t = wrappedData.get(key);
+ if (t == null){
+ t = dataProvider.getItemByKey(key);
+ wrappedData.put(key, t);
+ }
+ return t;
+ }
+
+ private Integer rowIndex;
+
+ /**
+ * Unused rudiment from old JSF staff. (non-Javadoc)
+ *
+ * @see javax.faces.model.DataModel#getRowIndex()
+ */
+ public int getRowIndex() {
+ //throw new UnsupportedOperationException();
+ return rowIndex.intValue();
+ }
+
+ /**
+ * Unused rudiment from old JSF staff.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#setRowIndex(int)
+ */
+ public void setRowIndex(int rowIndex) {
+ //throw new UnsupportedOperationException();
+ this.rowIndex = rowIndex;
+ }
+
+ /**
+ * Unused rudiment from old JSF staff.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#getWrappedData()
+ */
+ public Object getWrappedData() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Unused rudiment from old JSF staff.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#setWrappedData(java.lang.Object)
+ */
+ public void setWrappedData(Object data) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Never called by framework.
+ * (non-Javadoc)
+ * @see javax.faces.model.DataModel#isRowAvailable()
+ */
+ public boolean isRowAvailable() {
+ return getRowData() != null;
+ }
+
+ /**
+ * This method suppose to produce SerializableDataModel that will be
+ * serialized into View State and used on a post-back. In current
+ * implementation we just mark current model as serialized. In more
+ * complicated cases we may need to transform data to actually serialized
+ * form.
+ */
+ public SerializableDataModel getSerializableModel(Range range) {
+ if (wrappedKeys != null) {
+ detached = true;
+ // Some activity to detach persistent data from wrappedData map may be taken here.
+ // In that specific case we are doing nothing.
+ return this;
+ } else {
+ return null;
+ }
+ }
+
+ public DataProvider<T> getDataProvider() {
+ return dataProvider;
+ }
+
+ public void setDataProvider(DataProvider<T> dataProvider) {
+ this.dataProvider = dataProvider;
+ }
+
+}
Added: trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModelWrapper.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModelWrapper.java (rev 0)
+++ trunk/framework/impl/src/main/java/org/richfaces/model/ExtendedTableDataModelWrapper.java 2008-08-10 13:01:09 UTC (rev 10002)
@@ -0,0 +1,40 @@
+/**
+ *
+ */
+package org.richfaces.model;
+
+import java.util.List;
+
+/**
+ * @author pawelgo
+ *
+ */
+public class ExtendedTableDataModelWrapper<T> extends ExtendedTableDataModel<T> {
+
+ private static final long serialVersionUID = 6932958007982793632L;
+
+ protected List<T> wrappedList;
+
+ /**
+ *
+ * @param dataProvider
+ * @param wrappedList
+ */
+ public ExtendedTableDataModelWrapper(DataProvider<T> dataProvider, List<T> wrappedList) {
+ super(dataProvider);
+ this.wrappedList = wrappedList;
+ }
+
+ protected List<T> loadData(int startRow, int endRow) {
+ //return super.loadData(startRow, endRow);
+ return wrappedList.subList(startRow, endRow);
+ }
+
+ public int getRowCount() {
+ return wrappedList.size();
+ }
+
+
+
+
+}
Added: trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties (rev 0)
+++ trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties 2008-08-10 13:01:09 UTC (rev 10002)
@@ -0,0 +1,10 @@
+# components
+org.richfaces.component.UIExtendedDataTable.Menu.Columns=Columns de
+org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sort Ascending de
+org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sort Descending de
+org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Group by this column de
+org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Disable Grouping de
+
+# converters
+
+# validators
Added: trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties (rev 0)
+++ trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties 2008-08-10 13:01:09 UTC (rev 10002)
@@ -0,0 +1,10 @@
+# components
+org.richfaces.component.UIExtendedDataTable.Menu.Columns=Columns de
+org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sort Ascending de
+org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sort Descending de
+org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Group by this column de
+org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Disable Grouping de
+
+# converters
+
+# validators
Added: trunk/framework/impl/src/main/resources/org/richfaces/component/messages_en.properties
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/component/messages_en.properties (rev 0)
+++ trunk/framework/impl/src/main/resources/org/richfaces/component/messages_en.properties 2008-08-10 13:01:09 UTC (rev 10002)
@@ -0,0 +1,10 @@
+# components
+org.richfaces.component.UIExtendedDataTable.Menu.Columns=Columns
+org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sort Ascending
+org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sort Descending
+org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Group by this column
+org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Disable Grouping
+
+# converters
+
+# validators
Added: trunk/framework/impl/src/main/resources/org/richfaces/component/messages_pl.properties
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/component/messages_pl.properties (rev 0)
+++ trunk/framework/impl/src/main/resources/org/richfaces/component/messages_pl.properties 2008-08-10 13:01:09 UTC (rev 10002)
@@ -0,0 +1,10 @@
+# components
+org.richfaces.component.UIExtendedDataTable.Menu.Columns=Kolumny
+org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sortuj Rosn\u0105co
+org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sortuj malej\u0105co
+org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Grupuj po kolumnie
+org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Wy\u0142\u0105cz grupowanie
+
+# converters
+
+# validators
16 years, 5 months
JBoss Rich Faces SVN: r10001 - trunk/ui/inplaceInput/src/main/resources/org/richfaces/renderkit/html/css.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-08-08 15:50:34 -0400 (Fri, 08 Aug 2008)
New Revision: 10001
Modified:
trunk/ui/inplaceInput/src/main/resources/org/richfaces/renderkit/html/css/inplaceinput.xcss
Log:
https://jira.jboss.org/jira/browse/RF-4072
Modified: trunk/ui/inplaceInput/src/main/resources/org/richfaces/renderkit/html/css/inplaceinput.xcss
===================================================================
--- trunk/ui/inplaceInput/src/main/resources/org/richfaces/renderkit/html/css/inplaceinput.xcss 2008-08-08 19:40:25 UTC (rev 10000)
+++ trunk/ui/inplaceInput/src/main/resources/org/richfaces/renderkit/html/css/inplaceinput.xcss 2008-08-08 19:50:34 UTC (rev 10001)
@@ -23,6 +23,7 @@
padding-right:3px;*/
border-bottom-width: 1px;
border-bottom-style: dashed;
+ white-space:nowrap;
}
.rich-inplace-view {
16 years, 5 months
JBoss Rich Faces SVN: r10000 - trunk/ui/beanValidator/src/main/config/component.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-08-08 15:40:25 -0400 (Fri, 08 Aug 2008)
New Revision: 10000
Modified:
trunk/ui/beanValidator/src/main/config/component/beanValidator.xml
Log:
https://jira.jboss.org/jira/browse/RF-4124
Modified: trunk/ui/beanValidator/src/main/config/component/beanValidator.xml
===================================================================
--- trunk/ui/beanValidator/src/main/config/component/beanValidator.xml 2008-08-08 19:13:42 UTC (rev 9999)
+++ trunk/ui/beanValidator/src/main/config/component/beanValidator.xml 2008-08-08 19:40:25 UTC (rev 10000)
@@ -57,6 +57,9 @@
</description>
<defaultvalue>true</defaultvalue>
</property>
+ <property disabled="true">
+ <name>process</name>
+ </property>
<property elonly="true" el="true" attachedstate="true" >
<name>ajaxListener</name>
<classname>javax.el.MethodExpression</classname>
@@ -71,6 +74,22 @@
</description>
<defaultvalue>true</defaultvalue>
</property>
+
+ <property disabled="true">
+ <name>immediate</name>
+ </property>
+ <property disabled="true">
+ <name>parentProperties</name>
+ </property>
+ <property disabled="true">
+ <name>renderRegionOnly</name>
+ </property>
+ <property disabled="true">
+ <name>selfRendered</name>
+ </property>
+ <property disabled="true">
+ <name>submitted</name>
+ </property>
</component>
<component>
<name>org.richfaces.GraphValidator</name>
16 years, 5 months
JBoss Rich Faces SVN: r9999 - trunk/test-applications/jsp/src/main/webapp/Validator.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-08-08 15:13:42 -0400 (Fri, 08 Aug 2008)
New Revision: 9999
Modified:
trunk/test-applications/jsp/src/main/webapp/Validator/ValidatorStraightforward.jsp
Log:
Validator page corrected
Modified: trunk/test-applications/jsp/src/main/webapp/Validator/ValidatorStraightforward.jsp
===================================================================
--- trunk/test-applications/jsp/src/main/webapp/Validator/ValidatorStraightforward.jsp 2008-08-08 19:11:32 UTC (rev 9998)
+++ trunk/test-applications/jsp/src/main/webapp/Validator/ValidatorStraightforward.jsp 2008-08-08 19:13:42 UTC (rev 9999)
@@ -4,7 +4,7 @@
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<f:subview id="validatorStraightforwardSubviewID">
<a4j:region>
- <rich:dataTable value="#{data.data}" var="data" id="SizeValidationID">
+ <rich:dataTable value="#{data.data}" var="dataBean" id="SizeValidationID">
showSummary="true" />
<rich:column>
<f:facet name="header">
@@ -20,7 +20,7 @@
<f:facet name="header">
<h:outputText value="#4" />
</f:facet>
- <h:outputText value="#{data.int2}"></h:outputText>
+ <h:outputText value="#{dataBean.int2}"></h:outputText>
<f:facet name="footer">
<h:outputText value="#4" />
</f:facet>
@@ -30,7 +30,7 @@
<f:facet name="header">
<h:outputText value="#5" />
</f:facet>
- <h:outputText value="#{data.str1}"></h:outputText>
+ <h:outputText value="#{dataBean.str1}"></h:outputText>
<f:facet name="footer">
<h:outputText value="#5" />
</f:facet>
@@ -40,8 +40,8 @@
<f:facet name="header">
<h:outputText value="#7" />
</f:facet>
- <h:graphicImage value="#{data.str2}"></h:graphicImage>
- <h:outputText value="#{data.str2}"></h:outputText>
+ <h:graphicImage value="#{dataBean.str2}"></h:graphicImage>
+ <h:outputText value="#{dataBean.str2}"></h:outputText>
<f:facet name="footer">
<h:outputText value="#7" />
</f:facet>
@@ -51,7 +51,7 @@
<f:facet name="header">
<h:outputText value="#9" />
</f:facet>
- <h:selectBooleanCheckbox value="#{data.bool0}"></h:selectBooleanCheckbox>
+ <h:selectBooleanCheckbox value="#{dataBean.bool0}"></h:selectBooleanCheckbox>
<f:facet name="footer">
<h:outputText value="#9" />
</f:facet>
@@ -62,8 +62,8 @@
<a4j:region>
<h:outputText value="Enter quantity of lines [2-8]" />
<h:panelGroup>
- <h:inputText value="#{data.length}"/>
- <a4j:commandButton action="#{data.addNewItem}" value="ok"
+ <h:inputText value="#{dataBean.length}"/>
+ <a4j:commandButton action="#{dataBean.addNewItem}" value="ok"
reRender="SizeValidationID"></a4j:commandButton>
</h:panelGroup>
</a4j:region>
16 years, 5 months
JBoss Rich Faces SVN: r9998 - trunk/test-applications/jsp/src/main/webapp/Validator.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-08-08 15:11:32 -0400 (Fri, 08 Aug 2008)
New Revision: 9998
Modified:
trunk/test-applications/jsp/src/main/webapp/Validator/Validator.jsp
Log:
Validator page corrected
Modified: trunk/test-applications/jsp/src/main/webapp/Validator/Validator.jsp
===================================================================
--- trunk/test-applications/jsp/src/main/webapp/Validator/Validator.jsp 2008-08-08 18:41:50 UTC (rev 9997)
+++ trunk/test-applications/jsp/src/main/webapp/Validator/Validator.jsp 2008-08-08 19:11:32 UTC (rev 9998)
@@ -19,7 +19,7 @@
<rich:graphValidator value="#{data}"
binding="#{data.graphValidatorComponent}" id="graphValidatorID"
rendered="#{data.rendered}">
- <rich:dataTable value="#{data.beans}" var="bean" id="table">
+ <rich:dataTable value="#{data.beans}" var="dataBean" id="table">
<f:facet name="header">
<h:outputText
value="Validate values in the data table. Total sum for an all integer values validated for a value less then 20" />
@@ -29,8 +29,8 @@
<f:facet name="header">
<h:outputText value="text field" />
</f:facet>
- <h:outputLabel for="text" value="#{bean.textDescription}" />
- <h:inputText id="text" value="#{bean.text}">
+ <h:outputLabel for="text" value="#{dataBean.textDescription}" />
+ <h:inputText id="text" value="#{dataBean.text}">
<rich:ajaxValidator event="onchange" />
</h:inputText>
</h:column>
@@ -38,8 +38,8 @@
<f:facet name="header">
<h:outputText value="integer field" />
</f:facet>
- <h:outputLabel for="intValue" value="#{bean.intDescription}" />
- <h:inputText id="intValue" value="#{bean.intValue}">
+ <h:outputLabel for="intValue" value="#{dataBean.intDescription}" />
+ <h:inputText id="intValue" value="#{dataBean.intValue}">
<rich:ajaxValidator event="onchange" />
</h:inputText>
<rich:message for="intValue" showDetail="true" showSummary="true" />
16 years, 5 months
JBoss Rich Faces SVN: r9997 - in trunk/ui/suggestionbox/src: main/java/org/richfaces/renderkit/html and 2 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-08-08 14:41:50 -0400 (Fri, 08 Aug 2008)
New Revision: 9997
Removed:
trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/scriptaculo.js
Modified:
trunk/ui/suggestionbox/src/main/config/resources/resources-config.xml
trunk/ui/suggestionbox/src/main/java/org/richfaces/renderkit/html/SuggestionBoxRenderer.java
trunk/ui/suggestionbox/src/test/java/org/richfaces/component/SuggestionBoxComponentTest.java
Log:
https://jira.jboss.org/jira/browse/RF-4013
Modified: trunk/ui/suggestionbox/src/main/config/resources/resources-config.xml
===================================================================
--- trunk/ui/suggestionbox/src/main/config/resources/resources-config.xml 2008-08-08 17:33:46 UTC (rev 9996)
+++ trunk/ui/suggestionbox/src/main/config/resources/resources-config.xml 2008-08-08 18:41:50 UTC (rev 9997)
@@ -11,14 +11,4 @@
<renderer class="org.ajax4jsf.resource.ScriptRenderer"/>
</resource>
- <resource>
- <name>org/richfaces/renderkit/html/scripts/scriptaculo.js</name>
- <path>org/richfaces/renderkit/html/scripts/scriptaculo.js</path>
- <renderer class="org.ajax4jsf.resource.ScriptRenderer"/>
- </resource>
- <resource>
- <name>scripts/scriptaculo.js</name>
- <path>org/richfaces/renderkit/html/scripts/scriptaculo.js</path>
- <renderer class="org.ajax4jsf.resource.ScriptRenderer"/>
- </resource>
</resource-config>
Modified: trunk/ui/suggestionbox/src/main/java/org/richfaces/renderkit/html/SuggestionBoxRenderer.java
===================================================================
--- trunk/ui/suggestionbox/src/main/java/org/richfaces/renderkit/html/SuggestionBoxRenderer.java 2008-08-08 17:33:46 UTC (rev 9996)
+++ trunk/ui/suggestionbox/src/main/java/org/richfaces/renderkit/html/SuggestionBoxRenderer.java 2008-08-08 18:41:50 UTC (rev 9997)
@@ -90,7 +90,7 @@
getResource("/org/richfaces/renderkit/html/scripts/available.js"),
new org.ajax4jsf.javascript.SmartPositionScript(),
getResource("/org/richfaces/renderkit/html/scripts/browser_info.js"),
- getResource("scripts/scriptaculo.js"),
+ getResource("/org/richfaces/renderkit/html/scripts/scriptaculous/effects.js"),
getResource("scripts/suggestionbox.js")};
/**
Deleted: trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/scriptaculo.js
===================================================================
--- trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/scriptaculo.js 2008-08-08 17:33:46 UTC (rev 9996)
+++ trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/scriptaculo.js 2008-08-08 18:41:50 UTC (rev 9997)
@@ -1,2210 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// See scriptaculous.js for full license.
-
-/*--------------------------------------------------------------------------*/
-var line = null;
-var Droppables = {
- isInDropPhase: false,
- drops: [],
-
- remove: function(element) {
- this.drops = this.drops.reject(function(d) {
- return d.element == $(element)
- });
- },
-
- add: function(element) {
- element = $(element);
- var options = Object.extend({
- greedy: true,
- hoverClass: null
- }, arguments[1] || {});
-
- // cache containers
- if (options.containment) {
- options._containers = [];
- var containment = options.containment;
- if ((typeof containment == 'object') &&
- (containment.constructor == Array)) {
- containment.each(function(c) {
- options._containers.push($(c))
- });
- } else {
- options._containers.push($(containment));
- }
- }
-
- if (options.accept) options.accept = [options.accept].flatten();
-
- // if(!(/MSIE/.test(navigator.userAgent)) && !(/Gecko/.test(navigator.userAgent))) Element.makePositioned(element); // fix IE
- options.element = element;
-
- this.drops.push(options);
- },
-
- isContained: function(element, drop) {
- var parentNode = element.parentNode;
- return drop._containers.detect(function(c) {
- return parentNode == c
- });
- },
-
- isAffected: function(point, element, drop) {
- var inc = Position.includeScrollOffsets;
- Position.includeScrollOffsets = true;
- var within = false;
- if (/Opera/.test(navigator.userAgent)) {
- within = Position.withinIncludingScrolloffsets(drop.element, point[0], point[1], true);
- } else {
- within = Position.within(drop.element, point[0], point[1]);
- }
- Position.includeScrollOffsets = inc;
- return (
- (drop.element != element) &&
- ((!drop._containers) || this.isContained(element, drop)) &&
- ((!drop.accept) || (drop.accept.any(function(v) {
- return element.id.indexOf(v) >= 0
- }))) &&
- ((!element.dropTarget) || (drop.element.id.indexOf(element.dropTarget) == 0 || drop.element.id.indexOf(":" + element.dropTarget) > 0)) &&
- within);
- // ((!drop.accept) || (Element.classNames(element).detect(function(v) { return drop.accept.include(v) } ))
- },
-
- deactivate: function(drop, element) {
- if (drop.hoverClass)
- Element.removeClassName(drop.element, drop.hoverClass);
- this.last_active = null;
- },
-
- activate: function(drop, element) {
- if (drop.hoverClass)
- Element.addClassName(drop.element, drop.hoverClass);
- this.last_active = drop;
- },
-
- show: function(point, element) {
- if (!this.drops.length) return;
- var la = this.last_active;
- var affected = false;
- this.drops.each(function(drop) {
- if (Droppables.isAffected(point, element, drop)) {
- if (drop.onHover)
- drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
- affected = true;
- if (la) {
- if (la == drop) throw $break;
- Droppables.deactivate(la, element);
- }
- if (drop.greedy) {
- Droppables.activate(drop, element);
- throw $break;
- }
- }
- });
- if (this.last_active && !affected) Droppables.deactivate(this.last_active, element);
- },
-
- fire: function(event, element) {
- // Changed by A. Smirnov - fire with full draggable, not element !
- if (!this.last_active) return;
- // Added by V. Konstantinov - supress action in dragged object
- line = event.srcElement.onclick;
- event.srcElement.attachEvent("onclick", Droppables.xchange);
- event.srcElement.onclick = null
-
- Position.prepare();
-
- if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
- if (this.last_active.onDrop)
- this.last_active.onDrop(element, this.last_active.element, event);
- },
-
- reset: function() {
- if (this.last_active)
- this.deactivate(this.last_active);
- },
-
- getForElement: function(element) {
- element = $(element);
- var dropable = null;
- this.drops.each(
- function(drop) {
- if (drop.element == element) {
- dropable = drop;
- throw $break;
- }
- }
- );
- return dropable;
- },
- xchange: function() {
- event.srcElement.onclick = line;
- line = null;
- event.srcElement.detachEvent("onclick", Droppables.xchange);
- }
-}
-
-var Draggables = {
- drags: [],
- observers: [],
-
- register: function(draggable) {
- if (this.drags.length == 0) {
- this.eventMouseUp = this.endDrag.bindAsEventListener(this);
- this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
- this.eventKeypress = this.keyPress.bindAsEventListener(this);
-
- Event.observe(document, "mouseup", this.eventMouseUp);
- Event.observe(document, "mousemove", this.eventMouseMove);
- Event.observe(document, "keypress", this.eventKeypress);
- }
- this.drags.push(draggable);
- },
-
- unregister: function(draggable) {
- this.drags = this.drags.reject(function(d) {
- return d == draggable
- });
- if (this.drags.length == 0) {
- Event.stopObserving(document, "mouseup", this.eventMouseUp);
- Event.stopObserving(document, "mousemove", this.eventMouseMove);
- Event.stopObserving(document, "keypress", this.eventKeypress);
- }
- },
-
- activate: function(draggable) {
- window.focus();
- // allows keypress events if window isn't currently focused, fails for Safari
- this.activeDraggable = draggable;
- },
-
- deactivate: function(draggbale) {
- this.activeDraggable = null;
- },
-
- updateDrag: function(event) {
- if (!this.activeDraggable) return;
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- // Mozilla-based browsers fire successive mousemove events with
- // the same coordinates, prevent needless redrawing (moz bug?)
- if (this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
- this._lastPointer = pointer;
- this.activeDraggable.updateDrag(event, pointer);
- },
-
- endDrag: function(event) {
- if (!this.activeDraggable) return;
- this._lastPointer = null;
- this.activeDraggable.endDrag(event);
- this.activeDraggable = null;
- },
-
- keyPress: function(event) {
- if (this.activeDraggable)
- this.activeDraggable.keyPress(event);
- },
-
- addObserver: function(observer) {
- this.observers.push(observer);
- this._cacheObserverCallbacks();
- },
-
- removeObserver: function(element) { // element instead of observer fixes mem leaks
- this.observers = this.observers.reject(function(o) {
- return o.element == element
- });
- this._cacheObserverCallbacks();
- },
-
- notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
- if (this[eventName + 'Count'] > 0)
- this.observers.each(function(o) {
- if (o[eventName]) o[eventName](eventName, draggable, event);
- });
- },
-
- _cacheObserverCallbacks: function() {
- ['onStart','onEnd','onDrag'].each(function(eventName) {
- Draggables[eventName + 'Count'] = Draggables.observers.select(
- function(o) {
- return o[eventName];
- }
- ).length;
- });
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Draggable = Class.create();
-Draggable.prototype = {
- initialize: function(element) {
- var options = Object.extend({
- handle: false,
- starteffect: function(element) {
- new Effect.Opacity(element, {duration:0.2, from:1.0, to:0.7});
- },
- reverteffect: function(element, top_offset, left_offset) {
- var dur = Math.sqrt(Math.abs(top_offset ^ 2) + Math.abs(left_offset ^ 2)) * 0.02;
- element._revert = new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur});
- },
- endeffect: function(element) {
- new Effect.Opacity(element, {duration:0.2, from:0.7, to:1.0});
- },
- zindex: 1000,
- revert: false,
- snap: false // false, or xy or [x,y] or function(x,y){ return [x,y] }
- }, arguments[1] || {});
-
- this.element = $(element);
-
- if (options.dropTarget && (typeof options.dropTarget == 'string')) {
- this.element.dropTarget = options.dropTarget;
- }
-
- if (options.handle && (typeof options.handle == 'string'))
- this.handle = Element.childrenWithClassName(this.element, options.handle)[0];
- if (!this.handle) this.handle = $(options.handle);
- if (!this.handle) this.handle = this.element;
-
- Element.makePositioned(this.element);
- // fix IE
-
- this.delta = this.currentDelta();
- this.options = options;
- this.dragging = false;
- this.isCursor = ($(this.options.handle) && (this.options.handle != this.element.id));
-
- this.eventMouseDown = this.initDrag.bindAsEventListener(this);
- Event.observe(this.handle, "mousedown", this.eventMouseDown);
-
- Draggables.register(this);
- },
-
- destroy: function() {
- Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
- Draggables.unregister(this);
- },
-
- currentDelta: function() {
- return([
- parseInt(Element.getStyle(this.element, 'left') || '0'),
- parseInt(Element.getStyle(this.element, 'top') || '0')]);
- },
-
- initDrag: function(event) {
- if (Event.isLeftClick(event) && !Droppables.isInDropPhase) {
- // abort on form elements, fixes a Firefox issue
- var src = Event.element(event);
- if (src.tagName && (
- src.tagName.toUpperCase() == 'INPUT' ||
- src.tagName.toUpperCase() == 'SELECT' ||
- src.tagName.toUpperCase() == 'BUTTON' ||
- src.tagName.toUpperCase() == 'TEXTAREA'))
- return;
-
- if (this.element._revert) {
- this.element._revert.cancel();
- this.element._revert = null;
- }
-
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- var pos = Position.cumulativeOffset(this.element);
- this.offset = [0,1].map(function(i) {
- return (pointer[i] - pos[i])
- });
-
- Draggables.activate(this);
- Event.stop(event);
- }
- },
-
- startDrag: function(event) {
- this.dragging = true;
- this.additionCoord = null;
-
- if (this.options.zindex) {
- this.originalZ = parseInt(Element.getStyle(this.element, 'z-index') || 0);
- this.element.style.zIndex = this.options.zindex;
- }
-
- if (this.options.ghosting && !this.isCursor) {
- this._clone = this.element.cloneNode(true);
- Position.absolutize(this.element);
- this.element.parentNode.insertBefore(this._clone, this.element);
- }
-
- if (this.isCursor) {
- this.element._originalParent = this.element.parentNode;
- this.element._originalNextSibling = this.element.nextSibling;
- var el = this.element.parentNode.removeChild(this.element);
- document.body.appendChild(el);
- }
-
-
- Draggables.notify('onStart', this, event);
- if (this.options.starteffect) this.options.starteffect(this.element);
- },
-
- updateDrag: function(event, pointer) {
- if (!this.dragging) this.startDrag(event);
- Position.prepare();
- Droppables.show(pointer, this.element);
- Draggables.notify('onDrag', this, event);
- this.draw(pointer);
- if (this.options.change) this.options.change(this);
-
- // fix AppleWebKit rendering
- if (navigator.appVersion.indexOf('AppleWebKit') > 0) window.scrollBy(0, 0);
- Event.stop(event);
- },
-
- finishDrag: function(event, success) {
- this.dragging = false;
-
- if (this.options.ghosting && !this.isCursor) {
- Position.relativize(this.element);
- Element.remove(this._clone);
- this._clone = null;
- }
-
- if (this.isCursor) {
- var el = document.body.removeChild(this.element);
- this.element = this.element._originalParent.insertBefore(el, this.element._originalNextSibling);
- this.element.style.visibility = "hidden";
- }
-
- if (success) Droppables.fire(event, this.element);
- // Changed by A. Smirnov - fire with full draggable, not element !
- // if(success) Droppables.fire(event, this);
- Draggables.notify('onEnd', this, event);
-
- var revert = this.options.revert;
- if (revert && typeof revert == 'function') revert = revert(this.element);
-
- var d = this.currentDelta();
- if (revert && this.options.reverteffect) {
- this.options.reverteffect(this.element,
- d[1] - this.delta[1], d[0] - this.delta[0]);
- } else {
- this.delta = d;
- }
-
- if (this.options.zindex)
- this.element.style.zIndex = this.originalZ;
-
- if (this.options.endeffect)
- this.options.endeffect(this.element);
-
- Draggables.deactivate(this);
- Droppables.reset();
- },
-
- keyPress: function(event) {
- if (!event.keyCode == Event.KEY_ESC) return;
- this.finishDrag(event, false);
- Event.stop(event);
- },
-
- endDrag: function(event) {
- if (!this.dragging) return;
- this.finishDrag(event, true);
- Event.stop(event);
- },
-
- draw: function(point) {
- var dim = Element.getDimensions(this.element);
- var d = [Math.round(dim.width / 2), Math.round(dim.height / 2)];
-
- var offsetL = 0, offsetT = 0;
- if (!/Opera/.test(navigator.userAgent)) {
- var offsetParent = Position.offsetParent(this.element);
- while (offsetParent && offsetParent != document.body) {
- offsetL += offsetParent.offsetLeft;
- offsetT += offsetParent.offsetTop;
- offsetParent = Position.offsetParent(offsetParent);
- }
- }
- var op = [offsetL, offsetT];
-
- if (/MSIE/.test(navigator.userAgent)) {
- Position.prepare();
- var delta = [Position.deltaX, Position.deltaY];
- var realOffset = Position.realOffset(this.element);
- p = [0,1].map(function(i) {
- return (point[i] + realOffset[i] - op[i] - d[i] - delta[i])
- }.bind(this));
- } else if (/Opera/.test(navigator.userAgent)) {
- var el = this.element, valueT = 0, valueL = 0;
- do {
- if (el && el.tagName.toLowerCase() != "tr") {
- valueT += (el.scrollTop > 0 ? el.scrollTop : 0) || 0;
- valueL += (el.scrollLeft > 0 ? el.scrollLeft : 0) || 0;
- }
- el = el.parentNode;
- } while (el && el != document.body);
- var scrollOffset = [valueL, valueT];
- p = [0,1].map(function(i) {
- return (point[i] - d[i] + scrollOffset[i])
- }.bind(this));
- } else {
- p = [0,1].map(function(i) {
- return (point[i] - op[i] - (d[i] > 0 ? d[i] : 5))
- }.bind(this));
- }
-
- if (this.options.snap) {
- if (typeof this.options.snap == 'function') {
- p = this.options.snap(p[0], p[1]);
- } else {
- if (this.options.snap instanceof Array) {
- p = p.map(function(v, i) {
- return Math.round(v / this.options.snap[i]) * this.options.snap[i]
- }.bind(this));
- } else {
- p = p.map(function(v) {
- return Math.round(v / this.options.snap) * this.options.snap
- }.bind(this));
- }
- }
- }
-
- var style = this.element.style;
- if ((!this.options.constraint) || (this.options.constraint == 'horizontal')) {
- style.left = p[0] + "px";
- if (this.options.constraint && this.options.constraint == 'horizontal') {
- if (!this.additionCoord) this.additionCoord = p[1];
- style.top = this.additionCoord + "px";
- }
- }
- if ((!this.options.constraint) || (this.options.constraint == 'vertical')) {
- style.top = p[1] + "px";
- if (this.options.constraint && this.options.constraint == 'vertical') {
- if (!this.additionCoord) this.additionCoord = p[0];
- style.left = this.additionCoord + "px";
- }
- }
- if (style.visibility == "hidden") style.visibility = ""; // fix gecko rendering
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var ClickDropable = Class.create();
-ClickDropable.prototype = {
- initialize: function(element) {
- var options = Object.extend({
- handle: false,
- starteffect: function(element) {
- new Effect.Opacity(element, {duration:0.2, from:1.0, to:0.7});
- },
- /* reverteffect: function(element, top_offset, left_offset) {
- var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
- element._revert = new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur});
- },*/
- endeffect: function(element) {
- new Effect.Opacity(element, {duration:0.2, from:0.7, to:1.0});
- },
- zindex: 1000,
- revert: false,
- snap: false // false, or xy or [x,y] or function(x,y){ return [x,y] }
- }, arguments[1] || {});
-
- this.element = $(element);
-
- if (options.dropTarget && (typeof options.dropTarget == 'string')) {
- this.element.dropTarget = options.dropTarget;
- }
-
- if (options.handle && (typeof options.handle == 'string'))
- this.handle = Element.childrenWithClassName(this.element, options.handle)[0];
- if (!this.handle) this.handle = $(options.handle);
- if (!this.handle) this.handle = this.element;
-
- Element.makePositioned(this.element);
- // fix IE
-
- this.delta = this.currentDelta();
- this.options = options;
- this.dragging = false;
- this.isCursor = ($(this.options.handle) && (this.options.handle != this.element.id));
-
- this.eventMouseDown = this.initDrag.bindAsEventListener(this);
- Event.observe(this.handle, "mousedown", this.eventMouseDown);
-
- // Draggables.register(this);
- },
-
- destroy: function() {
- Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
- Draggables.unregister(this);
- },
-
- currentDelta: function() {
- return([
- parseInt(Element.getStyle(this.element, 'left') || '0'),
- parseInt(Element.getStyle(this.element, 'top') || '0')]);
- },
-
- initDrag: function(event) {
- if (Event.isLeftClick(event) && !Droppables.isInDropPhase) {
- // abort on form elements, fixes a Firefox issue
- var src = Event.element(event);
- if (src.tagName && (
- src.tagName.toUpperCase() == 'INPUT' ||
- src.tagName.toUpperCase() == 'SELECT' ||
- src.tagName.toUpperCase() == 'BUTTON' ||
- src.tagName.toUpperCase() == 'TEXTAREA'))
- return;
-
- if (this.element._revert) {
- this.element._revert.cancel();
- this.element._revert = null;
- }
-
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- var pos = Position.cumulativeOffset(this.element);
- this.offset = [0,1].map(function(i) {
- return (pointer[i] - pos[i])
- });
- this.startDrag(event);
- Event.stop(event);
- }
- },
-
- startDrag: function(event) {
- var target = $(this.options.dropTarget);
- if (!target) {
- var forms = document.getElementsByTagName("form");
- for (var i = 0; i < forms.length; i++) {
- var form = forms[i];
- target = $(form.id.split(":")[0] + ":" + this.options.dropTarget);
- if (target) break;
- }
- }
- if (!target) {
- var drops = Droppables.drops.toArray();
- for (var i = 0; drops && i < drops.length; i++) {
- var drop = drops[i];
- var accepts = drop.accept ? drop.accept.first().split(",") : [];
- for (var j = 0; accepts && j < accepts.length; j++) {
- if (this.element.id == accepts[j]) {
- target = drop.element;
- break;
- }
- }
- }
- }
- if (!target) return;
-
- Droppables.isInDropPhase = true;
-
- this.dragging = true;
-
- if (this.options.zindex) {
- this.originalZ = parseInt(Element.getStyle(this.element, 'z-index') || 0);
- this.element.style.zIndex = this.options.zindex;
- }
-
- if (this.options.ghosting && !this.isCursor) {
- this._clone = this.element.cloneNode(true);
- Position.absolutize(this.element);
- this.element.parentNode.insertBefore(this._clone, this.element);
- }
-
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- this.draw(pointer);
- var element = $(this.element);
-
- Position.prepare();
- var cumulativeOffset = Position.cumulativeOffset(target);
-
- if (/MSIE/.test(navigator.userAgent)) {
- var realOffset = Position.realOffset(target);
- pointer[1] = (cumulativeOffset[1] - realOffset[1] + Position.deltaY);
- pointer[0] = (cumulativeOffset[0] - realOffset[0] + Position.deltaX);
- } else if (/Opera/.test(navigator.userAgent)) {
- var el = element, valueT = 0, valueL = 0;
- do {
- if (el && el.tagName.toLowerCase() != "tr") {
- valueT += (el.scrollTop > 0 ? el.scrollTop : 0) || 0;
- valueL += (el.scrollLeft > 0 ? el.scrollLeft : 0) || 0;
- }
- el = el.parentNode;
- } while (el && el != document.body);
- var scrollOffset = [valueL, valueT];
- pointer[1] = (cumulativeOffset[1] - scrollOffset[1]);
- pointer[0] = (cumulativeOffset[0] - scrollOffset[0]);
- } else {
- pointer[1] = (cumulativeOffset[1]);
- pointer[0] = (cumulativeOffset[0]);
- }
-
- var dimTarget = Element.getDimensions(target);
- var dimElement = Element.getDimensions(element);
- var offset = [(dimTarget.width - dimElement.width) / 2, (dimTarget.height - dimElement.height) / 2];
- if (this.options.starteffect) this.options.starteffect(element);
- var pos = (this.options.ghosting && !this.isCursor) ? [element.offsetLeft, element.offsetTop] : null;
- new Effect.Move(element,
- {x: pointer[0] + offset[0], y:pointer[1] + offset[1], mode: "absolute", _clone: this._clone,
- afterFinish: function() {
- if (pos == null) element.style.visibility = "hidden";
- var targetDropable = Droppables.getForElement(target);
- if (targetDropable && targetDropable.onDrop)
- targetDropable.onDrop(element, targetDropable, event, pos, this._clone, false);
- //if (this._clone != null) Element.remove(this._clone);
- // Position.relativize(element);
- element.style.zIndex = 0;
- }
- });
- },
-
- finishDrag: function(event, success) {
- this.dragging = false;
-
- if (this.options.ghosting && !this.isCursor) {
- Position.relativize(this.element);
- Element.remove(this._clone);
- this._clone = null;
- }
-
- if (this.isCursor) {
- // var el = document.body.removeChild(this.element);
- // this.element = this.element._originalParent.insertBefore(el, this.element._originalNextSibling);
- this.element.style.visibility = "hidden";
- }
-
- if (success) Droppables.fire(event, this.element);
- // Changed by A. Smirnov - fire with full draggable, not element !
- // if(success) Droppables.fire(event, this);
- Draggables.notify('onEnd', this, event);
-
- var revert = this.options.revert;
- if (revert && typeof revert == 'function') revert = revert(this.element);
-
- var d = this.currentDelta();
- if (revert && this.options.reverteffect) {
- this.options.reverteffect(this.element,
- d[1] - this.delta[1], d[0] - this.delta[0]);
- } else {
- this.delta = d;
- }
-
- if (this.options.zindex)
- this.element.style.zIndex = this.originalZ;
-
- if (this.options.endeffect)
- this.options.endeffect(this.element);
-
- Draggables.deactivate(this);
- Droppables.reset();
- },
-
- keyPress: function(event) {
- if (!event.keyCode == Event.KEY_ESC) return;
- this.finishDrag(event, false);
- Event.stop(event);
- },
-
- endDrag: function(event) {
- if (!this.dragging) return;
- this.finishDrag(event, true);
- Event.stop(event);
- },
-
- draw: function(point) {
- if (this.options.ghosting && !this.isCursor) {
- p = [this.element.offsetLeft, this.element.offsetTop];
- } else {
- var dim = Element.getDimensions(this.element);
- var d = [Math.round(dim.width / 2), Math.round(dim.height / 2)];
-
- var offsetL = 0, offsetT = 0;
- if (!/Opera/.test(navigator.userAgent)) {
- var offsetParent = Position.offsetParent(this.element);
- while (offsetParent && offsetParent != document.body) {
- offsetL += offsetParent.offsetLeft;
- offsetT += offsetParent.offsetTop;
- offsetParent = Position.offsetParent(offsetParent);
- }
- }
- var op = [offsetL, offsetT];
-
- if (/MSIE/.test(navigator.userAgent)) {
- Position.prepare();
- var delta = [Position.deltaX, Position.deltaY];
- var realOffset = Position.realOffset(this.element);
- p = [0,1].map(function(i) {
- return (point[i] + realOffset[i] - op[i] - d[i] - delta[i])
- }.bind(this));
- } else if (/Opera/.test(navigator.userAgent)) {
- var el = this.element, valueT = 0, valueL = 0;
- do {
- if (el && el.tagName.toLowerCase() != "tr") {
- valueT += (el.scrollTop > 0 ? el.scrollTop : 0) || 0;
- valueL += (el.scrollLeft > 0 ? el.scrollLeft : 0) || 0;
- }
- el = el.parentNode;
- } while (el && el != document.body);
- var scrollOffset = [valueL, valueT];
- p = [0,1].map(function(i) {
- return (point[i] - d[i] + scrollOffset[i])
- }.bind(this));
- } else {
- p = [0,1].map(function(i) {
- return (point[i] - op[i] - (d[i] > 0 ? d[i] : 5))
- }.bind(this));
- }
- }
-
- if (this.options.snap) {
- if (typeof this.options.snap == 'function') {
- p = this.options.snap(p[0], p[1]);
- } else {
- if (this.options.snap instanceof Array) {
- p = p.map(function(v, i) {
- return Math.round(v / this.options.snap[i]) * this.options.snap[i]
- }.bind(this))
- } else {
- p = p.map(function(v) {
- return Math.round(v / this.options.snap) * this.options.snap
- }.bind(this))
- }
- }
- }
-
- var style = this.element.style;
- if ((!this.options.constraint) || (this.options.constraint == 'horizontal')) {
- style.left = p[0] + "px";
- if (this.options.constraint && this.options.constraint == 'horizontal') {
- if (!this.additionCoord) this.additionCoord = p[1];
- style.top = this.additionCoord + "px";
- }
- }
- if ((!this.options.constraint) || (this.options.constraint == 'vertical')) {
- style.top = p[1] + "px";
- if (this.options.constraint && this.options.constraint == 'vertical') {
- if (!this.additionCoord) this.additionCoord = p[0];
- style.left = this.additionCoord + "px";
- }
- }
- if (style.visibility == "hidden") style.visibility = ""; // fix gecko rendering
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var SortableObserver = Class.create();
-SortableObserver.prototype = {
- initialize: function(element, observer) {
- this.element = $(element);
- this.observer = observer;
- this.lastValue = Sortable.serialize(this.element);
- },
-
- onStart: function() {
- this.lastValue = Sortable.serialize(this.element);
- },
-
- onEnd: function() {
- Sortable.unmark();
- if (this.lastValue != Sortable.serialize(this.element))
- this.observer(this.element)
- }
-}
-
-var Sortable = {
- sortables: new Array(),
-
- options: function(element) {
- element = $(element);
- return this.sortables.detect(function(s) {
- return s.element == element
- });
- },
-
- destroy: function(element) {
- element = $(element);
- this.sortables.findAll(function(s) {
- return s.element == element
- }).each(function(s) {
- Draggables.removeObserver(s.element);
- s.droppables.each(function(d) {
- Droppables.remove(d)
- });
- s.draggables.invoke('destroy');
- });
- this.sortables = this.sortables.reject(function(s) {
- return s.element == element
- });
- },
-
- create: function(element) {
- element = $(element);
- var options = Object.extend({
- element: element,
- tag: 'li', // assumes li children, override with tag: 'tagname'
- dropOnEmpty: false,
- tree: false, // fixme: unimplemented
- overlap: 'vertical', // one of 'vertical', 'horizontal'
- constraint: 'vertical', // one of 'vertical', 'horizontal', false
- containment: element, // also takes array of elements (or id's); or false
- handle: false, // or a CSS class
- only: false,
- hoverClass: null,
- ghosting: false,
- format: null,
- onChange: Prototype.emptyFunction,
- onUpdate: Prototype.emptyFunction
- }, arguments[1] || {});
-
- // clear any old sortable with same element
- this.destroy(element);
-
- // build options for the draggables
- var options_for_draggable = {
- revert: true,
- ghosting: options.ghosting,
- constraint: options.constraint,
- handle: options.handle };
-
- if (options.starteffect)
- options_for_draggable.starteffect = options.starteffect;
-
- if (options.reverteffect)
- options_for_draggable.reverteffect = options.reverteffect;
- else
- if (options.ghosting) options_for_draggable.reverteffect = function(element) {
- element.style.top = 0;
- element.style.left = 0;
- };
-
- if (options.endeffect)
- options_for_draggable.endeffect = options.endeffect;
-
- if (options.zindex)
- options_for_draggable.zindex = options.zindex;
-
- // build options for the droppables
- var options_for_droppable = {
- overlap: options.overlap,
- containment: options.containment,
- hoverClass: options.hoverClass,
- onHover: Sortable.onHover,
- greedy: !options.dropOnEmpty
- }
-
- // fix for gecko engine
- Element.cleanWhitespace(element);
-
- options.draggables = [];
- options.droppables = [];
-
- // make it so
-
- // drop on empty handling
- if (options.dropOnEmpty) {
- Droppables.add(element,
- {containment: options.containment, onHover: Sortable.onEmptyHover, greedy: false});
- options.droppables.push(element);
- }
-
- (this.findElements(element, options) || []).each(function(e) {
- // handles are per-draggable
- var handle = options.handle ?
- Element.childrenWithClassName(e, options.handle)[0] : e;
- options.draggables.push(
- new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
- Droppables.add(e, options_for_droppable);
- options.droppables.push(e);
- });
-
- // keep reference
- this.sortables.push(options);
-
- // for onupdate
- Draggables.addObserver(new SortableObserver(element, options.onUpdate));
-
- },
-
-// return all suitable-for-sortable elements in a guaranteed order
- findElements: function(element, options) {
- if (!element.hasChildNodes()) return null;
- var elements = [];
- $A(element.childNodes).each(function(e) {
- if (e.tagName && e.tagName.toUpperCase() == options.tag.toUpperCase() &&
- (!options.only || (Element.hasClassName(e, options.only))))
- elements.push(e);
- if (options.tree) {
- var grandchildren = this.findElements(e, options);
- if (grandchildren) elements.push(grandchildren);
- }
- });
-
- return (elements.length > 0 ? elements.flatten() : null);
- },
-
- onHover: function(element, dropon, overlap) {
- if (overlap > 0.5) {
- Sortable.mark(dropon, 'before');
- if (dropon.previousSibling != element) {
- var oldParentNode = element.parentNode;
- element.style.visibility = "hidden";
- // fix gecko rendering
- dropon.parentNode.insertBefore(element, dropon);
- if (dropon.parentNode != oldParentNode)
- Sortable.options(oldParentNode).onChange(element);
- Sortable.options(dropon.parentNode).onChange(element);
- }
- } else {
- Sortable.mark(dropon, 'after');
- var nextElement = dropon.nextSibling || null;
- if (nextElement != element) {
- var oldParentNode = element.parentNode;
- element.style.visibility = "hidden";
- // fix gecko rendering
- dropon.parentNode.insertBefore(element, nextElement);
- if (dropon.parentNode != oldParentNode)
- Sortable.options(oldParentNode).onChange(element);
- Sortable.options(dropon.parentNode).onChange(element);
- }
- }
- },
-
- onEmptyHover: function(element, dropon) {
- if (element.parentNode != dropon) {
- var oldParentNode = element.parentNode;
- dropon.appendChild(element);
- Sortable.options(oldParentNode).onChange(element);
- Sortable.options(dropon).onChange(element);
- }
- },
-
- unmark: function() {
- if (Sortable._marker) Element.hide(Sortable._marker);
- },
-
- mark: function(dropon, position) {
- // mark on ghosting only
- var sortable = Sortable.options(dropon.parentNode);
- if (sortable && !sortable.ghosting) return;
-
- if (!Sortable._marker) {
- Sortable._marker = $('dropmarker') || document.createElement('DIV');
- Element.hide(Sortable._marker);
- Element.addClassName(Sortable._marker, 'dropmarker');
- Sortable._marker.style.position = 'absolute';
- document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
- }
- var offsets = Position.cumulativeOffset(dropon);
- Sortable._marker.style.left = offsets[0] + 'px';
- Sortable._marker.style.top = offsets[1] + 'px';
-
- if (position == 'after')
- if (sortable.overlap == 'horizontal')
- Sortable._marker.style.left = (offsets[0] + dropon.clientWidth) + 'px';
- else
- Sortable._marker.style.top = (offsets[1] + dropon.clientHeight) + 'px';
-
- Element.show(Sortable._marker);
- },
-
- serialize: function(element) {
- element = $(element);
- var sortableOptions = this.options(element);
- var options = Object.extend({
- tag: sortableOptions.tag,
- only: sortableOptions.only,
- name: element.id,
- format: sortableOptions.format || /^[^_]*_(.*)$/
- }, arguments[1] || {});
- return $(this.findElements(element, options) || []).map(function(item) {
- return (encodeURIComponent(options.name) + "[]=" +
- encodeURIComponent(item.id.match(options.format) ? item.id.match(options.format)[1] : ''));
- }).join("&");
- }
-}
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// Contributors:
-// Justin Palmer (http://encytemedia.com/)
-// Mark Pilgrim (http://diveintomark.org/)
-// Martin Bialasinki
-//
-// See scriptaculous.js for full license.
-
-/* ------------- element ext -------------- */
-
-// converts rgb() and #xxx to #xxxxxx format,
-// returns self (or first argument) if not convertable
-String.prototype.parseColor = function() {
- var color = '#';
- if (this.slice(0, 4) == 'rgb(') {
- var cols = this.slice(4, this.length - 1).split(',');
- var i = 0;
- do {
- color += parseInt(cols[i]).toColorPart()
- } while (++i < 3);
- } else {
- if (this.slice(0, 1) == '#') {
- if (this.length == 4) for (var i = 1; i < 4; i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
- if (this.length == 7) color = this.toLowerCase();
- }
- }
- return(color.length == 7 ? color : (arguments[0] || this));
-}
-
-Element.collectTextNodes = function(element) {
- return $A($(element).childNodes).collect(function(node) {
- return (node.nodeType == 3 ? node.nodeValue :
- (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
- }).flatten().join('');
-}
-
-Element.collectTextNodesIgnoreClass = function(element, className) {
- return $A($(element).childNodes).collect(function(node) {
- return (node.nodeType == 3 ? node.nodeValue :
- ((node.hasChildNodes() && !Element.hasClassName(node, className)) ?
- Element.collectTextNodes(node) : ''));
- }).flatten().join('');
-}
-
-Element.setStyle = function(element, style) {
- element = $(element);
- for (k in style) element.style[k.camelize()] = style[k];
-}
-
-Element.setContentZoom = function(element, percent) {
- Element.setStyle(element, {fontSize: (percent / 100) + 'em'});
- if (navigator.appVersion.indexOf('AppleWebKit') > 0) window.scrollBy(0, 0);
-}
-
-Element.getOpacity = function(element) {
- var opacity;
- if (opacity = Element.getStyle(element, 'opacity'))
- return parseFloat(opacity);
- if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))
- if (opacity[1]) return parseFloat(opacity[1]) / 100;
- return 1.0;
-}
-
-Element.setOpacity = function(element, value) {
- element = $(element);
- if (value == 1) {
- Element.setStyle(element, { opacity:
- (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ?
- 0.999999 : null });
- if (/MSIE/.test(navigator.userAgent))
- Element.setStyle(element, {filter: Element.getStyle(element, 'filter').replace(/alpha\([^\)]*\)/gi, '')});
- } else {
- if (value < 0.00001) value = 0;
- Element.setStyle(element, {opacity: value});
- if (/MSIE/.test(navigator.userAgent))
- Element.setStyle(element,
- { filter: Element.getStyle(element, 'filter').replace(/alpha\([^\)]*\)/gi, '') +
- 'alpha(opacity=' + value * 100 + ')' });
- }
-}
-
-Element.getInlineOpacity = function(element) {
- return $(element).style.opacity || '';
-}
-
-Element.childrenWithClassName = function(element, className) {
- return $A($(element).getElementsByTagName('*')).select(
- function(c) {
- return Element.hasClassName(c, className)
- });
-}
-
-Array.prototype.call = function() {
- var args = arguments;
- this.each(function(f) {
- f.apply(this, args)
- });
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Effect = {
- tagifyText: function(element) {
- var tagifyStyle = 'position:relative';
- if (/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1';
- element = $(element);
- $A(element.childNodes).each(function(child) {
- if (child.nodeType == 3) {
- child.nodeValue.toArray().each(function(character) {
- element.insertBefore(
- Builder.node('span', {style: tagifyStyle},
- character == ' ' ? String.fromCharCode(160) : character),
- child);
- });
- Element.remove(child);
- }
- });
- },
- multiple: function(element, effect) {
- var elements;
- if (((typeof element == 'object') ||
- (typeof element == 'function')) &&
- (element.length))
- elements = element;
- else
- elements = $(element).childNodes;
-
- var options = Object.extend({
- speed: 0.1,
- delay: 0.0
- }, arguments[2] || {});
- var masterDelay = options.delay;
-
- $A(elements).each(function(element, index) {
- new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
- });
- },
- PAIRS: {
- 'slide': ['SlideDown','SlideUp'],
- 'blind': ['BlindDown','BlindUp'],
- 'appear': ['Appear','Fade']
- },
- toggle: function(element, effect) {
- element = $(element);
- effect = (effect || 'appear').toLowerCase();
- var options = Object.extend({
- queue: { position:'end', scope:(element.id || 'global') }
- }, arguments[2] || {});
- Effect[Element.visible(element) ?
- Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
- }
-};
-
-var Effect2 = Effect;
-// deprecated
-
-/* ------------- transitions ------------- */
-
-Effect.Transitions = {}
-
-Effect.Transitions.linear = function(pos) {
- return pos;
-}
-Effect.Transitions.sinoidal = function(pos) {
- return (-Math.cos(pos * Math.PI) / 2) + 0.5;
-}
-Effect.Transitions.reverse = function(pos) {
- return 1 - pos;
-}
-Effect.Transitions.flicker = function(pos) {
- return ((-Math.cos(pos * Math.PI) / 4) + 0.75) + Math.random() / 4;
-}
-Effect.Transitions.wobble = function(pos) {
- return (-Math.cos(pos * Math.PI * (9 * pos)) / 2) + 0.5;
-}
-Effect.Transitions.pulse = function(pos) {
- return (Math.floor(pos * 10) % 2 == 0 ?
- (pos * 10 - Math.floor(pos * 10)) : 1 - (pos * 10 - Math.floor(pos * 10)));
-}
-Effect.Transitions.none = function(pos) {
- return 0;
-}
-Effect.Transitions.full = function(pos) {
- return 1;
-}
-
-/* ------------- core effects ------------- */
-
-Effect.ScopedQueue = Class.create();
-Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
- initialize: function() {
- this.effects = [];
- this.interval = null;
- },
- _each: function(iterator) {
- this.effects._each(iterator);
- },
- add: function(effect) {
- var timestamp = new Date().getTime();
-
- var position = (typeof effect.options.queue == 'string') ?
- effect.options.queue : effect.options.queue.position;
-
- switch (position) {
- case 'front':
- // move unstarted effects after this effect
- this.effects.findAll(function(e) {
- return e.state == 'idle'
- }).each(function(e) {
- e.startOn += effect.finishOn;
- e.finishOn += effect.finishOn;
- });
- break;
- case 'end':
- // start effect after last queued effect has finished
- timestamp = this.effects.pluck('finishOn').max() || timestamp;
- break;
- }
-
- effect.startOn += timestamp;
- effect.finishOn += timestamp;
- this.effects.push(effect);
- if (!this.interval)
- this.interval = setInterval(this.loop.bind(this), 40);
- },
- remove: function(effect) {
- this.effects = this.effects.reject(function(e) {
- return e == effect
- });
- if (this.effects.length == 0) {
- clearInterval(this.interval);
- this.interval = null;
- }
- },
- loop: function() {
- var timePos = new Date().getTime();
- this.effects.invoke('loop', timePos);
- }
-});
-
-Effect.Queues = {
- instances: $H(),
- get: function(queueName) {
- if (typeof queueName != 'string') return queueName;
-
- if (!this.instances[queueName])
- this.instances[queueName] = new Effect.ScopedQueue();
-
- return this.instances[queueName];
- }
-}
-Effect.Queue = Effect.Queues.get('global');
-
-Effect.DefaultOptions = {
- transition: Effect.Transitions.sinoidal,
- duration: 1.0, // seconds
- fps: 25.0, // max. 25fps due to Effect.Queue implementation
- sync: false, // true for combining
- from: 0.0,
- to: 1.0,
- delay: 0.0,
- queue: 'parallel'
-}
-
-Effect.Base = function() {
-};
-Effect.Base.prototype = {
- position: null,
- start: function(options) {
- this.options = Object.extend(Object.extend({}, Effect.DefaultOptions), options || {});
- this.currentFrame = 0;
- this.state = 'idle';
- this.startOn = this.options.delay * 1000;
- this.finishOn = this.startOn + (this.options.duration * 1000);
- this.event('beforeStart');
- if (!this.options.sync)
- Effect.Queues.get(typeof this.options.queue == 'string' ?
- 'global' : this.options.queue.scope).add(this);
- },
- loop: function(timePos) {
- if (timePos >= this.startOn) {
- if (timePos >= this.finishOn) {
- this.render(1.0);
- this.cancel();
- this.event('beforeFinish');
- if (this.finish) this.finish();
- this.event('afterFinish');
- return;
- }
- var pos = (timePos - this.startOn) / (this.finishOn - this.startOn);
- var frame = Math.round(pos * this.options.fps * this.options.duration);
- if (frame > this.currentFrame) {
- this.render(pos);
- this.currentFrame = frame;
- }
- }
- },
- render: function(pos) {
- if (this.state == 'idle') {
- this.state = 'running';
- this.event('beforeSetup');
- if (this.setup) this.setup();
- this.event('afterSetup');
- }
- if (this.state == 'running') {
- if (this.options.transition) pos = this.options.transition(pos);
- pos *= (this.options.to - this.options.from);
- pos += this.options.from;
- this.position = pos;
- this.event('beforeUpdate');
- if (this.update) this.update(pos);
- this.event('afterUpdate');
- }
- },
- cancel: function() {
- if (!this.options.sync)
- Effect.Queues.get(typeof this.options.queue == 'string' ?
- 'global' : this.options.queue.scope).remove(this);
- this.state = 'finished';
- },
- event: function(eventName) {
- if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
- if (this.options[eventName]) this.options[eventName](this);
- },
- inspect: function() {
- return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';
- }
-}
-
-Effect.Parallel = Class.create();
-Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
- initialize: function(effects) {
- this.effects = effects || [];
- this.start(arguments[1]);
- },
- update: function(position) {
- this.effects.invoke('render', position);
- },
- finish: function(position) {
- this.effects.each(function(effect) {
- effect.render(1.0);
- effect.cancel();
- effect.event('beforeFinish');
- if (effect.finish) effect.finish(position);
- effect.event('afterFinish');
- });
- }
-});
-
-Effect.Opacity = Class.create();
-Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
- initialize: function(element) {
- this.element = $(element);
- // make this work on IE on elements without 'layout'
- if (/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))
- Element.setStyle(this.element, {zoom: 1});
- var options = Object.extend({
- from: Element.getOpacity(this.element) || 0.0,
- to: 1.0
- }, arguments[1] || {});
- this.start(options);
- },
- update: function(position) {
- Element.setOpacity(this.element, position);
- }
-});
-
-Effect.Move = Class.create();
-Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
- initialize: function(element) {
- this.element = $(element);
- var options = Object.extend({
- x: 0,
- y: 0,
- mode: 'relative'
- }, arguments[1] || {});
- this.start(options);
- },
- setup: function() {
- // Bug in Opera: Opera returns the "real" position of a static element or
- // relative element that does not have top/left explicitly set.
- // ==> Always set top and left for position relative elements in your stylesheets
- // (to 0 if you do not need them)
- Element.makePositioned(this.element);
- this.originalLeft = parseFloat(Element.getStyle(this.element, 'left') || '0');
- this.originalTop = parseFloat(Element.getStyle(this.element, 'top') || '0');
- if (this.options.mode == 'absolute') {
- // absolute movement, so we need to calc deltaX and deltaY
- this.options.x = this.options.x - this.originalLeft;
- this.options.y = this.options.y - this.originalTop;
- }
- },
- update: function(position) {
- Element.setStyle(this.element, {
- left: this.options.x * position + this.originalLeft + 'px',
- top: this.options.y * position + this.originalTop + 'px'
- });
- }
-});
-
-// for backwards compatibility
-Effect.MoveBy = function(element, toTop, toLeft) {
- return new Effect.Move(element,
- Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
-};
-
-Effect.Scale = Class.create();
-Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
- initialize: function(element, percent) {
- this.element = $(element)
- var options = Object.extend({
- scaleX: true,
- scaleY: true,
- scaleContent: true,
- scaleFromCenter: false,
- scaleMode: 'box', // 'box' or 'contents' or {} with provided values
- scaleFrom: 100.0,
- scaleTo: percent
- }, arguments[2] || {});
- this.start(options);
- },
- setup: function() {
- this.restoreAfterFinish = this.options.restoreAfterFinish || false;
- this.elementPositioning = Element.getStyle(this.element, 'position');
-
- this.originalStyle = {};
- ['top','left','width','height','fontSize'].each(function(k) {
- this.originalStyle[k] = this.element.style[k];
- }.bind(this));
-
- this.originalTop = this.element.offsetTop;
- this.originalLeft = this.element.offsetLeft;
-
- var fontSize = Element.getStyle(this.element, 'font-size') || '100%';
- ['em','px','%'].each(function(fontSizeType) {
- if (fontSize.indexOf(fontSizeType) > 0) {
- this.fontSize = parseFloat(fontSize);
- this.fontSizeType = fontSizeType;
- }
- }.bind(this));
-
- this.factor = (this.options.scaleTo - this.options.scaleFrom) / 100;
-
- this.dims = null;
- if (this.options.scaleMode == 'box')
- this.dims = [this.element.offsetHeight, this.element.offsetWidth];
- if (/^content/.test(this.options.scaleMode))
- this.dims = [this.element.scrollHeight, this.element.scrollWidth];
- if (!this.dims)
- this.dims = [this.options.scaleMode.originalHeight,
- this.options.scaleMode.originalWidth];
- },
- update: function(position) {
- var currentScale = (this.options.scaleFrom / 100.0) + (this.factor * position);
- if (this.options.scaleContent && this.fontSize)
- Element.setStyle(this.element, {fontSize: this.fontSize * currentScale + this.fontSizeType });
- this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
- },
- finish: function(position) {
- if (this.restoreAfterFinish) Element.setStyle(this.element, this.originalStyle);
- },
- setDimensions: function(height, width) {
- var d = {};
- if (this.options.scaleX) d.width = width + 'px';
- if (this.options.scaleY) d.height = height + 'px';
- if (this.options.scaleFromCenter) {
- var topd = (height - this.dims[0]) / 2;
- var leftd = (width - this.dims[1]) / 2;
- if (this.elementPositioning == 'absolute') {
- if (this.options.scaleY) d.top = this.originalTop - topd + 'px';
- if (this.options.scaleX) d.left = this.originalLeft - leftd + 'px';
- } else {
- if (this.options.scaleY) d.top = -topd + 'px';
- if (this.options.scaleX) d.left = -leftd + 'px';
- }
- }
- Element.setStyle(this.element, d);
- }
-});
-
-Effect.Highlight = Class.create();
-Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
- initialize: function(element) {
- this.element = $(element);
- var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
- this.start(options);
- },
- setup: function() {
- // Prevent executing on elements not in the layout flow
- if (Element.getStyle(this.element, 'display') == 'none') {
- this.cancel();
- return;
- }
- // Disable background image during the effect
- this.oldStyle = {
- backgroundImage: Element.getStyle(this.element, 'background-image') };
- Element.setStyle(this.element, {backgroundImage: 'none'});
- if (!this.options.endcolor)
- this.options.endcolor = Element.getStyle(this.element, 'background-color').parseColor('#ffffff');
- if (!this.options.restorecolor)
- this.options.restorecolor = Element.getStyle(this.element, 'background-color');
- // init color calculations
- this._base = $R(0, 2).map(function(i) {
- return parseInt(this.options.startcolor.slice(i * 2 + 1, i * 2 + 3), 16)
- }.bind(this));
- this._delta = $R(0, 2).map(function(i) {
- return parseInt(this.options.endcolor.slice(i * 2 + 1, i * 2 + 3), 16) - this._base[i]
- }.bind(this));
- },
- update: function(position) {
- Element.setStyle(this.element, {backgroundColor: $R(0, 2).inject('#', function(m, v, i) {
- return m + (Math.round(this._base[i] + (this._delta[i] * position)).toColorPart());
- }.bind(this)) });
- },
- finish: function() {
- Element.setStyle(this.element, Object.extend(this.oldStyle, {
- backgroundColor: this.options.restorecolor
- }));
- }
-});
-
-Effect.ScrollTo = Class.create();
-Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
- initialize: function(element) {
- this.element = $(element);
- this.start(arguments[1] || {});
- },
- setup: function() {
- Position.prepare();
- var offsets = Position.cumulativeOffset(this.element);
- if (this.options.offset) offsets[1] += this.options.offset;
- var max = window.innerHeight ?
- window.height - window.innerHeight :
- document.body.scrollHeight -
- (document.documentElement.clientHeight ?
- document.documentElement.clientHeight : document.body.clientHeight);
- this.scrollStart = Position.deltaY;
- this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
- },
- update: function(position) {
- Position.prepare();
- window.scrollTo(Position.deltaX,
- this.scrollStart + (position * this.delta));
- }
-});
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
- var oldOpacity = Element.getInlineOpacity(element);
- var options = Object.extend({
- from: Element.getOpacity(element) || 1.0,
- to: 0.0,
- afterFinishInternal: function(effect) {
- with (Element) {
- if (effect.options.to != 0) return;
- hide(effect.element);
- setStyle(effect.element, {opacity: oldOpacity});
- }
- }
- }, arguments[1] || {});
- return new Effect.Opacity(element, options);
-}
-
-Effect.Appear = function(element) {
- var options = Object.extend({
- from: (Element.getStyle(element, 'display') == 'none' ? 0.0 : Element.getOpacity(element) || 0.0),
- to: 1.0,
- beforeSetup: function(effect) {
- with (Element) {
- setOpacity(effect.element, effect.options.from);
- show(effect.element);
- }
- }
- }, arguments[1] || {});
- return new Effect.Opacity(element, options);
-}
-
-Effect.Puff = function(element) {
- element = $(element);
- var oldStyle = { opacity: Element.getInlineOpacity(element), position: Element.getStyle(element, 'position') };
- return new Effect.Parallel(
- [ new Effect.Scale(element, 200,
- { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
- new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
- Object.extend({ duration: 1.0,
- beforeSetupInternal: function(effect) {
- with (Element) {
- setStyle(effect.effects[0].element, {position: 'absolute'});
- }
- },
- afterFinishInternal: function(effect) {
- with (Element) {
- hide(effect.effects[0].element);
- setStyle(effect.effects[0].element, oldStyle);
- }
- }
- }, arguments[1] || {})
- );
-}
-
-Effect.BlindUp = function(element) {
- element = $(element);
- Element.makeClipping(element);
- return new Effect.Scale(element, 0,
- Object.extend({ scaleContent: false,
- scaleX: false,
- restoreAfterFinish: true,
- afterFinishInternal: function(effect) {
- with (Element) {
- [hide, undoClipping].call(effect.element);
- }
- }
- }, arguments[1] || {})
- );
-}
-
-Effect.BlindDown = function(element) {
- element = $(element);
- var oldHeight = Element.getStyle(element, 'height');
- var elementDimensions = Element.getDimensions(element);
- return new Effect.Scale(element, 100,
- Object.extend({ scaleContent: false,
- scaleX: false,
- scaleFrom: 0,
- scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
- restoreAfterFinish: true,
- afterSetup: function(effect) {
- with (Element) {
- makeClipping(effect.element);
- setStyle(effect.element, {height: '0px'});
- show(effect.element);
- }
- },
- afterFinishInternal: function(effect) {
- with (Element) {
- undoClipping(effect.element);
- setStyle(effect.element, {height: oldHeight});
- }
- }
- }, arguments[1] || {})
- );
-}
-
-Effect.SwitchOff = function(element) {
- element = $(element);
- var oldOpacity = Element.getInlineOpacity(element);
- return new Effect.Appear(element, {
- duration: 0.4,
- from: 0,
- transition: Effect.Transitions.flicker,
- afterFinishInternal: function(effect) {
- new Effect.Scale(effect.element, 1, {
- duration: 0.3, scaleFromCenter: true,
- scaleX: false, scaleContent: false, restoreAfterFinish: true,
- beforeSetup: function(effect) {
- with (Element) {
- [makePositioned,makeClipping].call(effect.element);
- }
- },
- afterFinishInternal: function(effect) {
- with (Element) {
- [hide,undoClipping,undoPositioned].call(effect.element);
- setStyle(effect.element, {opacity: oldOpacity});
- }
- }
- })
- }
- });
-}
-
-Effect.DropOut = function(element) {
- element = $(element);
- var oldStyle = {
- top: Element.getStyle(element, 'top'),
- left: Element.getStyle(element, 'left'),
- opacity: Element.getInlineOpacity(element) };
- return new Effect.Parallel(
- [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
- new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
- Object.extend(
- { duration: 0.5,
- beforeSetup: function(effect) {
- with (Element) {
- makePositioned(effect.effects[0].element);
- }
- },
- afterFinishInternal: function(effect) {
- with (Element) {
- [hide, undoPositioned].call(effect.effects[0].element);
- setStyle(effect.effects[0].element, oldStyle);
- }
- }
- }, arguments[1] || {}));
-}
-
-Effect.Shake = function(element) {
- element = $(element);
- var oldStyle = {
- top: Element.getStyle(element, 'top'),
- left: Element.getStyle(element, 'left') };
- return new Effect.Move(element,
- { x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
- with (Element) {
- undoPositioned(effect.element);
- setStyle(effect.element, oldStyle);
- }
- }})
- }})
- }})
- }})
- }})
- }});
-}
-
-Effect.SlideDown = function(element) {
- element = $(element);
- Element.cleanWhitespace(element);
- // SlideDown need to have the content of the element wrapped in a container element with fixed height!
- var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');
- var elementDimensions = Element.getDimensions(element);
- return new Effect.Scale(element, 100, Object.extend({
- scaleContent: false,
- scaleX: false,
- scaleFrom: 0,
- scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
- restoreAfterFinish: true,
- afterSetup: function(effect) {
- with (Element) {
- makePositioned(effect.element);
- makePositioned(effect.element.firstChild);
- if (window.opera) setStyle(effect.element, {top: ''});
- makeClipping(effect.element);
- setStyle(effect.element, {height: '0px'});
- show(element);
- }
- },
- afterUpdateInternal: function(effect) {
- with (Element) {
- setStyle(effect.element.firstChild, {bottom:
- (effect.dims[0] - effect.element.clientHeight) + 'px' });
- }
- },
- afterFinishInternal: function(effect) {
- with (Element) {
- undoClipping(effect.element);
- undoPositioned(effect.element.firstChild);
- undoPositioned(effect.element);
- setStyle(effect.element.firstChild, {bottom: oldInnerBottom});
- }
- }
- }, arguments[1] || {})
- );
-}
-
-Effect.SlideUp = function(element) {
- element = $(element);
- Element.cleanWhitespace(element);
- var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');
- return new Effect.Scale(element, 0,
- Object.extend({ scaleContent: false,
- scaleX: false,
- scaleMode: 'box',
- scaleFrom: 100,
- restoreAfterFinish: true,
- beforeStartInternal: function(effect) {
- with (Element) {
- makePositioned(effect.element);
- makePositioned(effect.element.firstChild);
- if (window.opera) setStyle(effect.element, {top: ''});
- makeClipping(effect.element);
- show(element);
- }
- },
- afterUpdateInternal: function(effect) {
- with (Element) {
- setStyle(effect.element.firstChild, {bottom:
- (effect.dims[0] - effect.element.clientHeight) + 'px' });
- }
- },
- afterFinishInternal: function(effect) {
- with (Element) {
- [hide, undoClipping].call(effect.element);
- undoPositioned(effect.element.firstChild);
- undoPositioned(effect.element);
- setStyle(effect.element.firstChild, {bottom: oldInnerBottom});
- }
- }
- }, arguments[1] || {})
- );
-}
-
-// Bug in opera makes the TD containing this element expand for a instance after finish
-Effect.Squish = function(element) {
- return new Effect.Scale(element, window.opera ? 1 : 0,
- { restoreAfterFinish: true,
- beforeSetup: function(effect) {
- with (Element) {
- makeClipping(effect.element);
- }
- },
- afterFinishInternal: function(effect) {
- with (Element) {
- hide(effect.element);
- undoClipping(effect.element);
- }
- }
- });
-}
-
-Effect.Grow = function(element) {
- element = $(element);
- var options = Object.extend({
- direction: 'center',
- moveTransistion: Effect.Transitions.sinoidal,
- scaleTransition: Effect.Transitions.sinoidal,
- opacityTransition: Effect.Transitions.full
- }, arguments[1] || {});
- var oldStyle = {
- top: element.style.top,
- left: element.style.left,
- height: element.style.height,
- width: element.style.width,
- opacity: Element.getInlineOpacity(element) };
-
- var dims = Element.getDimensions(element);
- var initialMoveX, initialMoveY;
- var moveX, moveY;
-
- switch (options.direction) {
- case 'top-left':
- initialMoveX = initialMoveY = moveX = moveY = 0;
- break;
- case 'top-right':
- initialMoveX = dims.width;
- initialMoveY = moveY = 0;
- moveX = -dims.width;
- break;
- case 'bottom-left':
- initialMoveX = moveX = 0;
- initialMoveY = dims.height;
- moveY = -dims.height;
- break;
- case 'bottom-right':
- initialMoveX = dims.width;
- initialMoveY = dims.height;
- moveX = -dims.width;
- moveY = -dims.height;
- break;
- case 'center':
- initialMoveX = dims.width / 2;
- initialMoveY = dims.height / 2;
- moveX = -dims.width / 2;
- moveY = -dims.height / 2;
- break;
- }
-
- return new Effect.Move(element, {
- x: initialMoveX,
- y: initialMoveY,
- duration: 0.01,
- beforeSetup: function(effect) {
- with (Element) {
- hide(effect.element);
- makeClipping(effect.element);
- makePositioned(effect.element);
- }
- },
- afterFinishInternal: function(effect) {
- new Effect.Parallel(
- [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
- new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
- new Effect.Scale(effect.element, 100, {
- scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
- sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
- ], Object.extend({
- beforeSetup: function(effect) {
- with (Element) {
- setStyle(effect.effects[0].element, {height: '0px'});
- show(effect.effects[0].element);
- }
- },
- afterFinishInternal: function(effect) {
- with (Element) {
- [undoClipping, undoPositioned].call(effect.effects[0].element);
- setStyle(effect.effects[0].element, oldStyle);
- }
- }
- }, options)
- )
- }
- });
-}
-
-Effect.Shrink = function(element) {
- element = $(element);
- var options = Object.extend({
- direction: 'center',
- moveTransistion: Effect.Transitions.sinoidal,
- scaleTransition: Effect.Transitions.sinoidal,
- opacityTransition: Effect.Transitions.none
- }, arguments[1] || {});
- var oldStyle = {
- top: element.style.top,
- left: element.style.left,
- height: element.style.height,
- width: element.style.width,
- opacity: Element.getInlineOpacity(element) };
-
- var dims = Element.getDimensions(element);
- var moveX, moveY;
-
- switch (options.direction) {
- case 'top-left':
- moveX = moveY = 0;
- break;
- case 'top-right':
- moveX = dims.width;
- moveY = 0;
- break;
- case 'bottom-left':
- moveX = 0;
- moveY = dims.height;
- break;
- case 'bottom-right':
- moveX = dims.width;
- moveY = dims.height;
- break;
- case 'center':
- moveX = dims.width / 2;
- moveY = dims.height / 2;
- break;
- }
-
- return new Effect.Parallel(
- [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
- new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
- new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
- ], Object.extend({
- beforeStartInternal: function(effect) {
- with (Element) {
- [makePositioned, makeClipping].call(effect.effects[0].element)
- }
- },
- afterFinishInternal: function(effect) {
- with (Element) {
- [hide, undoClipping, undoPositioned].call(effect.effects[0].element);
- setStyle(effect.effects[0].element, oldStyle);
- }
- }
- }, options)
- );
-}
-
-Effect.Pulsate = function(element) {
- element = $(element);
- var options = arguments[1] || {};
- var oldOpacity = Element.getInlineOpacity(element);
- var transition = options.transition || Effect.Transitions.sinoidal;
- var reverser = function(pos) {
- return transition(1 - Effect.Transitions.pulse(pos))
- };
- reverser.bind(transition);
- return new Effect.Opacity(element,
- Object.extend(Object.extend({ duration: 3.0, from: 0,
- afterFinishInternal: function(effect) {
- Element.setStyle(effect.element, {opacity: oldOpacity});
- }
- }, options), {transition: reverser}));
-}
-
-Effect.Fold = function(element) {
- element = $(element);
- var oldStyle = {
- top: element.style.top,
- left: element.style.left,
- width: element.style.width,
- height: element.style.height };
- Element.makeClipping(element);
- return new Effect.Scale(element, 5, Object.extend({
- scaleContent: false,
- scaleX: false,
- afterFinishInternal: function(effect) {
- new Effect.Scale(element, 1, {
- scaleContent: false,
- scaleY: false,
- afterFinishInternal: function(effect) {
- with (Element) {
- [hide, undoClipping].call(effect.element);
- setStyle(effect.element, oldStyle);
- }
- } });
- }}, arguments[1] || {}));
-}
-/*
- Support for Drag and Drop in AJAX-JSF environment.
-*/
-if (!window.Richfaces) {
- window.Richfaces = {};
-}
-if (!Richfaces.AJAX) {
- Richfaces.AJAX = {};
-}
-
-/**
- * Append element for drop zone, caused AJAX request.
- * @param containerId - client id of AJAX container
- * @param form - reference for JSF form or action Url
- * @param element - id of drop-zone element
- * @param options - map of additional options for request :
- * 1) same as for AJAX.Submit
- * 2) All Dropable options.
- * 3) Additional options :
- * dropEffect - name of effect on "drop" , build different "onDrop" functions for different names
- * effectDepth - depth of effect ( percent of transparency, scale factor etc )
- * effectDuration
- * hoverEffect - name of effect on hover draggable on this component. build different "onHover" functions
- * hoverDepth
- * hoverDuration
- */
-Richfaces.AJAX.addDropable = function(containerId, form, element, options) {
- options.onDrop = function(element, dropon, dropEvent) {
- Richfaces.AJAX.dropEffect(element);
- options.element = element;
- options.dropon = dropon;
- options.dropEvent = dropEvent;
- if (options.ondrop && typeof options.ondrop == 'function') {
- options.ondrop(element, dropon, dropEvent);
- }
- if (arguments.length > 3 && arguments[3] != null) {
- element.style.left = arguments[3][0] + "px";
- element.style.top = arguments[3][1] + "px";
- }
- if (arguments.length < 6) {
- Droppables.isInDropPhase = true;
- }
- Richfaces.AJAX.submitDrop(containerId, form, dropEvent, options);
- };
- if (options.oncomplete && typeof options.oncomplete == 'function') {
- options.onajaxComplete = options.oncomplete;
- }
- options.oncomplete = function(request, dropEvent) {
- Droppables.isInDropPhase = false;
- if (request.options.onajaxComplete) {
- request.options.onajaxComplete(request, dropEvent);
- }
- };
- if (options.onhover && typeof options.onhover == 'function') {
- options.onHover = options.onhover;
- }
-
- // var el = $(element);
- // if (el && el.tagName.toLowerCase() == "div") el.style.height = "100%";
- var drop = Droppables.add(element, options);
-}
-
-Richfaces.AJAX.dropEffect = function(element) {
- var _clone = element.cloneNode(true);
- var isCursor = element.style.visibility.toLowerCase() == "hidden";
- if (isCursor) _clone.style.visibility = "";
- var cumulativeOffset = Position.cumulativeOffset(element);
- _clone.style.zIndex = 500;
- document.body.appendChild(_clone);
- _clone.style.position = 'absolute';
-
- var offsetParent = Position.offsetParent(element), offsetL = 0, offsetT = 0;
- if (!/Opera/.test(navigator.userAgent)) {
- while (offsetParent && offsetParent != document.body) {
- offsetL += offsetParent.offsetLeft;
- offsetT += offsetParent.offsetTop;
- offsetParent = Position.offsetParent(offsetParent);
- }
- }
- var op = [offsetL, offsetT];
-
- if (/MSIE/.test(navigator.userAgent)) {
- var realOffset = Position.realOffset(element);
- _clone.style.top = (cumulativeOffset[1] + (!isCursor ? op[1] : 0) - realOffset[1] + Position.deltaY) + "px";
- _clone.style.left = (cumulativeOffset[0] + (!isCursor ? op[0] : 0) - realOffset[0] + Position.deltaX) + "px";
- } else if (/Opera/.test(navigator.userAgent)) {
- var el = element, valueT = 0, valueL = 0;
- do {
- if (el && el.tagName.toLowerCase() != "tr") {
- valueT += (el.scrollTop > 0 ? el.scrollTop : 0) || 0;
- valueL += (el.scrollLeft > 0 ? el.scrollLeft : 0) || 0;
- }
- el = el.parentNode;
- } while (el && el != document.body);
- var scrollOffset = [valueL, valueT];
- _clone.style.top = (cumulativeOffset[1] - scrollOffset[1]) + "px";
- _clone.style.left = (cumulativeOffset[0] - scrollOffset[0]) + "px";
- } else {
- _clone.style.top = (cumulativeOffset[1] + op[1]) + "px";
- _clone.style.left = (cumulativeOffset[0] + op[0]) + "px";
- }
-
- new Effect.Parallel(
- [ new Effect.Scale(_clone, 10,
- { sync: true, scaleFromCenter: false, scaleContent: true, scaleMode: 'box' }),
- new Effect.Opacity(_clone, { sync: true, from: 0.7, to: 0.0 }) ],
- { duration: 1.0,
- afterFinishInternal: function(effect) {
- Element.remove(_clone);
- }
- })
-}
-/**
- * Make element Dragable. Impotant ! check existing elements !
- * @param element - id of drop-zone element
- * @param options - map of additional options for request :
- * 1) All Dragable options.
- * 2) Additional options :
- * parameters - request parameters for send on drop to DropZone.
- * dragEffect - name of effect on start drag.
- * effectDepth - depth of effect ( percent of transparency, scale factor etc )
- * effectDuration
- *
- */
-Richfaces.AJAX.addDragable = function(element, options) {
- // TODO - build different effects
- options.reverteffect = function(element) {
- element.style.top = 0;
- element.style.left = 0;
- };
- options.starteffect = function(element) {
- new Effect.Opacity(element, {duration:0.2, from:1.0, to:0.7});
- };
- var drag = new Draggable(element, options);
- if (options.parameters) {
- drag.element._parameters = options.parameters;
- }
-}
-
-Richfaces.AJAX.addClickDropable = function(element, options) {
- if (Droppables) {
- Droppables.getForElement =
- function(element) {
- element = $(element);
- var dropable = null;
- this.drops.each(
- function(drop) {
- if (drop.element == element) {
- dropable = drop;
- throw $break;
- }
- }
- );
- return dropable;
- }
- }
-
- var drag = new ClickDropable(element, options);
- if (options.parameters) {
- drag.element._parameters = options.parameters;
- }
-}
-/**
- * Submit Ajax request by onDrop event.
- * Union all Dropable element pagameters, and active
- * draggable element parameters ( override dropzone parameters, if exist with same name )
- *
- *
- */
-Richfaces.AJAX.submitDrop = function(containerId, form, event, options) {
- var parameters = options.parameters || {};
- if (options.element && options.element._parameters) {
- for (var k in options.element._parameters) {
- parameters[k] = options.element._parameters[k];
- }
- }
- options.parameters = parameters;
- A4J.AJAX.Submit(containerId, form, event, options);
-}
Modified: trunk/ui/suggestionbox/src/test/java/org/richfaces/component/SuggestionBoxComponentTest.java
===================================================================
--- trunk/ui/suggestionbox/src/test/java/org/richfaces/component/SuggestionBoxComponentTest.java 2008-08-08 17:33:46 UTC (rev 9996)
+++ trunk/ui/suggestionbox/src/test/java/org/richfaces/component/SuggestionBoxComponentTest.java 2008-08-08 18:41:50 UTC (rev 9997)
@@ -22,7 +22,6 @@
package org.richfaces.component;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -31,11 +30,9 @@
import javax.faces.component.html.HtmlForm;
import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
-import org.apache.commons.lang.StringUtils;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
-import com.gargoylesoftware.htmlunit.html.HtmlScript;
/**
* Unit test for SuggestionBox component.
@@ -49,7 +46,7 @@
javaScripts.add("prototype.js");
javaScripts.add("org.ajax4jsf.javascript.SmartPositionScript");
javaScripts.add("org/richfaces/renderkit/html/scripts/browser_info.js");
- javaScripts.add("scripts/scriptaculo.js");
+ javaScripts.add("org/richfaces/renderkit/html/scripts/scriptaculous/effects.js");
javaScripts.add("scripts/suggestionbox.js");
javaScripts.add("org/richfaces/renderkit/html/scripts/available.js");
}
16 years, 5 months
JBoss Rich Faces SVN: r9996 - trunk/framework/impl/src/main/java/org/ajax4jsf/context.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-08-08 13:33:46 -0400 (Fri, 08 Aug 2008)
New Revision: 9996
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/context/AjaxContextImpl.java
Log:
https://jira.jboss.org/jira/browse/RF-3618
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/context/AjaxContextImpl.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/context/AjaxContextImpl.java 2008-08-08 17:32:03 UTC (rev 9995)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/context/AjaxContextImpl.java 2008-08-08 17:33:46 UTC (rev 9996)
@@ -33,7 +33,6 @@
import java.util.Map;
import java.util.Set;
-import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.FacesException;
import javax.faces.FactoryFinder;
@@ -129,7 +128,6 @@
* @see org.ajax4jsf.context.AjaxContext#decode(javax.faces.context.FacesContext)
*/
@Override
- @PostConstruct
public void decode(FacesContext context) {
ExternalContext externalContext = context.getExternalContext();
if (null == externalContext.getRequestMap().get(
16 years, 5 months
JBoss Rich Faces SVN: r9995 - trunk/framework/impl/src/main/java/org/ajax4jsf/component.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-08-08 13:32:03 -0400 (Fri, 08 Aug 2008)
New Revision: 9995
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java
Log:
https://jira.jboss.org/jira/browse/RF-4075
UIDataAdaptor#keepSaved(FacesContext) modifier changed to protected
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java 2008-08-08 14:54:04 UTC (rev 9994)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java 2008-08-08 17:32:03 UTC (rev 9995)
@@ -48,7 +48,6 @@
import javax.faces.event.AbortProcessingException;
import javax.faces.event.FacesEvent;
import javax.faces.event.FacesListener;
-import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
@@ -995,7 +994,7 @@
* @param context
* @return
*/
- private boolean keepSaved(FacesContext context) {
+ protected boolean keepSaved(FacesContext context) {
// For an any validation errors, children components state should be preserved
FacesMessage.Severity sev = context.getMaximumSeverity();
return (sev != null && (FacesMessage.SEVERITY_ERROR.compareTo(sev) >= 0));
16 years, 5 months