From 4cc3e9d64f3e06b24c13727428594dc2fc66a790 Mon Sep 17 00:00:00 2001 From: Tran The Trong Date: Tue, 23 Sep 2014 15:29:32 +0700 Subject: [PATCH 1/9] Modify the Portlet name --- tutorial-juzcret/src/main/webapp/WEB-INF/portlet.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorial-juzcret/src/main/webapp/WEB-INF/portlet.xml b/tutorial-juzcret/src/main/webapp/WEB-INF/portlet.xml index 91f7e28..d2862e3 100644 --- a/tutorial-juzcret/src/main/webapp/WEB-INF/portlet.xml +++ b/tutorial-juzcret/src/main/webapp/WEB-INF/portlet.xml @@ -5,8 +5,8 @@ xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"> - SampleApplication - Juzu Sample Application + JuzcretApplication + Juzu Secret Application juzu.bridge.portlet.JuzuPortlet juzu.app_name @@ -16,7 +16,7 @@ text/html - Sample Application + Secret Application From 0d238f7e87127bf15c6dbc8e3a3c03bd7c059e58 Mon Sep 17 00:00:00 2001 From: Tran The Trong Date: Wed, 24 Sep 2014 11:39:32 +0700 Subject: [PATCH 2/9] Update template --- .../src/main/java/org/juzu/tutorial/templates/index.gtmpl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/index.gtmpl b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/index.gtmpl index 5e1c309..b476e5b 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/index.gtmpl +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/index.gtmpl @@ -1 +1,7 @@ -Hello World \ No newline at end of file +

JuZcret Application

+

+ 1st Rule: Anybody can access to JuZcret
+ 2nd Rule: Anybody can add secret
+ 3rd Rule: Anybody can read, comment, and like secrets
+ 4nd Rule: Secret is anonymous
+

\ No newline at end of file From e013bf008dd3785b91435d251ea98a84fa0ea289 Mon Sep 17 00:00:00 2001 From: phuong_vu Date: Wed, 24 Sep 2014 09:47:18 +0700 Subject: [PATCH 3/9] Step 2 - Viewing and posting Secret --- tutorial-juzcret/pom.xml | 35 +++++++--- ...ontroller.java => JuZcretApplication.java} | 41 ++++++++--- .../java/org/juzu/tutorial/models/Secret.java | 57 ++++++++++++++++ .../java/org/juzu/tutorial/package-info.java | 2 +- .../juzu/tutorial/services/SecretService.java | 68 +++++++++++++++++++ .../juzu/tutorial/templates/addSecret.gtmpl | 11 +++ .../org/juzu/tutorial/templates/index.gtmpl | 7 -- .../juzu/tutorial/templates/secretWall.gtmpl | 11 +++ 8 files changed, 204 insertions(+), 28 deletions(-) rename tutorial-juzcret/src/main/java/org/juzu/tutorial/{Controller.java => JuZcretApplication.java} (51%) create mode 100644 tutorial-juzcret/src/main/java/org/juzu/tutorial/models/Secret.java create mode 100644 tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretService.java create mode 100644 tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/addSecret.gtmpl delete mode 100644 tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/index.gtmpl create mode 100644 tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl diff --git a/tutorial-juzcret/pom.xml b/tutorial-juzcret/pom.xml index a3b7f08..2376673 100644 --- a/tutorial-juzcret/pom.xml +++ b/tutorial-juzcret/pom.xml @@ -83,15 +83,32 @@ - tutorial-juzcret - - - - - - - - + tutorial-juzcret + + + + org.codehaus.gmaven + gmaven-plugin + 1.5 + + + + compile + + + + + ${project.build.outputDirectory} + + **/*.groovy + + + + + + + + diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/Controller.java b/tutorial-juzcret/src/main/java/org/juzu/tutorial/JuZcretApplication.java similarity index 51% rename from tutorial-juzcret/src/main/java/org/juzu/tutorial/Controller.java rename to tutorial-juzcret/src/main/java/org/juzu/tutorial/JuZcretApplication.java index 788506b..ff3cffc 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/Controller.java +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/JuZcretApplication.java @@ -13,25 +13,44 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package org.juzu.tutorial; +import javax.inject.Inject; + +import juzu.Action; import juzu.Path; -import juzu.View; import juzu.Response; -import juzu.template.Template; +import juzu.View; -import javax.inject.Inject; -import java.io.IOException; +import org.juzu.tutorial.services.SecretService; -public class Controller { +public class JuZcretApplication { @Inject - @Path("index.gtmpl") - Template index; + SecretService secretService; + @Inject + @Path("secretWall.gtmpl") + org.juzu.tutorial.templates.secretWall secretWall; + + @Inject + @Path("addSecret.gtmpl") + org.juzu.tutorial.templates.addSecret addSecret; + + @View + public Response.Content index() { + return secretWall.with().secretsList(secretService.getSecrets()).ok(); + } + @View - public Response.Content index() throws IOException { - return index.ok(); - } + public Response.Content addSecretForm() { + return addSecret.ok(); + } + + @Action + public Response.View addSecret(String msg, String imgURL) { + secretService.addSecret(msg, imgURL); + return JuZcretApplication_.index(); + } } diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/models/Secret.java b/tutorial-juzcret/src/main/java/org/juzu/tutorial/models/Secret.java new file mode 100644 index 0000000..2570783 --- /dev/null +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/models/Secret.java @@ -0,0 +1,57 @@ +/* + * Copyright 2013 eXo Platform SAS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.juzu.tutorial.models; + +import java.io.Serializable; +import java.util.Date; + +public class Secret implements Serializable { + + private static final long serialVersionUID = 9216333356065206889L; + + private String message; + + private String imageURL; + + private Date createdDate; + + public Secret() { + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getImageURL() { + return imageURL; + } + + public void setImageURL(String imageURL) { + this.imageURL = imageURL; + } + + public Date getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(Date createdDate) { + this.createdDate = createdDate; + } +} diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java b/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java index 04ba989..b316420 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java @@ -14,6 +14,6 @@ * limitations under the License. */ -@juzu.Application +@juzu.Application(defaultController = org.juzu.tutorial.JuZcretApplication.class) @juzu.plugin.servlet.Servlet(value = "/") package org.juzu.tutorial; diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretService.java b/tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretService.java new file mode 100644 index 0000000..51a0c60 --- /dev/null +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretService.java @@ -0,0 +1,68 @@ +/* + * Copyright 2013 eXo Platform SAS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.juzu.tutorial.services; + +import javax.inject.Singleton; + +import java.util.Collections; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import org.juzu.tutorial.models.Secret; + +/** + * Created by The eXo Platform SAS + * Author : Thibault Clement + * tclement@exoplatform.com + * 9/6/14 + */ +@Singleton +public class SecretService { + + private List secretsList; + + public List getSecrets() { + if (secretsList == null) { + secretsList = new LinkedList(); + addFakeSecrets(); + } + return secretsList; +// return Collections.emptyList(); + } + + public void addSecret(String message, String imageUrl) { + Secret secret = new Secret(); + secret.setMessage(message); + secret.setImageURL(imageUrl); + secret.setCreatedDate(new Date()); + secretsList.add(secret); + } + + private void addFakeSecrets() { + addSecret("Yesterday I said I missed my PL meeting because I have to many work. In fact I was drinking free beer in Barbetta pub", + "https://c1.staticflickr.com/3/2385/2345543856_6d0fbafb66_z.jpg?zz=1"); + addSecret("I have a master degree but I still use Google to calculate 3*8", + "https://yy2.staticflickr.com/7244/7245177220_3f17ee9fb8_z.jpg"); + addSecret("I am in relationship for 2 years. He is awesome, powerful and I never go out without him. His name is Linux", + "http://fc02.deviantart.net/fs71/f/2009/364/9/d/christmas_love_by_skubaNiec.jpg"); + addSecret("I spent 2 hours a day to train my cat to perform a backflip", + "http://fc06.deviantart.net/fs15/i/2007/008/e/b/colour_cat_wallpaper_by_jellyplant.jpg"); + addSecret("I pretend to be a spy when I go out. In reality my job is to perform photocopy at the embassy", + "https://c2.staticflickr.com/2/1230/5108154392_3cc02cac67_z.jpg"); + } + } \ No newline at end of file diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/addSecret.gtmpl b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/addSecret.gtmpl new file mode 100644 index 0000000..a9f164d --- /dev/null +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/addSecret.gtmpl @@ -0,0 +1,11 @@ +
+
Share my secret
+ My secret: + +
+ Image URL: + +
+ +
\ No newline at end of file diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/index.gtmpl b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/index.gtmpl deleted file mode 100644 index b476e5b..0000000 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/index.gtmpl +++ /dev/null @@ -1,7 +0,0 @@ -

JuZcret Application

-

- 1st Rule: Anybody can access to JuZcret
- 2nd Rule: Anybody can add secret
- 3rd Rule: Anybody can read, comment, and like secrets
- 4nd Rule: Secret is anonymous
-

\ No newline at end of file diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl new file mode 100644 index 0000000..8808af6 --- /dev/null +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl @@ -0,0 +1,11 @@ +#{param name=secretsList/} + +
    +<% secretsList.each { secret -> %> +
  • + ${secret.message} +
  • +<% } %> +
+abcd +Share my secret \ No newline at end of file From c24cf5701798c42288274748d970e1ef28b13da4 Mon Sep 17 00:00:00 2001 From: phuong_vu Date: Thu, 2 Oct 2014 16:02:04 +0700 Subject: [PATCH 4/9] Step 2 using @Binding for SecretService and add KernelProviderFactory --- tutorial-juzcret/pom.xml | 12 ++++ .../commons/juzu/KernelProviderFactory.java | 56 ++++++++++++++++ .../java/org/juzu/tutorial/package-info.java | 5 ++ .../juzu/tutorial/services/SecretService.java | 48 ++----------- .../services/SecretServiceMemImpl.java | 67 +++++++++++++++++++ .../juzu/tutorial/templates/secretWall.gtmpl | 1 - .../services/juzu.inject.ProviderFactory | 1 + 7 files changed, 147 insertions(+), 43 deletions(-) create mode 100644 tutorial-juzcret/src/main/java/org/exoplatform/commons/juzu/KernelProviderFactory.java create mode 100644 tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretServiceMemImpl.java create mode 100644 tutorial-juzcret/src/main/resources/META-INF/services/juzu.inject.ProviderFactory diff --git a/tutorial-juzcret/pom.xml b/tutorial-juzcret/pom.xml index 2376673..c31f830 100644 --- a/tutorial-juzcret/pom.xml +++ b/tutorial-juzcret/pom.xml @@ -29,6 +29,18 @@ juzu-plugins-servlet 1.0.0-cr1 + + org.exoplatform.kernel + exo.kernel.container + 2.4.x-SNAPSHOT + provided + + + servlet-api + javax.servlet + + + diff --git a/tutorial-juzcret/src/main/java/org/exoplatform/commons/juzu/KernelProviderFactory.java b/tutorial-juzcret/src/main/java/org/exoplatform/commons/juzu/KernelProviderFactory.java new file mode 100644 index 0000000..5ba9bc2 --- /dev/null +++ b/tutorial-juzcret/src/main/java/org/exoplatform/commons/juzu/KernelProviderFactory.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2012 eXo Platform SAS. + * + * 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.exoplatform.commons.juzu; + +import javax.inject.Provider; +import juzu.inject.ProviderFactory; +import org.exoplatform.container.PortalContainer; +import org.picocontainer.ComponentAdapter; + +/** + * Provides kernel services in Juzu application. + * + * @author Frederic Drouet + */ +public class KernelProviderFactory implements ProviderFactory { + + @Override + public Provider getProvider(final Class implementationType) throws Exception { + final PortalContainer container = PortalContainer.getInstance(); + if (container == null) { + throw new IllegalStateException("Not running in the context of a portal container"); + } + final ComponentAdapter adapter = container.getComponentAdapterOfType(implementationType); + if (adapter != null) { + return new Provider() { + @Override + public T get() { + Object service = adapter.getComponentInstance(container); + if (service == null) { + throw new RuntimeException("Could not obtain service " + implementationType + " from container " + container); + } + return implementationType.cast(service); + } + }; + } else { + return null; + } + } +} \ No newline at end of file diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java b/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java index b316420..b1ae137 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java @@ -15,5 +15,10 @@ */ @juzu.Application(defaultController = org.juzu.tutorial.JuZcretApplication.class) +@Bindings({ @Binding(value = org.juzu.tutorial.services.SecretService.class, implementation = org.juzu.tutorial.services.SecretServiceMemImpl.class) }) @juzu.plugin.servlet.Servlet(value = "/") package org.juzu.tutorial; + +import juzu.plugin.binding.Binding; +import juzu.plugin.binding.Bindings; + diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretService.java b/tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretService.java index 51a0c60..e42e6bf 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretService.java +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretService.java @@ -16,53 +16,17 @@ package org.juzu.tutorial.services; -import javax.inject.Singleton; - -import java.util.Collections; -import java.util.Date; -import java.util.LinkedList; import java.util.List; import org.juzu.tutorial.models.Secret; /** - * Created by The eXo Platform SAS - * Author : Thibault Clement - * tclement@exoplatform.com - * 9/6/14 + * Created by The eXo Platform SAS Author : Thibault Clement + * tclement@exoplatform.com 9/6/14 */ -@Singleton -public class SecretService { - - private List secretsList; - - public List getSecrets() { - if (secretsList == null) { - secretsList = new LinkedList(); - addFakeSecrets(); - } - return secretsList; -// return Collections.emptyList(); - } +public interface SecretService { - public void addSecret(String message, String imageUrl) { - Secret secret = new Secret(); - secret.setMessage(message); - secret.setImageURL(imageUrl); - secret.setCreatedDate(new Date()); - secretsList.add(secret); - } + public List getSecrets(); - private void addFakeSecrets() { - addSecret("Yesterday I said I missed my PL meeting because I have to many work. In fact I was drinking free beer in Barbetta pub", - "https://c1.staticflickr.com/3/2385/2345543856_6d0fbafb66_z.jpg?zz=1"); - addSecret("I have a master degree but I still use Google to calculate 3*8", - "https://yy2.staticflickr.com/7244/7245177220_3f17ee9fb8_z.jpg"); - addSecret("I am in relationship for 2 years. He is awesome, powerful and I never go out without him. His name is Linux", - "http://fc02.deviantart.net/fs71/f/2009/364/9/d/christmas_love_by_skubaNiec.jpg"); - addSecret("I spent 2 hours a day to train my cat to perform a backflip", - "http://fc06.deviantart.net/fs15/i/2007/008/e/b/colour_cat_wallpaper_by_jellyplant.jpg"); - addSecret("I pretend to be a spy when I go out. In reality my job is to perform photocopy at the embassy", - "https://c2.staticflickr.com/2/1230/5108154392_3cc02cac67_z.jpg"); - } - } \ No newline at end of file + public void addSecret(String message, String imageUrl); +} diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretServiceMemImpl.java b/tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretServiceMemImpl.java new file mode 100644 index 0000000..03f214f --- /dev/null +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/services/SecretServiceMemImpl.java @@ -0,0 +1,67 @@ +/* + * Copyright 2013 eXo Platform SAS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.juzu.tutorial.services; + +import javax.inject.Singleton; + +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import org.juzu.tutorial.models.Secret; + +/** + * Created by The eXo Platform SAS + * Author : Thibault Clement + * tclement@exoplatform.com + * 9/6/14 + */ +@Singleton +public class SecretServiceMemImpl implements SecretService { + + private List secretsList; + + public List getSecrets() { + if (secretsList == null) { + secretsList = new LinkedList(); + addFakeSecrets(); + } + return secretsList; +// return Collections.emptyList(); + } + + public void addSecret(String message, String imageUrl) { + Secret secret = new Secret(); + secret.setMessage(message); + secret.setImageURL(imageUrl); + secret.setCreatedDate(new Date()); + secretsList.add(secret); + } + + private void addFakeSecrets() { + addSecret("Yesterday I said I missed my PL meeting because I have to many work. In fact I was drinking free beer in Barbetta pub", + "https://c1.staticflickr.com/3/2385/2345543856_6d0fbafb66_z.jpg?zz=1"); + addSecret("I have a master degree but I still use Google to calculate 3*8", + "https://yy2.staticflickr.com/7244/7245177220_3f17ee9fb8_z.jpg"); + addSecret("I am in relationship for 2 years. He is awesome, powerful and I never go out without him. His name is Linux", + "http://fc02.deviantart.net/fs71/f/2009/364/9/d/christmas_love_by_skubaNiec.jpg"); + addSecret("I spent 2 hours a day to train my cat to perform a backflip", + "http://fc06.deviantart.net/fs15/i/2007/008/e/b/colour_cat_wallpaper_by_jellyplant.jpg"); + addSecret("I pretend to be a spy when I go out. In reality my job is to perform photocopy at the embassy", + "https://c2.staticflickr.com/2/1230/5108154392_3cc02cac67_z.jpg"); + } + } \ No newline at end of file diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl index 8808af6..6842cda 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl @@ -7,5 +7,4 @@ <% } %> -abcd Share my secret \ No newline at end of file diff --git a/tutorial-juzcret/src/main/resources/META-INF/services/juzu.inject.ProviderFactory b/tutorial-juzcret/src/main/resources/META-INF/services/juzu.inject.ProviderFactory new file mode 100644 index 0000000..c98a9a2 --- /dev/null +++ b/tutorial-juzcret/src/main/resources/META-INF/services/juzu.inject.ProviderFactory @@ -0,0 +1 @@ +org.exoplatform.commons.juzu.KernelProviderFactory \ No newline at end of file From a061191a57edcfe8c6eee030808f84ddc7010209 Mon Sep 17 00:00:00 2001 From: giangnt Date: Fri, 10 Oct 2014 11:45:35 +0700 Subject: [PATCH 5/9] Install and Buid --- .gitignore | 42 +++++++++++++++++++ tutorial-juzcret/pom.xml | 7 +++- .../org/juzu/tutorial/assets/css/juzcret.less | 6 +++ .../java/org/juzu/tutorial/package-info.java | 8 ++++ tutorial-juzcret/src/main/resources/rebel.xml | 16 +++++++ 5 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less create mode 100644 tutorial-juzcret/src/main/resources/rebel.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..caedb30 --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# +# Default excludes +# + +# Binaries +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip +*.war +*.ear +*.sar +*.class + +# Maven +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +release.properties + +# IntelliJ project files +*.iml +*.iws +*.ipr +.idea/ + +# eclipse project file +.settings/ +.classpath +.project + +# OS +.DS_Store + +# Misc +*.swp +transaction.log diff --git a/tutorial-juzcret/pom.xml b/tutorial-juzcret/pom.xml index c31f830..cbf0416 100644 --- a/tutorial-juzcret/pom.xml +++ b/tutorial-juzcret/pom.xml @@ -17,7 +17,6 @@ - org.juzu @@ -29,6 +28,11 @@ juzu-plugins-servlet 1.0.0-cr1 + + org.juzu + juzu-plugins-less4j + 1.0.0-cr1 + org.exoplatform.kernel exo.kernel.container @@ -123,5 +127,4 @@ - diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less b/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less new file mode 100644 index 0000000..5066790 --- /dev/null +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less @@ -0,0 +1,6 @@ + +// Variables +//======================================= + +// Common Style +//======================================= diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java b/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java index b1ae137..14d7ff3 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/package-info.java @@ -17,8 +17,16 @@ @juzu.Application(defaultController = org.juzu.tutorial.JuZcretApplication.class) @Bindings({ @Binding(value = org.juzu.tutorial.services.SecretService.class, implementation = org.juzu.tutorial.services.SecretServiceMemImpl.class) }) @juzu.plugin.servlet.Servlet(value = "/") +@Less(@Stylesheet("css/juzcret.less")) +@Assets("*") +//@Stylesheets({@Stylesheet(id = "juzcret.css", value = "css/juzcret.css")}) +//@Assets("*") package org.juzu.tutorial; import juzu.plugin.binding.Binding; import juzu.plugin.binding.Bindings; +import juzu.plugin.asset.Stylesheets; +import juzu.plugin.asset.Stylesheet; +import juzu.plugin.asset.Assets; +import juzu.plugin.less4j.Less; \ No newline at end of file diff --git a/tutorial-juzcret/src/main/resources/rebel.xml b/tutorial-juzcret/src/main/resources/rebel.xml new file mode 100644 index 0000000..f7a11f0 --- /dev/null +++ b/tutorial-juzcret/src/main/resources/rebel.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file From d0cb526f8dfb15dbddb93fc8db5cc494bd2ae0eb Mon Sep 17 00:00:00 2001 From: giangnt Date: Mon, 13 Oct 2014 17:39:49 +0700 Subject: [PATCH 6/9] UI-3396 Design UI for JuZcret portlet --- .../org/juzu/tutorial/assets/css/juzcret.less | 265 +++++++++++++++++- .../juzu/tutorial/templates/secretWall.gtmpl | 123 +++++++- 2 files changed, 379 insertions(+), 9 deletions(-) diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less b/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less index 5066790..12c25eb 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less @@ -1,6 +1,269 @@ - // Variables //======================================= +@heightSecretItem: 238px; +@secretItemGutter: 6px; +@secretActionHeight: 43px; + +// Mixins +//======================================= + +// Opacity +.opacity(@opacity) { + opacity: @opacity; + // IE8 filter + @opacity-ie: (@opacity * 100); + filter: ~"alpha(opacity=@{opacity-ie})"; +} +// Transform CSS3 +.transform(@transform) { + -webkit-transform: @transform; + -moz-transform: @transform; + -ms-transform: @transform; // IE9 only + transform: @transform; +} +// Transitions CSS3 +.transition(@transition) { + -webkit-transition: @transition; + -o-transition: @transition; + transition: @transition; +} +// Translate CSS +.translate(@x; @y) { + -webkit-transform: translate(@x, @y); + -ms-transform: translate(@x, @y); // IE9 only + -o-transform: translate(@x, @y); + transform: translate(@x, @y); +} // Common Style //======================================= +.secret-wall-container { + padding: 20px 30px; +} +.secret-wall-container, .secret-wall-container * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.secret-wall-heading { + margin-bottom: 10px; + .btn { + margin-top: 6px; + } +} +.secret-wall-list { + margin: 0 -@secretItemGutter; + > li { + float: left; + padding: @secretItemGutter; + width: 100% / 3; + .secret-image { + background-repeat: no-repeat; + background-size: cover; + background-color: #000; + position: relative; + height: @heightSecretItem; + width: 100%; + display: block; + &:before { + background: none repeat scroll 0 0 rgba(0, 0, 0, 0.5); + content: ""; + display: block; + height: 100%; + position: absolute; + width: 100%; + } + } + .secret-mesage { + bottom: 65px; + color: #fff; + font-size: 20px; + font-weight: normal; + left: 25px; + line-height: 24px; + position: absolute; + right: 25px; + text-align: center; + top: 25px; + } + .secret-action { + border-top: 1px solid rgba(255, 255, 255, 0.5); + bottom: 0; + height: 0; + left: 0; + line-height: @secretActionHeight; + padding: 0 25px; + position: absolute; + right: 0; + text-align: right; + overflow: hidden; + .transition(all 200ms ease-out 0s); + + .secr-toggle-link { + + .secr-toggle-link { + margin-left: 15px; + } + > i { + margin-right: 5px; + } + .numb { + color: #fff; + font-size: 13px; + } + .uiIconComment { + margin-top: 2px; + } + } + } + .popover { + max-width: 500px; + top: auto; + bottom: 46px; + left: auto; + right: -205px; + width: 500px; + margin: 0px; + } + &:hover, &.open-popover { + .secret-action { + height: @secretActionHeight; + } + } + &.open-popover { + .popover-secret { + .opacity(1); + display: block; + } + } + &:nth-child(3n+3) { + .popover{ + right: -1px; + .arrow { + left: auto; + right: 34px; + } + } + } + } +} +.secret-popup { + width: 500; + height: 280px; + background: #fff; + border: 1px solid rgba(0, 0, 0, 0.5); + display: none; + &.in { + display: block; + } +} +.popover-secret { + .popover-content { + padding: 15px; + } +} +.secr-comments-box { + .secr-viewall { + font-size: 13px; + margin-bottom: 15px; + } +} +.secr-comments-list { + margin-bottom: 20px; + max-height: 150px; + overflow: auto; + > li { + line-height: 18px; + + li { + margin-top: 20px; + } + .media { + > .pull-left { + display: block; + } + } + .cm-user-name { + font-weight: bold; + } + .cm-time { + color: #999999; + font-size: 12px; + margin-left: 5px; + } + } +} +.secr-create-comment { + .btn-primary { + float: right; + margin-left: 10px; + margin-top: 3px; + } + .secr-write-comment { + .fluid-colum { + float: left; + width: 100%; + > .inner { + margin-left: 46px; + } + } + .media { + > .media-body { + margin-left: 46px; + padding-top: 3px; + } + } + textarea { + height: 29px; + resize: none; + width: 100%; + &:focus { + box-shadow:none; + } + } + } +} +.dropdown.share-secret-dropdown { + .btn-primary { + padding-right: 20px; + padding-left: 20px; + } + .dropdown-menu { + left: auto; + margin-top: 20px; + right: -1px; + text-align: left; + &:after, &:before { + content: ""; + position: absolute; + bottom: 100%; + } + &:before { + border-left: 15px solid transparent; + border-right: 15px solid transparent; + border-bottom: 15px solid rgba(0, 0, 0, 0.2); + right: 45px; + } + &:after { + border-left: 14px solid transparent; + border-right: 14px solid transparent; + border-bottom: 14px solid #fff; + right: 46px; + } + } +} +.share-secret-form { + padding: 20px 30px; + .form-title { + margin: 0 0 10px; + text-shadow: none; + } + textarea { + min-width: 271px; + max-width: 271px; + max-height: 300px; + margin-bottom: 10px; + min-height: 80px; + } + textarea, input { + margin-bottom: 5px; + } +} \ No newline at end of file diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl index 6842cda..29c1691 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl @@ -1,10 +1,117 @@ #{param name=secretsList/} -
    -<% secretsList.each { secret -> %> -
  • - ${secret.message} -
  • -<% } %> -
-Share my secret \ No newline at end of file +
+
+
+
+

JuZcret Portlet

+
+
+ +
+
+
+
    + <% secretsList.each { secret -> %> +
  • +
    +
    ${secret.message}
    +
    + 8 + 6 +
    +
    +
    +
    +
    +
    + + +
    + +
    + +
    +
    +
    + avatar +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
  • + <% } %> +
+
\ No newline at end of file From a269b3ec1c926410ad6029850d52af32f3c25679 Mon Sep 17 00:00:00 2001 From: giangnt Date: Tue, 14 Oct 2014 11:42:50 +0700 Subject: [PATCH 7/9] UI-3396 Design UI for JuZcret portlet --- .../org/juzu/tutorial/assets/css/juzcret.less | 50 ++++++++++++------- .../juzu/tutorial/templates/addSecret.gtmpl | 50 +++++++++++++++---- .../juzu/tutorial/templates/secretWall.gtmpl | 7 +-- 3 files changed, 75 insertions(+), 32 deletions(-) diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less b/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less index 12c25eb..3735e6b 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less @@ -39,6 +39,10 @@ //======================================= .secret-wall-container { padding: 20px 30px; + .btn-primary { + padding-right: 20px; + padding-left: 20px; + } } .secret-wall-container, .secret-wall-container * { -webkit-box-sizing: border-box; @@ -221,11 +225,23 @@ } } } -.dropdown.share-secret-dropdown { - .btn-primary { - padding-right: 20px; - padding-left: 20px; +.share-secret-form { + .form-title { + margin: 0 0 10px; + text-shadow: none; + } + textarea { + min-width: 271px; + max-width: 271px; + max-height: 300px; + margin-bottom: 10px; + min-height: 80px; } + textarea, input { + margin-bottom: 5px; + } +} +.dropdown.share-secret-dropdown { .dropdown-menu { left: auto; margin-top: 20px; @@ -249,21 +265,19 @@ right: 46px; } } -} -.share-secret-form { - padding: 20px 30px; - .form-title { - margin: 0 0 10px; - text-shadow: none; + .share-secret-form { + padding: 20px 30px; } - textarea { - min-width: 271px; - max-width: 271px; - max-height: 300px; - margin-bottom: 10px; - min-height: 80px; +} + +.share-secret-box { + display: inline-block; + text-align: left; + margin-top: 20px; + .title { + text-align: center; } - textarea, input { - margin-bottom: 5px; + .btn { + min-width: 78px; } } \ No newline at end of file diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/addSecret.gtmpl b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/addSecret.gtmpl index a9f164d..cb6fb76 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/addSecret.gtmpl +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/addSecret.gtmpl @@ -1,11 +1,39 @@ -
-
Share my secret
- My secret: - -
- Image URL: - -
- -
\ No newline at end of file +
+
+
+
+

JuZcret Portlet

+
+ +
+
+
+ +
+
\ No newline at end of file diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl index 29c1691..85fe4d8 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl @@ -7,12 +7,13 @@

JuZcret Portlet

From e6d452aa066d332e135479167e75d4aa343f524c Mon Sep 17 00:00:00 2001 From: giangnt Date: Wed, 15 Oct 2014 08:48:45 +0700 Subject: [PATCH 8/9] remove redundant html element --- .../src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl | 1 - 1 file changed, 1 deletion(-) diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl index 85fe4d8..3f01975 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl @@ -46,7 +46,6 @@
8 6 -
From 35350282155564b6eb6089394cf2c2807e610261 Mon Sep 17 00:00:00 2001 From: giangnt Date: Mon, 20 Oct 2014 14:26:04 +0700 Subject: [PATCH 9/9] Add close button and set fixed width for avatar --- .../org/juzu/tutorial/assets/css/juzcret.less | 23 +++++++++++++++++++ .../juzu/tutorial/templates/secretWall.gtmpl | 1 + 2 files changed, 24 insertions(+) diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less b/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less index 3735e6b..cbca049 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/assets/css/juzcret.less @@ -14,6 +14,13 @@ @opacity-ie: (@opacity * 100); filter: ~"alpha(opacity=@{opacity-ie})"; } +// Border Radius CSS3 +.border-radius(@border-radius) { + -webkit-border-radius: @border-radius; + -moz-border-radius: @border-radius; + -ms-border-radius: @border-radius; // IE9 only + border-radius: @border-radius; +} // Transform CSS3 .transform(@transform) { -webkit-transform: @transform; @@ -127,6 +134,22 @@ right: -205px; width: 500px; margin: 0px; + .close { + line-height: 16px; + padding: 1px 5px; + position: absolute; + right: 0; + top: 0; + } + .media { + > .pull-left { + > img { + width: 36px; + height: 36px; + .border-radius(2px); + } + } + } } &:hover, &.open-popover { .secret-action { diff --git a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl index 3f01975..93e2c30 100644 --- a/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl +++ b/tutorial-juzcret/src/main/java/org/juzu/tutorial/templates/secretWall.gtmpl @@ -48,6 +48,7 @@ 6
+