PageSourceSearch

https://fedeme.com/static/admin/js/jquery.locationpicker.js

js fedeme.com collected 2026-09-26 03:00:02 UTC 10,109 bytes, 284 lines download raw bytes

1(function ($, window) {
2
3	var default_latlong = new google.maps.LatLng(41.415,2.082);
4	var input_group = '<div class="input-group locationpicker-group"><div class="dropdown-menu dropdown_map"><div class="map-wrapper"></div></div><div class="input-group-addon"><span class="glyphicon glyphicon-map-marker"></span></div></div>';
5	var map_height = 200;
6	var initial_zoom = 13;
7	var map_position = 'bottom';
8	var re_coords = /^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/i;
9
10  var location_fields = ['street_number', 'route', 'locality', 'administrative_area_level_2', 'country', 'postal_code'];
11  //administrative_area_level_2 = city
12  var location_mapping = {
13    'id_street': 'route',
14    'id_street_number': 'street_number',
15    'id_city': 'locality',
16    'id_country': 'country',
17    'id_zip': 'postal_code'
18  }
19	var methods = {
20		init: function(options) {
21			return this.each(function (){
22				var self = $(this);
23
24        var is_event_form = self.closest('form').attr('id') == 'add_event_form' ? true : false;
25
26				var original_border_radius = self.css('border-bottom-left-radius');
27				var locationpicker_group = self.parent().parent();
28				var map_element = locationpicker_group.find('.map_container > .map');
29				self.data('original_border_radius', original_border_radius );
30        var input_map = $("#pac-input"); //self.closest('.box-body').find('input[id^=pac-input]');
31
32        var geocoder = new google.maps.Geocoder;
33
34        methods.hide_map.apply( self );
35
36				// Init map (and put marker)
37				map_element.css('height', map_height+'px');
38
39				var gmap = new google.maps.Map( map_element[0],
40          { zoom: initial_zoom,
41            center: default_latlong,
42            mapTypeId: google.maps.MapTypeId.ROADMAP,
43            panControl:false,
44            streetViewControl:false,
45            mapTypeControl:true });
46
47        var marker = new google.maps.Marker({ map: gmap });
48				gmap.setZoom(initial_zoom);
49				self.data('gmap', gmap);
50
51				// Set right position
52				methods.check_correct_position.apply( self );
53
54				// Marker handler
55				google.maps.event.addListener(gmap, 'click', function(evt){
56
57          deleteAllMarkers(gmap);
58
59					marker = self.data('marker');
60					if(marker){
61						marker.setPosition(evt.latLng);
62					}
63					else{
64						marker = new google.maps.Marker({ position: evt.latLng, map: gmap });
65					}
66					self.data('marker', marker);
67					var lat = evt.latLng.lat().toFixed(7);
68					var lng = evt.latLng.lng().toFixed(7);
69					self.val( lat+', '+lng );
70
71          //Reverse geocode
72          var latlng = {lat: parseFloat(lat), lng: parseFloat(lng)};
73          geocoder.geocode({'location': latlng}, function(results, status){
74            if (status === google.maps.GeocoderStatus.OK) {
75              if (results[0]) {
76                methods.fill_location_inputs.apply( self.closest('.location-form'), [results[0]])
77                input_map.val(results[0].formatted_address);
78              }
79            }
80          })
81				});
82
83        //autocomplete
84        gmap.controls[google.maps.ControlPosition.TOP_LEFT].push(input_map[0]);
85        // Only Basic Data fields (fill_location_inputs reads address_components):
86        // without 'fields' Google bills every field of the place
87        var autocomplete = new google.maps.places.Autocomplete(input_map[0], {
88          fields: ['address_components', 'geometry', 'name']
89        });
90
91        autocomplete.addListener('place_changed', function() {
92          var place = autocomplete.getPlace();
93
94          if (is_event_form) {
95            methods.fill_location_inputs.apply( self.closest('.location-form'), [place])
96          }
97          if (place.name != "") {
98            var lat = place.geometry.location.lat().toFixed(7);
99            var lng = place.geometry.location.lng().toFixed(7);
100
101            if (place.geometry.viewport) {
102              gmap.fitBounds(place.geometry.viewport);
103            } else {
104              gmap.setCenter(place.geometry.location);
105              gmap.setZoom(14);
106            }
107
108            marker.setPosition(place.geometry.location);
109            marker.setVisible(true);
110            self.data('marker', marker);
111            self.val(lat+', '+lng)
112
113            methods.update_marker.apply( self );
114          }
115        });
116
117				// Focus
118				self.off().on('focus', function(e){
119					methods.show_map.apply( self );
120				})
121				.on('keyup', function(e){
122					methods.update_marker.apply( self );
123				});
124				locationpicker_group.find('.input-group-addon').on('click', function(e){
125					methods.show_map.apply( $(self) );
126				});
127
128        self.on('focus', 'input[id^=pac-input]',function(event) {
129          $(this).keypress(function(event){
130            if (event.keyCode === 10 || event.keyCode === 13){event.preventDefault()}
131          })
132        });
133
134				// Blur
135				$(window).click(function(e){
136					var lpg = $(e.target).closest('.locationpicker-group');
137					var me  = $(e.target).closest('.map');
138					if( !lpg.length && !me.length ){
139						methods.hide_map.apply( self );
140					}
141				});
142			});
143		},
144		show_map: function(options){
145			return this.each(function (){
146				var self = $(this);
147				var gmap = $(this).data('gmap');
148				var locationpicker_group = $(this).parent().parent();
149				var input_group_addon = self.parent().find('.input-group-addon');
150
151				// Round corners
152				if(map_position=='bottom'){
153					self.css('border-bottom-left-radius', '0px');
154					input_group_addon.css('border-bottom-right-radius', '0px');
155				}
156				else if(map_position=='top'){
157					self.css('border-top-left-radius', '0px');
158					input_group_addon.css('border-top-right-radius', '0px');
159				}
160				// Show and refresh
161				locationpicker_group.find('.map_container').show();
162        $('#pac-input').css('display','block');
163				google.maps.event.trigger(gmap,'resize');
164
165				// If value, set initial marker
166				if( self.val().length && re_coords.test(self.val()) ){
167					var parts = self.val().split(',');
168					var marker_coords = new google.maps.LatLng(parts[0],parts[1]);
169					var marker = self.data('marker');
170					if(marker){ marker.setPosition(marker_coords); }
171					else{ marker = new google.maps.Marker({ position: marker_coords, map: gmap }); }
172					gmap.setCenter( marker_coords );
173					self.data('marker', marker);
174				}
175			});
176		},
177		update_marker: function(options){
178			return this.each(function (){
179				var self = $(this);
180				var gmap = $(this).data('gmap');
181				var current_position = self.val();
182				if( self.val().length  && re_coords.test(self.val()) ){
183					var parts = self.val().split(',');
184					var marker_coords = new google.maps.LatLng(parts[0],parts[1]);
185					var marker = self.data('marker');
186					if(marker){ marker.setPosition(marker_coords); }
187					else{ marker = new google.maps.Marker({ position: marker_coords, map: gmap }); }
188					gmap.setCenter( marker_coords );
189					self.data('marker', marker);
190				}
191			});
192		},
193		hide_map: function(options){
194			return this.each(function (){
195				var self = $(this);
196				var locationpicker_group = self.parent().parent();
197				var input_group_addon = self.parent().find('.input-group-addon');
198				var original_border_radius = self.data('original_border_radius');
199
200				locationpicker_group.find('.map_container').hide();
201				// Round Corners
202				if(map_position=='bottom'){
203					self.css('border-bottom-left-radius', original_border_radius);
204					input_group_addon.css('border-bottom-right-radius', original_border_radius);
205				}
206				else if(map_position=='top'){
207					self.css('border-top-left-radius', original_border_radius);
208					input_group_addon.css('border-top-right-radius', original_border_radius);
209				}
210			});
211		},
212		check_correct_position: function(options){
213			return this.each(function (){
214				var locationpicker_group = $(this).parent().parent();
215				var map_element = locationpicker_group.find('.map_container > .map');
216				var bottom_line   = $(this).offset().top+$(this).outerHeight(true)+map_height;
217				var window_height = $(window).height();
218				if( bottom_line > window_height ){
219					map_position = 'top';
220					//var to_top = ($(this).outerHeight(true)+map_height)*(-1);
221					//locationpicker_group.find('.map_container').css('margin-top', to_top+'px');
222					map_element.css('border-bottom-left-radius', 0);
223					map_element.css('border-bottom-right-radius', 0);
224					map_element.css('border-bottom', 0);
225				}
226				else{
227					map_element.css('border-top-left-radius', 0);
228					map_element.css('border-top-right-radius', 0);
229					map_element.css('border-top', 0);
230				}
231			});
232		},
233
234    fill_location_inputs: function(place_object){
235      var self = $(this);
236      $.each(location_mapping, function(index, el) {
237        var value = get_field_map(place_object.address_components, el);
238        if (value != undefined) {
239          if (el == 'street_number') {
240            var route = self.closest('.box-body').find('#id_street').val();
241            route = route + ', ' + value;
242            self.closest('.box-body').find('#id_street').val(route);
243          }else{
244            self.closest('.box-body').find('#'+index).val(value);
245          }
246        }
247        self.closest('.box-body').find('#'+index).prop('readonly', true);
248      });
249    }
250	}
251
252  function get_field_map(adress_object, type){
253    var street_number;
254    var val;
255    for (var i in adress_object) {
256      if (adress_object[i].types[0] == type) {
257        if (adress_object[i].long_name != undefined || adress_object[i].long_name != "") {
258          val = adress_object[i].long_name;
259        }
260      }
261    }
262    return val;
263  }
264
265  function deleteAllMarkers(map){
266    var markers = []
267    for (var i = 0; i < markers.length; i++) {
268      markers[i].setMap(map);
269    }
270  }
271
272	$.fn.locationpicker = function(methodOrOptions) {
273		if ( methods[methodOrOptions] ) {
274			return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
275		}
276		else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
277			return methods.init.apply( this, arguments );
278		}
279		else {
280			$.error( 'Method ' +  methodOrOptions + ' does not exist on jQuery.tooltip' );
281		}
282	};
283
284})(jQuery, window);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.