Class: BsLocationPickerInput

Inherits:
Formtastic::Inputs::StringInput
  • Object
show all
Includes:
ActionView::Context, ActionView::Helpers::JavaScriptHelper, ActionView::Helpers::TagHelper, FontAwesome::Rails::IconHelper, FormtasticBootstrap::Inputs::Base, FormtasticBootstrap::Inputs::Base::Collections
Defined in:
app/input/bs_location_picker_input.rb

Defined Under Namespace

Classes: ZoomInvalid

Instance Method Summary collapse

Instance Method Details

#to_htmlObject

Stampa Una Mappa di Google Maps, che rende possibile la selezione di un punto sulla mappa e di salvarlo nei due campi Lat Lng della form.

Necessario aver aggiunto anche l’asset kono_utils/utilities per avere il javascript necessario alla generazione della mappa

Nell’inizializzatore di kono_utils installato con il generatore impostare la chiave di google: google_api_key

La mappa ha un contenitore

Options:

-  default_center         -> Array con [lat,lng] nel caso non siano impostati i valori iniziali
-  height                 -> [300px] Altezza da mettere nello stile della canvas di google maps
-  fields                 -> Array[:lat,:lng]  campi che identificano la Latitudine e Longitudine
                             nel record
-  zoom_level             -> [5] Integer livello zoom della mappa, se passo una Proc viene elaborata
                             passando il record, deve tornare un Integer

Raises:



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
# File 'app/input/bs_location_picker_input.rb', line 36

def to_html

  default_center = options[:default_center] || [42.90887521920127, 12.303765624999983]
  center = default_center

  height = options[:height] || '300px'
  fields = options[:fields] || [:lat, :lng]
  zoom_level = options[:zoom_level] || 5

  if zoom_level.is_a?(Proc)
    zoom_level = zoom_level.call(object)
  end

  raise ZoomInvalid unless zoom_level.is_a?(Integer)


  bootstrap_wrapping do
    (:div) do

      id = SecureRandom.hex

      callback_name = "initMap#{id}"

      buff = ActiveSupport::SafeBuffer.new

      buff<< (:div, :class => "container_google_maps clearfix", :style => 'width:100%;') do
        (:div, nil, id: id, style: "height:#{height}")
      end

      id_hidden_lat = SecureRandom.hex
      buff<< builder.hidden_field(fields[0], form_control_input_html_options.merge(:id => id_hidden_lat))
      id_hidden_lng = SecureRandom.hex
      buff<< builder.hidden_field(fields[1], form_control_input_html_options.merge(:id => id_hidden_lng))

      unless object.send(fields[0]).blank? or object.send(fields[1]).blank?
        center = [object.send(fields[0]), object.send(fields[1])]
      end

      buff<< (:script, :type => "text/javascript") do
        raw "function #{callback_name}(){
              $('##{id}').kono_util_location_picker({
                center:{lat:#{center[0]},lng:#{center[1]}},
                zoom_level:#{zoom_level},
                selector_field_lat:'##{id_hidden_lat}',
                selector_field_lng:'##{id_hidden_lng}'
              });
          }"
      end

      buff<< (:script, nil,
                         src: "https://maps.googleapis.com/maps/api/js?key=#{KonoUtils.configuration.google_api_key}&callback=#{callback_name}",
                         :type => "text/javascript", async: '', defer: '')

      buff

    end
  end
end