SlideShare a Scribd company logo
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Build single page applications using AngularJS on AEM
David Benge | Lead Computer Scientist
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
What Is a Single Page Application?
wikipedia:
“A single-page application (SPA), is a web application or web site that
fits on a single web page with the goal of providing a more fluid user
experience akin to a desktop application. In a SPA, either all necessary
code – HTML, JavaScript, and CSS – is retrieved with a single page
load, or the appropriate resources are dynamically loaded and added to
the page as necessary, usually in response to user actions. The page
does not reload at any point in the process, nor does control transfer to
another page”
2
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Single Page Application Pro’s and Con’s
Pro’s
 Use of page fragments or partials speeds up
the loading of secondary pages
 Better mobile device experience
 Reduced number of resource requests across
the network greatly speeds up the applications
page transitions
 Lack of full page refresh creates a more app
like smoothness leading to a richer user
experience
3
Con’s
 Has Search Engine Optimization issues due to
the fact that pages/views rendering is driven
via javascript.
 Components and some core libs rely on the
document Ready event to initialize
 Speed of the initial load can be slow
 Not social sharing friendly. Twitter and
Facebook and others have issues when users
try to share SPA pages.
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
The Technical Reasons Are Great But Why Did I really Choose To Do An SPA?
4
• The debate on my development team between web and native has
become a religious war. It was time to see if we could get the experience
we want on the mobile experience without building a native application.
• Mobile applications have their place, but I believe a well built site can
convey the same information.
• Informational mobile apps without shared web content create data silos
that make discoverability and interoperability difficult.
• Responsive is a nice start but we wanted to take it further. We are also
experimenting with a concept we call ReDaptive. Watch our GitHub and
YouTube channels for more information in the future on this concept.
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
 Must have native application like smoothness on everything from the
high resolution desktop to the smartphone.
 Search and social friendly
 Works with AEM authoring
 Our development pattern needed to be easy to follow and understand
 No JSP; all Sightly
 Semantic html markup. Each page should be useable as a data
record based on markup
 Javascript needed to be balanced with markup. Avoid 500 js library
include madness
5
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 6
Our Proof Of Concept
Combine sling with Angular
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 7
• Custom base page component that allows pages to be either an Angular application
entry point or rendered as a view partial
• Angular JS code to control the application/site and its view navigation
• Rewrite rule to help handle search engines by adding a selector
• Based on runmode Base Page includes content or an Angular ui-view element
• Responsive design
• Custom video component that makes use of Adobe Dynamic Media and native HTML5
video tag markup. Selects best rendition to use based on the video element size and
browser device group detected
• Use of BrowseCap for device detection
• Nearly all Sightly
• Use of Less for style
• Adobe Analytics for metrics
• Uses AdobeAtAdobe boiler plate project - Available in our GIT repo
• Creative Cloud Extract used to build site from XD comps
• Photoshop used to develop the comps
• Adobe Edge inspect used to debug on devices
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
High Level Technical Overview Of The Base Page Component
 We created a standard page component that inherits from
wcm/foundation/components/page.
 This new base page component has a content.html include in the center. This is where
our page views get loaded. We change the markup based on if the request was made on
a publish or author environment.
 If the request was on author we do a standard content include.
 If it’s a page request on publish we don’t do the include and just insert the div with the
angular ui-view
<div class="page-content" ui-view data-sly-test="${teamsitePage.isPublisher && !teamsitePage.isSearchEngine}"></div>
<div data-sly-include="content.html" class="page-content" data-sly-test="${!teamsitePage.isPublisher ||
teamsitePage.isSearchEngine}"></div>
 In the base component we also include some meta data. We use this to tell angular and
other components how to behave based on the environment.
<meta name="publisher" content="${teamsitePage.isPublisher}"/>
<meta name="wcmmode" content="${teamsitePage.metaWcmMode}">
8
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
High Level Technical Overview Of The Standard Page Component
 All the pages inherit from the
base page
 Each new page component
includes their markup in a file
named content.html
 If needed they can include a
controller like in this example
 The controller code is stored in a
client lib under the page
component
9
<div class="contact-block" ng-controller="ContactController">
<div class="hi"><span>Hi. </span>How can we help you?</div>
<div class="methods">
<div class="method">
<div class="title">Technology Questions</div>
<div class="phone">+1 613 857 9233</div>
<div class="email">adobe@adobe.com</div>
</div>
<div class="method">
<div class="title">Work with Us</div>
<div class="phone">+1 613 857 9233</div>
<div class="email">adobe@adobe.com</div>
</div>
<div class="method">
<div class="title">Everything Else</div>
<div class="phone">+1 613 857 9233</div>
<div class="email">adobe@adobe.com</div>
</div>
</div>
</div>
</div>
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
High Level Technical Overview Of The Base Page Component Partial Selector
 Under the base page component we have a file named partial.html.
This file handles any request for a page that has the partial selection
appended to it. This file simply includes content.html with No header,
No footer, No navigation, just the meaty center of the view in our case.
 The partial also includes new metatags with data to replace the
header meta data. The new tags are prefixed with partial for example
partial:title. Its contents will replace the header metatag’s content for
title. The replacement of the metadata is handled by the Angular
application.
<meta name="partial:keywords" content="${head.keywords}" id="partialKeywords"/>
10
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
High Level Technical Overview Of The Base Page Component Partial Selector
We need to tell Angular about the site hierarchy because Angular will be
handling navigation from view to view. Angular controls the view
loading on the client side via a library called router.ui so it needs to
know how map urls to view partials.
Under the base page component we have a file named routes.json.jsp.
This file provides us a endpoint for Angular’s ui.router to use to load the
router and state provider on the fly on the first page load. One thing we
do alter on the routes is the value of the templateUrl returned from our
routes.json.jsp. On our page path we include a partial selector. Thanks
to the magic that is sling when we make that request now we will get
just the center conent of the page when we navigate from view to view.
11
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
High Level Technical Overview Of The Base Page Component Angular Router
12
Example output from our routes.json.jsp file is
shown to the left.
This is an example of how we are rewriting out our
routes and re-writing the templateUrl to include the
.partial selector.
Example /content/teamsite/work.html
becomes
/content/teamsite/work.partial.html
When the application/site is loaded in the browser
any link or navigation to a url for example
/content/teamsite/work/cmo.html is handled by the
$location service. It will resolve the url to the
templateUrl which is set to
/content/teamsite/work/cmo.partial.html.
The request to
/content/teamsite/work/cmo.partial.html will be
returned as just the center of the view and injected
into the existing page.
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
So Far This Is What It Looks Like On The AEM Page Component Side
13
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
High Technical Overview Of The Proof Of Concept – Component Conclusion
So that’s it for the AEM side of the application. Once the base component pattern was
established it was easy to work with.
Its all fairly normal AEM component and page development from that point on. With a few
exceptions for stock components that make heavy use of the document ready event.
Summary
 In author runmode, it will do full page refreshes
 Search engine friendly due to the fact there is a full page request
 On social shares of a page, the path exists
 In publish run mode, the client side will do partial page refresh
Thanks to the magic of sling resolution we are able to serve full pages or partials as
needed. Every path can be an entry point to our SPA base application.
14
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 15
The Angular Bits
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
The Angular Js bits we used to round out this solution are:
 Controller – Controllers ended up being minimally used at the page
level. Router.ui – used to load and control the routes. We also use the
routing events to load page meta data
 Service – We have a service that helps with pulling and setting meta
data on the page
 Directives – We have a few to provide functionality
 Custom html5 video player directive
 Explore page directive to help with the scrolling and other ui bits on
the explore page
 Angular Carousel which drives the image carousels
16
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Whats Next?
17
• We will be adding more functionality to the proof of concept
site
• We are really liking directives and plan to do more work in that
area and investigate using polymer
• Clean up of the header libs to remove some of the
dependency on document ready event
© 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.
Code is located in out Github repo https://github.com/AdobeAtAdobe
Live site can be found at http://www.adobeatadobe.com
Twitter @AdobeAtAdobe
Video sessions on this proof of concept will be posted on
our YouTube channel https://www.youtube.com/user/AdobeAtAdobe

More Related Content

What's hot

AEM Sightly Template Language
AEM Sightly Template LanguageAEM Sightly Template Language
AEM Sightly Template Language
Gabriel Walt
 
User Interface customization for AEM 6
User Interface customization for AEM 6User Interface customization for AEM 6
User Interface customization for AEM 6
Damien Antipa
 
Sling Models Overview
Sling Models OverviewSling Models Overview
Sling Models Overview
Justin Edelson
 
AEM 6.1 User Interface Customization
AEM 6.1 User Interface CustomizationAEM 6.1 User Interface Customization
AEM 6.1 User Interface Customization
Christian Meyer
 
Adobe Experience Manager Core Components
Adobe Experience Manager Core ComponentsAdobe Experience Manager Core Components
Adobe Experience Manager Core Components
Gabriel Walt
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and Sling
Lo Ki
 
Sling models by Justin Edelson
Sling models by Justin Edelson Sling models by Justin Edelson
Sling models by Justin Edelson AEM HUB
 
Dynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEMDynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEM
Bojana Popovska
 
Experience and Content Fragment
Experience and Content FragmentExperience and Content Fragment
Experience and Content Fragment
Heena Madan
 
Too Many Tools - How AWS Systems Manager Bridges Operational Models
Too Many Tools - How AWS Systems Manager Bridges Operational ModelsToo Many Tools - How AWS Systems Manager Bridges Operational Models
Too Many Tools - How AWS Systems Manager Bridges Operational Models
Amazon Web Services
 
HTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowHTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowPrabhdeep Singh
 
Landing Zones Creating a Foundation - AWS Summit Sydney 2018
Landing Zones Creating a Foundation - AWS Summit Sydney 2018Landing Zones Creating a Foundation - AWS Summit Sydney 2018
Landing Zones Creating a Foundation - AWS Summit Sydney 2018
Amazon Web Services
 
Multi Site Manager
Multi Site ManagerMulti Site Manager
Multi Site Managershivani garg
 
SPA Editor - Adobe Experience Manager Sites
SPA Editor - Adobe Experience Manager SitesSPA Editor - Adobe Experience Manager Sites
SPA Editor - Adobe Experience Manager Sites
Gabriel Walt
 
AWS에서 SAP 운영하기 – 한국 고객의 모범 사례 집중 분석 - (조영준 상무 / 김진호 선임부장, BSG Partners)
AWS에서 SAP 운영하기 – 한국 고객의 모범 사례 집중 분석 - (조영준 상무 / 김진호 선임부장, BSG Partners)AWS에서 SAP 운영하기 – 한국 고객의 모범 사례 집중 분석 - (조영준 상무 / 김진호 선임부장, BSG Partners)
AWS에서 SAP 운영하기 – 한국 고객의 모범 사례 집중 분석 - (조영준 상무 / 김진호 선임부장, BSG Partners)
Amazon Web Services Korea
 
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
Amazon Web Services Korea
 
AEM target Integration
AEM target IntegrationAEM target Integration
AEM target Integration
Kanika Gera
 
Adobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingAdobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job Processing
Carsten Ziegeler
 
AEM Best Practices for Component Development
AEM Best Practices for Component DevelopmentAEM Best Practices for Component Development
AEM Best Practices for Component Development
Gabriel Walt
 
실시간 스트리밍 분석 Kinesis Data Analytics Deep Dive
실시간 스트리밍 분석  Kinesis Data Analytics Deep Dive실시간 스트리밍 분석  Kinesis Data Analytics Deep Dive
실시간 스트리밍 분석 Kinesis Data Analytics Deep Dive
Amazon Web Services Korea
 

What's hot (20)

AEM Sightly Template Language
AEM Sightly Template LanguageAEM Sightly Template Language
AEM Sightly Template Language
 
User Interface customization for AEM 6
User Interface customization for AEM 6User Interface customization for AEM 6
User Interface customization for AEM 6
 
Sling Models Overview
Sling Models OverviewSling Models Overview
Sling Models Overview
 
AEM 6.1 User Interface Customization
AEM 6.1 User Interface CustomizationAEM 6.1 User Interface Customization
AEM 6.1 User Interface Customization
 
Adobe Experience Manager Core Components
Adobe Experience Manager Core ComponentsAdobe Experience Manager Core Components
Adobe Experience Manager Core Components
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and Sling
 
Sling models by Justin Edelson
Sling models by Justin Edelson Sling models by Justin Edelson
Sling models by Justin Edelson
 
Dynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEMDynamic components using SPA concepts in AEM
Dynamic components using SPA concepts in AEM
 
Experience and Content Fragment
Experience and Content FragmentExperience and Content Fragment
Experience and Content Fragment
 
Too Many Tools - How AWS Systems Manager Bridges Operational Models
Too Many Tools - How AWS Systems Manager Bridges Operational ModelsToo Many Tools - How AWS Systems Manager Bridges Operational Models
Too Many Tools - How AWS Systems Manager Bridges Operational Models
 
HTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowHTL(Sightly) - All you need to know
HTL(Sightly) - All you need to know
 
Landing Zones Creating a Foundation - AWS Summit Sydney 2018
Landing Zones Creating a Foundation - AWS Summit Sydney 2018Landing Zones Creating a Foundation - AWS Summit Sydney 2018
Landing Zones Creating a Foundation - AWS Summit Sydney 2018
 
Multi Site Manager
Multi Site ManagerMulti Site Manager
Multi Site Manager
 
SPA Editor - Adobe Experience Manager Sites
SPA Editor - Adobe Experience Manager SitesSPA Editor - Adobe Experience Manager Sites
SPA Editor - Adobe Experience Manager Sites
 
AWS에서 SAP 운영하기 – 한국 고객의 모범 사례 집중 분석 - (조영준 상무 / 김진호 선임부장, BSG Partners)
AWS에서 SAP 운영하기 – 한국 고객의 모범 사례 집중 분석 - (조영준 상무 / 김진호 선임부장, BSG Partners)AWS에서 SAP 운영하기 – 한국 고객의 모범 사례 집중 분석 - (조영준 상무 / 김진호 선임부장, BSG Partners)
AWS에서 SAP 운영하기 – 한국 고객의 모범 사례 집중 분석 - (조영준 상무 / 김진호 선임부장, BSG Partners)
 
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기 - 김준형 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
 
AEM target Integration
AEM target IntegrationAEM target Integration
AEM target Integration
 
Adobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingAdobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job Processing
 
AEM Best Practices for Component Development
AEM Best Practices for Component DevelopmentAEM Best Practices for Component Development
AEM Best Practices for Component Development
 
실시간 스트리밍 분석 Kinesis Data Analytics Deep Dive
실시간 스트리밍 분석  Kinesis Data Analytics Deep Dive실시간 스트리밍 분석  Kinesis Data Analytics Deep Dive
실시간 스트리밍 분석 Kinesis Data Analytics Deep Dive
 

Similar to Build single page applications using AngularJS on AEM

How to make React Applications SEO-friendly
How to make React Applications SEO-friendlyHow to make React Applications SEO-friendly
How to make React Applications SEO-friendly
Fibonalabs
 
Angular webinar - Credo Systemz
Angular webinar - Credo SystemzAngular webinar - Credo Systemz
Angular webinar - Credo Systemz
Training Institute
 
Google app development
Google app developmentGoogle app development
Google app development
Aurel Medvegy
 
Google app developers
Google app developersGoogle app developers
Google app developers
Aurel Medvegy
 
Google development
Google developmentGoogle development
Google development
Aurel Medvegy
 
Google app
Google appGoogle app
Google app
Aurel Medvegy
 
Web software development
Web software developmentWeb software development
Web software development
Aurel Medvegy
 
Google app developer
Google app developerGoogle app developer
Google app developer
Aurel Medvegy
 
Google web tools
Google web toolsGoogle web tools
Google web tools
Aurel Medvegy
 
Google apps development
Google apps developmentGoogle apps development
Google apps development
Aurel Medvegy
 
Google app example
Google app exampleGoogle app example
Google app example
Aurel Medvegy
 
Create a google app
Create a google appCreate a google app
Create a google app
Aurel Medvegy
 
Google app engine own domain
Google app engine own domainGoogle app engine own domain
Google app engine own domain
Aurel Medvegy
 
Google webtools
Google webtoolsGoogle webtools
Google webtools
Aurel Medvegy
 
Google sites development
Google sites developmentGoogle sites development
Google sites development
Aurel Medvegy
 
Google app pricing
Google app pricingGoogle app pricing
Google app pricing
Aurel Medvegy
 
Google app engine json
Google app engine jsonGoogle app engine json
Google app engine json
Aurel Medvegy
 
Create google app
Create google appCreate google app
Create google app
Aurel Medvegy
 
Sample google app engine applications
Sample google app engine applicationsSample google app engine applications
Sample google app engine applications
Aurel Medvegy
 
Make google app
Make google appMake google app
Make google app
Aurel Medvegy
 

Similar to Build single page applications using AngularJS on AEM (20)

How to make React Applications SEO-friendly
How to make React Applications SEO-friendlyHow to make React Applications SEO-friendly
How to make React Applications SEO-friendly
 
Angular webinar - Credo Systemz
Angular webinar - Credo SystemzAngular webinar - Credo Systemz
Angular webinar - Credo Systemz
 
Google app development
Google app developmentGoogle app development
Google app development
 
Google app developers
Google app developersGoogle app developers
Google app developers
 
Google development
Google developmentGoogle development
Google development
 
Google app
Google appGoogle app
Google app
 
Web software development
Web software developmentWeb software development
Web software development
 
Google app developer
Google app developerGoogle app developer
Google app developer
 
Google web tools
Google web toolsGoogle web tools
Google web tools
 
Google apps development
Google apps developmentGoogle apps development
Google apps development
 
Google app example
Google app exampleGoogle app example
Google app example
 
Create a google app
Create a google appCreate a google app
Create a google app
 
Google app engine own domain
Google app engine own domainGoogle app engine own domain
Google app engine own domain
 
Google webtools
Google webtoolsGoogle webtools
Google webtools
 
Google sites development
Google sites developmentGoogle sites development
Google sites development
 
Google app pricing
Google app pricingGoogle app pricing
Google app pricing
 
Google app engine json
Google app engine jsonGoogle app engine json
Google app engine json
 
Create google app
Create google appCreate google app
Create google app
 
Sample google app engine applications
Sample google app engine applicationsSample google app engine applications
Sample google app engine applications
 
Make google app
Make google appMake google app
Make google app
 

More from AdobeMarketingCloud

Adobe Ask the AEM Community Expert Session Oct 2016
Adobe Ask the AEM Community Expert Session Oct 2016Adobe Ask the AEM Community Expert Session Oct 2016
Adobe Ask the AEM Community Expert Session Oct 2016
AdobeMarketingCloud
 
Ask the expert AEM Assets best practices 092016
Ask the expert  AEM Assets best practices 092016Ask the expert  AEM Assets best practices 092016
Ask the expert AEM Assets best practices 092016
AdobeMarketingCloud
 
AEM GEMS Session Template Editor Sept 14 2016
AEM GEMS Session Template Editor Sept 14 2016AEM GEMS Session Template Editor Sept 14 2016
AEM GEMS Session Template Editor Sept 14 2016
AdobeMarketingCloud
 
AEM GEMS Session SAML authentication in AEM
AEM GEMS Session SAML authentication in AEMAEM GEMS Session SAML authentication in AEM
AEM GEMS Session SAML authentication in AEM
AdobeMarketingCloud
 
Immerse 2016 Efficient publishing with content fragments
Immerse 2016 Efficient publishing with content fragmentsImmerse 2016 Efficient publishing with content fragments
Immerse 2016 Efficient publishing with content fragments
AdobeMarketingCloud
 
IMMERSE 2016 Introducing content fragments
IMMERSE 2016 Introducing content fragmentsIMMERSE 2016 Introducing content fragments
IMMERSE 2016 Introducing content fragments
AdobeMarketingCloud
 
IMMERSE 2016 Cedric Huesler US Keynote
IMMERSE 2016 Cedric Huesler US KeynoteIMMERSE 2016 Cedric Huesler US Keynote
IMMERSE 2016 Cedric Huesler US Keynote
AdobeMarketingCloud
 
IMMERSE 2016 IST Mark Szulc Keynote
IMMERSE 2016 IST Mark Szulc KeynoteIMMERSE 2016 IST Mark Szulc Keynote
IMMERSE 2016 IST Mark Szulc Keynote
AdobeMarketingCloud
 
AEM GEMs Session Oak Lucene Indexes
AEM GEMs Session Oak Lucene IndexesAEM GEMs Session Oak Lucene Indexes
AEM GEMs Session Oak Lucene Indexes
AdobeMarketingCloud
 
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing CloudIMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
AdobeMarketingCloud
 
IMMERSE'16 Introduction to AEM Tooling
IMMERSE'16 Introduction to AEM ToolingIMMERSE'16 Introduction to AEM Tooling
IMMERSE'16 Introduction to AEM Tooling
AdobeMarketingCloud
 
Introduction to Adobe Experience Manager based e commerce
Introduction to Adobe Experience Manager based e commerceIntroduction to Adobe Experience Manager based e commerce
Introduction to Adobe Experience Manager based e commerce
AdobeMarketingCloud
 
IMMERSE'16 Introduction to adobe experience manager back end
IMMERSE'16 Introduction to adobe experience manager back endIMMERSE'16 Introduction to adobe experience manager back end
IMMERSE'16 Introduction to adobe experience manager back end
AdobeMarketingCloud
 
Ask the AEM Community Expert Feb 2016 Session: AEM + Brackets
Ask the AEM Community Expert Feb 2016 Session: AEM + BracketsAsk the AEM Community Expert Feb 2016 Session: AEM + Brackets
Ask the AEM Community Expert Feb 2016 Session: AEM + Brackets
AdobeMarketingCloud
 
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMBuild single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEM
AdobeMarketingCloud
 

More from AdobeMarketingCloud (15)

Adobe Ask the AEM Community Expert Session Oct 2016
Adobe Ask the AEM Community Expert Session Oct 2016Adobe Ask the AEM Community Expert Session Oct 2016
Adobe Ask the AEM Community Expert Session Oct 2016
 
Ask the expert AEM Assets best practices 092016
Ask the expert  AEM Assets best practices 092016Ask the expert  AEM Assets best practices 092016
Ask the expert AEM Assets best practices 092016
 
AEM GEMS Session Template Editor Sept 14 2016
AEM GEMS Session Template Editor Sept 14 2016AEM GEMS Session Template Editor Sept 14 2016
AEM GEMS Session Template Editor Sept 14 2016
 
AEM GEMS Session SAML authentication in AEM
AEM GEMS Session SAML authentication in AEMAEM GEMS Session SAML authentication in AEM
AEM GEMS Session SAML authentication in AEM
 
Immerse 2016 Efficient publishing with content fragments
Immerse 2016 Efficient publishing with content fragmentsImmerse 2016 Efficient publishing with content fragments
Immerse 2016 Efficient publishing with content fragments
 
IMMERSE 2016 Introducing content fragments
IMMERSE 2016 Introducing content fragmentsIMMERSE 2016 Introducing content fragments
IMMERSE 2016 Introducing content fragments
 
IMMERSE 2016 Cedric Huesler US Keynote
IMMERSE 2016 Cedric Huesler US KeynoteIMMERSE 2016 Cedric Huesler US Keynote
IMMERSE 2016 Cedric Huesler US Keynote
 
IMMERSE 2016 IST Mark Szulc Keynote
IMMERSE 2016 IST Mark Szulc KeynoteIMMERSE 2016 IST Mark Szulc Keynote
IMMERSE 2016 IST Mark Szulc Keynote
 
AEM GEMs Session Oak Lucene Indexes
AEM GEMs Session Oak Lucene IndexesAEM GEMs Session Oak Lucene Indexes
AEM GEMs Session Oak Lucene Indexes
 
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing CloudIMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
IMMERSE'16 Intro to Adobe Experience Manager & Adobe Marketing Cloud
 
IMMERSE'16 Introduction to AEM Tooling
IMMERSE'16 Introduction to AEM ToolingIMMERSE'16 Introduction to AEM Tooling
IMMERSE'16 Introduction to AEM Tooling
 
Introduction to Adobe Experience Manager based e commerce
Introduction to Adobe Experience Manager based e commerceIntroduction to Adobe Experience Manager based e commerce
Introduction to Adobe Experience Manager based e commerce
 
IMMERSE'16 Introduction to adobe experience manager back end
IMMERSE'16 Introduction to adobe experience manager back endIMMERSE'16 Introduction to adobe experience manager back end
IMMERSE'16 Introduction to adobe experience manager back end
 
Ask the AEM Community Expert Feb 2016 Session: AEM + Brackets
Ask the AEM Community Expert Feb 2016 Session: AEM + BracketsAsk the AEM Community Expert Feb 2016 Session: AEM + Brackets
Ask the AEM Community Expert Feb 2016 Session: AEM + Brackets
 
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMBuild single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEM
 

Recently uploaded

Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Enhancing Performance with Globus and the Science DMZ
Enhancing Performance with Globus and the Science DMZEnhancing Performance with Globus and the Science DMZ
Enhancing Performance with Globus and the Science DMZ
Globus
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
UiPathCommunity
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
Vlad Stirbu
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 

Recently uploaded (20)

Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Enhancing Performance with Globus and the Science DMZ
Enhancing Performance with Globus and the Science DMZEnhancing Performance with Globus and the Science DMZ
Enhancing Performance with Globus and the Science DMZ
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 

Build single page applications using AngularJS on AEM

  • 1. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Build single page applications using AngularJS on AEM David Benge | Lead Computer Scientist
  • 2. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. What Is a Single Page Application? wikipedia: “A single-page application (SPA), is a web application or web site that fits on a single web page with the goal of providing a more fluid user experience akin to a desktop application. In a SPA, either all necessary code – HTML, JavaScript, and CSS – is retrieved with a single page load, or the appropriate resources are dynamically loaded and added to the page as necessary, usually in response to user actions. The page does not reload at any point in the process, nor does control transfer to another page” 2
  • 3. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Single Page Application Pro’s and Con’s Pro’s  Use of page fragments or partials speeds up the loading of secondary pages  Better mobile device experience  Reduced number of resource requests across the network greatly speeds up the applications page transitions  Lack of full page refresh creates a more app like smoothness leading to a richer user experience 3 Con’s  Has Search Engine Optimization issues due to the fact that pages/views rendering is driven via javascript.  Components and some core libs rely on the document Ready event to initialize  Speed of the initial load can be slow  Not social sharing friendly. Twitter and Facebook and others have issues when users try to share SPA pages.
  • 4. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. The Technical Reasons Are Great But Why Did I really Choose To Do An SPA? 4 • The debate on my development team between web and native has become a religious war. It was time to see if we could get the experience we want on the mobile experience without building a native application. • Mobile applications have their place, but I believe a well built site can convey the same information. • Informational mobile apps without shared web content create data silos that make discoverability and interoperability difficult. • Responsive is a nice start but we wanted to take it further. We are also experimenting with a concept we call ReDaptive. Watch our GitHub and YouTube channels for more information in the future on this concept.
  • 5. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.  Must have native application like smoothness on everything from the high resolution desktop to the smartphone.  Search and social friendly  Works with AEM authoring  Our development pattern needed to be easy to follow and understand  No JSP; all Sightly  Semantic html markup. Each page should be useable as a data record based on markup  Javascript needed to be balanced with markup. Avoid 500 js library include madness 5
  • 6. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 6 Our Proof Of Concept Combine sling with Angular
  • 7. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 7 • Custom base page component that allows pages to be either an Angular application entry point or rendered as a view partial • Angular JS code to control the application/site and its view navigation • Rewrite rule to help handle search engines by adding a selector • Based on runmode Base Page includes content or an Angular ui-view element • Responsive design • Custom video component that makes use of Adobe Dynamic Media and native HTML5 video tag markup. Selects best rendition to use based on the video element size and browser device group detected • Use of BrowseCap for device detection • Nearly all Sightly • Use of Less for style • Adobe Analytics for metrics • Uses AdobeAtAdobe boiler plate project - Available in our GIT repo • Creative Cloud Extract used to build site from XD comps • Photoshop used to develop the comps • Adobe Edge inspect used to debug on devices
  • 8. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. High Level Technical Overview Of The Base Page Component  We created a standard page component that inherits from wcm/foundation/components/page.  This new base page component has a content.html include in the center. This is where our page views get loaded. We change the markup based on if the request was made on a publish or author environment.  If the request was on author we do a standard content include.  If it’s a page request on publish we don’t do the include and just insert the div with the angular ui-view <div class="page-content" ui-view data-sly-test="${teamsitePage.isPublisher && !teamsitePage.isSearchEngine}"></div> <div data-sly-include="content.html" class="page-content" data-sly-test="${!teamsitePage.isPublisher || teamsitePage.isSearchEngine}"></div>  In the base component we also include some meta data. We use this to tell angular and other components how to behave based on the environment. <meta name="publisher" content="${teamsitePage.isPublisher}"/> <meta name="wcmmode" content="${teamsitePage.metaWcmMode}"> 8
  • 9. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. High Level Technical Overview Of The Standard Page Component  All the pages inherit from the base page  Each new page component includes their markup in a file named content.html  If needed they can include a controller like in this example  The controller code is stored in a client lib under the page component 9 <div class="contact-block" ng-controller="ContactController"> <div class="hi"><span>Hi. </span>How can we help you?</div> <div class="methods"> <div class="method"> <div class="title">Technology Questions</div> <div class="phone">+1 613 857 9233</div> <div class="email">adobe@adobe.com</div> </div> <div class="method"> <div class="title">Work with Us</div> <div class="phone">+1 613 857 9233</div> <div class="email">adobe@adobe.com</div> </div> <div class="method"> <div class="title">Everything Else</div> <div class="phone">+1 613 857 9233</div> <div class="email">adobe@adobe.com</div> </div> </div> </div> </div>
  • 10. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. High Level Technical Overview Of The Base Page Component Partial Selector  Under the base page component we have a file named partial.html. This file handles any request for a page that has the partial selection appended to it. This file simply includes content.html with No header, No footer, No navigation, just the meaty center of the view in our case.  The partial also includes new metatags with data to replace the header meta data. The new tags are prefixed with partial for example partial:title. Its contents will replace the header metatag’s content for title. The replacement of the metadata is handled by the Angular application. <meta name="partial:keywords" content="${head.keywords}" id="partialKeywords"/> 10
  • 11. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. High Level Technical Overview Of The Base Page Component Partial Selector We need to tell Angular about the site hierarchy because Angular will be handling navigation from view to view. Angular controls the view loading on the client side via a library called router.ui so it needs to know how map urls to view partials. Under the base page component we have a file named routes.json.jsp. This file provides us a endpoint for Angular’s ui.router to use to load the router and state provider on the fly on the first page load. One thing we do alter on the routes is the value of the templateUrl returned from our routes.json.jsp. On our page path we include a partial selector. Thanks to the magic that is sling when we make that request now we will get just the center conent of the page when we navigate from view to view. 11
  • 12. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. High Level Technical Overview Of The Base Page Component Angular Router 12 Example output from our routes.json.jsp file is shown to the left. This is an example of how we are rewriting out our routes and re-writing the templateUrl to include the .partial selector. Example /content/teamsite/work.html becomes /content/teamsite/work.partial.html When the application/site is loaded in the browser any link or navigation to a url for example /content/teamsite/work/cmo.html is handled by the $location service. It will resolve the url to the templateUrl which is set to /content/teamsite/work/cmo.partial.html. The request to /content/teamsite/work/cmo.partial.html will be returned as just the center of the view and injected into the existing page.
  • 13. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. So Far This Is What It Looks Like On The AEM Page Component Side 13
  • 14. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. High Technical Overview Of The Proof Of Concept – Component Conclusion So that’s it for the AEM side of the application. Once the base component pattern was established it was easy to work with. Its all fairly normal AEM component and page development from that point on. With a few exceptions for stock components that make heavy use of the document ready event. Summary  In author runmode, it will do full page refreshes  Search engine friendly due to the fact there is a full page request  On social shares of a page, the path exists  In publish run mode, the client side will do partial page refresh Thanks to the magic of sling resolution we are able to serve full pages or partials as needed. Every path can be an entry point to our SPA base application. 14
  • 15. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 15 The Angular Bits
  • 16. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. The Angular Js bits we used to round out this solution are:  Controller – Controllers ended up being minimally used at the page level. Router.ui – used to load and control the routes. We also use the routing events to load page meta data  Service – We have a service that helps with pulling and setting meta data on the page  Directives – We have a few to provide functionality  Custom html5 video player directive  Explore page directive to help with the scrolling and other ui bits on the explore page  Angular Carousel which drives the image carousels 16
  • 17. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Whats Next? 17 • We will be adding more functionality to the proof of concept site • We are really liking directives and plan to do more work in that area and investigate using polymer • Clean up of the header libs to remove some of the dependency on document ready event
  • 18. © 2015 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. Code is located in out Github repo https://github.com/AdobeAtAdobe Live site can be found at http://www.adobeatadobe.com Twitter @AdobeAtAdobe Video sessions on this proof of concept will be posted on our YouTube channel https://www.youtube.com/user/AdobeAtAdobe