Module: AtlasOnRails::GoogleMap

Defined in:
lib/atlas_on_rails/map.rb

Instance Method Summary collapse

Instance Method Details

#headerObject



3
4
5
# File 'lib/atlas_on_rails/map.rb', line 3

def header
  "<script src=\"http://maps.google.com/maps?file=api&amp;v=2&amp;key=#{self.key}\" type=\"text/javascript\"></script>"
end

#html(calling_obj) ⇒ Object



131
132
133
# File 'lib/atlas_on_rails/map.rb', line 131

def html(calling_obj)
  "<div id=\"#{self.name}\" style=\"width: #{self.width}; height: #{self.height}\"></div>"
end

#javascript(calling_obj) ⇒ Object



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|        
    # Look for plain windows without tabs first
    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
    # Now handle the tabbed windows
    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