Video that accompanies this presentation at: http://www.youtube.com/watch?v=UNjn6bOJ308
Spring Surf has been updated to allow increased customization and extensibility. This session will demonstrate how these capabilities can and have been used in Alfresco Share to add, remove and modify its appearance without needing to copy and paste code.
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
CUST-2 New Client Configuration & Extension Points in Share
1. New Client Configuration &
Extension Points in Share!
Dave Draper – UI Engineer – @_DaveDraper!
2. Background & Goals!
• Alfresco Share was not originally intended as a platform
• Spring Surf did not provide any extension mechanism
• Difficult to identify use cases
3. Goals!
• Ensure that Spring Surf continues to be compatible with
previous Alfresco releases (i.e. Avoid branching)
• Minimize Share code changes
• Provide the ability to easily extend Share without copying
and pasting code
• Provide extensions through simple JAR deployment
4. Solution Overview!
• Two distinct approaches to extension
o Customization by targeting existing files!
o Customization through Component configuration!
• Creation of in-memory output model
o Provides opportunity to amend default output!
o Each FreeMarker template gets an output model!
o Models can are nested!
• Introduction of Sub-Components
o Solves 1-1 Region to Component mapping problem!
5. File Customization!
• Works with Templates or WebScripts
• Can extend i18n properties, JavaScript controllers &
FreeMarker templates
• FreeMarker extensions depend upon custom directives
• <@region> & <@markup>!
• Entirely abstract framework – scope for adding new directives!
6. What Can You Do With This?!
• Modify Surf templates to add, remove, modify Component
bindings
• Change display labels
• Modify the content displayed by updating the model
7. Sub-Components!
• A Sub-Component maps to a WebScript
• Only AdvancedComponents support Sub-
Components
o Only Share v4.0 uses AdvancedComponents by default!
o Configurable through Surf configuration!
• Legacy configuration conversion
o Components become Sub-Components!
• Support for dynamic evaluation of parameters
against request
8. Sub-Component Evaluations!
• A Sub-Component can have zero or more
Evaluations
• Each Evaluation can use zero or more Evaluators
• If all Evaluators are successful then Evaluation
overrides Sub-Component defaults
• WebScript URL, properties and index can be
overridden
9. What Can You Do With This?!
• Add, remove and modify the content within a Component
• Have a Component display different content dynamically
based on request information (e.g. The Site being
accessed, the current User)
• Re-order Sub-Components
10. Extensions & Modules!
• An “Extension” can contain zero or more “Modules”
• An Extension can be configured within the application
(e.g. Portlet extension) or externally in a JAR (e.g. RM
extension)
• Two deployment modes “auto” and “manual” (manual is
default)
• Default module configuration can be overridden when
deployed
• Modules can be dynamically deployed and removed
without server restart.
11. Benefits!
• Easy to add new coarse grained content to existing Share
pages
• Easy to override i18n properties for WebScripts
• Scope for future enhancements using in-memory output
model (i.e. new FreeMarker directives)
12. Restrictions!
• Still difficult to extend JavaScript widgets for fine grained
changes
• Limited use of <@markup> directive in Share
• Sub-Component extensions only work with WebScripts
• Limited control over module overrides at deployment
13. Additional Tooling!
• “SurfBug”: identifies the Spring Surf elements on each
page:
o Sub-Components & Component bindings, properties & evaluation
results!
o Contributing file paths!
o WebScript information!
o Customization data (i.e. use of extensibility directives)!
40. Create the customization file...
Note that the location of a WebScript customization is at a
different path root than for TemplateInstance
customizations!
47. Other Customizations...
• Re-order entire pages (add + remove regions)
• Auto readme (see Blog post)
• PeerBind Chat Service (see David Webster’s blog)
• Resource Management module
• Portlet module
• ...
48. Roadmap...
• Dependency directives
• <@widget> directive
• Make JavaScript widgets easier to extend
• Auto-compress and collate JavaScript and CSS resources
• ...
49. Additional Reading!
• Lots more in-depth information and tutorials available at:
http://blogs.alfresco.com/wp/ddraper
• Alfresco Surf Development Forum
• More blogs to come!