Changeset 829
- Timestamp:
- Feb 27, 2011, 10:27:38 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/taglib/CustomTagLib.groovy
r817 r829 9 9 class CustomTagLib { 10 10 static namespace = 'custom' 11 12 private static final Object helpBalloonLockable = new Object(); 13 private static long helpBalloonCount = 0L; 11 14 12 15 def resources = { attrs -> … … 295 298 296 299 /** 300 * Customised version of helpBalloon as found in help-balloon plugin. 301 * This version can be used in ajax rendered templates where the original fails. 302 * 303 * Fields added: 304 * iconId - Optional to specify the anchor elements id, by default an id is generated if iconSrc is supplied. 305 * iconSrc - Optional to specify anchor image src, if not supplied no anchor image is output by the taglib. 306 * 307 * Example: 308 * <!-- 309 * <custom:helpBalloon code="entry.date.done" iconSrc="${resource(plugin:'help-balloons', dir:'images', file:'balloon-icon.gif')}"/> 310 * or 311 * <a href="#" id="mynewanchor" onclick="return false;">this</a> 312 * <custom:helpBalloon code="entry.date.done" iconId="mynewanchor" /> 313 * --> 314 */ 315 def helpBalloon = {attrs, body -> 316 def mkp = new groovy.xml.MarkupBuilder(out) //this line will be unnecessary in versions of Grails after version 1.2 317 318 def title = attrs["title"] 319 def content = attrs["content"] 320 def code = attrs["code"] 321 def suffix = attrs["suffix"] ?: ".help" 322 def encodeAs = attrs["encodeAs"] 323 def iconId = attrs["iconId"] 324 def iconSrc = attrs["iconSrc"] 325 326 if (!title && code) title = g.message(code: code) 327 if (!content && code) content = g.message(code: code + suffix) 328 329 title = title ?: "" 330 content = content ?: "" 331 332 if (encodeAs) { 333 switch (encodeAs.toUpperCase()) { 334 335 case "HTML": 336 title = title.encodeAsHTML() 337 content = content.encodeAsHTML() 338 break 339 340 case "XML": 341 title = title.encodeAsXML() 342 content = content.encodeAsXML() 343 break 344 } 345 } 346 347 def num 348 synchronized (helpBalloonLockable) { 349 num = helpBalloonCount++; 350 } 351 352 if(iconSrc) { 353 iconId = iconId ?: "customHb$num" 354 mkp.img( id: iconId, src: iconSrc) 355 } 356 357 def javascript = """var customHb$num = new HelpBalloon({ 358 title: '${title.encodeAsJavaScript()}', 359 content: '${content.encodeAsJavaScript()}'""" 360 361 if(iconId) { 362 javascript +=""", 363 icon: \$('$iconId')""" 364 } 365 366 javascript += """ 367 });""" 368 369 mkp.script(type: "text/javascript") { 370 yieldUnescaped(javascript) 371 } 372 373 } 374 375 /** 297 376 * Determine if a supplied string is considered a url or not. 298 377 * The scheme/protocol can be adjusted, file:// has been excluded here.
Note: See TracChangeset
for help on using the changeset viewer.