Sha256: 17f7181ef36b11e10ba56742f1e67437c18585ef0ce708522d015e05aac5daa5

Contents?: true

Size: 1.98 KB

Versions: 4

Compression:

Stored size: 1.98 KB

Contents

module Jekyll
  module Maps
    class GoogleMapTag < Liquid::Tag
      JS_LIB_NAME        = "jekyllMaps".freeze
      DEFAULT_MAP_WIDTH  = 600
      DEFAULT_MAP_HEIGHT = 400

      def initialize(_, args, _)
        @args   = OptionsParser.parse(args)
        @finder = LocationFinder.new(@args)
        super
      end

      def render(context)
        locations = @finder.find(context.registers[:site], context.registers[:page])
        @args[:attributes][:id] ||= SecureRandom.uuid

        <<HTML
<div #{render_attributes}></div>
<script type='text/javascript'>
  #{JS_LIB_NAME}.register(
    '#{@args[:attributes][:id]}',
    #{locations.to_json},
    #{map_options.to_json}
  );
</script>
HTML
      end

      private
      def render_attributes
        attributes = []
        attributes << "id='#{@args[:attributes][:id]}'"
        attributes << render_dimensions
        attributes << render_class if @args[:attributes][:class]
        attributes.join(" ")
      end

      private
      def render_dimensions
        width       = @args[:attributes][:width] || DEFAULT_MAP_WIDTH
        height      = @args[:attributes][:height] || DEFAULT_MAP_HEIGHT
        width_unit  = width.to_s.include?("%") ? "" : "px"
        height_unit = height.to_s.include?("%") ? "" : "px"
        %(style='width:#{width}#{width_unit};height:#{height}#{height_unit};')
      end

      private
      def render_class
        css = @args[:attributes][:class]
        css = css.join(" ") if css.is_a?(Array)
        %(class='#{css}')
      end

      private
      def map_options
        opts = {
          :useCluster      => !@args[:flags][:no_cluster],
          :showMarker      => @args[:attributes][:show_marker] != "false",
          :showMarkerPopup => @args[:attributes][:show_popup] != "false"
        }
        if @args[:attributes][:zoom]
          opts[:customZoom] = @args[:attributes][:zoom].to_i
        end
        opts
      end
    end
  end
end

Liquid::Template.register_tag("google_map", Jekyll::Maps::GoogleMapTag)

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
jekyll-maps-2.0.4 lib/jekyll-maps/google_map_tag.rb
jekyll-maps-2.0.3 lib/jekyll-maps/google_map_tag.rb
jekyll-maps-2.0.2 lib/jekyll-maps/google_map_tag.rb
jekyll-maps-2.0.1 lib/jekyll-maps/google_map_tag.rb