|
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 |
}
|