7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
# File 'lib/atlas_on_rails/map.rb', line 7
def javascript(calling_obj)
javascript = Array.new()
javascript << "<script type=\"text/javascript\">"
javascript << "//<![CDATA["
javascript << " atlas_#{self.name}_load = function() {"
javascript << " if (GBrowserIsCompatible()) {"
javascript << " var #{self.name} = new GMap2(document.getElementById(\"#{self.name}\"));"
case self.pan_control.downcase
when 'small'
javascript << " #{self.name}.addControl(new GSmallMapControl());"
when 'large'
javascript << " #{self.name}.addControl(new GLargeMapControl());"
end unless self.pan_control.nil?
case self.zoom_control.downcase
when 'small'
javascript << " #{self.name}.addControl(new GSmallZoomControl());"
end unless self.zoom_control.nil?
javascript << " #{self.name}.setCenter(new GLatLng(#{self.latitude}, #{self.longitude}), #{self.zoom});"
self.icons.each{|icon|
javascript << " #{icon.name} = atlas_create_icon(\'#{icon.image}\'," +((icon.width.nil? || icon.height.nil?) ? "undefined" : "[#{icon.width},#{icon.height}]")+ "," +((icon.icon_anchor_x.nil? || icon.icon_anchor_y.nil?) ? "undefined" : "[#{icon.icon_anchor_x},#{icon.icon_anchor_y}]")+ "," +(icon.shadow.nil? ? "undefined" : "\'#{icon.shadow}\'")+ "," +((icon.shadow_width.nil? || icon.shadow_height.nil?) ? "undefined" : "[#{icon.shadow_width},#{icon.shadow_height}]")+ ","+ (icon.window_anchor_x.nil? ||icon.window_anchor_y.nil? ? "undefined" : "[#{icon.window_anchor_x},#{icon.window_anchor_y}]")+ ")"
}
self.markers.each{|marker|
javascript << " #{self.name}.addOverlay(new GMarker(new GLatLng(#{marker.latitude},#{marker.longitude})" +((!marker.icon.nil?) ? ",#{marker.icon.name}" : "")+ "))"
}
self.windows.each{|window|
if (window.text.class == String) || (!window.partial.nil? && window.collection.nil?)
if window.text.class == String
javascript << " atlas_text = '#{window.text}'"
javascript << " atlas_marker = atlas_create_windowed_marker(#{window.latitude},#{window.longitude},atlas_text" +((!window.icon.nil?) ? ",#{window.icon.name}" : "")+ ")"
elsif !window.partial.nil?
javascript << " atlas_text = '#{window.text}'"
javascript << " atlas_marker = atlas_create_windowed_marker(#{window.latitude},#{window.longitude},atlas_text" +((!window.icon.nil?) ? ",#{window.icon.name}" : "")+ ")"
end
javascript << " #{self.name}.addOverlay(atlas_marker)"
javascript << " atlas_marker.openInfoWindowHtml(atlas_text)" if window.open
elsif (window.text.class == Array) || (window.text.class == Hash) || (!window.partial.nil? && !window.collection.nil?)
if (window.text.class == Array)
window_text = Array.new()
window.text.each{|tab|
window_text << "new GInfoWindowTab(\"#{tab[0]}\",\"#{tab[1]}\")"
}
javascript << " atlas_tabs = [#{window_text.join(', ')}]"
javascript << " atlas_marker = atlas_create_tabwindowed_marker(#{window.latitude},#{window.longitude},atlas_tabs" +((!window.icon.nil?) ? ",#{window.icon.name}" : "")+ ")"
elsif window.text.class == Hash
window_text = Array.new()
window.text.each{|tab|
window_text << " new GInfoWindowTab(\"#{tab[:title]}\",\"#{tab[:text]}\")"
}
javascript << " atlas_tabs = [#{window_text.join(', ')}]"
javascript << " atlas_marker = atlas_create_tabwindowed_marker(#{window.latitude},#{window.longitude}, atlas_tabs" +((!window.icon.nil?) ? ",#{window.icon.name}" : "")+ ")"
elsif !window.partial.nil? && !window.collection.nil?
javascript << " atlas_tabs = [#{calling_obj.render(:partial=>window.partial,:collection=>window.collection, :spacer_template=>'AtlasMapSpacer', :locals=>window.locals)}]"
javascript << " atlas_marker = atlas_create_tabwindowed_marker(#{window.latitude},#{window.longitude}, atlas_tabs" +((!window.icon.nil?) ? ",#{window.icon.name}" : "")+ ")"
end
javascript << " #{self.name}.addOverlay(atlas_marker)"
javascript << " atlas_marker.openInfoWindowTabsHtml(atlas_tabs)" if window.open
end
}
self.events.each{|event|
javascript << " GEvent.addListener(#{self.name}, \"#{event.name}\", #{event.function});"
}
self.polylines.each{|polyline|
thickness = polyline.thickness.nil? ? 10 : polyline.thickness
points = Array.new
polyline.points.each{|point|
points << " new GLatLng(#{point[0]}, #{point[1]})"
}
javascript << " var polyline = new GPolyline(["
javascript << points.join(",\n")
javascript << " ], \"#{polyline.color}\", #{thickness});"
javascript << " map.addOverlay(polyline);"
}
javascript << " }"
javascript << " }"
if !self.icons.empty?
javascript << ""
javascript << " function atlas_create_icon(imagePath, imageDimensions, imageAnchor, shadowPath, shadowDimensions, windowAnchor) {"
javascript << " var icon = new GIcon();"
javascript << " icon.image = imagePath;"
javascript << " if (shadowPath!=undefined) { icon.shadow = shadowPath;}"
javascript << " icon.iconSize = imageDimensions!=undefined ? new GSize(imageDimensions[0], imageDimensions[1]) : new GSize(10,10);"
javascript << " icon.shadowSize = shadowDimensions!=undefined ? new GSize(shadowDimensions[0], shadowDimensions[1]) : new GSize(0,0);"
javascript << " icon.iconAnchor = imageAnchor!=undefined ? new GPoint(imageAnchor[0], imageAnchor[1]) : new GPoint(10,5);"
javascript << " icon.infoWindowAnchor = windowAnchor!=undefined ? new GPoint(windowAnchor[0], windowAnchor[1]) : new GPoint(10,5);"
javascript << " return icon"
javascript << " }"
end
if !self.windows.empty? && self.windows.detect{|window| window.text.is_a?(String)}
javascript << ""
javascript << " function atlas_create_windowed_marker(atLat, atLng, atText, atIcon) {"
javascript << " var marker = new GMarker(new GLatLng(atLat, atLng), atIcon);"
javascript << " GEvent.addListener(marker, \"click\", function() { marker.openInfoWindowHtml(atText); });"
javascript << " return marker"
javascript << " }"
end
if !self.windows.empty? && (self.windows.detect{|window| window.text.is_a?(Array) || window.text.is_a?(Hash) || !window.partial.nil?})
javascript << ""
javascript << " function atlas_create_tabwindowed_marker(atLat, atLng, atTabs, atIcon) {"
javascript << " var marker = new GMarker(new GLatLng(atLat, atLng), atIcon);"
javascript << " GEvent.addListener(marker, \"click\", function() { marker.openInfoWindowTabsHtml(atTabs); });"
javascript << " return marker"
javascript << " }"
end
javascript << " atlas_unload = function() { GUnload(); }"
javascript << " function addEvent(obj, evType, fn){"
javascript << " if (obj.addEventListener){"
javascript << " obj.addEventListener(evType, fn, false);"
javascript << " return true;"
javascript << " } else if (obj.attachEvent){"
javascript << " var r = obj.attachEvent(\"on\"+evType, fn);"
javascript << " return r;"
javascript << " } else {"
javascript << " return false;"
javascript << " }"
javascript << " }"
javascript << " addEvent(window, 'load',atlas_#{self.name}_load);"
javascript << " addEvent(window, 'unload',atlas_unload);"
javascript << "//]]>"
javascript << "</script>"
javascript.join("\n")
end
|