DevMeetup 12.4.13 (Part 1).

advertisement
LiNC Developer Meetup
Welcome!
Lithium Developer Network
▪
Our job is to make your life easier
• APIs
• Tools and workflow
• Documentation
▪
▪
Stay in touch: developers.lithium.com
Join the Developer Track at LiNC
• May 20-22, San Francisco
Freemarker: Rest and Other
Context Object
A look at the powerful tools you can
access through freemarker
Doug Schroeder and Yuri Kapulkin
REST
How to make and use REST
calls in freemarker components
and endpoints
REST
▪
The rest directive can be used to call the Lithium REST API
• Rest calls return a W3C.Node context object with the response from call
• If you compare the XML response in a browser to the W3C.Node object, the only
difference is it doesn’t contain a “response” wrapper
•
So you don’t have to do .response
• To get an attribute use @ sign
•
To check if an attribute exists use node.attribute[0]??
• To get nodes, use . Notation
▪
Examples:
• ${rest(“/messages/id/5”).message}
• ${rest(“/messages/id/5”).message.@href[0]??}
• ${rest(rest(“/messages/id/5”).message.board.@href)}
How to parse the DOM
▪
Imperative
• http://freemarker.org/docs/xgui_imperative.html
▪
Declarative
• http://freemarker.org/docs/xgui_declarative.html
▪
Builtins
• http://freemarker.org/docs/ref_builtins_node.html
Querying the
Community
How to get community data into
your components
CoreNode Context Object
▪
Use when dealing with pages that represent lower level nodes
in the community structure
• Category page
• Forum page
• etc.
▪
▪
▪
Note: Most pages in the application are community level
Examples:
• ${coreNode.id}
• <#assign nodeId = coreNode.id/>
Lithosphere: CoreNode Context Object
Page Context Object
▪
Use on a page that represents either a message, a user, or a thread
• If a page represents a user, you can get details about the user
•
My Profile Page
User Profile Page
•
Message Page
•
Thread Page
•
• If a page represents a message, you can get details about the message
• If a page represents a thread, you can get details about the thread
▪
Examples:
• Verify the context object exists using if:
•
<#if page.context.thread??></#if>
• ${page.context.thread.topicMessage.uniqueId}
• ${page.context.message.uniq ueId}
• ${page.context.user.id}
▪
Lithosphere: Page Context Object
Env Context Object
▪
When you are on a page with a list of messages (such as the
topic page), the env object can help to get the id of each
message in the list
• Forum Message
• Idea Message
• Etc.
▪
Examples:
• ${env.context.message.uniqueId}
• <#if
env.context.message.parent??>${env.context.message.parent.u
niqueId}</#if>
▪
Lithosphere: Env Context Object
Localizable Text
▪
▪
Used to render localized text strings
Examples:
• ${text.format(“general.Kudos”)}
• ${text.format(“text.key.with.arguments”,
“arg1”,“arg2”)}
▪
Lithosphere: Localizable Text
Lithium Freemarker
Directives
A look at special directives that
can be used in components and
endpoints
@component
▪
The @component directive allows you to insert components
into other components
• You can pass parameters to a component using named parameters
• Most components don’t have any parameters but some do
• You can add parameters to your custom components
▪
Examples:
• <#assign threads=rest(“/threads/recent”).threads />
• <@component id=“recent_threads” param_name=threads/>
• Retrieve parameters in a component using the following:
•
▪
<#assign
threads=env.context.component.getParameter(‘param_name’) />
Lithosphere: Passing Parameters to a Component
@modal
▪
Modal directive is used to render a component inside of
a modal window
• You will need to specify the following parameters:
•
•
•
Id: the id of the component you want to render inside the modal
Label: The text to display on the link or button used to open the component
These are the only two parameters required but there are others you can
use to further customize the modal
▪
Example:
▪
Lithosphere: Creating Modal Dialogs
• <@modal id=“my_component_id” label=“my.component.label”/>
@liaAddScript
▪
Lets you specify a block of javascript code in a
component
• The javascript will be added to any page containing the component
• The javascript will be added after all core javascript has run
• For jQuery, use Lithium.jQuery instead of $ to use Lithium’s jQuery
•
▪
You can assign $ to Lithium.jQuery as in the example
Example:
<@liaAddScript>
;(function($){
/*your code here*/
})(Lithium.jQuery);
</@liaAddScript>
Calling External
Services
How to call external services
and use them in freemarker
Http Client
▪
Http Client allows you to call third party APIs
▪
Examples:
• You can configure what domains are allowed via the Lithium Admin
• You can add headers, fragments, cookies, and parameters to the request
• Currently HTML is not allowed in the responses and will be rejected!
• ${http.client.request(“https://some.api.url/some/path”).
json().get()}
• $eval{(http.client.request(“https://some.api.url/some/pa
th”).get()}
• ${http.client.request(“https”,”some.api.url”,”/some/path
”).xml().parameter(“paramName”,”paramValue”).post()}
▪
Lithosphere: Http Client
Http Client – Parsing the response
▪
▪
▪
You can use response.hasError to check if call was successful
• response.error.message will contain the error message
Response.content will contain the content of the response
Examples
• <#assign
•
response=http.client.request(“https://someurl”).json().get()/>
<#if response.hasError>
•
<#-- handle error-->
•
<#-- do cool stuff -->
• <#else>
• </#if>
▪
http://lithosphere.lithium.com/t5/developers-knowledge-base/http-clientresponse-FreeMarker-context-object/ta-p/80622
Thanks!
Download