├── .gitignore
├── README.md
├── all
├── pom.xml
└── src
│ └── main
│ └── content
│ └── META-INF
│ └── vault
│ ├── definition
│ └── .content.xml
│ └── filter.xml
├── core
├── pom.xml
└── src
│ └── main
│ └── java
│ └── org
│ └── redquark
│ └── aem
│ └── tutorials
│ └── core
│ ├── components
│ └── FetchTODO.java
│ ├── configs
│ ├── CardConfiguration.java
│ └── WorkflowStatusConfiguration.java
│ ├── constants
│ └── AppConstants.java
│ ├── events
│ ├── handler
│ │ ├── PageActivationEventHandler.java
│ │ └── PageUpdatedEventHandler.java
│ └── listener
│ │ └── PropertyEventListener.java
│ ├── jobs
│ └── PageReplicationJob.java
│ ├── models
│ ├── Card.java
│ ├── User.java
│ ├── impl
│ │ ├── CardImpl.java
│ │ └── UserImpl.java
│ └── package-info.java
│ ├── schedulers
│ └── WorkflowStatusScheduler.java
│ ├── services
│ ├── CardService.java
│ ├── EmailService.java
│ ├── ReferencedAssetService.java
│ ├── ReplicationService.java
│ ├── ResourceResolverService.java
│ ├── SearchService.java
│ ├── WriteTODOService.java
│ └── impl
│ │ ├── CardServiceImpl.java
│ │ ├── EmailServiceImpl.java
│ │ ├── ReferencedAssetServiceImpl.java
│ │ ├── ReplicationServiceImpl.java
│ │ ├── ResourceResolverServiceImpl.java
│ │ ├── SearchServiceImpl.java
│ │ └── WriteTODOServiceImpl.java
│ ├── servlets
│ ├── DynamicDataSourceServlet.java
│ ├── ExecuteReviewContentServlet.java
│ ├── FetchTODOServlet.java
│ ├── ListNodesServlet.java
│ └── SearchServlet.java
│ ├── utils
│ ├── DropdownData.java
│ └── IDGenerator.java
│ └── workflows
│ ├── participant
│ ├── ApprovePageContentStep.java
│ └── ReviewChildrenPagesStep.java
│ └── process
│ ├── FetchChildrenPagesStep.java
│ └── UpdateReferencedAssetsWorkflow.java
├── pom.xml
├── ui.apps.structure
└── pom.xml
├── ui.apps
├── .gitignore
├── pom.xml
└── src
│ └── main
│ └── content
│ ├── META-INF
│ └── vault
│ │ └── filter.xml
│ └── jcr_root
│ └── apps
│ ├── .content.xml
│ └── aemtutorials
│ ├── clientlibs
│ ├── clientlib-base
│ │ ├── .content.xml
│ │ ├── css.txt
│ │ └── js.txt
│ ├── clientlib-dependencies
│ │ ├── .content.xml
│ │ ├── css.txt
│ │ └── js.txt
│ ├── clientlib-grid
│ │ ├── .content.xml
│ │ ├── css.txt
│ │ └── less
│ │ │ └── grid.less
│ ├── clientlib-site
│ │ ├── .content.xml
│ │ ├── css.txt
│ │ └── js.txt
│ └── customClientlibs
│ │ ├── .content.xml
│ │ ├── css.txt
│ │ ├── js.txt
│ │ └── js
│ │ ├── altTextValidation.js
│ │ └── altTextValidation.js.dir
│ │ └── .content.xml
│ ├── components
│ ├── content
│ │ ├── card
│ │ │ ├── .content.xml
│ │ │ ├── _cq_dialog
│ │ │ │ └── .content.xml
│ │ │ ├── card.html
│ │ │ ├── card.html.dir
│ │ │ │ └── .content.xml
│ │ │ └── clientlib
│ │ │ │ ├── .content.xml
│ │ │ │ ├── css.txt
│ │ │ │ └── css
│ │ │ │ └── style.css
│ │ ├── htl
│ │ │ ├── .content.xml
│ │ │ ├── _cq_dialog
│ │ │ │ └── .content.xml
│ │ │ ├── htl.html
│ │ │ ├── htl.html.dir
│ │ │ │ └── .content.xml
│ │ │ └── index.html
│ │ ├── image
│ │ │ ├── .content.xml
│ │ │ ├── _cq_dialog
│ │ │ │ └── .content.xml
│ │ │ ├── image.html
│ │ │ └── image.html.dir
│ │ │ │ └── .content.xml
│ │ ├── preferences
│ │ │ ├── .content.xml
│ │ │ ├── _cq_dialog
│ │ │ │ └── .content.xml
│ │ │ ├── preferences.html
│ │ │ └── preferences.html.dir
│ │ │ │ └── .content.xml
│ │ ├── search
│ │ │ ├── .content.xml
│ │ │ ├── _cq_dialog
│ │ │ │ └── .content.xml
│ │ │ ├── clientlibs
│ │ │ │ ├── .content.xml
│ │ │ │ ├── css.txt
│ │ │ │ ├── css
│ │ │ │ │ └── style.css
│ │ │ │ ├── js.txt
│ │ │ │ └── js
│ │ │ │ │ └── script.js
│ │ │ └── search.html
│ │ ├── text
│ │ │ ├── .content.xml
│ │ │ ├── _cq_dialog
│ │ │ │ └── .content.xml
│ │ │ ├── text.html
│ │ │ └── text.html.dir
│ │ │ │ └── .content.xml
│ │ ├── todo
│ │ │ ├── .content.xml
│ │ │ ├── _cq_dialog
│ │ │ │ └── .content.xml
│ │ │ └── todo.html
│ │ └── user
│ │ │ ├── .content.xml
│ │ │ ├── _cq_dialog
│ │ │ └── .content.xml
│ │ │ ├── user.html
│ │ │ └── user.html.dir
│ │ │ └── .content.xml
│ ├── page
│ │ ├── .content.xml
│ │ ├── customfooterlibs.html
│ │ └── customheaderlibs.html
│ └── structure
│ │ └── page
│ │ └── .content.xml
│ ├── config
│ └── org.apache.sling.commons.log.LogManager.factory.config-aemtutorials.xml
│ ├── i18n
│ ├── .content.xml
│ ├── fr.json
│ └── fr.json.dir
│ │ └── .content.xml
│ ├── templates
│ ├── page-content
│ │ └── .content.xml
│ └── page-home
│ │ └── .content.xml
│ └── tests
│ ├── .content.xml
│ ├── SampleTests.js
│ └── js.txt
├── ui.content
├── pom.xml
└── src
│ └── main
│ └── content
│ ├── META-INF
│ └── vault
│ │ └── filter.xml
│ └── jcr_root
│ ├── conf
│ └── aemtutorials
│ │ ├── .content.xml
│ │ └── settings
│ │ ├── .content.xml
│ │ └── wcm
│ │ ├── .content.xml
│ │ ├── policies
│ │ ├── .content.xml
│ │ └── _rep_policy.xml
│ │ ├── segments
│ │ ├── .content.xml
│ │ ├── summer
│ │ │ └── .content.xml
│ │ └── winter
│ │ │ └── .content.xml
│ │ ├── template-types
│ │ ├── .content.xml
│ │ ├── _rep_policy.xml
│ │ ├── base-page
│ │ │ ├── .content.xml
│ │ │ ├── initial
│ │ │ │ └── .content.xml
│ │ │ ├── policies
│ │ │ │ └── .content.xml
│ │ │ └── structure
│ │ │ │ └── .content.xml
│ │ ├── page
│ │ │ ├── .content.xml
│ │ │ ├── initial
│ │ │ │ └── .content.xml
│ │ │ ├── policies
│ │ │ │ └── .content.xml
│ │ │ ├── structure
│ │ │ │ └── .content.xml
│ │ │ ├── thumbnail.png
│ │ │ └── thumbnail.png.dir
│ │ │ │ ├── .content.xml
│ │ │ │ └── _jcr_content
│ │ │ │ └── _dam_thumbnails
│ │ │ │ ├── _dam_thumbnail_300.png
│ │ │ │ ├── _dam_thumbnail_319.png
│ │ │ │ └── _dam_thumbnail_48.png
│ │ └── xf
│ │ │ ├── .content.xml
│ │ │ ├── initial
│ │ │ └── .content.xml
│ │ │ ├── policies
│ │ │ └── .content.xml
│ │ │ ├── structure
│ │ │ └── .content.xml
│ │ │ └── thumbnail.png
│ │ └── templates
│ │ ├── .content.xml
│ │ ├── _rep_policy.xml
│ │ ├── base-template
│ │ ├── .content.xml
│ │ ├── initial
│ │ │ └── .content.xml
│ │ ├── policies
│ │ │ └── .content.xml
│ │ └── structure
│ │ │ └── .content.xml
│ │ ├── page-content
│ │ ├── .content.xml
│ │ ├── initial
│ │ │ └── .content.xml
│ │ ├── policies
│ │ │ └── .content.xml
│ │ ├── structure
│ │ │ └── .content.xml
│ │ ├── thumbnail.png
│ │ └── thumbnail.png.dir
│ │ │ ├── .content.xml
│ │ │ └── _jcr_content
│ │ │ └── _dam_thumbnails
│ │ │ ├── _dam_thumbnail_300.png
│ │ │ ├── _dam_thumbnail_319.png
│ │ │ └── _dam_thumbnail_48.png
│ │ ├── spa-app-template
│ │ ├── .content.xml
│ │ ├── initial
│ │ │ └── .content.xml
│ │ ├── policies
│ │ │ └── .content.xml
│ │ └── structure
│ │ │ └── .content.xml
│ │ ├── spa-page-template
│ │ ├── .content.xml
│ │ ├── initial
│ │ │ └── .content.xml
│ │ ├── policies
│ │ │ └── .content.xml
│ │ └── structure
│ │ │ └── .content.xml
│ │ └── xf-web-variation
│ │ ├── .content.xml
│ │ ├── initial
│ │ └── .content.xml
│ │ ├── policies
│ │ └── .content.xml
│ │ ├── structure
│ │ └── .content.xml
│ │ ├── thumbnail.png
│ │ └── thumbnail.png.dir
│ │ ├── .content.xml
│ │ └── _jcr_content
│ │ └── _dam_thumbnails
│ │ ├── _dam_thumbnail_128.png
│ │ └── _dam_thumbnail_319.png
│ ├── content
│ ├── aemtutorials
│ │ ├── .content.xml
│ │ ├── _jcr_content
│ │ │ └── image
│ │ │ │ ├── file
│ │ │ │ └── file.dir
│ │ │ │ ├── .content.xml
│ │ │ │ └── _jcr_content
│ │ │ │ └── _dam_thumbnails
│ │ │ │ ├── _dam_thumbnail_48.png
│ │ │ │ └── _dam_thumbnail_480.png
│ │ └── us
│ │ │ ├── .content.xml
│ │ │ └── en
│ │ │ ├── .content.xml
│ │ │ ├── base-page
│ │ │ └── .content.xml
│ │ │ └── home
│ │ │ └── .content.xml
│ ├── dam
│ │ ├── .content.xml
│ │ └── aemtutorials
│ │ │ ├── .content.xml
│ │ │ ├── _jcr_content
│ │ │ └── folderThumbnail
│ │ │ ├── asset.jpg
│ │ │ ├── .content.xml
│ │ │ └── _jcr_content
│ │ │ │ └── renditions
│ │ │ │ ├── cq5dam.thumbnail.140.100.png
│ │ │ │ ├── cq5dam.thumbnail.319.319.png
│ │ │ │ ├── cq5dam.thumbnail.48.48.png
│ │ │ │ ├── cq5dam.web.1280.1280.jpeg
│ │ │ │ ├── original
│ │ │ │ └── original.dir
│ │ │ │ └── .content.xml
│ │ │ ├── color.json
│ │ │ ├── .content.xml
│ │ │ └── _jcr_content
│ │ │ │ └── renditions
│ │ │ │ ├── original
│ │ │ │ └── original.dir
│ │ │ │ └── .content.xml
│ │ │ ├── country.json
│ │ │ ├── .content.xml
│ │ │ └── _jcr_content
│ │ │ │ └── renditions
│ │ │ │ ├── original
│ │ │ │ └── original.dir
│ │ │ │ └── .content.xml
│ │ │ └── font.json
│ │ │ ├── .content.xml
│ │ │ └── _jcr_content
│ │ │ └── renditions
│ │ │ ├── original
│ │ │ └── original.dir
│ │ │ └── .content.xml
│ └── experience-fragments
│ │ └── aemtutorials
│ │ ├── .content.xml
│ │ └── us
│ │ ├── .content.xml
│ │ └── en
│ │ ├── .content.xml
│ │ └── site
│ │ ├── .content.xml
│ │ ├── footer
│ │ ├── .content.xml
│ │ └── master
│ │ │ └── .content.xml
│ │ └── header
│ │ ├── .content.xml
│ │ └── master
│ │ └── .content.xml
│ └── var
│ ├── .content.xml
│ ├── _rep_policy.xml
│ └── workflow
│ ├── .content.xml
│ ├── _rep_policy.xml
│ └── models
│ └── aemtutorials
│ ├── .content.xml
│ ├── approve_page_content.xml
│ ├── review-content.xml
│ └── update_referenced_assets.xml
└── ui.frontend
├── .env
├── .env.development
├── README.md
├── assembly.xml
├── clientlib.config.js
├── package.json
├── pom.xml
├── public
├── favicon.ico
├── index.html
├── logo192.png
├── logo512.png
└── manifest.json
├── src
├── App.js
├── App.test.js
├── components
│ ├── Page
│ │ ├── Page.css
│ │ ├── Page.js
│ │ └── Page.test.js
│ ├── RouteHelper
│ │ ├── RouteHelper.js
│ │ └── RouteHelper.test.js
│ ├── Text
│ │ ├── Text.css
│ │ ├── Text.js
│ │ └── Text.test.js
│ └── import-components.js
├── index.css
├── index.js
├── setupTests.js
└── utils
│ ├── extract-model-id.js
│ └── extract-model-id.test.js
└── utils
└── entrypoints.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.gitignore.io/api/eclipse,java,maven
2 |
3 | ### Eclipse ###
4 | *.pydevproject
5 | .metadata
6 | .gradle
7 | bin/
8 | tmp/
9 | *.tmp
10 | *.bak
11 | *.swp
12 | *~.nib
13 | local.properties
14 | .settings/
15 | .loadpath
16 |
17 | # Eclipse Core
18 | .project
19 |
20 | # External tool builders
21 | .externalToolBuilders/
22 |
23 | # Locally stored "Eclipse launch configurations"
24 | *.launch
25 |
26 | # CDT-specific
27 | .cproject
28 |
29 | # JDT-specific (Eclipse Java Development Tools)
30 | .classpath
31 |
32 | # Java annotation processor (APT)
33 | .factorypath
34 |
35 | # PDT-specific
36 | .buildpath
37 |
38 | # sbteclipse plugin
39 | .target
40 |
41 | # TeXlipse plugin
42 | .texlipse
43 |
44 |
45 | ### Java ###
46 | *.class
47 |
48 | # Mobile Tools for Java (J2ME)
49 | .mtj.tmp/
50 |
51 | # Package Files #
52 | *.jar
53 | *.war
54 | *.ear
55 |
56 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
57 | hs_err_pid*
58 |
59 |
60 | ### Maven ###
61 | target/
62 | pom.xml.tag
63 | pom.xml.releaseBackup
64 | pom.xml.versionsBackup
65 | pom.xml.next
66 | release.properties
67 | dependency-reduced-pom.xml
68 | buildNumber.properties
69 | .mvn/timing.properties
70 |
71 |
72 | ### Vault ###
73 | .vlt
74 |
75 |
76 | ### IntelliJ ###
77 | .idea/
78 | *.iml
79 |
80 |
81 | ### Node.js ###
82 |
83 | # Log files
84 | *.log
85 |
86 | # NPM
87 | node_modules/
88 | package-lock.json
89 | yarn.lock
90 |
91 | # Webpack
92 | build/
93 | dist/
94 |
95 | # Frontend Maven Plugin
96 | node/
97 |
98 | # Tests
99 | coverage/
100 |
--------------------------------------------------------------------------------
/all/src/main/content/META-INF/vault/definition/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
23 |
24 |
--------------------------------------------------------------------------------
/all/src/main/content/META-INF/vault/filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/configs/CardConfiguration.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.configs;
2 |
3 | import org.osgi.service.metatype.annotations.AttributeDefinition;
4 | import org.osgi.service.metatype.annotations.ObjectClassDefinition;
5 |
6 | @ObjectClassDefinition(
7 | name = "AEM Tutorials Card Configuration",
8 | description = "This configuration captures the card details"
9 | )
10 | public @interface CardConfiguration {
11 |
12 | @AttributeDefinition(
13 | name = "Organization Name",
14 | description = "Name of the organization you wish to display on the card"
15 | )
16 | String getOrganizationName();
17 |
18 | @AttributeDefinition(
19 | name = "Homepage URL",
20 | description = "URL of the website's homepage"
21 | )
22 | String getHomepageURL();
23 | }
24 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/configs/WorkflowStatusConfiguration.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.configs;
2 |
3 | import org.osgi.service.metatype.annotations.AttributeDefinition;
4 | import org.osgi.service.metatype.annotations.AttributeType;
5 | import org.osgi.service.metatype.annotations.ObjectClassDefinition;
6 |
7 | import static org.redquark.aem.tutorials.core.configs.WorkflowStatusConfiguration.CONFIGURATION_DESCRIPTION;
8 | import static org.redquark.aem.tutorials.core.configs.WorkflowStatusConfiguration.CONFIGURATION_NAME;
9 |
10 | @ObjectClassDefinition(
11 | name = CONFIGURATION_NAME,
12 | description = CONFIGURATION_DESCRIPTION
13 | )
14 | public @interface WorkflowStatusConfiguration {
15 |
16 | String CONFIGURATION_NAME = "Workflow Status Configuration";
17 | String CONFIGURATION_DESCRIPTION = "This configuration captures the details for getting workflow status and sending email";
18 | String DEFAULT_EMAIL_ADDRESS = "anirudh03sharma@gmail.com";
19 |
20 | @AttributeDefinition(
21 | name = "Scheduler Name",
22 | description = "Enter a unique identifier that represents name of the scheduler",
23 | type = AttributeType.STRING
24 | )
25 | String schedulerName() default CONFIGURATION_NAME;
26 |
27 | @AttributeDefinition(
28 | name = "Enabled",
29 | description = "Check the box to enable the scheduler",
30 | type = AttributeType.BOOLEAN
31 | )
32 | boolean enabled() default false;
33 |
34 | @AttributeDefinition(
35 | name = "Cron Expression",
36 | description = "Cron expression which will decide how the scheduler will run",
37 | type = AttributeType.STRING
38 | )
39 | String cronExpression() default "0 * * * * ?";
40 |
41 | @AttributeDefinition(
42 | name = "To Email",
43 | description = "Enter the email address of recipient in TO field",
44 | type = AttributeType.STRING
45 | )
46 | String toEmail() default DEFAULT_EMAIL_ADDRESS;
47 |
48 | @AttributeDefinition(
49 | name = "Cc Email",
50 | description = "Enter the email address of recipient in CC field",
51 | type = AttributeType.STRING
52 | )
53 | String ccEmail() default DEFAULT_EMAIL_ADDRESS;
54 |
55 | @AttributeDefinition(
56 | name = "From Email",
57 | description = "Enter the email addresses of the sender",
58 | type = AttributeType.STRING
59 | )
60 | String fromEmail() default DEFAULT_EMAIL_ADDRESS;
61 |
62 | @AttributeDefinition(
63 | name = "Subject",
64 | description = "Enter the subject of the email",
65 | type = AttributeType.STRING
66 | )
67 | String subject() default CONFIGURATION_NAME;
68 | }
69 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/constants/AppConstants.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.constants;
2 |
3 | /**
4 | * @author Anirudh Sharma
5 | *
6 | * This class keeps all the app level constants
7 | */
8 | public final class AppConstants {
9 |
10 | public static final String FORWARD_SLASH = "/";
11 | public static final String EQUALS = "=";
12 | public static final String NEW_LINE = "\n";
13 |
14 | // TO-DO related constants
15 | public static final String TODO_ENDPOINT = "https://jsonplaceholder.typicode.com/todos/";
16 | public static final long TODO_THREAD_SLEEP_TIME = 14400000;
17 |
18 | // Resource Resolver Factory sub-service
19 | public static final String SUB_SERVICE = "tutorialSubService";
20 |
21 | // Workflow Process Label
22 | public static final String PROCESS_LABEL = "process.label";
23 | // Workflow Chooser Label
24 | public static final String CHOOSER_LABEL = "chooser.label";
25 | // Child page count
26 | public static final String CHILD_PAGE_COUNT = "childPageCount";
27 |
28 | // User groups
29 | public static final String ADMINISTRATORS = "administrators";
30 | public static final String CONTENT_AUTHORS = "content-authors";
31 |
32 | // Dynamic datasource
33 | public static final String DATASOURCE = "datasource";
34 | public static final String DROPDOWN_SELECTOR = "dropdownSelector";
35 | public static final String COUNTRY_LIST = "countryList";
36 | public static final String COUNTRY_LIST_PATH = "/content/dam/aemtutorials/country.json";
37 | public static final String COLOR_LIST = "colorList";
38 | public static final String COLOR_LIST_PATH = "/content/dam/aemtutorials/color.json";
39 | public static final String FONT_LIST = "fontList";
40 | public static final String FONT_LIST_PATH = "/content/dam/aemtutorials/font.json";
41 |
42 | public static final String PAGE_REPLICATION_TOPIC = "aemtutorials/replication/job";
43 | }
44 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/events/handler/PageUpdatedEventHandler.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.events.handler;
2 |
3 | import com.day.cq.wcm.api.PageEvent;
4 | import org.apache.sling.event.jobs.JobManager;
5 | import org.osgi.framework.Constants;
6 | import org.osgi.service.component.annotations.Component;
7 | import org.osgi.service.component.annotations.Reference;
8 | import org.osgi.service.event.Event;
9 | import org.osgi.service.event.EventConstants;
10 | import org.osgi.service.event.EventHandler;
11 | import org.slf4j.Logger;
12 | import org.slf4j.LoggerFactory;
13 |
14 | import java.util.HashMap;
15 | import java.util.List;
16 | import java.util.Map;
17 |
18 | import static org.redquark.aem.tutorials.core.constants.AppConstants.EQUALS;
19 | import static org.redquark.aem.tutorials.core.constants.AppConstants.PAGE_REPLICATION_TOPIC;
20 |
21 | @Component(
22 | immediate = true,
23 | service = EventHandler.class,
24 | property = {
25 | Constants.SERVICE_DESCRIPTION + "= This event handler listens to the events on page modification",
26 | EventConstants.EVENT_TOPIC + EQUALS + PageEvent.EVENT_TOPIC
27 | }
28 | )
29 | public class PageUpdatedEventHandler implements EventHandler {
30 |
31 | private static final String TAG = PageUpdatedEventHandler.class.getSimpleName();
32 | private static final Logger LOGGER = LoggerFactory.getLogger(PageUpdatedEventHandler.class);
33 |
34 | @Reference
35 | JobManager jobManager;
36 |
37 | @Override
38 | @SuppressWarnings("unchecked")
39 | public void handleEvent(Event event) {
40 | LOGGER.debug("{}: event occurred for topic: {}", TAG, event.getTopic());
41 | try {
42 | // Get the payload path from the event
43 | List> modifications = (List>) event.getProperty("modifications");
44 | // Payload path
45 | String payload = (String) modifications.get(0).get("path");
46 | // Add stuff for the job
47 | Map jobProperties = new HashMap<>();
48 | jobProperties.put("payload", payload);
49 | // Add this job to the job manager
50 | jobManager.addJob(PAGE_REPLICATION_TOPIC, jobProperties);
51 | LOGGER.info("{}: job is completed successfully", TAG);
52 | } catch (Exception e) {
53 | LOGGER.error("{}: exception occurred: {}", TAG, e.getMessage());
54 | }
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/events/listener/PropertyEventListener.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.events.listener;
2 |
3 | import org.apache.sling.api.resource.ResourceResolver;
4 | import org.osgi.service.component.annotations.Activate;
5 | import org.osgi.service.component.annotations.Component;
6 | import org.osgi.service.component.annotations.Reference;
7 | import org.redquark.aem.tutorials.core.services.ResourceResolverService;
8 | import org.slf4j.Logger;
9 | import org.slf4j.LoggerFactory;
10 |
11 | import javax.jcr.RepositoryException;
12 | import javax.jcr.Session;
13 | import javax.jcr.observation.Event;
14 | import javax.jcr.observation.EventIterator;
15 | import javax.jcr.observation.EventListener;
16 | import java.util.Objects;
17 |
18 | @Component(service = EventListener.class, immediate = true)
19 | public class PropertyEventListener implements EventListener {
20 |
21 | private static final String TAG = PropertyEventListener.class.getSimpleName();
22 | private static final Logger LOGGER = LoggerFactory.getLogger(PropertyEventListener.class);
23 |
24 | @Reference
25 | ResourceResolverService resourceResolverService;
26 |
27 | @Activate
28 | protected void activate() {
29 | try {
30 | // Getting the resource resolver
31 | ResourceResolver resourceResolver = resourceResolverService.getResourceResolver();
32 | // Adapting the Resource Resolver to Session
33 | Session session = resourceResolver.adaptTo(Session.class);
34 | // Adding the event listener
35 | Objects.requireNonNull(session).
36 | getWorkspace().
37 | getObservationManager().
38 | addEventListener(
39 | this, Event.PROPERTY_ADDED | Event.NODE_ADDED,
40 | "/aemtutorials/data/todo", true, null,
41 | null, false
42 | );
43 | } catch (RepositoryException e) {
44 | LOGGER.error("{}: exception occurred: {}", TAG, e.getMessage());
45 | }
46 | }
47 |
48 | @Override
49 | public void onEvent(EventIterator events) {
50 | try {
51 | // Loop through all the events
52 | while (events.hasNext()) {
53 | // Get the current event
54 | Event event = events.nextEvent();
55 | LOGGER.info("{}: Event was added by: {} at path: {}", TAG, event.getUserID(), event.getPath());
56 | }
57 | } catch (RepositoryException e) {
58 | LOGGER.error("{}: exception occurred: {}: ", TAG, e.getMessage());
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/jobs/PageReplicationJob.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.jobs;
2 |
3 | import org.apache.sling.event.jobs.Job;
4 | import org.apache.sling.event.jobs.consumer.JobConsumer;
5 | import org.osgi.service.component.annotations.Component;
6 | import org.osgi.service.component.annotations.Reference;
7 | import org.redquark.aem.tutorials.core.services.ReplicationService;
8 | import org.slf4j.Logger;
9 | import org.slf4j.LoggerFactory;
10 |
11 | import static org.apache.sling.event.jobs.consumer.JobConsumer.PROPERTY_TOPICS;
12 | import static org.osgi.framework.Constants.SERVICE_DESCRIPTION;
13 | import static org.osgi.service.event.EventConstants.SERVICE_ID;
14 | import static org.redquark.aem.tutorials.core.constants.AppConstants.EQUALS;
15 | import static org.redquark.aem.tutorials.core.constants.AppConstants.PAGE_REPLICATION_TOPIC;
16 | import static org.redquark.aem.tutorials.core.jobs.PageReplicationJob.SERVICE_NAME;
17 |
18 | @Component(
19 | immediate = true,
20 | service = JobConsumer.class,
21 | property = {
22 | SERVICE_ID + EQUALS + SERVICE_NAME,
23 | SERVICE_DESCRIPTION + EQUALS + "This job replicates the given payload",
24 | PROPERTY_TOPICS + EQUALS + PAGE_REPLICATION_TOPIC
25 | }
26 | )
27 | public class PageReplicationJob implements JobConsumer {
28 |
29 | protected static final String SERVICE_NAME = "Page Replication Job";
30 | private static final String TAG = PageReplicationJob.class.getSimpleName();
31 | private static final Logger LOGGER = LoggerFactory.getLogger(PageReplicationJob.class);
32 |
33 | @Reference
34 | ReplicationService replicationService;
35 |
36 | @Override
37 | public JobResult process(Job job) {
38 | LOGGER.debug("{}: trying to execute job: {}", TAG, job.getTopic());
39 | try {
40 | // Get the payload path from the job properties
41 | String payloadPath = (String) job.getProperty("payload");
42 | // Call the replication service
43 | replicationService.replicateContent(payloadPath);
44 | return JobResult.OK;
45 | } catch (Exception e) {
46 | LOGGER.error("{}: job failed due to: {}", TAG, e.getMessage());
47 | return JobResult.FAILED;
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/models/Card.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.models;
2 |
3 | public interface Card {
4 |
5 | /**
6 | * @return the title of the card
7 | */
8 | String getCardTitle();
9 |
10 | /**
11 | * @return the text on the button
12 | */
13 | String getButtonText();
14 |
15 | /**
16 | * @return organization name from the osgi config
17 | */
18 | String getOrganizationName();
19 |
20 | /**
21 | * @return homepage url from the osgi config
22 | */
23 | String getHomepageURL();
24 | }
25 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/models/User.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.models;
2 |
3 | /**
4 | * @author Anirudh Sharma
5 | *
6 | * Represents the "User" component
7 | */
8 | public interface User {
9 |
10 | /**
11 | * @return unique id of the user
12 | */
13 | String getId();
14 |
15 | /**
16 | * @return String to represent the name of the user
17 | */
18 | String getName();
19 |
20 | /**
21 | * @return String to represent the gender of the user
22 | */
23 | String getGender();
24 |
25 | /**
26 | * @return String to represent the address of the user
27 | */
28 | String getAddress();
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/models/impl/CardImpl.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.models.impl;
2 |
3 | import org.apache.sling.api.resource.Resource;
4 | import org.apache.sling.models.annotations.DefaultInjectionStrategy;
5 | import org.apache.sling.models.annotations.Model;
6 | import org.apache.sling.models.annotations.injectorspecific.OSGiService;
7 | import org.redquark.aem.tutorials.core.models.Card;
8 | import org.redquark.aem.tutorials.core.services.CardService;
9 | import org.slf4j.Logger;
10 | import org.slf4j.LoggerFactory;
11 |
12 | import javax.annotation.PostConstruct;
13 | import javax.inject.Inject;
14 |
15 | @Model(
16 | adaptables = {Resource.class},
17 | adapters = {Card.class},
18 | resourceType = {CardImpl.RESOURCE_TYPE},
19 | defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL
20 | )
21 | public class CardImpl implements Card {
22 |
23 | protected static final String RESOURCE_TYPE = "aemtutorials/components/content/card";
24 | private static final Logger LOGGER = LoggerFactory.getLogger(CardImpl.class);
25 | private static final String TAG = CardImpl.class.getSimpleName();
26 |
27 | @Inject
28 | String cardTitle;
29 |
30 | @Inject
31 | String buttonText;
32 |
33 | @OSGiService
34 | CardService cardService;
35 |
36 | private String organizationName;
37 |
38 | private String homepageURL;
39 |
40 | @PostConstruct
41 | protected void init() {
42 | organizationName = cardService.getOrganizationName();
43 | homepageURL = cardService.getHomepageURL();
44 | LOGGER.info("{}: organization name: {}", TAG, organizationName);
45 | LOGGER.info("{}: homepage url: {}", TAG, homepageURL);
46 | }
47 |
48 | @Override
49 | public String getCardTitle() {
50 | return cardTitle;
51 | }
52 |
53 | @Override
54 | public String getButtonText() {
55 | return buttonText;
56 | }
57 |
58 | public String getOrganizationName() {
59 | return organizationName;
60 | }
61 |
62 | public String getHomepageURL() {
63 | return homepageURL;
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/models/package-info.java:
--------------------------------------------------------------------------------
1 | @Version("1.0")
2 | package org.redquark.aem.tutorials.core.models;
3 |
4 | import org.osgi.annotation.versioning.Version;
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/CardService.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services;
2 |
3 | public interface CardService {
4 |
5 | /**
6 | * @return name of the organization
7 | */
8 | String getOrganizationName();
9 |
10 | /**
11 | * @return URL of the home page
12 | */
13 | String getHomepageURL();
14 | }
15 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/EmailService.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services;
2 |
3 | public interface EmailService {
4 |
5 | void sendEmail(
6 | String toEmail,
7 | String ccEmail,
8 | String fromEmail,
9 | String subject,
10 | String content
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/ReferencedAssetService.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services;
2 |
3 | import com.day.cq.dam.api.Asset;
4 |
5 | import java.util.Map;
6 |
7 | public interface ReferencedAssetService {
8 |
9 | Map getReferencedAssets(String pagePath);
10 | }
11 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/ReplicationService.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services;
2 |
3 | public interface ReplicationService {
4 |
5 | void replicateContent(String payload);
6 | }
7 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/ResourceResolverService.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services;
2 |
3 | import org.apache.sling.api.resource.ResourceResolver;
4 |
5 | /**
6 | * @author Anirudh Sharma
7 | *
8 | * This service gives instance of the resource resolver using service user approach
9 | */
10 | public interface ResourceResolverService {
11 |
12 | /**
13 | * This method returns the instance of resource resolver
14 | *
15 | * @return @{@link ResourceResolver}
16 | */
17 | ResourceResolver getResourceResolver();
18 | }
19 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/SearchService.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services;
2 |
3 | import java.util.List;
4 |
5 | public interface SearchService {
6 |
7 | List searchByKeyword(String keyword);
8 | }
9 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/WriteTODOService.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services;
2 |
3 | /**
4 | * @author Anirudh Sharma
5 | *
6 | * This interface represents the service which writes to-do data in the repository
7 | */
8 | public interface WriteTODOService {
9 |
10 | void writeData(String todoData);
11 | }
12 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/impl/CardServiceImpl.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services.impl;
2 |
3 | import org.osgi.framework.Constants;
4 | import org.osgi.service.component.annotations.Activate;
5 | import org.osgi.service.component.annotations.Component;
6 | import org.osgi.service.metatype.annotations.Designate;
7 | import org.redquark.aem.tutorials.core.configs.CardConfiguration;
8 | import org.redquark.aem.tutorials.core.services.CardService;
9 | import org.slf4j.Logger;
10 | import org.slf4j.LoggerFactory;
11 |
12 | @Component(
13 | service = CardService.class,
14 | immediate = true,
15 | property = {
16 | Constants.SERVICE_ID + "=Card Service",
17 | Constants.SERVICE_DESCRIPTION + "=This service reads values from Card Configuration"
18 | })
19 | @Designate(ocd = CardConfiguration.class)
20 | public class CardServiceImpl implements CardService {
21 |
22 | private static final String TAG = CardServiceImpl.class.getSimpleName();
23 | private static final Logger LOGGER = LoggerFactory.getLogger(CardServiceImpl.class);
24 |
25 | private CardConfiguration configuration;
26 |
27 | @Activate
28 | protected void activate(CardConfiguration configuration) {
29 | this.configuration = configuration;
30 | }
31 |
32 | @Override
33 | public String getOrganizationName() {
34 | LOGGER.info("{}: reading organization name", TAG);
35 | return configuration.getOrganizationName();
36 | }
37 |
38 | @Override
39 | public String getHomepageURL() {
40 | LOGGER.info("{}: reading homepage url", TAG);
41 | return configuration.getHomepageURL();
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/impl/EmailServiceImpl.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services.impl;
2 |
3 | import com.day.cq.mailer.MessageGateway;
4 | import com.day.cq.mailer.MessageGatewayService;
5 | import org.apache.commons.mail.Email;
6 | import org.apache.commons.mail.EmailException;
7 | import org.apache.commons.mail.SimpleEmail;
8 | import org.osgi.framework.Constants;
9 | import org.osgi.service.component.annotations.Component;
10 | import org.osgi.service.component.annotations.Reference;
11 | import org.redquark.aem.tutorials.core.services.EmailService;
12 | import org.slf4j.Logger;
13 | import org.slf4j.LoggerFactory;
14 |
15 | import static org.redquark.aem.tutorials.core.constants.AppConstants.EQUALS;
16 | import static org.redquark.aem.tutorials.core.services.impl.EmailServiceImpl.SERVICE_NAME;
17 |
18 | @Component(
19 | service = EmailService.class,
20 | property = {
21 | Constants.SERVICE_ID + EQUALS + SERVICE_NAME
22 | }
23 | )
24 | public class EmailServiceImpl implements EmailService {
25 |
26 | protected static final String SERVICE_NAME = "Email Service";
27 | private static final String TAG = EmailServiceImpl.class.getSimpleName();
28 | private static final Logger LOGGER = LoggerFactory.getLogger(EmailServiceImpl.class);
29 |
30 | @Reference
31 | MessageGatewayService messageGatewayService;
32 |
33 | @Override
34 | public void sendEmail(String toEmail, String ccEmail, String fromEmail, String subject, String content) {
35 | try {
36 | // Setting up the email message
37 | Email email = new SimpleEmail();
38 | // Get the details to send email
39 | email.setSubject(subject);
40 | email.setMsg(content);
41 | email.addTo(toEmail);
42 | email.addCc(ccEmail);
43 | email.setFrom(fromEmail);
44 | // Inject the message gateway service and send email
45 | MessageGateway messageGateway = messageGatewayService.getGateway(Email.class);
46 | // Send the email
47 | messageGateway.send(email);
48 | } catch (EmailException e) {
49 | LOGGER.error("{}: exception occurred: {}", TAG, e.getMessage());
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/impl/ReferencedAssetServiceImpl.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services.impl;
2 |
3 | import com.day.cq.dam.api.Asset;
4 | import com.day.cq.dam.api.DamConstants;
5 | import com.day.cq.dam.commons.util.AssetReferenceSearch;
6 | import org.apache.sling.api.resource.Resource;
7 | import org.apache.sling.api.resource.ResourceResolver;
8 | import org.osgi.framework.Constants;
9 | import org.osgi.service.component.annotations.Component;
10 | import org.osgi.service.component.annotations.Reference;
11 | import org.redquark.aem.tutorials.core.services.ReferencedAssetService;
12 | import org.redquark.aem.tutorials.core.services.ResourceResolverService;
13 | import org.slf4j.Logger;
14 | import org.slf4j.LoggerFactory;
15 |
16 | import javax.jcr.Node;
17 | import java.util.Map;
18 | import java.util.Objects;
19 |
20 | import static org.redquark.aem.tutorials.core.constants.AppConstants.EQUALS;
21 |
22 | @Component(
23 | service = ReferencedAssetService.class,
24 | property = {
25 | Constants.SERVICE_ID + EQUALS + "Referenced Asset Service",
26 | Constants.SERVICE_DESCRIPTION + EQUALS + "Returns all the assets referenced"
27 | }
28 | )
29 | public class ReferencedAssetServiceImpl implements ReferencedAssetService {
30 |
31 | private static final String TAG = ReferencedAssetService.class.getSimpleName();
32 | private static final Logger LOGGER = LoggerFactory.getLogger(ReferencedAssetService.class);
33 |
34 | @Reference
35 | ResourceResolverService resourceResolverService;
36 |
37 | @Override
38 | public Map getReferencedAssets(String pagePath) {
39 | LOGGER.debug("{}: Searching assets referenced on page path: {}", TAG, pagePath);
40 | // Get the resource resolver
41 | ResourceResolver resourceResolver = resourceResolverService.getResourceResolver();
42 | // Get the resource instance representing the path
43 | Resource resource = resourceResolver.getResource(pagePath);
44 | // Adapt this resource to the Node
45 | Node node = Objects.requireNonNull(resource).adaptTo(Node.class);
46 | // Create an instance of AssetReferenceSearch API
47 | AssetReferenceSearch assetReferenceSearch = new AssetReferenceSearch(node, DamConstants.MOUNTPOINT_ASSETS, resourceResolver);
48 | // Getting all the assets referenced
49 | Map referencedAssets = assetReferenceSearch.search();
50 | LOGGER.debug("{}: number of assets found on page: {} are {}", TAG, pagePath, referencedAssets.size());
51 |
52 | return referencedAssets;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/services/impl/ResourceResolverServiceImpl.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.services.impl;
2 |
3 | import org.apache.sling.api.resource.LoginException;
4 | import org.apache.sling.api.resource.ResourceResolver;
5 | import org.apache.sling.api.resource.ResourceResolverFactory;
6 | import org.osgi.framework.Constants;
7 | import org.osgi.service.component.annotations.Activate;
8 | import org.osgi.service.component.annotations.Component;
9 | import org.osgi.service.component.annotations.Reference;
10 | import org.redquark.aem.tutorials.core.services.ResourceResolverService;
11 | import org.slf4j.Logger;
12 | import org.slf4j.LoggerFactory;
13 |
14 | import java.util.HashMap;
15 | import java.util.Map;
16 |
17 | import static org.redquark.aem.tutorials.core.constants.AppConstants.SUB_SERVICE;
18 |
19 | /**
20 | * @author Anirudh Sharma
21 | *
22 | * This service is responsible for returning an instance of ResourceResolver
23 | */
24 | @Component(
25 | service = ResourceResolverService.class,
26 | property = {
27 | Constants.SERVICE_ID + "= AEM Tutorial Resource Resolver Service",
28 | Constants.SERVICE_DESCRIPTION + "= This service is responsible for returning an instance of ResourceResolver"
29 | })
30 | public class ResourceResolverServiceImpl implements ResourceResolverService {
31 |
32 | private static final String TAG = ResourceResolverServiceImpl.class.getSimpleName();
33 | private static final Logger LOGGER = LoggerFactory.getLogger(ResourceResolverServiceImpl.class);
34 |
35 | @Reference
36 | ResourceResolverFactory resourceResolverFactory;
37 |
38 | private ResourceResolver resourceResolver;
39 |
40 | @Activate
41 | protected void activate() {
42 | try {
43 | // Service User map
44 | Map serviceUserMap = new HashMap<>();
45 | // Putting sub-service name in the map
46 | serviceUserMap.put(ResourceResolverFactory.SUBSERVICE, SUB_SERVICE);
47 | // Get the instance of Service Resource Resolver
48 | resourceResolver = resourceResolverFactory.getServiceResourceResolver(serviceUserMap);
49 | } catch (LoginException e) {
50 | LOGGER.error("{}: Exception occurred while getting resource resolver: {}", TAG, e.getMessage());
51 | }
52 | }
53 |
54 | @Override
55 | public ResourceResolver getResourceResolver() {
56 | return resourceResolver;
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/servlets/SearchServlet.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.servlets;
2 |
3 | import org.apache.sling.api.SlingHttpServletRequest;
4 | import org.apache.sling.api.SlingHttpServletResponse;
5 | import org.apache.sling.api.servlets.HttpConstants;
6 | import org.apache.sling.api.servlets.SlingAllMethodsServlet;
7 | import org.osgi.framework.Constants;
8 | import org.osgi.service.component.annotations.Component;
9 | import org.osgi.service.component.annotations.Reference;
10 | import org.redquark.aem.tutorials.core.services.SearchService;
11 | import org.slf4j.Logger;
12 | import org.slf4j.LoggerFactory;
13 |
14 | import javax.servlet.Servlet;
15 | import java.io.IOException;
16 | import java.util.List;
17 |
18 | import static org.apache.sling.api.servlets.ServletResolverConstants.SLING_SERVLET_METHODS;
19 | import static org.apache.sling.api.servlets.ServletResolverConstants.SLING_SERVLET_PATHS;
20 | import static org.redquark.aem.tutorials.core.constants.AppConstants.EQUALS;
21 | import static org.redquark.aem.tutorials.core.constants.AppConstants.NEW_LINE;
22 | import static org.redquark.aem.tutorials.core.servlets.SearchServlet.PATH;
23 | import static org.redquark.aem.tutorials.core.servlets.SearchServlet.SERVICE_NAME;
24 |
25 | @Component(
26 | service = Servlet.class,
27 | property = {
28 | Constants.SERVICE_ID + EQUALS + SERVICE_NAME,
29 | SLING_SERVLET_PATHS + EQUALS + PATH,
30 | SLING_SERVLET_METHODS + EQUALS + HttpConstants.METHOD_POST
31 | }
32 | )
33 | public class SearchServlet extends SlingAllMethodsServlet {
34 |
35 | protected static final String PATH = "/bin/aemtutorials/search";
36 | protected static final String SERVICE_NAME = "Search Servlet";
37 |
38 | private static final String TAG = SearchServlet.class.getSimpleName();
39 | private static final Logger LOGGER = LoggerFactory.getLogger(SearchServlet.class);
40 |
41 | @Reference
42 | SearchService searchService;
43 |
44 | @Override
45 | protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) {
46 | try {
47 | String keyword = request.getParameter("keyword");
48 | LOGGER.info("{}: searching for keyword: {}", TAG, keyword);
49 | // Getting the result from search service
50 | List resultList = searchService.searchByKeyword(keyword);
51 | // Format the results
52 | StringBuilder formattedResult = new StringBuilder();
53 | for (String s : resultList) {
54 | formattedResult.append(s).append(NEW_LINE);
55 | }
56 | // Print the results on the screen
57 | response.getWriter().println(formattedResult.toString());
58 | } catch (IOException e) {
59 | LOGGER.error("{}: cannot search due to: {}", TAG, e.getMessage());
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/utils/DropdownData.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.utils;
2 |
3 | public class DropdownData {
4 |
5 | private final String text;
6 | private final String value;
7 |
8 | public DropdownData(final String text, final String value) {
9 | this.text = text;
10 | this.value = value;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/utils/IDGenerator.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.utils;
2 |
3 | import java.nio.charset.StandardCharsets;
4 | import java.util.Random;
5 |
6 | public class IDGenerator {
7 |
8 | /**
9 | * @return Unique id
10 | */
11 | public static String generateUniqueID(int n) {
12 | // Length is bounded by 256 Character
13 | byte[] array = new byte[256];
14 | new Random().nextBytes(array);
15 |
16 | String randomString = new String(array, StandardCharsets.UTF_8);
17 | // Create a StringBuffer to store the result
18 | StringBuilder r = new StringBuilder();
19 |
20 | // Append first 20 alphanumeric characters
21 | // from the generated random String into the result
22 | for (int k = 0; k < randomString.length(); k++) {
23 | char ch = randomString.charAt(k);
24 | if (((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9')) && (n > 0)) {
25 | r.append(ch);
26 | n--;
27 | }
28 | }
29 | // return the resultant string
30 | return r.toString();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/workflows/participant/ApprovePageContentStep.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.workflows.participant;
2 |
3 | import com.adobe.granite.workflow.WorkflowSession;
4 | import com.adobe.granite.workflow.exec.ParticipantStepChooser;
5 | import com.adobe.granite.workflow.exec.WorkItem;
6 | import com.adobe.granite.workflow.metadata.MetaDataMap;
7 | import org.apache.commons.lang3.StringUtils;
8 | import org.osgi.service.component.annotations.Component;
9 | import org.slf4j.Logger;
10 | import org.slf4j.LoggerFactory;
11 |
12 | import static org.redquark.aem.tutorials.core.constants.AppConstants.ADMINISTRATORS;
13 | import static org.redquark.aem.tutorials.core.constants.AppConstants.CHOOSER_LABEL;
14 | import static org.redquark.aem.tutorials.core.constants.AppConstants.CONTENT_AUTHORS;
15 | import static org.redquark.aem.tutorials.core.constants.AppConstants.EQUALS;
16 | import static org.redquark.aem.tutorials.core.workflows.participant.ApprovePageContentStep.CHOOSER_LABEL_VALUE;
17 |
18 | @Component(
19 | service = ParticipantStepChooser.class,
20 | property = {
21 | CHOOSER_LABEL + EQUALS + CHOOSER_LABEL_VALUE
22 | }
23 | )
24 | public class ApprovePageContentStep implements ParticipantStepChooser {
25 |
26 | protected static final String CHOOSER_LABEL_VALUE = "Approve Page Content";
27 | private static final String TAG = ApprovePageContentStep.class.getSimpleName();
28 | private static final Logger LOGGER = LoggerFactory.getLogger(ApprovePageContentStep.class);
29 | private static final String CONTENT_PATH = "/content/aemtutorials";
30 |
31 | @Override
32 | public String getParticipant(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) {
33 | // Getting payload from Workflow - workItem -> workflowData -> payload
34 | String payloadType = workItem.getWorkflowData().getPayloadType();
35 | LOGGER.debug("{}: Payload type: {}", TAG, payloadType);
36 | // Check type of payload; there are two - JCR_PATH and JCR_UUID
37 | if (StringUtils.equals(payloadType, "JCR_PATH")) {
38 | // Get the JCR path from the payload
39 | String path = workItem.getWorkflowData().getPayload().toString();
40 | LOGGER.debug("{}: Payload path: {}", TAG, path);
41 | // Get process arguments which will contain the properties to update
42 | if (path.startsWith(CONTENT_PATH)) {
43 | LOGGER.debug("{}: selected user/group: {}", TAG, CONTENT_AUTHORS);
44 | return CONTENT_AUTHORS;
45 | }
46 | }
47 | return ADMINISTRATORS;
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/core/src/main/java/org/redquark/aem/tutorials/core/workflows/participant/ReviewChildrenPagesStep.java:
--------------------------------------------------------------------------------
1 | package org.redquark.aem.tutorials.core.workflows.participant;
2 |
3 | import com.adobe.granite.workflow.WorkflowSession;
4 | import com.adobe.granite.workflow.exec.ParticipantStepChooser;
5 | import com.adobe.granite.workflow.exec.WorkItem;
6 | import com.adobe.granite.workflow.metadata.MetaDataMap;
7 | import org.osgi.service.component.annotations.Component;
8 | import org.slf4j.Logger;
9 | import org.slf4j.LoggerFactory;
10 |
11 | import static org.redquark.aem.tutorials.core.constants.AppConstants.ADMINISTRATORS;
12 | import static org.redquark.aem.tutorials.core.constants.AppConstants.CHILD_PAGE_COUNT;
13 | import static org.redquark.aem.tutorials.core.constants.AppConstants.CHOOSER_LABEL;
14 | import static org.redquark.aem.tutorials.core.constants.AppConstants.CONTENT_AUTHORS;
15 | import static org.redquark.aem.tutorials.core.constants.AppConstants.EQUALS;
16 | import static org.redquark.aem.tutorials.core.workflows.participant.ReviewChildrenPagesStep.CHOOSER_LABEL_VALUE;
17 |
18 | @Component(
19 | service = ParticipantStepChooser.class,
20 | property = {
21 | CHOOSER_LABEL + EQUALS + CHOOSER_LABEL_VALUE
22 | }
23 | )
24 | public class ReviewChildrenPagesStep implements ParticipantStepChooser {
25 |
26 | protected static final String CHOOSER_LABEL_VALUE = "Review Children Pages";
27 | private static final String TAG = ReviewChildrenPagesStep.class.getSimpleName();
28 | private static final Logger LOGGER = LoggerFactory.getLogger(ReviewChildrenPagesStep.class);
29 |
30 | @Override
31 | public String getParticipant(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) {
32 | // Get the count of the children pages in the workflow
33 | int childPagesCount = workItem.getWorkflow().getMetaDataMap().get(CHILD_PAGE_COUNT, 0);
34 | LOGGER.debug("{}: child pages count: {}", TAG, childPagesCount);
35 | // Return the user group based on the number of child pages
36 | return childPagesCount > 0 ? ADMINISTRATORS : CONTENT_AUTHORS;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/ui.apps.structure/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 4.0.0
4 |
5 |
6 |
7 |
8 |
9 | org.redquark.aem.tutorials
10 | AEM-Tutorials
11 | 1.0-SNAPSHOT
12 | ../pom.xml
13 |
14 |
15 |
16 |
17 |
18 | AEM-Tutorials.ui.apps.structure
19 | content-package
20 | AEM Tutorials - Repository Structure Package
21 |
22 | Empty package that defines the structure of the Adobe Experience Manager repository the Code packages in this project deploy into.
23 | Any roots in the Code packages of this project should have their parent enumerated in the Filters list below.
24 |
25 |
26 |
27 |
28 |
29 | org.apache.jackrabbit
30 | filevault-package-maven-plugin
31 | true
32 |
33 |
34 | none
35 |
36 |
37 |
38 |
39 | /apps
40 |
41 |
42 | /apps/sling
43 | /apps/cq
44 | /apps/dam
45 | /apps/wcm
46 | /apps/msm
47 |
48 |
49 | /apps/settings
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/ui.apps/.gitignore:
--------------------------------------------------------------------------------
1 | src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-react
2 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/META-INF/vault/filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-base/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-base/css.txt:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Copyright 2017 Adobe Systems Incorporated
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | ###############################################################################
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-base/js.txt:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Copyright 2017 Adobe Systems Incorporated
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | ###############################################################################
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-dependencies/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-dependencies/css.txt:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Copyright 2017 Adobe Systems Incorporated
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | ###############################################################################
16 |
17 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-dependencies/js.txt:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Copyright 2017 Adobe Systems Incorporated
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | ###############################################################################
16 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-grid/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-grid/css.txt:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Copyright 2018 Adobe Systems Incorporated
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | ###############################################################################
16 |
17 | less/grid.less
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-grid/less/grid.less:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2018 Adobe Systems Incorporated
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @import (once) "/libs/wcm/foundation/clientlibs/grid/grid_base.less";
18 |
19 | /* maximum amount of grid cells to be provided */
20 | @max_col: 12;
21 |
22 | /* default breakpoint */
23 | .aem-Grid {
24 | .generate-grid(default, @max_col);
25 | }
26 |
27 | /* phone breakpoint */
28 | @media (max-width: 650px) {
29 | .aem-Grid {
30 | .generate-grid(phone, @max_col);
31 | }
32 | }
33 |
34 | /* tablet breakpoint */
35 | @media (min-width: 651px) and (max-width: 1200px) {
36 | .aem-Grid {
37 | .generate-grid(tablet, @max_col);
38 | }
39 | }
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-site/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-site/css.txt:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Copyright 2018 Adobe Systems Incorporated
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | ###############################################################################
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/clientlib-site/js.txt:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Copyright 2018 Adobe Systems Incorporated
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | ###############################################################################
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/customClientlibs/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/customClientlibs/css.txt:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/customClientlibs/js.txt:
--------------------------------------------------------------------------------
1 | #base=js
2 | altTextValidation.js
3 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/customClientlibs/js/altTextValidation.js:
--------------------------------------------------------------------------------
1 | $(window).adaptTo("foundation-registry")
2 | .register(
3 | "foundation.validation.validator", {
4 | selector : "#alt-special", // validates the specific alt field
5 | validate : function(el) {
6 | var $el = $(el);
7 | var $form = $el.closest('form'); // get the form
8 | var $upload = $form.find("coral-fileupload[name$=image]"); // find the file upload widget
9 | if ($upload.hasClass('is-filled') && !$el.val()) { // if class exists, return the validation message
10 | return "Enter Alt Text";
11 | } else {
12 | return;
13 | }
14 | }
15 | });
16 |
17 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/clientlibs/customClientlibs/js/altTextValidation.js.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/card/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/card/_cq_dialog/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
14 |
15 |
19 |
22 |
23 |
26 |
27 |
35 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/card/card.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
15 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/card/card.html.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/card/clientlib/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/card/clientlib/css.txt:
--------------------------------------------------------------------------------
1 | #base=css
2 | style.css
3 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/card/clientlib/css/style.css:
--------------------------------------------------------------------------------
1 | *{margin:0px;padding:0px;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;font-family: 'Roboto';}
2 |
3 | /* --- card ---- */
4 |
5 | .card{
6 | position: relative;
7 | display: inline-block;
8 | width: 300px;
9 | height: 300px;
10 | margin: 1em;
11 | background-size: cover;
12 | border-radius: 10px;
13 | box-shadow: 0px 25px 50px rgba(0, 0, 0, 0.5);
14 | overflow: hidden;
15 | -moz-transition: 0.5s;-o-transition: 0.5s;-webkit-transition: 0.5s;transition: 0.5s;
16 | }
17 | .card.ph1{background: url('//cs622627.vk.me/v622627615/26cdb/sBCCzAw79Cw.jpg') center no-repeat ;background-size: cover;}
18 | .card.ph2{background: url('//cs622627.vk.me/v622627615/26ce5/L2xeil9_uqg.jpg') center no-repeat;background-size: cover;}
19 |
20 | .card .overlay{
21 | width: 100%;
22 | height: 100%;
23 | position: absolute;
24 | padding: 1em;
25 | top: 0;
26 | z-index: 10;
27 | color: #fff;
28 | -moz-transition: 0.5s;-o-transition: 0.5s;-webkit-transition: 0.5s;transition: 0.5s;
29 | }
30 |
31 | .card .overlay h2{
32 | position: relative;
33 | margin: 2em 0px;
34 | top: -200px;
35 | -moz-transition: 0.5s;-o-transition: 0.5s;-webkit-transition: 0.5s;transition: 0.5s;
36 | }
37 |
38 | .card .overlay a{
39 | position: relative;
40 | width: 60%;
41 | top: 200px;
42 | padding: 0.5em 2em;
43 | border: 2px solid #fff;
44 | text-decoration: none;
45 | color:#FFFFFF;
46 | border-radius: 3px;
47 | -moz-transition: 0.5s;-o-transition: 0.5s;-webkit-transition: 0.5s;transition: 0.5s;
48 | }
49 | .card a:hover{background: #fff;color:#5c5c5c;}
50 |
51 | .card:hover .overlay{background: rgba(92, 92, 92, 0.8);}
52 | .card:hover h2{top: 0px;}
53 | .card:hover a{top: 0px;}
54 |
55 | @media screen and (max-width: 700px){
56 |
57 | .card{
58 | position: relative;
59 | display:block;
60 | width: 100%;
61 | height: 300px;
62 | margin: 3em 0em;
63 | border-radius: 0px;
64 | box-shadow: 0px 25px 50px rgba(0, 0, 0, 0.5);
65 | overflow: hidden;
66 | transition: all .4s ease;
67 | }
68 |
69 | }
70 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/htl/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/htl/_cq_dialog/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/htl/htl.html:
--------------------------------------------------------------------------------
1 | HTL Code Snippets
2 |
3 |
4 | Example 1:
5 | Title of the page is: ${currentPage.title}
6 |
7 |
8 | Example 2:
9 | Sling Resource Type property of the component node: ${properties.sling:resourceType}
10 |
11 |
12 | Example 3:
13 | Array join: ${['Batman', 'Superman', 'Flash'] @ join='-'}
14 |
15 |
16 | Example 4:
17 |
18 | We are in the edit mode
19 |
20 |
21 | We are in the preview mode
22 |
23 |
24 |
25 | Example 5:
26 |
27 |
28 | -
29 |
${item.title}
30 |
31 |
32 |
33 |
34 |
35 | Example 6:
36 | This text will be replaced.
37 |
38 |
39 | Example 7:
40 | Attributes are set for this element
41 |
42 |
43 | Example 8:
44 | ${item.name}
45 |
46 |
47 | Example 9:
48 |
49 |
50 |
51 | Example 10:
52 |
53 |
54 |
55 | Example 11:
56 |
57 | This can be called by using 'call'
58 |
59 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/htl/htl.html.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/htl/index.html:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 | This file will be included in the component.
10 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/image/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/image/image.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/image/image.html.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/preferences/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/preferences/preferences.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Name: ${properties.name}
6 | Country: ${properties.country}
7 | Favourite color: ${properties.color}
8 | Favourite font: ${properties.font}
9 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/preferences/preferences.html.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/search/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/search/_cq_dialog/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/search/clientlibs/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/search/clientlibs/css.txt:
--------------------------------------------------------------------------------
1 | #base=css
2 | style.css
3 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/search/clientlibs/css/style.css:
--------------------------------------------------------------------------------
1 | form {
2 | outline: 0;
3 | float: left;
4 | -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
5 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
6 | -webkit-border-radius: 4px;
7 | border-radius: 4px;
8 | }
9 |
10 | form>.textbox {
11 | outline: 0;
12 | height: 42px;
13 | width: 244px;
14 | line-height: 42px;
15 | padding: 0 16px;
16 | background-color: rgba(255, 255, 255, 0.8);
17 | color: #212121;
18 | float: left;
19 | -webkit-border-radius: 4px 0 0 4px;
20 | border-radius: 4px 0 0 4px;
21 | }
22 |
23 | form>.textbox:focus {
24 | outline: 0;
25 | background-color: #FFF;
26 | }
27 |
28 | form>.button {
29 | outline: 0;
30 | background: none;
31 | background-color: rgba(38, 50, 56, 0.8);
32 | float: left;
33 | height: 42px;
34 | width: 75px;
35 | text-align: center;
36 | line-height: 42px;
37 | border: 0;
38 | color: #FFF;
39 | font: normal normal normal 14px/1 FontAwesome;
40 | font-size: 16px;
41 | text-rendering: auto;
42 | text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
43 | -webkit-transition: background-color .4s ease;
44 | transition: background-color .4s ease;
45 | -webkit-border-radius: 0 4px 4px 0;
46 | border-radius: 0 4px 4px 0;
47 | }
48 |
49 | form>.button:hover {
50 | background-color: rgba(0, 150, 136, 0.8);
51 | }
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/search/clientlibs/js.txt:
--------------------------------------------------------------------------------
1 | #base=js
2 | script.js
3 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/search/clientlibs/js/script.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 | $('#fulltext-search').submit(function (event) {
3 | event.preventDefault();
4 |
5 | var formEl = $(this);
6 | var submitButton = $('input[type=submit]', formEl);
7 |
8 | $.ajax({
9 | type: 'POST',
10 | url: formEl.prop('action'),
11 | accept: {
12 | javascript: 'application/javascript'
13 | },
14 | data: {
15 | 'keyword': $('#keyword').val()
16 | },
17 | beforeSend: function () {
18 | submitButton.prop('disabled', 'disabled');
19 | }
20 | }).done(function (data) {
21 | submitButton.prop('disabled', false);
22 | });
23 | });
24 | });
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/search/search.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/text/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/text/_cq_dialog/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
15 |
19 |
20 |
23 |
24 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/text/text.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Text entered by the user is: ${properties.text}
6 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/text/text.html.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/todo/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/todo/_cq_dialog/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/todo/todo.html:
--------------------------------------------------------------------------------
1 | TODO List:
2 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/user/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/user/user.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
ID: ${user.id}
7 | Name: ${user.name}
8 | Gender: ${user.gender}
9 | Address: ${user.address}
10 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/content/user/user.html.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/page/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/page/customfooterlibs.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
22 |
26 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/page/customheaderlibs.html:
--------------------------------------------------------------------------------
1 |
16 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
32 |
33 |
34 |
35 |
36 |
40 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/components/structure/page/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/config/org.apache.sling.commons.log.LogManager.factory.config-aemtutorials.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/i18n/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/i18n/fr.json:
--------------------------------------------------------------------------------
1 | {
2 | "© {0} AEM Tutorials Site. All rights reserved." : "© {0} AEM Tutorials Site. Tous droits réservés."
3 | }
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/i18n/fr.json.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/templates/page-content/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
12 |
15 |
18 |
21 |
24 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/templates/page-home/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
12 |
15 |
18 |
21 |
24 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/tests/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/tests/SampleTests.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2015 Adobe Systems Incorporated
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | new hobs.TestSuite("AEM Tutorials Tests", {path:"/apps/aemtutorials/tests/SampleTests.js", register: true})
17 |
18 | .addTestCase(new hobs.TestCase("Hello World component on english page")
19 | .navigateTo("/content/aemtutorials/en.html")
20 | .asserts.location("/content/aemtutorials/en.html", true)
21 | .asserts.visible(".helloworld", true)
22 | )
23 |
24 | .addTestCase(new hobs.TestCase("Hello World component on french page")
25 | .navigateTo("/content/aemtutorials/fr.html")
26 | .asserts.location("/content/aemtutorials/fr.html", true)
27 | .asserts.visible(".helloworld", true)
28 | );
29 |
--------------------------------------------------------------------------------
/ui.apps/src/main/content/jcr_root/apps/aemtutorials/tests/js.txt:
--------------------------------------------------------------------------------
1 | SampleTests.js
--------------------------------------------------------------------------------
/ui.content/src/main/content/META-INF/vault/filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/policies/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/policies/_rep_policy.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
12 |
16 |
20 |
21 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/segments/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/_rep_policy.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/base-page/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/base-page/initial/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/base-page/policies/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/base-page/structure/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
12 |
13 |
14 |
18 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/initial/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
12 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/policies/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
13 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/structure/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
10 |
13 |
18 |
19 |
20 |
21 |
25 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/thumbnail.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/thumbnail.png.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
10 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_300.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_300.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_319.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_319.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/page/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_48.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/xf/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/xf/initial/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
11 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/xf/policies/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/xf/structure/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
10 |
15 |
16 |
17 |
21 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/xf/thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/template-types/xf/thumbnail.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/_rep_policy.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
12 |
16 |
20 |
21 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/base-template/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
12 |
13 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/base-template/initial/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
11 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/base-template/policies/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
10 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/base-template/structure/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
12 |
18 |
19 |
20 |
24 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
12 |
13 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/initial/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
12 |
15 |
18 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/structure/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
10 |
14 |
18 |
22 |
26 |
30 |
31 |
35 |
36 |
37 |
38 |
42 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/thumbnail.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/thumbnail.png.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
10 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_300.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_300.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_319.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_319.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/page-content/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_48.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/spa-app-template/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
10 |
11 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/spa-app-template/initial/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
12 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/spa-app-template/policies/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
11 |
15 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/spa-app-template/structure/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
12 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/spa-page-template/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/spa-page-template/initial/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
12 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/spa-page-template/policies/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
13 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/spa-page-template/structure/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
10 |
13 |
17 |
18 |
19 |
20 |
21 |
22 |
26 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
10 |
11 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/initial/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
11 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/policies/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
13 |
14 |
15 |
19 |
23 |
27 |
31 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/structure/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
10 |
14 |
15 |
16 |
20 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/thumbnail.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/thumbnail.png.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
9 |
10 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_128.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_319.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ani03sha/AEM-Tutorials/75a2d6f3b4a9f62f13d119813932be1a3dd60b0b/ui.content/src/main/content/jcr_root/conf/aemtutorials/settings/wcm/templates/xf-web-variation/thumbnail.png.dir/_jcr_content/_dam_thumbnails/_dam_thumbnail_319.png
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/content/aemtutorials/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/ui.content/src/main/content/jcr_root/content/aemtutorials/_jcr_content/image/file:
--------------------------------------------------------------------------------
1 | �PNG
2 |
3 |
4 | IHDR � �
5 | �{� 7IDATx����j�` �a��.rT���5��G� !l'F��b_��sn���K~���|>�� ��{= �"�� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @@� � ` 0 �� @�G= n�~��,�Rϸk�0l�i�g��`x�wx�y��<�eY�����u���$�!��j�ߋ��������9�ܩ]���$� ` 0 �� @@� � ` 0 �!|���K=��v�z��<==�n��t�'��q
6 | �� @@� � �4��p8�>�v��'��`X��x�'\���s=�#h 0 �� @@� � ` 0 �� @@� ���a%~/�� �
7 | ��m=�3�� � ` 0 ����O��{O[����