grails-app/taglib/SimileTagLib.groovy
author Josh Reed <jareed@andrill.org>
Wed Mar 12 23:00:06 2008 -0500 (4 years ago)
changeset 0 f374b63c0b59
child 2 faafd83ba160
permissions -rw-r--r--
Initial commit of the Simile grails plugin
jareed@0
     1
import org.codehaus.groovy.grails.plugins.PluginManagerHolder
jareed@0
     2
jareed@0
     3
/**
jareed@0
     4
 * A taglib to ease the loading of Simile libraries 
jareed@0
     5
 */
jareed@0
     6
class SimileTagLib {
jareed@0
     7
	static namespace = 'simile'
jareed@0
     8
	
jareed@0
     9
	def ajax = { attrs ->
jareed@0
    10
		out.println pluginJS(request?.contextPath, 'ajax/simile-ajax', attrs?.bundle);
jareed@0
    11
	}
jareed@0
    12
	
jareed@0
    13
	def timeline = { attrs ->
jareed@0
    14
		out.println pluginJS(request?.contextPath, 'timeline/timeline', attrs?.bundle);
jareed@0
    15
	}
jareed@0
    16
	
jareed@0
    17
	def timelineExt = { attrs ->
jareed@0
    18
		out.println pluginJS(request?.contextPath, "timeline/ext/${attrs?.name}/${attrs?.name}", attrs?.bundle);
jareed@0
    19
	}
jareed@0
    20
	
jareed@0
    21
	def pluginJS(contextPath, lib, bundle) {
jareed@0
    22
		def p = PluginManagerHolder?.pluginManager.getGrailsPlugin('simile')
jareed@0
    23
		return "<script type='text/javascript' src='${contextPath}/plugins/${p.name}-${p.version}/js/${lib}-api.js?bundle=${bundle == 'true'}'></script>"
jareed@0
    24
	}
jareed@0
    25
	
jareed@0
    26
	def renderTimeline = { attrs ->
jareed@0
    27
		// get our timeline
jareed@0
    28
		def timeline = attrs.timeline
jareed@0
    29
		
jareed@0
    30
		// figure out our unit type
jareed@0
    31
		def unitType = Timeline.TYPE_UNITS[timeline.type]
jareed@0
    32
		def eventSource = "0"
jareed@0
    33
		if (unitType) { eventSource = "new SimileAjax.EventIndex(${unitType})" }
jareed@0
    34
		
jareed@0
    35
		def unitObject = ""
jareed@0
    36
		switch (timeline.type) {
jareed@0
    37
			case Timeline.DEPTH_TYPE: 		unitObject = ".Depth"; break;
jareed@0
    38
			case Timeline.GEOCHRONO_TYPE:	unitObject = ".Geochrono"; break;
jareed@0
    39
		}
jareed@0
    40
			
jareed@0
    41
		
jareed@0
    42
		out.println """\
jareed@0
    43
		    <script>
jareed@0
    44
        var tl;
jareed@0
    45
        function onLoad() {
jareed@0
    46
        var eventSource = new Timeline.DefaultEventSource(${eventSource});
jareed@0
    47
            
jareed@0
    48
            var theme = Timeline.ClassicTheme.create();
jareed@0
    49
            theme.event.bubble.width = 320;
jareed@0
    50
            theme.event.bubble.height = 220;
jareed@0
    51
            var bandInfos = [
jareed@0
    52
                Timeline${unitObject}.createBandInfo({
jareed@0
    53
                    eventSource:    eventSource,
jareed@0
    54
                    width:          "80%", 
jareed@0
    55
                    intervalUnit:   Timeline.${timeline.detailUnit}, 
jareed@0
    56
                    intervalPixels: ${timeline.detailPixels}
jareed@0
    57
                }),
jareed@0
    58
                Timeline${unitObject}.createBandInfo({
jareed@0
    59
                    eventSource:    eventSource,
jareed@0
    60
                    width:          "20%", 
jareed@0
    61
                    intervalUnit:   Timeline.${timeline.overviewUnit}, 
jareed@0
    62
                    intervalPixels: ${timeline.overviewPixels},
jareed@0
    63
                    overview:       true,
jareed@0
    64
                    convertToBaseUnit: true
jareed@0
    65
                })
jareed@0
    66
            ];
jareed@0
    67
            bandInfos[1].syncWith = 0;
jareed@0
    68
            bandInfos[1].highlight = true;
jareed@0
    69
            
jareed@0
    70
            tl = Timeline.create(document.getElementById("${attrs?.element}"), bandInfos, Timeline.HORIZONTAL${unitType == "" ? "" : ", " + unitType});
jareed@0
    71
            tl.loadXML("${request?.contextPath}/timeline/eventsXML/${timeline.id}", function(xml, url) {
jareed@0
    72
                eventSource.loadXML(xml, url);
jareed@0
    73
            });
jareed@0
    74
        }
jareed@0
    75
        var resizeTimerID = null;
jareed@0
    76
        function onResize() {
jareed@0
    77
            if (resizeTimerID == null) {
jareed@0
    78
                resizeTimerID = window.setTimeout(function() {
jareed@0
    79
                    resizeTimerID = null;
jareed@0
    80
                    tl.layout();
jareed@0
    81
                }, 500);
jareed@0
    82
            }
jareed@0
    83
        }
jareed@0
    84
    </script>
jareed@0
    85
		"""
jareed@0
    86
	}
jareed@0
    87
}