tDAR Coding Conventions
About This Page
This purpose of this page is to point out some of the conventions, snippets, and assumptions used in the tDAR codebase.
Web Conventions
Location / Purpose of Some common macro files
Unless otherwise noted, macro files are located in
src/main/webapp/WEB-INF/macros
File / Path | Description |
---|---|
resource/edit-macros.ftl | macros for edit pages / forms |
resource/list-macros.ftl | macros common among the various list.ftl pages |
resource/navigation-macros.ftl | macros for rendering some of the nav elements on a tDAR page, such as the toolbar, controller actionErrors |
resource/view-macros.ftl | macros used on the view / detail pages |
search/search-macros.ftl | Â |
Edit Pages Â
HOWTO: Add Sidebar Tooltips To a Page Element
Sidebar tooltips  are the popup labels/descriptions that appear on edit pages beside certain fields as you hover over them.  You can create tooltips in two ways: stand-alone and inline
Inline
For simple tooltip text. Give any element a tooltip by specifying TIPLABEL and TOOLTIPCONTENT custom attributes
<input name=addr1 tiplabel='Address' tooltipcontent='Enter street address' />
Stand-alone
For tooltips that require added markup or styling, Â specify an ID in the TOOLTIPCONTENT field.
<input name="addr1" tiplabel="Address" tooltipcontent="#divAddressEntryTooltip" /> <div id="divAddressEntryTooltip"> Enter street address followed by <em>city</em> and <em>state</em> </div>
Sanitize User-Generated Content in Web Pages
When rendering web pages, this it is important to sanitize untrusted, user-generated content. Â The primary concern is preventing against users injecting harmful HTML and/or javascript code (aka XSS attacks), however, even user content that comes from a trustworthy source should be sanitized so as to prevent html symbols from inadvertently corrupting breaking the display/behavior of a page.
This is no small task. Â Fortunately, Â freemarker provides some useful features to assist in this respect. Â Here are some guidelines to follow when creating or editing FTL pages
Sanitize strings in HTML using ?html built-in
<!-- not safe --> <div>Hello ${displayName}, please don't hack our site</div> Â <!--safe --> <div>Hello ${displayName?html}, please don't hack our site</div>
Note: When sanitizing strings that are placed inside of html tags, you must take the extra step of using the double quote character instead of a single quote:
<!-- unsafe! untrusted string can inject a malicious event attribute --> <div title='Informtation for ${username}'> ... </div> Â <!-- use double-quoted attributes --> <div title="Information for ${username}"> ... </div>
Sanitize strings in javascript using ?js_string built-in
<#assign name= "bob's donuts</script>" /> Â <script> //unsafe var greeting = 'hello ${name}'; Â //safe var name = 'hello ${name?js_string}'; </script>
Sanitize En-masse Using the <#escape> Directive
It's not uncommon for a freemarker page to contain dozens of expressions, and it can be cumbersome to escape them all.  Fortunately in freemarker you can simplify this with <#escape>.  Note that the directive will only apply to expressions contained in that same file. In other words, a call to an externally defined macro will not be escaped; you'll need to use the escape directive in the file that defines the macro as well.
Also handy is <#noescape>, which allows you to exclude expressions within an <#escape> section.
 <#escape _untrusted as _untrusted?html>  <!-- safe --> <p>hello ${planet}</p>  <!-- safe --> <div title="Information for ${username}"> ... </div>  <#noescape> <script> //exclude this section because we need to sanitize it for javascript, not html var title = "${project.title?js_string}"; </script> </#noescape>  <!-- not safe! the escape directive does not extend to macro calls --> <#edit.displayUserName />  </#escape>  <!-- not safe! the expression is outside of the escape tags <p>hello ${planet}</p>