SlideShare a Scribd company logo
Using Share Extensibility Modules
        in Share Extras

     Will Abson (@wabson)
Agenda
•    Introduction
•    Custom Doclib Views
•    Customizing Custom Views
•    Customizing Dashlets
•    Customizing Document Details page
About Me
•  Integrations Engineer @ Alfresco
•  Founder and Lead of Share Extras
•  Creator of Site Geotagged Content Add-on
Recap – Share Extensibility
•  TTL by Dave Draper, May 2012
•  Share Customizations Live by Dave
   Draper and Erik Winlöf, Alfresco DevCon,
   Nov 2012
Extensibility Main Points
•  Declare modules in site-data/extensions
•  Change component behaviors by modifying the
   script model via a controller .js extension
•  Add HTML markup before, after, or instead of
   the default component content via @region
   directive
  –  As of 4.2.b, many components support adding
     markup into the component via the @markup directive
Extensibility Main Points
•  Add additional client-side dependencies
   via .head.ftl extensions, or (in 4.2) using
   the @script and @link directives in
   a .html.ftl extension
•  Add or override UI labels with
   additional .properties files
Site Geotagged Content
•  Visualize Geotagged
   Content in Share
  –  Using Google Maps
•  Tika provides
   automatic extraction
   of Geographic info
   from files
  –  e.g. EXIF data in
     digital photos
Site Geotagged Content
Originally just a Site Dashlet
Site Geotagged Content
Now also a Custom Doclib View
Custom DocLib Views
•  Allows us to add in our own views, which
   can be selected by the user
•  Requires Alfresco 4.0.2 / 4.2.a or later
•  More information on blog post by Ray
   Gauss II
•  Implemented as client-side renderer
   classes
Geographic Renderer
•  Built on top of the thumbnail renderer
•  We need to define
  –  Module definition
  –  Additional HTML markup (via Freemarker)
  –  Component controller extension
  –  Client-side renderer class
  –  CSS, icon, labels
Renderer Module Definition
org_sharextras_doclib-geo-view.xml

<extension>
    <modules>
        <module>
             <id>Document List Geographic View</id>
             <customizations>
                 <customization>
                     <targetPackageRoot>org.alfresco</targetPackageRoot>
                     <sourcePackageRoot>org.sharextras.customization.doclib-
geo-view</sourcePackageRoot>
                 </customization>
             </customizations>
        </module>
    </modules>
</extension>
Renderer HTML Markup
components/documentlibrary/documentlist.get.html.ftl
<@markup id="customDocLibView" target="documentListContainer" action="after">
   <div id="${args.htmlid}-geo" class="alf-geo documents"></div>
   <div id="${args.htmlid}-geo-empty" class="hidden">
       <div class="yui-dt-liner"></div>
   </div>
   <div id="${args.htmlid}-geo-item-template" class="alf-geo-item hidden”>...</div>
   ...
     <script type="text/javascript">//<![CDATA[
         YAHOO.Bubbling.subscribe("postSetupViewRenderers", function(layer, args) {
             var scope = args[1].scope;
             var geoViewRenderer = new ${geoRendererClass}("geo")
             geoViewRenderer.zoomLevel = ${preferences.zoomLevel!15};
             geoViewRenderer.center = "${(preferences.center!'')?js_string}";
             geoViewRenderer.mapTypeId = "${(preferences.mapTypeId!'')?js_string}";
             scope.registerViewRenderer(geoViewRenderer);
         });
     //]]></script>
</@>
Renderer Controller Extension
components/documentlibrary/documentlist.get.js

model.viewRendererNames.push("geo");
model.geoRendererClass =
"Extras.DocumentListGMapsGeoViewRenderer";
Renderer Client-side Class
source/web/extras/components/documentlibrary/
documentlist-geo.js

Extras.DocumentListGMapsGeoViewRenderer = function
DocumentListGMapsGeoViewRenderer_constructor(name)
{
   ...
}

YAHOO.extend(Extras.DocumentListGMapsGeoViewRenderer,
Extras.DocumentListGeoViewRendererBase,
{
   setupRenderer: function DL_GVR_setupRenderer(scope) {...},
   renderView: function DL_GVR_renderView(scope, sRequest, oResponse,
oPayload) {...}
}
Demo
•  Site Geotagged Content Dashlet
•  Site Geographic View
Introducing Leaflet
•  A great alternative to
   Google Maps
•  Open Source
•  Mobile-friendly
•  Plugin a wide range
   of mapping providers



                  leafletjs.com
Changing the View Behaviour
•  We’ll use a second module for this
  –  Order is important!
•  We need to provide
  –  Module definition
  –  A further webscript controller extension
Renderer Override Module
org_sharextras_doclib-geo-view-leaflet.xml

<extension>
    <modules>
        <module>
             <id>Document List Geographic View</id>
             <customizations>
                 <customization>
                     <targetPackageRoot>org.alfresco</targetPackageRoot>
                     <sourcePackageRoot>org.sharextras.customization.doclib-
geo-view-leaflet</sourcePackageRoot>
                 </customization>
             </customizations>
        </module>
    </modules>
</extension>
Renderer Override Controller
Extension
components/documentlibrary/documentlist.get.js

model.geoRendererClass =
"Extras.DocumentListLeafletGeoViewRenderer";
Demo
•  Site Geographic View with Leaflet
Changing other Components
•  The same approach is valid for most
   OOTB components, which populate the
   model.widgets object
  –  The @createWidgets Freemarker directive
     new in 4.2 then renders the widget markup
•  To demonstrate this, let’s also change the
   dashlet behavior
Demo
•  Site Geotagged Content Dashlet with
   Leaflet
Custom DocLib Previewers
•  The ability to ‘intervene’ between the
   widget configuration being declared and it
   being rendered is incredibly useful in other
   places, too!
•  Let’s look at the PdfJs viewer included in
   the Media Viewers add-on as an example
Previewer Controller Extension
components/documentlibrary/documentlist.get.js
if (model.widgets) // Protection for older versions
{
   for (var i = 0; i < model.widgets.length; i++)
   {
       var widget = model.widgets[i];
       if (widget.id == "WebPreview")
       {
          // Insert new pluginCondition(s) at start of the chain
          var conditions = [{...}];
          var oldConditions = eval("(" + widget.options.pluginConditions + ")");
          // Add the other conditions back in
          for (var j = 0; j < oldConditions.length; j++)
          {
             conditions.push(oldConditions[j]);
          }
          // Override the original conditions
          model.pluginConditions = jsonUtils.toJSONString(conditions);
          widget.options.pluginConditions = model.pluginConditions;
     }
}
Demo
•  PdfJs Viewer
More Information
•  http://sharextras.org
•  http://www.slideshare.net/alfresco/tech-
   talk-live-on-share-extensibility
•  http://blogs.alfresco.com/wp/developer/
   author/ddraper/
Tech talk live   share extras extension modules feb 13

More Related Content

PDF
Tech talk-live-alfresco-drupal
PDF
Brian Campo, DoD JCS, Content.gov Presentation
PPTX
Hdv309 - Real World Sandboxed Solutions
PPTX
Improving web site performance and scalability while saving
PDF
From SQL to MongoDB
PPTX
Share point saturday presentation 9 29-2012-2
PPTX
Eclipse orion
Tech talk-live-alfresco-drupal
Brian Campo, DoD JCS, Content.gov Presentation
Hdv309 - Real World Sandboxed Solutions
Improving web site performance and scalability while saving
From SQL to MongoDB
Share point saturday presentation 9 29-2012-2
Eclipse orion

What's hot (20)

PPTX
Html 5
PDF
Keystone.js 101
PPTX
Connecting Content Management Apps with CMIS
PPT
jclouds overview
PPTX
A High-Performance Solution To Microservices UI Composition
PPTX
Web server
PDF
What's New in Nuxeo Platform 7.3
PPTX
An Unexpected Solution to Microservices UI Composition
PDF
Connecting Content Management Applications with CMIS
PPTX
No SQL, No Problem: Use Azure DocumentDB
PPTX
A High-Performance Solution to Microservice UI Composition @ XConf Hamburg
PDF
Using Microsoft Azure as cloud file server
PPTX
Building SPA’s (Single Page App) with Backbone.js
PPTX
Building rich Single Page Applications (SPAs) for desktop, mobile, and tablet...
PPTX
Go Fullstack: JSF for Public Sites (CONFESS 2012)
PDF
Managing Engineering Information with Nuxeo
PDF
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
PPTX
Liquibase via maven
ODP
CreateJS hackathon in Zurich
PPTX
Windows Azure for Developers - Service Management
Html 5
Keystone.js 101
Connecting Content Management Apps with CMIS
jclouds overview
A High-Performance Solution To Microservices UI Composition
Web server
What's New in Nuxeo Platform 7.3
An Unexpected Solution to Microservices UI Composition
Connecting Content Management Applications with CMIS
No SQL, No Problem: Use Azure DocumentDB
A High-Performance Solution to Microservice UI Composition @ XConf Hamburg
Using Microsoft Azure as cloud file server
Building SPA’s (Single Page App) with Backbone.js
Building rich Single Page Applications (SPAs) for desktop, mobile, and tablet...
Go Fullstack: JSF for Public Sites (CONFESS 2012)
Managing Engineering Information with Nuxeo
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
Liquibase via maven
CreateJS hackathon in Zurich
Windows Azure for Developers - Service Management
Ad

Similar to Tech talk live share extras extension modules feb 13 (20)

PDF
Web Components v1
PPTX
Living on the Grid - Unlock the Power of Dojo Data Grids in XPages - MWLUG 2013
PDF
AngularJS in 60ish Minutes - Dan Wahlin | FalafelCON 2014
PDF
CUST-1 Share Document Library Extension Points
PDF
Staying Sane with Drupal NEPHP
PDF
Adding custom ui controls to your application (1)
PDF
Getting Started with DrupalGap
PDF
Writing Gadgets with the WSO2 Gadget Server
PDF
Django Rest Framework and React and Redux, Oh My!
PDF
The new static resources framework
PDF
Tech Talk Live on Share Extensibility
PPTX
Modern android development
ZIP
Django at the Disco
ZIP
Django at the Disco
ZIP
Django at the Disco
ZIP
Django at the Disco
PPTX
Magento 2.0: Prepare yourself for a new way of module development
PDF
AngularJS 101 - Everything you need to know to get started
PPTX
An Overview of Project Jigsaw
PPT
Training in Android with Maven
Web Components v1
Living on the Grid - Unlock the Power of Dojo Data Grids in XPages - MWLUG 2013
AngularJS in 60ish Minutes - Dan Wahlin | FalafelCON 2014
CUST-1 Share Document Library Extension Points
Staying Sane with Drupal NEPHP
Adding custom ui controls to your application (1)
Getting Started with DrupalGap
Writing Gadgets with the WSO2 Gadget Server
Django Rest Framework and React and Redux, Oh My!
The new static resources framework
Tech Talk Live on Share Extensibility
Modern android development
Django at the Disco
Django at the Disco
Django at the Disco
Django at the Disco
Magento 2.0: Prepare yourself for a new way of module development
AngularJS 101 - Everything you need to know to get started
An Overview of Project Jigsaw
Training in Android with Maven
Ad

More from Alfresco Software (20)

PPTX
Alfresco Day Benelux Inholland studentendossier
PPTX
Alfresco Day Benelux Hogeschool Inholland Records Management application
PPTX
Alfresco Day BeNelux: Customer Success Showcase - Saxion Hogescholen
PPTX
Alfresco Day BeNelux: Customer Success Showcase - Gemeente Amsterdam
PPTX
Alfresco Day BeNelux: The success of Alfresco
PDF
Alfresco Day BeNelux: Customer Success Showcase - Credendo Group
PDF
Alfresco Day BeNelux: Digital Transformation - It's All About Flow
PDF
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...
PDF
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...
PDF
Alfresco Day Vienna 2016: Alfrescos neue Rest API
PDF
Alfresco Day Vienna 2016: Support Tools für die Admin-Konsole
PDF
Alfresco Day Vienna 2016: Entwickeln mit Alfresco
PDF
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...
PDF
Alfresco Day Vienna 2016: Partner Lightning Talk: Westernacher
PDF
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...
PDF
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novum
PDF
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...
PDF
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...
PDF
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - Safran
PDF
Alfresco Day Warsaw 2016: Advancing the Flow of Digital Business
Alfresco Day Benelux Inholland studentendossier
Alfresco Day Benelux Hogeschool Inholland Records Management application
Alfresco Day BeNelux: Customer Success Showcase - Saxion Hogescholen
Alfresco Day BeNelux: Customer Success Showcase - Gemeente Amsterdam
Alfresco Day BeNelux: The success of Alfresco
Alfresco Day BeNelux: Customer Success Showcase - Credendo Group
Alfresco Day BeNelux: Digital Transformation - It's All About Flow
Alfresco Day Vienna 2016: Activiti – ein Katalysator für die DMS-Strategie be...
Alfresco Day Vienna 2016: Elektronische Geschäftsprozesse auf Basis von Alfre...
Alfresco Day Vienna 2016: Alfrescos neue Rest API
Alfresco Day Vienna 2016: Support Tools für die Admin-Konsole
Alfresco Day Vienna 2016: Entwickeln mit Alfresco
Alfresco Day Vienna 2016: Activiti goes enterprise: Die Evolution der BPM Sui...
Alfresco Day Vienna 2016: Partner Lightning Talk: Westernacher
Alfresco Day Vienna 2016: Bringing Content & Process together with the App De...
Alfresco Day Vienna 2016: Partner Lightning Talk - it-novum
Alfresco Day Vienna 2016: How to Achieve Digital Flow in the Enterprise - Joh...
Alfresco Day Warsaw 2016 - Czy możliwe jest spełnienie wszystkich regulacji p...
Alfresco Day Warsaw 2016: Identyfikacja i podpiselektroniczny - Safran
Alfresco Day Warsaw 2016: Advancing the Flow of Digital Business

Tech talk live share extras extension modules feb 13

  • 1. Using Share Extensibility Modules in Share Extras Will Abson (@wabson)
  • 2. Agenda •  Introduction •  Custom Doclib Views •  Customizing Custom Views •  Customizing Dashlets •  Customizing Document Details page
  • 3. About Me •  Integrations Engineer @ Alfresco •  Founder and Lead of Share Extras •  Creator of Site Geotagged Content Add-on
  • 4. Recap – Share Extensibility •  TTL by Dave Draper, May 2012 •  Share Customizations Live by Dave Draper and Erik Winlöf, Alfresco DevCon, Nov 2012
  • 5. Extensibility Main Points •  Declare modules in site-data/extensions •  Change component behaviors by modifying the script model via a controller .js extension •  Add HTML markup before, after, or instead of the default component content via @region directive –  As of 4.2.b, many components support adding markup into the component via the @markup directive
  • 6. Extensibility Main Points •  Add additional client-side dependencies via .head.ftl extensions, or (in 4.2) using the @script and @link directives in a .html.ftl extension •  Add or override UI labels with additional .properties files
  • 7. Site Geotagged Content •  Visualize Geotagged Content in Share –  Using Google Maps •  Tika provides automatic extraction of Geographic info from files –  e.g. EXIF data in digital photos
  • 8. Site Geotagged Content Originally just a Site Dashlet
  • 9. Site Geotagged Content Now also a Custom Doclib View
  • 10. Custom DocLib Views •  Allows us to add in our own views, which can be selected by the user •  Requires Alfresco 4.0.2 / 4.2.a or later •  More information on blog post by Ray Gauss II •  Implemented as client-side renderer classes
  • 11. Geographic Renderer •  Built on top of the thumbnail renderer •  We need to define –  Module definition –  Additional HTML markup (via Freemarker) –  Component controller extension –  Client-side renderer class –  CSS, icon, labels
  • 12. Renderer Module Definition org_sharextras_doclib-geo-view.xml <extension> <modules> <module> <id>Document List Geographic View</id> <customizations> <customization> <targetPackageRoot>org.alfresco</targetPackageRoot> <sourcePackageRoot>org.sharextras.customization.doclib- geo-view</sourcePackageRoot> </customization> </customizations> </module> </modules> </extension>
  • 13. Renderer HTML Markup components/documentlibrary/documentlist.get.html.ftl <@markup id="customDocLibView" target="documentListContainer" action="after"> <div id="${args.htmlid}-geo" class="alf-geo documents"></div> <div id="${args.htmlid}-geo-empty" class="hidden"> <div class="yui-dt-liner"></div> </div> <div id="${args.htmlid}-geo-item-template" class="alf-geo-item hidden”>...</div> ... <script type="text/javascript">//<![CDATA[ YAHOO.Bubbling.subscribe("postSetupViewRenderers", function(layer, args) { var scope = args[1].scope; var geoViewRenderer = new ${geoRendererClass}("geo") geoViewRenderer.zoomLevel = ${preferences.zoomLevel!15}; geoViewRenderer.center = "${(preferences.center!'')?js_string}"; geoViewRenderer.mapTypeId = "${(preferences.mapTypeId!'')?js_string}"; scope.registerViewRenderer(geoViewRenderer); }); //]]></script> </@>
  • 15. Renderer Client-side Class source/web/extras/components/documentlibrary/ documentlist-geo.js Extras.DocumentListGMapsGeoViewRenderer = function DocumentListGMapsGeoViewRenderer_constructor(name) { ... } YAHOO.extend(Extras.DocumentListGMapsGeoViewRenderer, Extras.DocumentListGeoViewRendererBase, { setupRenderer: function DL_GVR_setupRenderer(scope) {...}, renderView: function DL_GVR_renderView(scope, sRequest, oResponse, oPayload) {...} }
  • 16. Demo •  Site Geotagged Content Dashlet •  Site Geographic View
  • 17. Introducing Leaflet •  A great alternative to Google Maps •  Open Source •  Mobile-friendly •  Plugin a wide range of mapping providers leafletjs.com
  • 18. Changing the View Behaviour •  We’ll use a second module for this –  Order is important! •  We need to provide –  Module definition –  A further webscript controller extension
  • 19. Renderer Override Module org_sharextras_doclib-geo-view-leaflet.xml <extension> <modules> <module> <id>Document List Geographic View</id> <customizations> <customization> <targetPackageRoot>org.alfresco</targetPackageRoot> <sourcePackageRoot>org.sharextras.customization.doclib- geo-view-leaflet</sourcePackageRoot> </customization> </customizations> </module> </modules> </extension>
  • 21. Demo •  Site Geographic View with Leaflet
  • 22. Changing other Components •  The same approach is valid for most OOTB components, which populate the model.widgets object –  The @createWidgets Freemarker directive new in 4.2 then renders the widget markup •  To demonstrate this, let’s also change the dashlet behavior
  • 23. Demo •  Site Geotagged Content Dashlet with Leaflet
  • 24. Custom DocLib Previewers •  The ability to ‘intervene’ between the widget configuration being declared and it being rendered is incredibly useful in other places, too! •  Let’s look at the PdfJs viewer included in the Media Viewers add-on as an example
  • 25. Previewer Controller Extension components/documentlibrary/documentlist.get.js if (model.widgets) // Protection for older versions { for (var i = 0; i < model.widgets.length; i++) { var widget = model.widgets[i]; if (widget.id == "WebPreview") { // Insert new pluginCondition(s) at start of the chain var conditions = [{...}]; var oldConditions = eval("(" + widget.options.pluginConditions + ")"); // Add the other conditions back in for (var j = 0; j < oldConditions.length; j++) { conditions.push(oldConditions[j]); } // Override the original conditions model.pluginConditions = jsonUtils.toJSONString(conditions); widget.options.pluginConditions = model.pluginConditions; } }
  • 27. More Information •  http://sharextras.org •  http://www.slideshare.net/alfresco/tech- talk-live-on-share-extensibility •  http://blogs.alfresco.com/wp/developer/ author/ddraper/