JBoss Rich Faces SVN: r19575 - branches/RF-7817/core/api/src/main/java/org/richfaces/application/push.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2010-10-14 20:24:16 -0400 (Thu, 14 Oct 2010)
New Revision: 19575
Added:
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageDataSerializer.java
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/Session.java
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/SessionListener.java
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/SessionManager.java
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/Topic.java
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/TopicsContext.java
Removed:
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageFilter.java
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageSerializer.java
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageTransformer.java
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/PushSession.java
branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/PushSessionTracker.java
Log:
https://jira.jboss.org/browse/RF-7817
Copied: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageDataSerializer.java (from rev 19530, branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageSerializer.java)
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageDataSerializer.java (rev 0)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageDataSerializer.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.application.push;
+
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+//TODO - byte message serializer?
+public interface MessageDataSerializer {
+
+ public static final String MESSAGE_ATTRIBUTE_NAME = MessageDataSerializer.class.getName();
+
+ public String serialize(Object data);
+
+}
Deleted: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageFilter.java
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageFilter.java 2010-10-14 21:35:43 UTC (rev 19574)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageFilter.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -1,33 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.application.push;
-
-
-/**
- * @author Nick Belaevski
- *
- */
-public interface MessageFilter {
-
- public boolean accept(Message message);
-
-}
Deleted: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageSerializer.java
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageSerializer.java 2010-10-14 21:35:43 UTC (rev 19574)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageSerializer.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -1,36 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.application.push;
-
-
-/**
- * @author Nick Belaevski
- *
- */
-//TODO - byte message serializer?
-public interface MessageSerializer {
-
- public static final String MESSAGE_ATTRIBUTE_NAME = MessageSerializer.class.getName();
-
- public String serialize(Message message);
-
-}
Deleted: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageTransformer.java
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageTransformer.java 2010-10-14 21:35:43 UTC (rev 19574)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/MessageTransformer.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -1,33 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.application.push;
-
-
-/**
- * @author Nick Belaevski
- *
- */
-public interface MessageTransformer {
-
- public Message transform(Message o);
-
-}
Deleted: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/PushSession.java
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/PushSession.java 2010-10-14 21:35:43 UTC (rev 19574)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/PushSession.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -1,45 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.application.push;
-
-import java.io.IOException;
-
-
-/**
- * @author Nick Belaevski
- *
- */
-public interface PushSession {
-
- public String getId();
-
- public void subscribe(TopicKey[] topics);
-
- public void connect(Request request) throws IOException;
-
- public void disconnect() throws IOException;
-
- public void destroy();
-
- public void writeMessages() throws IOException;
-
-}
Deleted: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/PushSessionTracker.java
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/PushSessionTracker.java 2010-10-14 21:35:43 UTC (rev 19574)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/PushSessionTracker.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -1,37 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.richfaces.application.push;
-
-
-/**
- * @author Nick Belaevski
- *
- */
-public interface PushSessionTracker {
-
- public PushSession createPushSession();
-
- public PushSession getPushSession(String id);
-
- public void removePushSession(String id);
-
-}
\ No newline at end of file
Copied: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/Session.java (from rev 19530, branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/PushSession.java)
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/Session.java (rev 0)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/Session.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -0,0 +1,54 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.application.push;
+
+
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public interface Session {
+
+ public int getMaxInactiveInterval();
+
+ public long getLastAccessedTime();
+
+ public String getId();
+
+ public void subscribe(TopicKey topic) throws Exception;
+
+ public void connect(Request request) throws Exception;
+
+ public void disconnect(Request request) throws Exception;
+
+ public void destroy();
+
+ public Request getRequest();
+
+ public void addSessionListener(SessionListener sessionListener);
+
+ public SessionListener[] getSessionListeners();
+
+ public void removeSessionListener(SessionListener sessionListener);
+
+}
Added: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/SessionListener.java
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/SessionListener.java (rev 0)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/SessionListener.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.application.push;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public interface SessionListener {
+
+ public void onRequestConnected(Session session);
+
+ public void onRequestDisconnected(Session session);
+
+ public void onSessionDestroyed(Session session);
+
+}
Copied: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/SessionManager.java (from rev 19530, branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/PushSessionTracker.java)
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/SessionManager.java (rev 0)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/SessionManager.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -0,0 +1,39 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.application.push;
+
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public interface SessionManager {
+
+ public void putPushSession(Session pushSession) throws IllegalStateException;
+
+ public Session getPushSession(String id);
+
+ public void removePushSession(String id);
+
+ public void destroy();
+
+}
\ No newline at end of file
Added: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/Topic.java
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/Topic.java (rev 0)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/Topic.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -0,0 +1,36 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.application.push;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+public interface Topic {
+
+ public TopicKey getKey();
+
+ public MessageDataSerializer getMessageSerializer();
+
+ public void setMessageSerializer(MessageDataSerializer serializer);
+
+}
\ No newline at end of file
Added: branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/TopicsContext.java
===================================================================
--- branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/TopicsContext.java (rev 0)
+++ branches/RF-7817/core/api/src/main/java/org/richfaces/application/push/TopicsContext.java 2010-10-15 00:24:16 UTC (rev 19575)
@@ -0,0 +1,37 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.richfaces.application.push;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+//TODO annotations for declarative topics registration
+public interface TopicsContext {
+
+ public Topic getOrCreateTopic(TopicKey key);
+
+ public Topic getTopic(TopicKey key);
+
+ public void removeTopic(TopicKey key);
+
+}
13 years, 8 months
JBoss Rich Faces SVN: r19574 - in branches/RF-8742/ui/validator: impl/src/main/java/org/richfaces/validator and 2 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: alexsmirnov
Date: 2010-10-14 17:35:43 -0400 (Thu, 14 Oct 2010)
New Revision: 19574
Added:
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/BeanValidatorService.java
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ClientScriptService.java
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/FacesValidatorService.java
branches/RF-8742/ui/validator/impl/src/main/java/org/richfaces/validator/ValidatorDescriptor.java
Removed:
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ClientScriptLookupService.java
branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ValidatorLookup.java
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/AjaxBehaviorWrapper.java
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ValidatorDescriptor.java
Modified:
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorBehavior.java
branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetConverterTest.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetValidatorTest.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorTestBase.java
branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/GetScriptTest.java
Log:
RESOLVED - issue RF-9506: ClientValidatorBehavior unit tests and implementation.
https://jira.jboss.org/browse/RF-9506
Copied: branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/BeanValidatorService.java (from rev 19570, branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ValidatorLookup.java)
===================================================================
--- branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/BeanValidatorService.java (rev 0)
+++ branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/BeanValidatorService.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -0,0 +1,27 @@
+package org.richfaces.validator;
+
+import java.util.Collection;
+
+import javax.el.ValueExpression;
+import javax.faces.context.FacesContext;
+
+
+/**
+ * <p class="changed_added_4_0">This interface describes service that gets Bean Validator constrains for EL-expressions</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public interface BeanValidatorService {
+
+ /**
+ * <p class="changed_added_4_0">Get all constrains for given EL-expression</p>
+ * @param context
+ * @param expression
+ * @return
+ */
+ Collection<ValidatorDescriptor> getConstrains(FacesContext context, ValueExpression expression,Class<?> ...groups);
+
+ Collection<String> validateExpression(FacesContext context,ValueExpression expression, Object newValue,Class<?> ...groups);
+
+ Collection<String> validateObject(FacesContext context,Object object, Object newValue,Class<?> ...groups);
+}
Property changes on: branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/BeanValidatorService.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Deleted: branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ClientScriptLookupService.java
===================================================================
--- branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ClientScriptLookupService.java 2010-10-14 16:22:29 UTC (rev 19573)
+++ branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ClientScriptLookupService.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -1,42 +0,0 @@
-/*
- * $Id$
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-
-package org.richfaces.validator;
-
-/**
- * <p class="changed_added_4_0">This interface describes service that determines JavaScript module and function
- * for Java corresponded version ( both Converter and Validator )</p>
- * @author asmirnov(a)exadel.com
- *
- */
-public interface ClientScriptLookupService {
-
- /**
- * <p class="changed_added_4_0">Get description for client-side version of Java implementation</p>
- * @param javaClass either Converter or Validator class.
- * @return description of client-side script.
- * @throws ScriptNotFoundException if no JavaScript code associated with Java class.
- */
- ClientScript getScript(Class<?> javaClass) throws ScriptNotFoundException;
-
-}
Copied: branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ClientScriptService.java (from rev 19570, branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ClientScriptLookupService.java)
===================================================================
--- branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ClientScriptService.java (rev 0)
+++ branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ClientScriptService.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -0,0 +1,42 @@
+/*
+ * $Id$
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.richfaces.validator;
+
+/**
+ * <p class="changed_added_4_0">This interface describes service that determines JavaScript module and function
+ * for Java corresponded version ( both Converter and Validator )</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public interface ClientScriptService {
+
+ /**
+ * <p class="changed_added_4_0">Get description for client-side version of Java implementation</p>
+ * @param javaClass either Converter or Validator class.
+ * @return description of client-side script.
+ * @throws ScriptNotFoundException if no JavaScript code associated with Java class.
+ */
+ ClientScript getScript(Class<?> javaClass) throws ScriptNotFoundException;
+
+}
Property changes on: branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ClientScriptService.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/FacesValidatorService.java
===================================================================
--- branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/FacesValidatorService.java (rev 0)
+++ branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/FacesValidatorService.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -0,0 +1,10 @@
+package org.richfaces.validator;
+
+import javax.faces.context.FacesContext;
+import javax.faces.validator.Validator;
+
+
+public interface FacesValidatorService {
+
+ ValidatorDescriptor getValidatorDescription(FacesContext context,Validator validator);
+}
Property changes on: branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/FacesValidatorService.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:eol-style
+ native
Deleted: branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ValidatorLookup.java
===================================================================
--- branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ValidatorLookup.java 2010-10-14 16:22:29 UTC (rev 19573)
+++ branches/RF-8742/ui/validator/api/src/main/java/org/richfaces/validator/ValidatorLookup.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -1,25 +0,0 @@
-package org.richfaces.validator;
-
-import java.util.Collection;
-
-import javax.el.ValueExpression;
-import javax.faces.context.FacesContext;
-import javax.validation.metadata.ConstraintDescriptor;
-
-/**
- * <p class="changed_added_4_0">This interface describes service that gets Bean Validator constrains for EL-expressions</p>
- * @author asmirnov(a)exadel.com
- *
- */
-public interface ValidatorLookup {
-
- /**
- * <p class="changed_added_4_0">Get all constrains for given EL-expression</p>
- * @param context
- * @param expression
- * @return
- */
- Iterable<ConstraintDescriptor<?>> getConstrains(FacesContext context, ValueExpression expression);
-
- Collection<String> validateExpression(FacesContext context,ValueExpression expression, Object newValue);
-}
Copied: branches/RF-8742/ui/validator/impl/src/main/java/org/richfaces/validator/ValidatorDescriptor.java (from rev 19570, branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ValidatorDescriptor.java)
===================================================================
--- branches/RF-8742/ui/validator/impl/src/main/java/org/richfaces/validator/ValidatorDescriptor.java (rev 0)
+++ branches/RF-8742/ui/validator/impl/src/main/java/org/richfaces/validator/ValidatorDescriptor.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -0,0 +1,42 @@
+package org.richfaces.validator;
+
+import java.util.Map;
+
+/**
+ * <p class="changed_added_4_0">
+ * Inmlementations of this interface describe JSF or JSR-303 validators. Because JSF supports 2 types of validators,
+ * this interface unifies access to them.
+ * </p>
+ *
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public interface ValidatorDescriptor {
+
+ /**
+ * <p class="changed_added_4_0">
+ * Returns JSF {@link javax.faces.validator.Validator} implementation class or JSR-303 annotation class.
+ * </p>
+ *
+ * @return
+ */
+ Class<?> getValidatorClass();
+
+ /**
+ * <p class="changed_added_4_0">
+ * Concrete validator parameters
+ * </p>
+ *
+ * @return non null map with validator instance parameters.
+ */
+ Map<String, Object> getValidatorParameters();
+
+ /**
+ * <p class="changed_added_4_0">
+ * Localized validator message
+ * </p>
+ *
+ * @return
+ */
+ String getMessage();
+}
Property changes on: branches/RF-8742/ui/validator/impl/src/main/java/org/richfaces/validator/ValidatorDescriptor.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Deleted: branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/AjaxBehaviorWrapper.java
===================================================================
--- branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/AjaxBehaviorWrapper.java 2010-10-14 16:22:29 UTC (rev 19573)
+++ branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/AjaxBehaviorWrapper.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -1,17 +0,0 @@
-package org.richfaces.component.behavior;
-
-import javax.faces.component.behavior.ClientBehaviorBase;
-import javax.faces.component.behavior.ClientBehaviorContext;
-
-public class AjaxBehaviorWrapper extends ClientBehaviorBase {
-
- public AjaxBehaviorWrapper() {
- super();
- }
-
- public String getAjaxScript(ClientBehaviorContext context) {
- // TODO Auto-generated method stub
- return null;
- }
-
-}
\ No newline at end of file
Modified: branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorBehavior.java
===================================================================
--- branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorBehavior.java 2010-10-14 16:22:29 UTC (rev 19573)
+++ branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorBehavior.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -6,6 +6,8 @@
import javax.faces.component.behavior.ClientBehaviorContext;
import javax.faces.convert.Converter;
+import org.richfaces.validator.ValidatorDescriptor;
+
/**
* <p class="changed_added_4_0">Interface for JSF Behavior that creates scripts for client-side validation</p>
* @author asmirnov(a)exadel.com
@@ -38,5 +40,9 @@
* @return
*/
Collection<ValidatorDescriptor> getValidators(ClientBehaviorContext context);
+
+ Class<?>[] getGroups();
+
+ void setGroups(Class<?> ...groups);
}
\ No newline at end of file
Modified: branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java
===================================================================
--- branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java 2010-10-14 16:22:29 UTC (rev 19573)
+++ branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -22,24 +22,34 @@
*/
package org.richfaces.component.behavior;
+import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
+import javax.el.ValueExpression;
import javax.faces.FacesException;
+import javax.faces.application.Application;
import javax.faces.component.ActionSource;
import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
import javax.faces.component.behavior.AjaxBehavior;
import javax.faces.component.behavior.ClientBehaviorContext;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.render.ClientBehaviorRenderer;
import javax.faces.render.RenderKit;
+import javax.faces.validator.Validator;
+import org.richfaces.application.ServiceTracker;
import org.richfaces.log.Logger;
import org.richfaces.log.RichfacesLogger;
import org.richfaces.renderkit.html.ClientValidatorRenderer;
import org.richfaces.renderkit.html.FormClientValidatorRenderer;
+import org.richfaces.validator.BeanValidatorService;
+import org.richfaces.validator.FacesValidatorService;
+import org.richfaces.validator.ValidatorDescriptor;
+import com.google.common.collect.Lists;
+
/**
* <p class="changed_added_4_0">
* </p>
@@ -47,19 +57,21 @@
* @author asmirnov(a)exadel.com
*
*/
-public class ClientValidatorImpl extends AjaxBehaviorWrapper implements ClientValidatorBehavior {
+public class ClientValidatorImpl extends AjaxBehavior implements ClientValidatorBehavior {
+ private static final String VALUE = "value";
+
private static final Logger LOG = RichfacesLogger.COMPONENTS.getLogger();
-
- private AjaxBehavior ajaxBehavior;
+ private Class<?>[] groups;
+
@Override
public String getScript(ClientBehaviorContext behaviorContext) {
if (behaviorContext.getComponent() instanceof EditableValueHolder) {
return super.getScript(behaviorContext);
} else if (behaviorContext.getComponent() instanceof ActionSource) {
- ClientBehaviorRenderer renderer =
- getRenderer(behaviorContext.getFacesContext(), FormClientValidatorRenderer.RENDERER_TYPE);
+ ClientBehaviorRenderer renderer = getRenderer(behaviorContext.getFacesContext(),
+ FormClientValidatorRenderer.RENDERER_TYPE);
return renderer.getScript(behaviorContext, this);
} else {
throw new FacesException("Invalid target for client-side validator behavior");
@@ -71,6 +83,18 @@
return ClientValidatorRenderer.RENDERER_TYPE;
}
+ @Override
+ public void decode(FacesContext context, UIComponent component) {
+ if (null == context || null == component) {
+ throw new NullPointerException();
+ }
+ ClientBehaviorRenderer renderer = getRenderer(context, AjaxBehavior.BEHAVIOR_ID);
+ if (null != renderer) {
+ renderer.decode(context, component, this);
+ // TODO - setup phase and render area to rerender.
+ }
+ }
+
/**
* <p class="changed_added_4_0">
* Look up for {@link ClientBehaviorRenderer} instence
@@ -100,7 +124,6 @@
return renderer;
}
-
/*
* (non-Javadoc)
*
@@ -108,7 +131,30 @@
* ClientBehaviorContext)
*/
public Converter getConverter(ClientBehaviorContext context) throws ConverterNotFoundException {
- return null;
+ UIComponent component = context.getComponent();
+ if (component instanceof EditableValueHolder) {
+ EditableValueHolder input = (EditableValueHolder) component;
+ Converter converter = input.getConverter();
+ if (null == converter) {
+ Class<?> valueType;
+ ValueExpression valueExpression = component.getValueExpression(VALUE);
+ if (null != valueExpression) {
+ FacesContext facesContext = context.getFacesContext();
+ valueType = valueExpression.getType(facesContext.getELContext());
+ if (valueType != null && valueType != Object.class) {
+ Application application = facesContext.getApplication();
+ converter = application.createConverter(valueType);
+ if (null == converter && valueType != String.class) {
+ throw new ConverterNotFoundException("No converter registered for type "
+ + valueType.getName());
+ }
+ }
+ }
+ }
+ return converter;
+ } else {
+ throw new ConverterNotFoundException("Component does not implement EditableValueHolder" + component);
+ }
}
/*
@@ -118,6 +164,96 @@
* ClientBehaviorContext)
*/
public Collection<ValidatorDescriptor> getValidators(ClientBehaviorContext context) {
- return Collections.emptySet();
+ UIComponent component = context.getComponent();
+ if (component instanceof EditableValueHolder) {
+ ArrayList<ValidatorDescriptor> validators = Lists.newArrayList();
+ EditableValueHolder input = (EditableValueHolder) component;
+ Validator[] facesValidators = input.getValidators();
+ FacesContext facesContext = context.getFacesContext();
+ if (facesValidators.length > 0) {
+ FacesValidatorService facesValidatorService = ServiceTracker.getService(facesContext,
+ FacesValidatorService.class);
+ for (Validator validator : facesValidators) {
+ validators.add(facesValidatorService.getValidatorDescription(facesContext, validator));
+ }
+ }
+ ValueExpression valueExpression = component.getValueExpression(VALUE);
+ if (null != valueExpression) {
+ BeanValidatorService beanValidatorService = ServiceTracker.getService(facesContext,
+ BeanValidatorService.class);
+ validators.addAll(beanValidatorService.getConstrains(facesContext, valueExpression, getGroups()));
+ }
+ return validators;
+ } else {
+ throw new FacesException("Component " + component.getClass().getName()
+ + " does not implement EditableValueHolder interface");
+ }
}
+
+ public Class<?>[] getGroups() {
+ if (groups != null) {
+ return groups;
+ }
+ ValueExpression expression = getValueExpression("groups");
+ if (expression != null) {
+ FacesContext ctx = FacesContext.getCurrentInstance();
+ return (Class<?>[]) expression.getValue(ctx.getELContext());
+ }
+ return null;
+ }
+
+ public void setGroups(Class<?>... groups) {
+ this.groups = groups;
+ clearInitialState();
+ }
+
+ public String getAjaxScript(ClientBehaviorContext context) {
+ return getRenderer(context.getFacesContext(), BEHAVIOR_ID).getScript(context, this);
+ }
+
+ @Override
+ public Object saveState(FacesContext context) {
+
+ if (context == null) {
+ throw new NullPointerException();
+ }
+ Object[] values;
+
+ Object superState = super.saveState(context);
+
+ if (initialStateMarked()) {
+ if (superState == null) {
+ values = null;
+ } else {
+ values = new Object[] { superState };
+ }
+ } else {
+ values = new Object[2];
+
+ values[0] = superState;
+ values[1] = groups;
+ }
+
+ return values;
+ }
+
+ @Override
+ public void restoreState(FacesContext context, Object state) {
+
+ if (context == null) {
+ throw new NullPointerException();
+ }
+ if (state != null) {
+
+ Object[] values = (Object[]) state;
+ super.restoreState(context, values[0]);
+
+ if (values.length != 1) {
+ groups = (Class<?>[]) values[1];
+ // If we saved state last time, save state again next time.
+ clearInitialState();
+ }
+ }
+ }
+
}
Deleted: branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ValidatorDescriptor.java
===================================================================
--- branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ValidatorDescriptor.java 2010-10-14 16:22:29 UTC (rev 19573)
+++ branches/RF-8742/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ValidatorDescriptor.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -1,42 +0,0 @@
-package org.richfaces.component.behavior;
-
-import java.util.Map;
-
-/**
- * <p class="changed_added_4_0">
- * Inmlementations of this interface describe JSF or JSR-303 validators. Because JSF supports 2 types of validators,
- * this interface unifies access to them.
- * </p>
- *
- * @author asmirnov(a)exadel.com
- *
- */
-public interface ValidatorDescriptor {
-
- /**
- * <p class="changed_added_4_0">
- * Returns JSF {@link javax.faces.validator.Validator} implementation class or JSR-303 annotation class.
- * </p>
- *
- * @return
- */
- Class<?> getValidatorClass();
-
- /**
- * <p class="changed_added_4_0">
- * Concrete validator parameters
- * </p>
- *
- * @return non null map with validator instance parameters.
- */
- Map<String, Object> getValidatorParameters();
-
- /**
- * <p class="changed_added_4_0">
- * Localized validator message
- * </p>
- *
- * @return
- */
- String getMessage();
-}
Modified: branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetConverterTest.java
===================================================================
--- branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetConverterTest.java 2010-10-14 16:22:29 UTC (rev 19573)
+++ branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetConverterTest.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -1,6 +1,7 @@
package org.richfaces.component.behavior;
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.*;
+import static org.easymock.EasyMock.expect;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
import javax.faces.convert.Converter;
import javax.faces.convert.NumberConverter;
@@ -63,6 +64,7 @@
expect(input.getConverter()).andReturn(null);
expect(input.getValueExpression("value")).andReturn(expression);
expect((Class)(expression.getType(environment.getElContext()))).andReturn(String.class);
+ expect(environment.getApplication().createConverter(String.class)).andReturn(null);
checkConverter(null);
}
Modified: branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetValidatorTest.java
===================================================================
--- branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetValidatorTest.java 2010-10-14 16:22:29 UTC (rev 19573)
+++ branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorGetValidatorTest.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -1,51 +1,147 @@
package org.richfaces.component.behavior;
+
+import static org.easymock.EasyMock.expect;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Collection;
+
+import javax.el.ValueExpression;
import javax.faces.validator.Validator;
+import javax.validation.groups.Default;
import org.jboss.test.faces.mock.Mock;
import org.jboss.test.faces.mock.MockTestRunner;
+import org.jboss.test.faces.mock.Stub;
+import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.richfaces.application.ServiceTracker;
+import org.richfaces.application.ServicesFactory;
+import org.richfaces.validator.BeanValidatorService;
+import org.richfaces.validator.FacesValidatorService;
+import org.richfaces.validator.ValidatorDescriptor;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
/**
- * <p class="changed_added_4_0">This class tests client validator behavior.
- * as it described at https://community.jboss.org/wiki/ClientSideValidation # Server-side rendering algorithm</p>
+ * <p class="changed_added_4_0">
+ * This class tests client validator behavior. as it described at https://community.jboss.org/wiki/ClientSideValidation
+ * # Server-side rendering algorithm
+ * </p>
+ *
* @author asmirnov(a)exadel.com
- *
+ *
*/
@RunWith(MockTestRunner.class)
public class BehaviorGetValidatorTest extends BehaviorTestBase {
-
+ private static final String VALIDATION_ERROR = "Validation Error";
+
+ private static final Class<?>[] DEFAULT_GROUP = { Default.class };
+
@Mock
private Validator validator;
+
+ @Mock
+ private ValidatorDescriptor beanValidatorDescriptor;
+
+ @Mock
+ private BeanValidatorService validatorService;
+
+ @Mock
+ private FacesValidatorService facesValidatorService;
+
+ @Stub
+ private ServicesFactory factory;
+
+ @Stub
+ private ValueExpression expression;
+
+ @Before
+ public void setupService() {
+ expect(factory.getInstance(BeanValidatorService.class)).andStubReturn(validatorService);
+ expect(factory.getInstance(FacesValidatorService.class)).andStubReturn(facesValidatorService);
+ ServiceTracker.setFactory(factory);
+ setupBehaviorContext(input);
+ behavior.setGroups(DEFAULT_GROUP);
+ expect(input.getValueExpression("value")).andStubReturn(expression);
+ }
+
+ @After
+ public void releaseService() {
+ ServiceTracker.release();
+ }
+
/**
- * <p class="changed_added_4_0">Component does not define any validators.</p>
+ * <p class="changed_added_4_0">
+ * Component does not define any validators.
+ * </p>
+ *
* @throws Exception
*/
@Test
public void testEmptyValidators() throws Exception {
- setupComponentValidator(null);
- setupBeanValidator(null);
- checkValidator();
+ setupComponentValidator();
+ setupBeanValidator();
+ assertTrue(checkValidator().isEmpty());
+ controller.verify();
}
- private void setupComponentValidator(Validator validator) {
- // TODO Auto-generated method stub
-
+ private Collection<ValidatorDescriptor> checkValidator() {
+ controller.replay();
+ Collection<ValidatorDescriptor> validators = behavior.getValidators(behaviorContext);
+ // controller.verify();
+ return validators;
}
+ private void setupBeanValidator(ValidatorDescriptor... validators) {
+ expect(validatorService.getConstrains(environment.getFacesContext(), expression, DEFAULT_GROUP)).andStubReturn(
+ Lists.newArrayList(validators));
+
+ }
+
+ private void setupComponentValidator(Validator... validators) {
+ expect(input.getValidators()).andStubReturn(validators);
+ for (Validator validator : validators) {
+ ValidatorDescriptor validatorDescriptor = environment.createMock(ValidatorDescriptor.class);
+ expect((Class) validatorDescriptor.getValidatorClass()).andStubReturn(validator.getClass());
+ expect(validatorDescriptor.getMessage()).andStubReturn(VALIDATION_ERROR);
+ expect(facesValidatorService.getValidatorDescription(environment.getFacesContext(), validator))
+ .andStubReturn(validatorDescriptor);
+ }
+ }
+
/**
- * <p class="changed_added_4_0">Component defines JSF validator only.</p>
+ * <p class="changed_added_4_0">
+ * Component defines JSF validator only.
+ * </p>
+ *
* @throws Exception
*/
@Test
public void testComponentValidator() throws Exception {
-
+ setupComponentValidator(validator);
+ setupBeanValidator();
+ Collection<ValidatorDescriptor> validators = checkValidator();
+ assertEquals(1, validators.size());
+ ValidatorDescriptor validatorDescriptor = Iterables.getOnlyElement(validators);
+ assertSame(validator.getClass(), validatorDescriptor.getValidatorClass());
+ assertEquals(VALIDATION_ERROR, validatorDescriptor.getMessage());
+ controller.verify();
}
-
+
@Test
public void testBeanValidators() throws Exception {
-
+ setupComponentValidator();
+ setupBeanValidator(beanValidatorDescriptor);
+ Collection<ValidatorDescriptor> validators = checkValidator();
+ assertEquals(1, validators.size());
+ ValidatorDescriptor validatorDescriptor = Iterables.getOnlyElement(validators);
+ assertSame(beanValidatorDescriptor, validatorDescriptor);
+ controller.verify();
}
}
Modified: branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorTestBase.java
===================================================================
--- branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorTestBase.java 2010-10-14 16:22:29 UTC (rev 19573)
+++ branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/BehaviorTestBase.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -1,6 +1,6 @@
package org.richfaces.component.behavior;
-import static org.easymock.EasyMock.*;
+import static org.easymock.EasyMock.expect;
import javax.el.ValueExpression;
import javax.faces.component.UIComponent;
@@ -18,7 +18,7 @@
public class BehaviorTestBase {
@Mock()
- @Environment({ Feature.APPLICATION, Feature.RENDER_KIT })
+ @Environment({ Feature.APPLICATION, Feature.RENDER_KIT,Feature.EL_CONTEXT })
protected MockFacesEnvironment environment;
@Mock
protected UIInput input;
Modified: branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/GetScriptTest.java
===================================================================
--- branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/GetScriptTest.java 2010-10-14 16:22:29 UTC (rev 19573)
+++ branches/RF-8742/ui/validator/ui/src/test/java/org/richfaces/component/behavior/GetScriptTest.java 2010-10-14 21:35:43 UTC (rev 19574)
@@ -1,11 +1,12 @@
package org.richfaces.component.behavior;
-import static org.easymock.EasyMock.*;
-import static org.junit.Assert.*;
+import static org.easymock.EasyMock.expect;
+import static org.junit.Assert.assertEquals;
import javax.faces.FacesException;
import javax.faces.component.UICommand;
import javax.faces.component.UIComponent;
import javax.faces.component.UIOutput;
+import javax.faces.component.behavior.AjaxBehavior;
import javax.faces.component.behavior.ClientBehaviorContext;
import javax.faces.render.RenderKit;
@@ -65,12 +66,27 @@
testGetScriptDelegate(FormClientValidatorRenderer.RENDERER_TYPE, command);
}
+ @Test
+ public void testGetAjaxScript() throws Exception {
+ setupRenderer(AjaxBehavior.BEHAVIOR_ID);
+ ClientBehaviorContext clientBehaviorContext = setupBehaviorContext(input);
+ controller.replay();
+ String script = behavior.getAjaxScript(clientBehaviorContext);
+ controller.verify();
+ assertEquals(CLIENT_VALIDATION_FUNCTION,script);
+
+ }
private void testGetScriptDelegate(String rendererType, UIComponent component) {
+ setupRenderer(rendererType);
+ String script = getScript(component);// ajax-only validator.
+ assertEquals(CLIENT_VALIDATION_FUNCTION,script);
+ }
+
+
+ private void setupRenderer(String rendererType) {
RenderKit renderKit = environment.getRenderKit();
expect(renderKit.getClientBehaviorRenderer(rendererType)).andReturn(behaviorRenderer);
expect(behaviorRenderer.getScript(behaviorContext, behavior)).andReturn(CLIENT_VALIDATION_FUNCTION);
- String script = getScript(component);// ajax-only validator.
- assertEquals(CLIENT_VALIDATION_FUNCTION,script);
}
private String getScript(UIComponent component) {
13 years, 8 months
JBoss Rich Faces SVN: r19573 - trunk/examples/output-demo.
by richfaces-svn-commits@lists.jboss.org
Author: jbalunas(a)redhat.com
Date: 2010-10-14 12:22:29 -0400 (Thu, 14 Oct 2010)
New Revision: 19573
Modified:
trunk/examples/output-demo/pom.xml
Log:
Fixed Maven 3 warnings
Modified: trunk/examples/output-demo/pom.xml
===================================================================
--- trunk/examples/output-demo/pom.xml 2010-10-14 16:18:32 UTC (rev 19572)
+++ trunk/examples/output-demo/pom.xml 2010-10-14 16:22:29 UTC (rev 19573)
@@ -20,7 +20,7 @@
</properties>
<build>
- <finalName>${artifactId}-${project.version}</finalName>
+ <finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
13 years, 8 months
JBoss Rich Faces SVN: r19572 - trunk/examples/input-demo.
by richfaces-svn-commits@lists.jboss.org
Author: jbalunas(a)redhat.com
Date: 2010-10-14 12:18:32 -0400 (Thu, 14 Oct 2010)
New Revision: 19572
Modified:
trunk/examples/input-demo/pom.xml
Log:
fixed Maven 3 warnings
Modified: trunk/examples/input-demo/pom.xml
===================================================================
--- trunk/examples/input-demo/pom.xml 2010-10-14 16:17:37 UTC (rev 19571)
+++ trunk/examples/input-demo/pom.xml 2010-10-14 16:18:32 UTC (rev 19572)
@@ -17,7 +17,7 @@
<packaging>war</packaging>
<build>
- <finalName>${artifactId}-${project.version}</finalName>
+ <finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
13 years, 8 months
JBoss Rich Faces SVN: r19571 - in trunk/ui/dist: richfaces-components-ui and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: jbalunas(a)redhat.com
Date: 2010-10-14 12:17:37 -0400 (Thu, 14 Oct 2010)
New Revision: 19571
Modified:
trunk/ui/dist/richfaces-components-api/pom.xml
trunk/ui/dist/richfaces-components-ui/pom.xml
Log:
Fixed maven 3 warnings
Modified: trunk/ui/dist/richfaces-components-api/pom.xml
===================================================================
--- trunk/ui/dist/richfaces-components-api/pom.xml 2010-10-14 14:13:32 UTC (rev 19570)
+++ trunk/ui/dist/richfaces-components-api/pom.xml 2010-10-14 16:17:37 UTC (rev 19571)
@@ -66,10 +66,6 @@
<groupId>org.richfaces.core</groupId>
<artifactId>richfaces-core-api</artifactId>
</dependency>
- <dependency>
- <groupId>javax.el</groupId>
- <artifactId>el-api</artifactId>
- </dependency>
<dependency>
<groupId>javax.servlet</groupId>
Modified: trunk/ui/dist/richfaces-components-ui/pom.xml
===================================================================
--- trunk/ui/dist/richfaces-components-ui/pom.xml 2010-10-14 14:13:32 UTC (rev 19570)
+++ trunk/ui/dist/richfaces-components-ui/pom.xml 2010-10-14 16:17:37 UTC (rev 19571)
@@ -78,10 +78,6 @@
<groupId>org.richfaces.core</groupId>
<artifactId>richfaces-core-impl</artifactId>
</dependency>
- <dependency>
- <groupId>javax.el</groupId>
- <artifactId>el-api</artifactId>
- </dependency>
<dependency>
<groupId>javax.servlet</groupId>
13 years, 8 months
JBoss Rich Faces SVN: r19570 - sandbox/trunk/prototypes/calendar.
by richfaces-svn-commits@lists.jboss.org
Author: pyaschenko
Date: 2010-10-14 10:13:32 -0400 (Thu, 14 Oct 2010)
New Revision: 19570
Modified:
sandbox/trunk/prototypes/calendar/calendar.js
Log:
https://jira.jboss.org/browse/RF-9152
https://jira.jboss.org/browse/RF-9168
small fix
Modified: sandbox/trunk/prototypes/calendar/calendar.js
===================================================================
--- sandbox/trunk/prototypes/calendar/calendar.js 2010-10-14 12:50:30 UTC (rev 19569)
+++ sandbox/trunk/prototypes/calendar/calendar.js 2010-10-14 14:13:32 UTC (rev 19570)
@@ -1133,8 +1133,7 @@
{
if (element_id)
{
- var e = $(rf.getDomElement(element_id)).stop(true, true);;
- e.css('backgroundColor', '');
+ var e = $(rf.getDomElement(element_id)).stop(true, true);
if (className) e.removeClass(className);
if (className1) e.addClass(className1);
}
13 years, 8 months
JBoss Rich Faces SVN: r19569 - sandbox/trunk/prototypes/calendar.
by richfaces-svn-commits@lists.jboss.org
Author: pyaschenko
Date: 2010-10-14 08:50:30 -0400 (Thu, 14 Oct 2010)
New Revision: 19569
Added:
sandbox/trunk/prototypes/calendar/jquery.effects.core.js
sandbox/trunk/prototypes/calendar/jquery.effects.highlight.js
Modified:
sandbox/trunk/prototypes/calendar/calendar.js
sandbox/trunk/prototypes/calendar/test.html
Log:
https://jira.jboss.org/browse/RF-9152
https://jira.jboss.org/browse/RF-9168
effects changed to jQuery effects
Modified: sandbox/trunk/prototypes/calendar/calendar.js
===================================================================
--- sandbox/trunk/prototypes/calendar/calendar.js 2010-10-14 11:51:14 UTC (rev 19568)
+++ sandbox/trunk/prototypes/calendar/calendar.js 2010-10-14 12:50:30 UTC (rev 19569)
@@ -347,12 +347,12 @@
this.params.todayControlMode = this.params.todayControlMode.toLowerCase();
// time
- this.setTimeProperties(); // TODO: function
+ this.setTimeProperties();
this.customDayListMarkup = (this.params.dayListMarkup!=CalendarView.dayList);
this.currentDate = this.params.currentDate ? this.params.currentDate : (this.params.selectedDate ? this.params.selectedDate : new Date());
- this.currentDate.setDate(1); // TODO: function
+ this.currentDate.setDate(1);
this.selectedDate = this.params.selectedDate;
this.todayDate = new Date();
@@ -1129,16 +1129,11 @@
return $(element).css('background-color');
},
- clearEffect: function (element_id, effect, className, className1)
+ clearEffect: function (element_id, className, className1)
{
- if (effect)
- {
- effect.cancel();
- effect=null;
- }
if (element_id)
{
- var e = $(rf.getDomElement(element_id));
+ var e = $(rf.getDomElement(element_id)).stop(true, true);;
e.css('backgroundColor', '');
if (className) e.removeClass(className);
if (className1) e.addClass(className1);
@@ -1236,8 +1231,8 @@
var boundaryDatesModeFlag = (this.params.boundaryDatesMode == "scroll" || this.params.boundaryDatesMode == "select");
- this.todayCellId = this.clearEffect(this.todayCellId, this.highlightEffect);
- this.selectedDateCellId = this.clearEffect(this.selectedDateCellId, this.highlightEffect2);
+ this.todayCellId = this.clearEffect(this.todayCellId);
+ this.selectedDateCellId = this.clearEffect(this.selectedDateCellId);
//var _d=new Date();
var obj = rf.getDomElement(this.WEEKNUMBER_BAR_ID+"1");
@@ -1479,12 +1474,10 @@
if (this.isVisible && this.todayCellId && !noHighlight)
{
- this.clearEffect(this.todayCellId, this.highlightEffect);
+ this.clearEffect(this.todayCellId);
if (this.todayCellColor!="transparent")
{
- // TODO: add jquery effects
- /*this.highlightEffect = new Effect.Highlight($(this.todayCellId), {startcolor: this.todayCellColor, duration:0.3, transition: Effect.Transitions.sinoidal,
- afterFinish: this.onHighlightFinish});*/
+ $(rf.getDomElement(this.todayCellId)).effect("highlight", {easing:'easeInOutSine', color: this.todayCellColor}, 300);
}
}
}
@@ -1517,11 +1510,6 @@
}
},
- onHighlightFinish: function (object)
- {
- object.element.style['backgroundColor'] = '';
- },
-
selectDate: function(date, noUpdate, eventData) {
if (!eventData)
@@ -1565,7 +1553,7 @@
// find cell and change style class
var e = $(rf.getDomElement(this.DATE_ELEMENT_ID+(this.firstDateIndex + this.selectedDate.getDate()-1)));
- this.clearEffect(this.selectedDateCellId, this.highlightEffect2, "rich-calendar-select", (this.params.disabled || this.params.readonly ? null : "rich-calendar-btn"));
+ this.clearEffect(this.selectedDateCellId, "rich-calendar-select", (this.params.disabled || this.params.readonly ? null : "rich-calendar-btn"));
this.selectedDateCellId = e.attr('id');
this.selectedDateCellColor = this.getCellBackgroundColor(e);
@@ -1596,7 +1584,7 @@
{
this.selectedDate = null;
- this.clearEffect(this.selectedDateCellId, this.highlightEffect2, "rich-calendar-select", (this.params.disabled || this.params.readonly ? null : "rich-calendar-btn"));
+ this.clearEffect(this.selectedDateCellId, "rich-calendar-select", (this.params.disabled || this.params.readonly ? null : "rich-calendar-btn"));
if (this.selectedDateCellId)
{
@@ -1638,7 +1626,7 @@
this.selectedDate = null;
this.invokeEvent("dateselected", null, null, null);
- this.selectedDateCellId = this.clearEffect(this.selectedDateCellId, this.highlightEffect2, "rich-calendar-select", (this.params.disabled || this.params.readonly ? null : "rich-calendar-btn"));
+ this.selectedDateCellId = this.clearEffect(this.selectedDateCellId, "rich-calendar-select", (this.params.disabled || this.params.readonly ? null : "rich-calendar-btn"));
this.renderHF();
if (!this.params.showApplyButton)
@@ -1663,12 +1651,11 @@
// highlight Selected Date
if (this.isVisible && this.selectedDateCellId)
{
- this.clearEffect(this.selectedDateCellId, this.highlightEffect2);
+ this.clearEffect(this.selectedDateCellId);
if (this.selectedDateCellColor!="transparent")
{
- // TODO: add jquery effects
- /*this.highlightEffect2 = new Effect.Highlight($(this.selectedDateCellId), {startcolor: this.selectedDateCellColor, duration:0.3, transition: Effect.Transitions.sinoidal,
- afterFinish: this.onHighlightFinish});*/
+ $(rf.getDomElement(this.selectedDateCellId)).effect("highlight", {easing:'easeInOutSine', color: this.selectedDateCellColor}, 300);
+
}
}
}
Added: sandbox/trunk/prototypes/calendar/jquery.effects.core.js
===================================================================
--- sandbox/trunk/prototypes/calendar/jquery.effects.core.js (rev 0)
+++ sandbox/trunk/prototypes/calendar/jquery.effects.core.js 2010-10-14 12:50:30 UTC (rev 19569)
@@ -0,0 +1,714 @@
+/*
+ * jQuery UI Effects 1.8.5
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */
+;jQuery.effects || (function($, undefined) {
+
+$.effects = {};
+
+
+
+/******************************************************************************/
+/****************************** COLOR ANIMATIONS ******************************/
+/******************************************************************************/
+
+// override the animation for color styles
+$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor',
+ 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'],
+function(i, attr) {
+ $.fx.step[attr] = function(fx) {
+ if (!fx.colorInit) {
+ fx.start = getColor(fx.elem, attr);
+ fx.end = getRGB(fx.end);
+ fx.colorInit = true;
+ }
+
+ fx.elem.style[attr] = 'rgb(' +
+ Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' +
+ Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' +
+ Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')';
+ };
+});
+
+// Color Conversion functions from highlightFade
+// By Blair Mitchelmore
+// http://jquery.offput.ca/highlightFade/
+
+// Parse strings looking for color tuples [255,255,255]
+function getRGB(color) {
+ var result;
+
+ // Check if we're already dealing with an array of colors
+ if ( color && color.constructor == Array && color.length == 3 )
+ return color;
+
+ // Look for rgb(num,num,num)
+ if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
+ return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
+
+ // Look for rgb(num%,num%,num%)
+ if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
+ return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
+
+ // Look for #a0b1c2
+ if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
+ return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
+
+ // Look for #fff
+ if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
+ return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
+
+ // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
+ if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
+ return colors['transparent'];
+
+ // Otherwise, we're most likely dealing with a named color
+ return colors[$.trim(color).toLowerCase()];
+}
+
+function getColor(elem, attr) {
+ var color;
+
+ do {
+ color = $.curCSS(elem, attr);
+
+ // Keep going until we find an element that has color, or we hit the body
+ if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
+ break;
+
+ attr = "backgroundColor";
+ } while ( elem = elem.parentNode );
+
+ return getRGB(color);
+};
+
+// Some named colors to work with
+// From Interface by Stefan Petre
+// http://interface.eyecon.ro/
+
+var colors = {
+ aqua:[0,255,255],
+ azure:[240,255,255],
+ beige:[245,245,220],
+ black:[0,0,0],
+ blue:[0,0,255],
+ brown:[165,42,42],
+ cyan:[0,255,255],
+ darkblue:[0,0,139],
+ darkcyan:[0,139,139],
+ darkgrey:[169,169,169],
+ darkgreen:[0,100,0],
+ darkkhaki:[189,183,107],
+ darkmagenta:[139,0,139],
+ darkolivegreen:[85,107,47],
+ darkorange:[255,140,0],
+ darkorchid:[153,50,204],
+ darkred:[139,0,0],
+ darksalmon:[233,150,122],
+ darkviolet:[148,0,211],
+ fuchsia:[255,0,255],
+ gold:[255,215,0],
+ green:[0,128,0],
+ indigo:[75,0,130],
+ khaki:[240,230,140],
+ lightblue:[173,216,230],
+ lightcyan:[224,255,255],
+ lightgreen:[144,238,144],
+ lightgrey:[211,211,211],
+ lightpink:[255,182,193],
+ lightyellow:[255,255,224],
+ lime:[0,255,0],
+ magenta:[255,0,255],
+ maroon:[128,0,0],
+ navy:[0,0,128],
+ olive:[128,128,0],
+ orange:[255,165,0],
+ pink:[255,192,203],
+ purple:[128,0,128],
+ violet:[128,0,128],
+ red:[255,0,0],
+ silver:[192,192,192],
+ white:[255,255,255],
+ yellow:[255,255,0],
+ transparent: [255,255,255]
+};
+
+
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+
+var classAnimationActions = ['add', 'remove', 'toggle'],
+ shorthandStyles = {
+ border: 1,
+ borderBottom: 1,
+ borderColor: 1,
+ borderLeft: 1,
+ borderRight: 1,
+ borderTop: 1,
+ borderWidth: 1,
+ margin: 1,
+ padding: 1
+ };
+
+function getElementStyles() {
+ var style = document.defaultView
+ ? document.defaultView.getComputedStyle(this, null)
+ : this.currentStyle,
+ newStyle = {},
+ key,
+ camelCase;
+
+ // webkit enumerates style porperties
+ if (style && style.length && style[0] && style[style[0]]) {
+ var len = style.length;
+ while (len--) {
+ key = style[len];
+ if (typeof style[key] == 'string') {
+ camelCase = key.replace(/\-(\w)/g, function(all, letter){
+ return letter.toUpperCase();
+ });
+ newStyle[camelCase] = style[key];
+ }
+ }
+ } else {
+ for (key in style) {
+ if (typeof style[key] === 'string') {
+ newStyle[key] = style[key];
+ }
+ }
+ }
+
+ return newStyle;
+}
+
+function filterStyles(styles) {
+ var name, value;
+ for (name in styles) {
+ value = styles[name];
+ if (
+ // ignore null and undefined values
+ value == null ||
+ // ignore functions (when does this occur?)
+ $.isFunction(value) ||
+ // shorthand styles that need to be expanded
+ name in shorthandStyles ||
+ // ignore scrollbars (break in IE)
+ (/scrollbar/).test(name) ||
+
+ // only colors or values that can be converted to numbers
+ (!(/color/i).test(name) && isNaN(parseFloat(value)))
+ ) {
+ delete styles[name];
+ }
+ }
+
+ return styles;
+}
+
+function styleDifference(oldStyle, newStyle) {
+ var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459
+ name;
+
+ for (name in newStyle) {
+ if (oldStyle[name] != newStyle[name]) {
+ diff[name] = newStyle[name];
+ }
+ }
+
+ return diff;
+}
+
+$.effects.animateClass = function(value, duration, easing, callback) {
+ if ($.isFunction(easing)) {
+ callback = easing;
+ easing = null;
+ }
+
+ return this.each(function() {
+
+ var that = $(this),
+ originalStyleAttr = that.attr('style') || ' ',
+ originalStyle = filterStyles(getElementStyles.call(this)),
+ newStyle,
+ className = that.attr('className');
+
+ $.each(classAnimationActions, function(i, action) {
+ if (value[action]) {
+ that[action + 'Class'](value[action]);
+ }
+ });
+ newStyle = filterStyles(getElementStyles.call(this));
+ that.attr('className', className);
+
+ that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() {
+ $.each(classAnimationActions, function(i, action) {
+ if (value[action]) { that[action + 'Class'](value[action]); }
+ });
+ // work around bug in IE by clearing the cssText before setting it
+ if (typeof that.attr('style') == 'object') {
+ that.attr('style').cssText = '';
+ that.attr('style').cssText = originalStyleAttr;
+ } else {
+ that.attr('style', originalStyleAttr);
+ }
+ if (callback) { callback.apply(this, arguments); }
+ });
+ });
+};
+
+$.fn.extend({
+ _addClass: $.fn.addClass,
+ addClass: function(classNames, speed, easing, callback) {
+ return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
+ },
+
+ _removeClass: $.fn.removeClass,
+ removeClass: function(classNames,speed,easing,callback) {
+ return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
+ },
+
+ _toggleClass: $.fn.toggleClass,
+ toggleClass: function(classNames, force, speed, easing, callback) {
+ if ( typeof force == "boolean" || force === undefined ) {
+ if ( !speed ) {
+ // without speed parameter;
+ return this._toggleClass(classNames, force);
+ } else {
+ return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]);
+ }
+ } else {
+ // without switch parameter;
+ return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]);
+ }
+ },
+
+ switchClass: function(remove,add,speed,easing,callback) {
+ return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
+ }
+});
+
+
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+$.extend($.effects, {
+ version: "1.8.5",
+
+ // Saves a set of properties in a data storage
+ save: function(element, set) {
+ for(var i=0; i < set.length; i++) {
+ if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
+ }
+ },
+
+ // Restores a set of previously saved properties from a data storage
+ restore: function(element, set) {
+ for(var i=0; i < set.length; i++) {
+ if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
+ }
+ },
+
+ setMode: function(el, mode) {
+ if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
+ return mode;
+ },
+
+ getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
+ // this should be a little more flexible in the future to handle a string & hash
+ var y, x;
+ switch (origin[0]) {
+ case 'top': y = 0; break;
+ case 'middle': y = 0.5; break;
+ case 'bottom': y = 1; break;
+ default: y = origin[0] / original.height;
+ };
+ switch (origin[1]) {
+ case 'left': x = 0; break;
+ case 'center': x = 0.5; break;
+ case 'right': x = 1; break;
+ default: x = origin[1] / original.width;
+ };
+ return {x: x, y: y};
+ },
+
+ // Wraps the element around a wrapper that copies position properties
+ createWrapper: function(element) {
+
+ // if the element is already wrapped, return it
+ if (element.parent().is('.ui-effects-wrapper')) {
+ return element.parent();
+ }
+
+ // wrap the element
+ var props = {
+ width: element.outerWidth(true),
+ height: element.outerHeight(true),
+ 'float': element.css('float')
+ },
+ wrapper = $('<div></div>')
+ .addClass('ui-effects-wrapper')
+ .css({
+ fontSize: '100%',
+ background: 'transparent',
+ border: 'none',
+ margin: 0,
+ padding: 0
+ });
+
+ element.wrap(wrapper);
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element
+
+ // transfer positioning properties to the wrapper
+ if (element.css('position') == 'static') {
+ wrapper.css({ position: 'relative' });
+ element.css({ position: 'relative' });
+ } else {
+ $.extend(props, {
+ position: element.css('position'),
+ zIndex: element.css('z-index')
+ });
+ $.each(['top', 'left', 'bottom', 'right'], function(i, pos) {
+ props[pos] = element.css(pos);
+ if (isNaN(parseInt(props[pos], 10))) {
+ props[pos] = 'auto';
+ }
+ });
+ element.css({position: 'relative', top: 0, left: 0 });
+ }
+
+ return wrapper.css(props).show();
+ },
+
+ removeWrapper: function(element) {
+ if (element.parent().is('.ui-effects-wrapper'))
+ return element.parent().replaceWith(element);
+ return element;
+ },
+
+ setTransition: function(element, list, factor, value) {
+ value = value || {};
+ $.each(list, function(i, x){
+ unit = element.cssUnit(x);
+ if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
+ });
+ return value;
+ }
+});
+
+
+function _normalizeArguments(effect, options, speed, callback) {
+ // shift params for method overloading
+ if (typeof effect == 'object') {
+ callback = options;
+ speed = null;
+ options = effect;
+ effect = options.effect;
+ }
+ if ($.isFunction(options)) {
+ callback = options;
+ speed = null;
+ options = {};
+ }
+ if (typeof options == 'number' || $.fx.speeds[options]) {
+ callback = speed;
+ speed = options;
+ options = {};
+ }
+ if ($.isFunction(speed)) {
+ callback = speed;
+ speed = null;
+ }
+
+ options = options || {};
+
+ speed = speed || options.duration;
+ speed = $.fx.off ? 0 : typeof speed == 'number'
+ ? speed : $.fx.speeds[speed] || $.fx.speeds._default;
+
+ callback = callback || options.complete;
+
+ return [effect, options, speed, callback];
+}
+
+$.fn.extend({
+ effect: function(effect, options, speed, callback) {
+ var args = _normalizeArguments.apply(this, arguments),
+ // TODO: make effects takes actual parameters instead of a hash
+ args2 = {
+ options: args[1],
+ duration: args[2],
+ callback: args[3]
+ },
+ effectMethod = $.effects[effect];
+
+ return effectMethod && !$.fx.off ? effectMethod.call(this, args2) : this;
+ },
+
+ _show: $.fn.show,
+ show: function(speed) {
+ if (!speed || typeof speed == 'number' || $.fx.speeds[speed] || !$.effects[speed] ) {
+ return this._show.apply(this, arguments);
+ } else {
+ var args = _normalizeArguments.apply(this, arguments);
+ args[1].mode = 'show';
+ return this.effect.apply(this, args);
+ }
+ },
+
+ _hide: $.fn.hide,
+ hide: function(speed) {
+ if (!speed || typeof speed == 'number' || $.fx.speeds[speed] || !$.effects[speed] ) {
+ return this._hide.apply(this, arguments);
+ } else {
+ var args = _normalizeArguments.apply(this, arguments);
+ args[1].mode = 'hide';
+ return this.effect.apply(this, args);
+ }
+ },
+
+ // jQuery core overloads toggle and creates _toggle
+ __toggle: $.fn.toggle,
+ toggle: function(speed) {
+ if (!speed || typeof speed == 'number' || $.fx.speeds[speed] || !$.effects[speed] ||
+ typeof speed == 'boolean' || $.isFunction(speed)) {
+ return this.__toggle.apply(this, arguments);
+ } else {
+ var args = _normalizeArguments.apply(this, arguments);
+ args[1].mode = 'toggle';
+ return this.effect.apply(this, args);
+ }
+ },
+
+ // helper functions
+ cssUnit: function(key) {
+ var style = this.css(key), val = [];
+ $.each( ['em','px','%','pt'], function(i, unit){
+ if(style.indexOf(unit) > 0)
+ val = [parseFloat(style), unit];
+ });
+ return val;
+ }
+});
+
+
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+/*
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+ *
+ * Uses the built in easing capabilities added In jQuery 1.1
+ * to offer multiple easing options
+ *
+ * TERMS OF USE - jQuery Easing
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright 2008 George McGinley Smith
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+*/
+
+// t: current time, b: begInnIng value, c: change In value, d: duration
+$.easing.jswing = $.easing.swing;
+
+$.extend($.easing,
+{
+ def: 'easeOutQuad',
+ swing: function (x, t, b, c, d) {
+ //alert($.easing.default);
+ return $.easing[$.easing.def](x, t, b, c, d);
+ },
+ easeInQuad: function (x, t, b, c, d) {
+ return c*(t/=d)*t + b;
+ },
+ easeOutQuad: function (x, t, b, c, d) {
+ return -c *(t/=d)*(t-2) + b;
+ },
+ easeInOutQuad: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t + b;
+ return -c/2 * ((--t)*(t-2) - 1) + b;
+ },
+ easeInCubic: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t + b;
+ },
+ easeOutCubic: function (x, t, b, c, d) {
+ return c*((t=t/d-1)*t*t + 1) + b;
+ },
+ easeInOutCubic: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t + b;
+ return c/2*((t-=2)*t*t + 2) + b;
+ },
+ easeInQuart: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t*t + b;
+ },
+ easeOutQuart: function (x, t, b, c, d) {
+ return -c * ((t=t/d-1)*t*t*t - 1) + b;
+ },
+ easeInOutQuart: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+ return -c/2 * ((t-=2)*t*t*t - 2) + b;
+ },
+ easeInQuint: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t*t*t + b;
+ },
+ easeOutQuint: function (x, t, b, c, d) {
+ return c*((t=t/d-1)*t*t*t*t + 1) + b;
+ },
+ easeInOutQuint: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+ return c/2*((t-=2)*t*t*t*t + 2) + b;
+ },
+ easeInSine: function (x, t, b, c, d) {
+ return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+ },
+ easeOutSine: function (x, t, b, c, d) {
+ return c * Math.sin(t/d * (Math.PI/2)) + b;
+ },
+ easeInOutSine: function (x, t, b, c, d) {
+ return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+ },
+ easeInExpo: function (x, t, b, c, d) {
+ return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+ },
+ easeOutExpo: function (x, t, b, c, d) {
+ return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+ },
+ easeInOutExpo: function (x, t, b, c, d) {
+ if (t==0) return b;
+ if (t==d) return b+c;
+ if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+ return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+ },
+ easeInCirc: function (x, t, b, c, d) {
+ return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
+ },
+ easeOutCirc: function (x, t, b, c, d) {
+ return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
+ },
+ easeInOutCirc: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+ return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
+ },
+ easeInElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+ },
+ easeOutElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
+ },
+ easeInOutElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+ return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
+ },
+ easeInBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ return c*(t/=d)*t*((s+1)*t - s) + b;
+ },
+ easeOutBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+ },
+ easeInOutBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+ return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+ },
+ easeInBounce: function (x, t, b, c, d) {
+ return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+ },
+ easeOutBounce: function (x, t, b, c, d) {
+ if ((t/=d) < (1/2.75)) {
+ return c*(7.5625*t*t) + b;
+ } else if (t < (2/2.75)) {
+ return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+ } else if (t < (2.5/2.75)) {
+ return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+ } else {
+ return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+ }
+ },
+ easeInOutBounce: function (x, t, b, c, d) {
+ if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
+ return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+ }
+});
+
+/*
+ *
+ * TERMS OF USE - EASING EQUATIONS
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright 2001 Robert Penner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+})(jQuery);
Added: sandbox/trunk/prototypes/calendar/jquery.effects.highlight.js
===================================================================
--- sandbox/trunk/prototypes/calendar/jquery.effects.highlight.js (rev 0)
+++ sandbox/trunk/prototypes/calendar/jquery.effects.highlight.js 2010-10-14 12:50:30 UTC (rev 19569)
@@ -0,0 +1,50 @@
+/*
+ * jQuery UI Effects Highlight 1.8.5
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function( $, undefined ) {
+
+$.effects.highlight = function(o) {
+ return this.queue(function() {
+ var elem = $(this),
+ props = ['backgroundImage', 'backgroundColor', 'opacity'],
+ mode = $.effects.setMode(elem, o.options.mode || 'show'),
+ animation = {
+ backgroundColor: elem.css('backgroundColor')
+ };
+
+ if (mode == 'hide') {
+ animation.opacity = 0;
+ }
+
+ $.effects.save(elem, props);
+ elem
+ .show()
+ .css({
+ backgroundImage: 'none',
+ backgroundColor: o.options.color || '#ffff99'
+ })
+ .animate(animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.options.easing,
+ complete: function() {
+ (mode == 'hide' && elem.hide());
+ $.effects.restore(elem, props);
+ (mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter'));
+ (o.callback && o.callback.apply(this, arguments));
+ elem.dequeue();
+ }
+ });
+ });
+};
+
+})(jQuery);
Modified: sandbox/trunk/prototypes/calendar/test.html
===================================================================
--- sandbox/trunk/prototypes/calendar/test.html 2010-10-14 11:51:14 UTC (rev 19568)
+++ sandbox/trunk/prototypes/calendar/test.html 2010-10-14 12:50:30 UTC (rev 19569)
@@ -6,6 +6,8 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test Page</title>
<script type="text/javascript" src="jquery.js"></script>
+ <script type="text/javascript" src="jquery.effects.core.js"></script>
+ <script type="text/javascript" src="jquery.effects.highlight.js"></script>
<script type="text/javascript" src="jquery.position.js"></script>
<script type="text/javascript" src="json-dom.js"></script>
<script type="text/javascript" src="richfaces.js"></script>
@@ -30,7 +32,7 @@
//<![CDATA[
RichFaces.ui.Calendar.addLocale('en_US', {'weekDayLabels':['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'] ,'weekDayLabelsShort':['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] ,'monthLabels':['January','February','March','April','May','June','July','August','September','October','November','December'] ,'monthLabelsShort':['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] ,'minDaysInFirstWeek':1,'firstWeekDay':0} );
new RichFaces.ui.Calendar('j_id354:j_id355',
- "en_US",{'showApplyButton':true,'style':'z\x2Dindex: 3; width:200px','currentDate':new Date(2010,9,8),'datePattern':'d/M/yy HH:mm','dayCellClass':'j_id354_j_id355DayCell'} ,{} ).load();
+ "en_US",{'todayControlMode':'scroll','showApplyButton':false,'style':'z\x2Dindex: 3; width:200px','currentDate':new Date(2010,9,8),'datePattern':'d/M/yy HH:mm','dayCellClass':'j_id354_j_id355DayCell'} ,{} ).load();
//]]>
</script></div></div>
</form>
13 years, 8 months
JBoss Rich Faces SVN: r19568 - sandbox/trunk/prototypes/calendar.
by richfaces-svn-commits@lists.jboss.org
Author: pyaschenko
Date: 2010-10-14 07:51:14 -0400 (Thu, 14 Oct 2010)
New Revision: 19568
Modified:
sandbox/trunk/prototypes/calendar/calendar.js
Log:
https://jira.jboss.org/browse/RF-9152
https://jira.jboss.org/browse/RF-9168
position fixing
Modified: sandbox/trunk/prototypes/calendar/calendar.js
===================================================================
--- sandbox/trunk/prototypes/calendar/calendar.js 2010-10-14 10:21:53 UTC (rev 19567)
+++ sandbox/trunk/prototypes/calendar/calendar.js 2010-10-14 11:51:14 UTC (rev 19568)
@@ -1689,7 +1689,8 @@
if (!elements.length) elements = [elements];
offset = offset || {left:0,top:0};
var width = jqe.outerWidth()+"px", height = jqe.outerHeight()+"px";
- var left = jqe.css("left")+offset.left+"px", top = jqe.css("top")+offset.top+"px";
+ var pos = jqe.position();
+ var left = Math.round(pos.left)+offset.left+"px", top = Math.round(pos.top)+offset.top+"px";
var element;
for (var i = 0; i<elements.length;i++) {
element = elements[i];
13 years, 8 months
JBoss Rich Faces SVN: r19567 - sandbox/trunk/prototypes/calendar.
by richfaces-svn-commits@lists.jboss.org
Author: pyaschenko
Date: 2010-10-14 06:21:53 -0400 (Thu, 14 Oct 2010)
New Revision: 19567
Added:
sandbox/trunk/prototypes/calendar/JQuerySpinBtn.js
Modified:
sandbox/trunk/prototypes/calendar/calendar.js
sandbox/trunk/prototypes/calendar/jquery.position.js
sandbox/trunk/prototypes/calendar/test.html
Log:
https://jira.jboss.org/browse/RF-9152
https://jira.jboss.org/browse/RF-9168
bug fixing
spinner was added
position fixing
Added: sandbox/trunk/prototypes/calendar/JQuerySpinBtn.js
===================================================================
--- sandbox/trunk/prototypes/calendar/JQuerySpinBtn.js (rev 0)
+++ sandbox/trunk/prototypes/calendar/JQuerySpinBtn.js 2010-10-14 10:21:53 UTC (rev 19567)
@@ -0,0 +1,295 @@
+/* SpinButton control
+ *
+ * Adds bells and whistles to any ordinary textbox to
+ * make it look and feel like a SpinButton Control.
+ *
+ * Originally written by George Adamson, Software Unity (george.jquery(a)softwareunity.com) August 2006.
+ * - Added min/max options
+ * - Added step size option
+ * - Added bigStep (page up/down) option
+ *
+ * Modifications made by Mark Gibson, (mgibson(a)designlinks.net) September 2006:
+ * - Converted to jQuery plugin
+ * - Allow limited or unlimited min/max values
+ * - Allow custom class names, and add class to input element
+ * - Removed global vars
+ * - Reset (to original or through config) when invalid value entered
+ * - Repeat whilst holding mouse button down (with initial pause, like keyboard repeat)
+ * - Support mouse wheel in Firefox
+ * - Fix double click in IE
+ * - Refactored some code and renamed some vars
+ *
+ * Tested in IE6, Opera9, Firefox 1.5
+ * v1.0 11 Aug 2006 - George Adamson - First release
+ * v1.1 Aug 2006 - George Adamson - Minor enhancements
+ * v1.2 27 Sep 2006 - Mark Gibson - Major enhancements
+ * v1.3a 28 Sep 2006 - George Adamson - Minor enhancements
+ * rf1.3a 15 Nov 2007 - Pavel Yaschenko - some changes
+
+ Sample usage:
+
+ // Create group of settings to initialise spinbutton(s). (Optional)
+ var myOptions = {
+ min: 0, // Set lower limit.
+ max: 100, // Set upper limit.
+ step: 1, // Set increment size.
+ spinClass: mySpinBtnClass, // CSS class to style the spinbutton. (Class also specifies url of the up/down button image.)
+ upClass: mySpinUpClass, // CSS class for style when mouse over up button.
+ downClass: mySpinDnClass // CSS class for style when mouse over down button.
+ }
+
+ $(document).ready(function(){
+
+ // Initialise INPUT element(s) as SpinButtons: (passing options if desired)
+ $("#myInputElement").SpinButton(myOptions);
+
+ });
+
+ */
+var sbjQuery = jQuery;
+sbjQuery.fn.SpinButton = function(cfg){
+ return this.each(function(){
+
+ // Apply specified options or defaults:
+ // (Ought to refactor this some day to use $.extend() instead)
+ this.spinCfg = {
+ //min: cfg && cfg.min ? Number(cfg.min) : null,
+ //max: cfg && cfg.max ? Number(cfg.max) : null,
+ min: cfg && !isNaN(parseFloat(cfg.min)) ? Number(cfg.min) : null, // Fixes bug with min:0
+ max: cfg && !isNaN(parseFloat(cfg.max)) ? Number(cfg.max) : null,
+ step: cfg && cfg.step ? Number(cfg.step) : 1,
+ page: cfg && cfg.page ? Number(cfg.page) : 10,
+ upClass: cfg && cfg.upClass ? cfg.upClass : 'up',
+ downClass: cfg && cfg.downClass ? cfg.downClass : 'down',
+ reset: cfg && cfg.reset ? cfg.reset : this.value,
+ delay: cfg && cfg.delay ? Number(cfg.delay) : 500,
+ interval: cfg && cfg.interval ? Number(cfg.interval) : 100,
+ _btn_width: 20,
+ _btn_height: 12,
+ _direction: null,
+ _delay: null,
+ _repeat: null,
+
+ digits: cfg && cfg.digits ? Number(cfg.digits) : 1
+ };
+
+ this.adjustValue = function(i){
+ var v = this.value.toLowerCase();
+ if (v=="am")
+ {
+ this.value="PM";
+ return;
+ }
+ else if (v=="pm") {
+ this.value="AM";
+ return;
+ }
+ v = (isNaN(this.value) ? this.spinCfg.reset : Number(this.value)) + Number(i);
+ if (this.spinCfg.min !== null) v = (v<this.spinCfg.min ? (this.spinCfg.max != null ? this.spinCfg.max : this.spinCfg.min) : v);
+ if (this.spinCfg.max !== null) v = (v>this.spinCfg.max ? (this.spinCfg.min != null ? this.spinCfg.min : this.spinCfg.max) : v);
+
+ var value = String(v);
+ while (value.length<this.spinCfg.digits) value="0"+value;
+
+ this.value = value;
+ };
+
+ sbjQuery(this)
+// .addClass(cfg && cfg.spinClass ? cfg.spinClass : 'spin-button')
+//
+// .mousemove(function(e){
+// // Determine which button mouse is over, or not (spin direction):
+// var x = e.pageX || e.x;
+// var y = e.pageY || e.y;
+// var el = e.target || e.srcElement;
+// var direction =
+// (x > coord(el,'offsetLeft') + el.offsetWidth - this.spinCfg._btn_width)
+// ? ((y < coord(el,'offsetTop') + this.spinCfg._btn_height) ? 1 : -1) : 0;
+//
+// if (direction !== this.spinCfg._direction) {
+// // Style up/down buttons:
+// switch(direction){
+// case 1: // Up arrow:
+// sbjQuery(this).removeClass(this.spinCfg.downClass).addClass(this.spinCfg.upClass);
+// break;
+// case -1: // Down arrow:
+// sbjQuery(this).removeClass(this.spinCfg.upClass).addClass(this.spinCfg.downClass);
+// break;
+// default: // Mouse is elsewhere in the textbox
+// sbjQuery(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass);
+// }
+//
+// // Set spin direction:
+// this.spinCfg._direction = direction;
+// }
+// })
+//
+// .mouseout(function(){
+// // Reset up/down buttons to their normal appearance when mouse moves away:
+// sbjQuery(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass);
+// this.spinCfg._direction = null;
+// })
+
+// .mousedown(function(e){
+// if (this.spinCfg._direction != 0) {
+// // Respond to click on one of the buttons:
+// var self = this;
+// var adjust = function() {
+// self.adjustValue(self.spinCfg._direction * self.spinCfg.step);
+// };
+//
+// adjust();
+//
+// // Initial delay before repeating adjustment
+// self.spinCfg._delay = window.setTimeout(function() {
+// adjust();
+// // Repeat adjust at regular intervals
+// self.spinCfg._repeat = window.setInterval(adjust, self.spinCfg.interval);
+// }, self.spinCfg.delay);
+// }
+// })
+//
+// .mouseup(function(e){
+// // Cancel repeating adjustment
+// window.clearInterval(this.spinCfg._repeat);
+// window.clearTimeout(this.spinCfg._delay);
+// })
+//
+// .dblclick(function(e) {
+// if (sbjQuery.browser.msie)
+// this.adjustValue(this.spinCfg._direction * this.spinCfg.step);
+// })
+
+ .keydown(function(e){
+ // Respond to up/down arrow keys.
+ switch(e.keyCode){
+ case 38: this.adjustValue(this.spinCfg.step); break; // Up
+ case 40: this.adjustValue(-this.spinCfg.step); break; // Down
+ case 33: this.adjustValue(this.spinCfg.page); break; // PageUp
+ case 34: this.adjustValue(-this.spinCfg.page); break; // PageDown
+ }
+ })
+
+ .bind("mousewheel", function(e){
+ // Respond to mouse wheel in IE. (It returns up/dn motion in multiples of 120)
+ if (e.wheelDelta >= 120)
+ this.adjustValue(this.spinCfg.step);
+ else if (e.wheelDelta <= -120)
+ this.adjustValue(-this.spinCfg.step);
+
+ e.preventDefault();
+ })
+
+ .change(function(e){
+ this.adjustValue(0);
+ });
+
+ var self = this;
+
+ var btnUp = document.getElementById(this.id + 'BtnUp');
+ sbjQuery(btnUp)
+ .mousedown(function(e){
+ // Respond to click on one of the buttons:
+ var adjust = function() {
+ self.adjustValue(self.spinCfg.step);
+ };
+
+ adjust();
+
+ // Initial delay before repeating adjustment
+ self.spinCfg._delay = window.setTimeout(function() {
+ adjust();
+ // Repeat adjust at regular intervals
+ self.spinCfg._repeat = window.setInterval(adjust, self.spinCfg.interval);
+ }, self.spinCfg.delay);
+ self.spinCfg._repeater = true;
+ return false;
+ })
+
+ .mouseup(function(e){
+ // Cancel repeating adjustment
+ self.spinCfg._repeater = false;
+ window.clearInterval(self.spinCfg._repeat);
+ window.clearTimeout(self.spinCfg._delay);
+ })
+
+ .dblclick(function(e) {
+ if (sbjQuery.browser.msie)
+ self.adjustValue(self.spinCfg.step);
+ })
+ .mouseout(function(e){
+ // Cancel repeating adjustment
+ if (self.spinCfg._repeater)
+ {
+ self.spinCfg._repeater = false
+ window.clearInterval(self.spinCfg._repeat);
+ window.clearTimeout(self.spinCfg._delay);
+ }
+ });
+
+ var btnDown = document.getElementById(this.id + 'BtnDown');
+ sbjQuery(btnDown)
+ .mousedown(function(e){
+ // Respond to click on one of the buttons:
+ var adjust = function() {
+ self.adjustValue(-self.spinCfg.step);
+ };
+
+ adjust();
+
+ // Initial delay before repeating adjustment
+ self.spinCfg._delay = window.setTimeout(function() {
+ adjust();
+ // Repeat adjust at regular intervals
+ self.spinCfg._repeat = window.setInterval(adjust, self.spinCfg.interval);
+ }, self.spinCfg.delay);
+ self.spinCfg._repeater = true;
+ return false;
+ })
+
+ .mouseup(function(e){
+ // Cancel repeating adjustment
+ self.spinCfg._repeater = false;
+ window.clearInterval(self.spinCfg._repeat);
+ window.clearTimeout(self.spinCfg._delay);
+ })
+
+ .dblclick(function(e) {
+ if (sbjQuery.browser.msie)
+ self.adjustValue(-self.spinCfg.step);
+ })
+ .mouseout(function(e){
+ // Cancel repeating adjustment
+ if (self.spinCfg._repeater)
+ {
+ self.spinCfg._repeater = false
+ window.clearInterval(self.spinCfg._repeat);
+ window.clearTimeout(self.spinCfg._delay);
+ }
+ });
+
+
+ if (this.addEventListener) {
+ // Respond to mouse wheel in Firefox
+ this.addEventListener('DOMMouseScroll', function(e) {
+ if (e.detail > 0)
+ this.adjustValue(-this.spinCfg.step);
+ else if (e.detail < 0)
+ this.adjustValue(this.spinCfg.step);
+
+ e.preventDefault();
+ }, false);
+ }
+ });
+
+ function coord(el,prop) {
+ var c = el[prop], b = document.body;
+
+ while ((el = el.offsetParent) && (el != b)) {
+ if (!sbjQuery.browser.msie || (el.currentStyle.position != 'relative'))
+ c += el[prop];
+ }
+
+ return c;
+ }
+};
Modified: sandbox/trunk/prototypes/calendar/calendar.js
===================================================================
--- sandbox/trunk/prototypes/calendar/calendar.js 2010-10-14 10:11:23 UTC (rev 19566)
+++ sandbox/trunk/prototypes/calendar/calendar.js 2010-10-14 10:21:53 UTC (rev 19567)
@@ -2,6 +2,8 @@
window.LOG = {warn:function(){}};
}*/
+// TODO: try to change RichFaces.$ to $$ if possible
+
(function ($, rf) {
rf.ui = rf.ui || {};
@@ -36,7 +38,7 @@
var onmouseover = "jQuery(this).removeClass('rich-calendar-tool-btn-press');";
var onmouseout = "jQuery(this).addClass('rich-calendar-tool-btn-press');";
- var onclick = "RichFaces.$$('calendar',this).showTimeEditor();return true;";
+ var onclick = "RichFaces.$$('Calendar',this).showTimeEditor();return true;";
var markup = calendar.params.disabled || calendar.params.readonly ?
new E('div', {'class': 'rich-calendar-tool-btn-disabled'}, [new ET(text)]) :
new E('div', {'class': 'rich-calendar-tool-btn rich-calendar-tool-btn-hover rich-calendar-tool-btn-press', 'onclick': onclick,
@@ -242,8 +244,8 @@
dayStyleClass: function (context) {return "";},
showHeader: true,
showFooter: true,
- direction: "bottom-right",
- jointPoint: "bottom-left",
+ direction: "AA",
+ jointPoint: "AA",
popup: true,
boundaryDatesMode: "inactive",
todayControlMode: "select",
@@ -634,7 +636,7 @@
createTimeEditorLayout: function(editor)
{
- Element.insert(this.EDITOR_LAYOUT_SHADOW_ID, {after:this.evaluateMarkup(CalendarView.timeEditorLayout, this.calendarContext)});
+ $(rf.getDomElement(this.EDITOR_LAYOUT_SHADOW_ID)).after(this.evaluateMarkup(CalendarView.timeEditorLayout, this.calendarContext));
var th=rf.getDomElement(this.id+'TimeHours');
var ts;
@@ -662,14 +664,12 @@
var button2 = rf.getDomElement(buttonID2);
editor.style.visibility = "hidden";
editor.style.display = "";
- var width1 = Richfaces.Calendar.getOffsetDimensions(button1.firstChild).width;
- var width2 = Richfaces.Calendar.getOffsetDimensions(button2.firstChild).width;
+ var width1 = $(button1.firstChild).width();
+ var width2 = $(button2.firstChild).width();
editor.style.display = "none";
editor.style.visibility = "";
-
- var styleWidth = Richfaces.getComputedStyleSize(button1,'width')
- if (width1>styleWidth || width2>styleWidth)
+ if (width1!=width2)
{
button1.style.width = button2.style.width = (width1>width2 ? width1 : width2)+"px";
}
@@ -724,7 +724,7 @@
'</td>';
- Element.insert(this.EDITOR_LAYOUT_SHADOW_ID, {after:htmlBegin+htmlContent+htmlEnd});
+ $(rf.getDomElement(this.EDITOR_LAYOUT_SHADOW_ID)).after(htmlBegin+htmlContent+htmlEnd);
$(rf.getDomElement(this.dateEditorMonthID)).addClass('rich-calendar-editor-btn-selected');
@@ -893,12 +893,12 @@
if (this.params.showInput)
{
- base = baseInput;
+ base = base.children;
} else {
base = baseButton;
};
- $(element).setPosition(base, {type:"TOOLTIP", from: this.params.jointPoint, to:this.params.direction, offset: this.popupOffset}).show();
+ $(element).setPosition(base, {type:"DROPDOWN", from: this.params.jointPoint, to:this.params.direction, offset: this.popupOffset}).show();
this.isVisible = true;
@@ -1683,15 +1683,21 @@
this.doCollapse();
},
- setEditorPosition: function (element, editor, shadow)
+ clonePosition: function (source, elements, offset)
{
- element;
-
- var dim = Richfaces.Calendar.getOffsetDimensions(element);
- editor.style.width = shadow.style.width = dim.width + 'px';
- editor.style.height = shadow.style.height = dim.height + 'px';
-
- Richfaces.Calendar.clonePosition([editor,shadow], element);
+ var jqe = $(source);
+ if (!elements.length) elements = [elements];
+ offset = offset || {left:0,top:0};
+ var width = jqe.outerWidth()+"px", height = jqe.outerHeight()+"px";
+ var left = jqe.css("left")+offset.left+"px", top = jqe.css("top")+offset.top+"px";
+ var element;
+ for (var i = 0; i<elements.length;i++) {
+ element = elements[i];
+ element.style.width = width;
+ element.style.height = height;
+ element.style.left = left;
+ element.style.top = top;
+ }
},
showTimeEditor: function()
@@ -1706,7 +1712,7 @@
var editor_shadow = rf.getDomElement(this.EDITOR_SHADOW_ID);
- this.setEditorPosition(rf.getDomElement(this.id), editor, editor_shadow);
+ this.clonePosition(rf.getDomElement(this.id), [editor, editor_shadow]);
this.updateTimeEditor();
@@ -1714,7 +1720,7 @@
$(editor).show();
- Element.clonePosition(this.EDITOR_LAYOUT_SHADOW_ID, this.TIME_EDITOR_LAYOUT_ID, {offsetLeft: 3, offsetTop: 3});
+ this.clonePosition(rf.getDomElement(this.TIME_EDITOR_LAYOUT_ID), rf.getDomElement(this.EDITOR_LAYOUT_SHADOW_ID), {left: 3, top: 3});
this.isEditorVisible = true;
},
@@ -1769,12 +1775,12 @@
var editor_shadow = rf.getDomElement(this.EDITOR_SHADOW_ID);
- this.setEditorPosition(rf.getDomElement(this.id), editor, editor_shadow);
+ this.clonePosition(rf.getDomElement(this.id), [editor, editor_shadow]);
$(editor_shadow).show();
$(editor).show();
- Element.clonePosition(this.EDITOR_LAYOUT_SHADOW_ID, this.DATE_EDITOR_LAYOUT_ID, {offsetLeft: 3, offsetTop: 3});
+ this.clonePosition(rf.getDomElement(this.DATE_EDITOR_LAYOUT_ID), rf.getDomElement(this.EDITOR_LAYOUT_SHADOW_ID), {left: 3, top: 3});
this.isEditorVisible = true;
},
Modified: sandbox/trunk/prototypes/calendar/jquery.position.js
===================================================================
--- sandbox/trunk/prototypes/calendar/jquery.position.js 2010-10-14 10:11:23 UTC (rev 19566)
+++ sandbox/trunk/prototypes/calendar/jquery.position.js 2010-10-14 10:21:53 UTC (rev 19567)
@@ -67,7 +67,7 @@
var stype = typeof source;
if (stype == "object" || stype == "string") {
var rect = {};
- if (stype == "string" || source.nodeType || source instanceof jQuery) {
+ if (stype == "string" || source.nodeType || source instanceof jQuery || typeof source.length!="undefined") {
rect = getElementRect(source);
} else if (source.type) {
rect = getPointerRect(source);
@@ -135,19 +135,32 @@
function getElementRect (element) {
var jqe = $(element);
var offset = jqe.offset();
- var rect = {width: jqe.width(), height: jqe.height(), left: Math.floor(offset.left), top: Math.floor(offset.top)};
- /*if (jge.length>1) {
+ var rect = {width: jqe.outerWidth(), height: jqe.outerHeight(), left: Math.floor(offset.left), top: Math.floor(offset.top)};
+ if (jqe.length>1) {
var width, height, offset;
var e;
for (var i=1;i<jqe.length;i++) {
e = jqe.eq(i);
+ if (e.css('display')=="none") continue;
+ width = e.outerWidth();
+ height = e.outerHeight();
offset = e.offset();
+ var d = rect.left - offset.left;
+ if (d<0) {
+ rect.width = (width > rect.width) ? width : rect.width - d;
+ } else {
+ if (d + width > rect.width) rect.width = d + width;
+ }
+ var d = rect.top - offset.top;
+ if (d<0) {
+ rect.height = (height > rect.height) ? height : rect.height - d;
+ } else {
+ if (d + height > rect.height) rect.height = d + height;
+ }
if (offset.left < rect.left) rect.left = offset.left;
if (offset.top < rect.top) rect.top = offset.top;
- width = e.width(); height = e.height();
- if (rect.left + width > rect)
}
- }*/
+ }
return rect;
/*
Modified: sandbox/trunk/prototypes/calendar/test.html
===================================================================
--- sandbox/trunk/prototypes/calendar/test.html 2010-10-14 10:11:23 UTC (rev 19566)
+++ sandbox/trunk/prototypes/calendar/test.html 2010-10-14 10:21:53 UTC (rev 19567)
@@ -11,6 +11,7 @@
<script type="text/javascript" src="richfaces.js"></script>
<script type="text/javascript" src="richfaces-event.js"></script>
<script type="text/javascript" src="richfaces-base-component.js"></script>
+ <script type="text/javascript" src="JQuerySpinBtn.js"></script>
<script type="text/javascript" src="calendar-utils.js"></script>
<script type="text/javascript" src="calendar.js"></script>
<style>
13 years, 8 months
JBoss Rich Faces SVN: r19566 - trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces.
by richfaces-svn-commits@lists.jboss.org
Author: abelevich
Date: 2010-10-14 06:11:23 -0400 (Thu, 14 Oct 2010)
New Revision: 19566
Modified:
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/inplaceSelect.js
trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/popupList.js
Log:
remove interface declaration
Modified: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/inplaceSelect.js
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/inplaceSelect.js 2010-10-14 09:58:10 UTC (rev 19565)
+++ trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/inplaceSelect.js 2010-10-14 10:11:23 UTC (rev 19566)
@@ -110,6 +110,7 @@
case rf.KEYS.RETURN:
e.preventDefault();
this.select.__selectCurrent();
+ this.__setInputFocus();
return false;
break;
}
Modified: trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/popupList.js
===================================================================
--- trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/popupList.js 2010-10-14 09:58:10 UTC (rev 19565)
+++ trunk/ui/input/ui/src/main/resources/META-INF/resources/org.richfaces/popupList.js 2010-10-14 10:11:23 UTC (rev 19566)
@@ -2,14 +2,6 @@
rf.ui = rf.ui || {};
- var INTERFACE = {
- SelectListener : {
- processItem: function(item){},
- selectItem: function(item){},
- unselectItem: function(item){}
- }
- };
-
rf.ui.PopupList = function(id, listener, options) {
$super.constructor.call(this, id, options);
this.selectListener = listener;
@@ -29,7 +21,6 @@
name : "popupList",
-
processItem: function(item) {
if(this.selectListener.processItem && typeof this.selectListener.processItem == 'function') {
this.selectListener.processItem(item);
13 years, 8 months