Skip to content

Instantly share code, notes, and snippets.

@dvdsmpsn
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dvdsmpsn/6de6de59b8ba5bc94dc8 to your computer and use it in GitHub Desktop.
Save dvdsmpsn/6de6de59b8ba5bc94dc8 to your computer and use it in GitHub Desktop.
Velocity Object in Atlassian Confluence - A User Macro
## Based on Scott Dudley's answer here:
## http://stackoverflow.com/a/23819584/1958200
##
## @noparams
#set($cashMoney = "$") ## just for display
#set($macroUtilClass=$action.class.forName('com.atlassian.confluence.renderer.radeox.macros.MacroUtils'))
#set($getContextMethod=$macroUtilClass.getDeclaredMethod('defaultVelocityContext',null))
#set($ctx=$getContextMethod.invoke(null))
#set($objects = $ctx.keySet().toArray())
<ul id="velocityObjects">
#foreach($p in $objects)
#set($className = $ctx.get($p).getClass().getName().toString())
<li>
<code>$cashMoney$p.toString()</code> &ndash;
#if ($className.contains("$") == true || $className.startsWith("com.atlassian") == false)
$className
#else
#set($classUrl = "https://docs.atlassian.com/com/atlassian/confluence/atlassian-confluence/latest/" + $className.replace(".", "/") + ".html")
<a href="$classUrl">$className</a>
#end
</li>
#end
</ul>
<script>
// Sort them - Confluence doesn't have velocity SortTool, so doing this client side.
AJS.toInit(function ($) {
var sort_by_name = function(a, b) {
return a.innerHTML.toLowerCase().localeCompare(b.innerHTML.toLowerCase());
}
var velocityObjects = $("#velocityObjects > li").get();
velocityObjects.sort(sort_by_name);
for (var i = 0; i < velocityObjects.length; i++) {
velocityObjects[i].parentNode.appendChild(velocityObjects[i]);
}
});
</script>
<style>
/* add some style */
#com-atlassian-confluence #velocityObjects code {
margin: 0 2px;
padding: 0px 5px;
border: 1px solid #ddd;
background-color: #f5f5f5;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment