|
From: <jt...@hy...> - 2007-03-24 00:18:34
|
Author: jtravis Date: 2007-03-23 16:18:29 -0800 (Fri, 23 Mar 2007) New Revision: 3850 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=3850 Modified: trunk/src/org/hyperic/hq/ui/rendit/rendit_sys/org/hyperic/hq/ui/rendit/BaseController.groovy Log: Add methods to deal with escaping. These methods are available to rendered scripts and controllers, but will be migrated later to use Groovy metaclasses Modified: trunk/src/org/hyperic/hq/ui/rendit/rendit_sys/org/hyperic/hq/ui/rendit/BaseController.groovy =================================================================== --- trunk/src/org/hyperic/hq/ui/rendit/rendit_sys/org/hyperic/hq/ui/rendit/BaseController.groovy 2007-03-24 00:18:00 UTC (rev 3849) +++ trunk/src/org/hyperic/hq/ui/rendit/rendit_sys/org/hyperic/hq/ui/rendit/BaseController.groovy 2007-03-24 00:18:29 UTC (rev 3850) @@ -1,5 +1,7 @@ package org.hyperic.hq.ui.rendit +import org.apache.commons.lang.StringEscapeUtils + import java.io.OutputStreamWriter import org.apache.commons.logging.Log @@ -15,23 +17,24 @@ import groovy.text.SimpleTemplateEngine import java.io.File -abstract class BaseController - extends Expando -{ +abstract class BaseController { Log log = LogFactory.getLog(this.getClass()) String action File pluginDir - def invokeArgs + + private invokeArgs private AuthzSubject user private void setAction(String action) { this.action = action } - - def setInvokeArgs(def args) { + + protected setInvokeArgs(args) { this.invokeArgs = args } + def getInvokeArgs() { invokeArgs } + def setPluginDir(File pluginDir) { this.pluginDir = pluginDir } @@ -52,6 +55,31 @@ this.user = ContextUtils.getAuthzBoss(ctx).getCurrentSubject(sessId) } + public String h(str) { + StringEscapeUtils.escapeHtml(str) + } + + public RENDER_BUILTINS = [ + link_to : { text, Object[] args -> + def url = "" + def opts = (args.length > 0) ? args[0] : [:] + def htmlOpts = (args.length > 1) ? args[1] : [:] + + if (opts.containsKey('action')) + url += h(opts['action']) + + url += '?' + for (o in htmlOpts) { + url += URLEncoder.encode("" + o.key, "UTF-8") + "=" + + URLEncoder.encode("" + o.value, "UTF-8") + "&" + } + + return "<a href=\"$url\">$text</a>" + }, + + h : { str -> h(str) } + ] + /** * Render a .gsp. * @@ -85,7 +113,9 @@ def eng = new SimpleTemplateEngine(false) def template = eng.createTemplate(reader) def outStream = invokeArgs.response.outputStream - def outWriter = new OutputStreamWriter(outStream) + def outWriter = new OutputStreamWriter(outStream) + + gspArgs.putAll(RENDER_BUILTINS) template.make(gspArgs).writeTo(outWriter) } } |