See also ImageGenNestedPluginExample for examples that use JSPlugin to generate ImageGen charts.
Here are a few JSPlugin example scripts.
Show the current time#
[{JSPlugin script='new java.util.Date()'}]
Show a page's version history#
[{JSPlugin result = "|| Author || Version || Modified \n"; for ( i = wikiPage.versions.iterator(); i.hasNext(); ) { v = i.next(); result += "| " + v.author; result += "| " + v.versionNumber; result += "| " + v.modified; result += "\n"; } result; }]
Show pages matching a pattern#
[{JSPlugin result = "|| Page || Author \n"; re = new RegExp( "Script" ); for ( i = wikiInfo.pages.iterator(); i.hasNext(); ) { page = i.next(); if ( page.name.match( re ) ) { result += "| " + page.name + "| " + page.author + "\n"; } } result; }]
Output some HTML#
[{JSPlugin script='"<div style=\\"margin: 1in; background-color: yellow\\">" + pluginBody + "</span>";' scriptResult='xml' The possible values that may be passed in are as defined for get. A class that implements this method may choose to ignore calls to set certain properties, in which case those properties are effectively read-only. }]
Use HTTPClient to get some content from the web#
This uses the HTTPClient package from http://jakarta.apache.org/commons/httpclient/.
[{JSPlugin result='text' function GET( url ) { client = new Packages.org.apache.commons.httpclient.HttpClient(); method = new Packages.org.apache.commons.httpclient.methods.GetMethod(url) client.executeMethod(method); responseBody = method.getResponseBodyAsString(); return responseBody; } GET( "http://joelonsoftware.com/rss.xml" ); }]
Cache the content from the web into another page#
[{JSPlugin result='text' function GET( url ) { client = new Packages.org.apache.commons.httpclient.HttpClient(); method = new Packages.org.apache.commons.httpclient.methods.GetMethod(url) client.executeMethod(method); responseBody = method.getResponseBodyAsString(); return responseBody; } function CONTENT() { return GET( "http://joelonsoftware.com/rss.xml" ); } cacheName = wikiPahge.name + "cache"; if ( ! wikiInfo.hasPage( cacheName ) ) { cachePage = wikiInfo.createPage( cacheName, CONTENT() ); } else { cachePage = wikiInfo.getPage( cacheName ); if ( wikiPage.modified > cachePage.modified ) { cachePage.setContent( CONTENT() ); } } cachePage.content; }]
Use StringTemplate to format a result#
This uses the StringTemplate package from http://www.stringtemplate.org/.
[{JSPlugin query = new Packages.org.antlr.stringtemplate.StringTemplate( "SELECT $column; separator=\",\"$ FROM $table$;" ); query.setAttribute( "column", "name" ); query.setAttribute( "column", "email" ); query.setAttribute( "table", "User" ); query.toString(); }]
Simple Estimate Script#
Use this script to convert task data
Feature A Task a1 4 Task a2 4 Task a3 12 Feature B Task b1 4 Task b2 8 Task b3 1 Feature C Task c1 12 Task c2 4 Task c3 4
into this table
Feature A | ||
---|---|---|
1. | Task a1 | 4 |
2. | Task a2 | 4 |
3. | Task a3 | 12 |
20 hours | ||
5 days | ||
Feature B | ||
1. | Task b1 | 4 |
2. | Task b2 | 8 |
3. | Task b3 | 1 |
13 hours | ||
3 days | ||
Feature C | ||
1. | Task c1 | 12 |
2. | Task c2 | 4 |
3. | Task c3 | 4 |
20 hours | ||
5 days | ||
Project overall | ||
53 hours | ||
11 days |
result = ""; eolPattern = /\r?\n/; commentPattern = /^\s*(#.*)?$/; taskPattern = /^[ \t]+(.*)[ \t]+([0-9]+)[ \t]*$/; featurePattern = /^[ \t]*(.*)[ \t]*$/; hoursPerDay = +pluginArgs.hoursPerDay; hasFeature = 0; taskIndex = 0; totalFeatureHours = 0; totalHours = 0; hasFeature = false; lines = pluginBody.split( eolPattern ); for ( i = 0; i < lines.length; i++ ) { line = lines[i]; if ( line.match( commentPattern ) ) { continue; } else if ( m = taskPattern.exec( line ) ) { totalFeatureHours += +m[2]; result += "|" + ( ++taskIndex ) + ".|" + m[1] + "|" + m[2] + "\n"; } else if ( m = featurePattern.exec( line ) ) { if ( hasFeature ) { result += "| | | " + totalFeatureHours + " hours\n"; result += "| | | " + Math.round( ( totalFeatureHours + hoursPerDay - 1 ) / hoursPerDay ) + " days\n"; totalHours += totalFeatureHours; } hasFeature = true; totalFeatureHours = 0; taskIndex = 0; result += "| ||" + m[1] + "|\n"; } else { throw ( "can't understand line " + i + " " + line ); } } if ( hasFeature ) { result += "| | | " + totalFeatureHours + " hours\n"; result += "| | | " + Math.round( ( totalFeatureHours + hoursPerDay - 1 ) / hoursPerDay ) + " days\n"; totalHours += totalFeatureHours; } result += "| || Project overall |\n"; result += "| | || " + totalHours + " hours \n"; result += "| | || " + Math.round( ( totalHours + hoursPerDay - 1 ) / hoursPerDay ) + " days\n"; result;
A small E4X example using an RSS feed.#
[{JSPlugin scriptResult='xml' function GET( url ) { ... } rss = XML( GET( "http://joelonsoftware.com/rss.xml" ) ); result = ""; for each ( item in rss..item ) { result += "<b>" + item.title + "</b><br />\n"; result += "<a href=\"" + item.link + "\">" + item.link + "</a><br />\n" result += "<div>" + item.description + "</div>\n"; result += "<hr />"; } result; }]
An Alternative to the RecentChanges plugin#
See JSPluginRecentChangesExample.Add new attachment
Only authorized users are allowed to upload new attachments.