From 83cdf38c0104a850dc6df8cde37e06c803054480 Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Thu, 2 Jan 2014 14:30:57 +0200 Subject: [PATCH 01/19] Created examples page --- index.html | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 0000000..0866b8e --- /dev/null +++ b/index.html @@ -0,0 +1,6 @@ + + + +

JQuery Location Picker: Usage Examples

+ + From 8e86b34ed2250aeaa162d16103c343de031d2fca Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Thu, 2 Jan 2014 14:45:15 +0200 Subject: [PATCH 02/19] Cleanup site --- README.md | 9 -- locationpicker.jquery.js | 249 --------------------------------------- 2 files changed, 258 deletions(-) delete mode 100644 locationpicker.jquery.js diff --git a/README.md b/README.md index 966ae5d..1819ceb 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,5 @@ jquery-locationpicker-plugin JQuery Location Picker plugin -This plug-in allows to easily find and select location on the Google map. Except of single point it allows to choose some area by providing center of the area and some radius. All the date can be saved to any html input element automatically as well as processed with javascript (callback support). - -The other feature of the plug-in is automatical address resoulver wich allows to get address line from the selected latitude and longitude. Also plug-in supports search by address typed into the binded input element which uses autocomplete feature from Google API to make search process easier. In this case marker will be automatically positioned on the map after successull address resolution. - -Currently plug-in uses JQuery and Google Maps. Integration is pretty simple: - -``` -$('mycontainer').locationpicker(); -``` diff --git a/locationpicker.jquery.js b/locationpicker.jquery.js deleted file mode 100644 index 88b3def..0000000 --- a/locationpicker.jquery.js +++ /dev/null @@ -1,249 +0,0 @@ -(function ( $ ) { - - /** - * Holds google map object and related utility entities. - * @constructor - */ - function GMapContext(domElement, options) { - var _map = new google.maps.Map(domElement, options); - var _marker = new google.maps.Marker({ - position: new google.maps.LatLng(54.19335, -3.92695), - map: _map, - title: "Drag Me", - draggable: true - }); - return { - map: _map, - marker: _marker, - circle: null, - location: _marker.position, - radius: options.radius, - locationName: options.locationName, - settings: options.settings, - domContainer: domElement, - geodecoder: new google.maps.Geocoder() - } - } - - // Utility functions for Google Map Manipulations - var GmUtility = { - /** - * Draw a circle over the the map. Returns circle object. - * Also writes new circle object in gmapContext. - * - * @param center - LatLng of the center of the circle - * @param radius - radius in meters - * @param gmapContext - context - * @param options - */ - drawCircle: function(gmapContext, center, radius, options) { - if (gmapContext.circle != null) { - gmapContext.circle.setMap(null); - } - if (radius > 0) { - radius *= 1; - options = $.extend({ - strokeColor: "#0000FF", - strokeOpacity: 0.35, - strokeWeight: 2, - fillColor: "#0000FF", - fillOpacity: 0.20 - }, options); - options.map = gmapContext.map; - options.radius = radius; - options.center = center; - gmapContext.circle = new google.maps.Circle(options); - return gmapContext.circle; - } - return null; - }, - /** - * - * @param gMapContext - * @param location - * @param callback - */ - setPosition: function(gMapContext, location, callback) { - gMapContext.location = location; - gMapContext.marker.setPosition(location); - gMapContext.map.panTo(location); - this.drawCircle(gMapContext, location, gMapContext.radius, {}); - if (gMapContext.settings.enableReverseGeocode) { - gMapContext.geodecoder.geocode({latLng: gMapContext.location}, function(results, status){ - if (status == google.maps.GeocoderStatus.OK && results.length > 0){ - gMapContext.locationName = results[0].formatted_address; - } - if (callback) { - callback.call(this, gMapContext); - } - }); - } else { - if (callback) { - callback.call(this, gmapContext); - } - } - - }, - locationFromLatLng: function(lnlg) { - return {latitude: lnlg.lat(), longitude: lnlg.lng()} - } - } - - function isPluginApplied(domObj) { - return getContextForElement(domObj) != undefined; - } - - function getContextForElement(domObj) { - return $(domObj).data("locationpicker"); - } - - function updateInputValues(inputBinding, gmapContext){ - if (!inputBinding) return; - var currentLocation = GmUtility.locationFromLatLng(gmapContext.location); - if (inputBinding.latitudeInput) { - inputBinding.latitudeInput.val(currentLocation.latitude); - } - if (inputBinding.longitudeInput) { - inputBinding.longitudeInput.val(currentLocation.longitude); - } - if (inputBinding.radiusInput) { - inputBinding.radiusInput.val(gmapContext.radius); - } - if (inputBinding.locationNameInput) { - inputBinding.locationNameInput.val(gmapContext.locationName); - } - } - - function setupInputListenersInput(inputBinding, gmapContext) { - if (inputBinding) { - inputBinding.radiusInput.on("change", function() { - gmapContext.radius = $(this).val(); - GmUtility.setPosition(gmapContext, gmapContext.location); - }); - if (inputBinding.locationNameInput && gmapContext.settings.enableAutocomplete) { - gmapContext.autocomplete = new google.maps.places.Autocomplete(inputBinding.locationNameInput.get(0)); - google.maps.event.addListener(gmapContext.autocomplete, 'place_changed', function() { - var place = gmapContext.autocomplete.getPlace(); - if (!place.geometry) { - gmapContext.onlocationnotfound(); - return; - } - GmUtility.setPosition(gmapContext, place.geometry.location, function() { - updateInputValues(inputBinding, gmapContext); - }); - }); - } - } - } - - /** - * Initialization: - * $("#myMap").locationpicker(options); - * @param options - * @param params - * @returns {*} - */ - $.fn.locationpicker = function( options, params ) { - if (typeof options == 'string') { // Command provided - var _targetDomElement = this.get(0); - // Plug-in is not applied - nothing to do. - if (!isPluginApplied(_targetDomElement)) return; - var gmapContext = getContextForElement(_targetDomElement); - switch (options) { - case "location": - if (params == undefined) { // Getter - var location = GmUtility.locationFromLatLng(gmapContext.location); - location.radius = gmapContext.radius; - location.name = gmapContext.locationName; - return location; - } else { // Setter - if (params.radius) { - gmapContext.radius = params.radius; - } - GmUtility.setPosition(gmapContext, new google.maps.LatLng(params.latitude, params.longitude), function(gmapContext) { - updateInputValues(gmapContext.settings.inputBinding, gmapContext); - }); - } - break; - case "subscribe": - /** - * Provides interface for subscribing for GoogleMap events. - * See Google API documentation for details. - * Parameters: - * - event: string, name of the event - * - callback: function, callback function to be invoked - */ - if (options == undefined) { // Getter is not available - return null; - } else { - var event = params.event; - var callback = params.callback; - if (!event || ! callback) { - console.error("LocationPicker: Invalid arguments for method \"subscribe\"") - return null; - } - google.maps.event.addListener(gmapContext.map, event, callback); - } - - break; - } - return null; - } - return this.each(function() { - var $target = $(this); - // If plug-in hasn't been applied before - initialize, otherwise - skip - if (isPluginApplied(this)) return; - // Plug-in initialization is required - // Defaults - var settings = $.extend($.fn.locationpicker.defaults, options ); - // Initialize - var gmapContext = new GMapContext(this, { - zoom: settings.zoom, - center: new google.maps.LatLng(settings.location.latitude, settings.location.longitude), - mapTypeId: google.maps.MapTypeId.ROADMAP, - mapTypeControl: false, - disableDoubleClickZoom: false, - scrollwheel: settings.scrollwheel, - streetViewControl: false, - radius: settings.radius, - locationName: settings.locationName, - settings: settings - }); - $(this).data("locationpicker", gmapContext); - // Subscribe GMap events - google.maps.event.addListener(gmapContext.marker, "dragend", function(event) { - GmUtility.setPosition(gmapContext, gmapContext.marker.position, function(){ - var currentLocation = GmUtility.locationFromLatLng(gmapContext.location); - settings.onchanged(currentLocation, gmapContext.radius, true); - updateInputValues(settings.inputBinding, gmapContext); - }); - }); - GmUtility.setPosition(gmapContext, new google.maps.LatLng(settings.location.latitude, settings.location.longitude), function(){ - updateInputValues(settings.inputBinding, gmapContext); - settings.oninitialized($target); - }); - // Set up input bindings if needed - setupInputListenersInput(settings.inputBinding, gmapContext); - }); - }; - $.fn.locationpicker.defaults = { - location: {latitude: 40.7324319, longitude: -73.82480799999996}, - locationName: "", - radius: 500, - zoom: 15, - scrollwheel: true, - inputBinding: { - latitudeInput: null, - longitudeInput: null, - radiusInput: null, - locationNameInput: null - }, - enableAutocomplete: false, - enableReverseGeocode: true, - onchanged: function(currentLocation, radius, isMarkerDropped) {}, - onlocationnotfound: function(locationName) {}, - oninitialized: function (component) {} - - } - -}( jQuery )); \ No newline at end of file From 905af97f34275f9148dd658008e9de93a381317a Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Thu, 2 Jan 2014 16:56:05 +0200 Subject: [PATCH 03/19] Started to work on examples site --- css/style.css | 7 + css/style.css~ | 0 index.html | 65 +++++++++- js/locationpicker.jquery.js | 249 ++++++++++++++++++++++++++++++++++++ 4 files changed, 318 insertions(+), 3 deletions(-) create mode 100644 css/style.css create mode 100644 css/style.css~ create mode 100644 js/locationpicker.jquery.js diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..4af7a61 --- /dev/null +++ b/css/style.css @@ -0,0 +1,7 @@ +body { + padding-top: 50px; +} +.starter-template { + padding: 40px 15px; + text-align: center; +} diff --git a/css/style.css~ b/css/style.css~ new file mode 100644 index 0000000..e69de29 diff --git a/index.html b/index.html index 0866b8e..4856cee 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,65 @@ - - + + + + + + + + + + + + + + jquery-location-picker demo + + -

JQuery Location Picker: Usage Examples

+ + +
+ +
+

JQuery Location Picker

+
+ +
+ Something +
+ +
+ + Features +
+ +
+ + TBD +
+
+ + TBD +
+
diff --git a/js/locationpicker.jquery.js b/js/locationpicker.jquery.js new file mode 100644 index 0000000..88b3def --- /dev/null +++ b/js/locationpicker.jquery.js @@ -0,0 +1,249 @@ +(function ( $ ) { + + /** + * Holds google map object and related utility entities. + * @constructor + */ + function GMapContext(domElement, options) { + var _map = new google.maps.Map(domElement, options); + var _marker = new google.maps.Marker({ + position: new google.maps.LatLng(54.19335, -3.92695), + map: _map, + title: "Drag Me", + draggable: true + }); + return { + map: _map, + marker: _marker, + circle: null, + location: _marker.position, + radius: options.radius, + locationName: options.locationName, + settings: options.settings, + domContainer: domElement, + geodecoder: new google.maps.Geocoder() + } + } + + // Utility functions for Google Map Manipulations + var GmUtility = { + /** + * Draw a circle over the the map. Returns circle object. + * Also writes new circle object in gmapContext. + * + * @param center - LatLng of the center of the circle + * @param radius - radius in meters + * @param gmapContext - context + * @param options + */ + drawCircle: function(gmapContext, center, radius, options) { + if (gmapContext.circle != null) { + gmapContext.circle.setMap(null); + } + if (radius > 0) { + radius *= 1; + options = $.extend({ + strokeColor: "#0000FF", + strokeOpacity: 0.35, + strokeWeight: 2, + fillColor: "#0000FF", + fillOpacity: 0.20 + }, options); + options.map = gmapContext.map; + options.radius = radius; + options.center = center; + gmapContext.circle = new google.maps.Circle(options); + return gmapContext.circle; + } + return null; + }, + /** + * + * @param gMapContext + * @param location + * @param callback + */ + setPosition: function(gMapContext, location, callback) { + gMapContext.location = location; + gMapContext.marker.setPosition(location); + gMapContext.map.panTo(location); + this.drawCircle(gMapContext, location, gMapContext.radius, {}); + if (gMapContext.settings.enableReverseGeocode) { + gMapContext.geodecoder.geocode({latLng: gMapContext.location}, function(results, status){ + if (status == google.maps.GeocoderStatus.OK && results.length > 0){ + gMapContext.locationName = results[0].formatted_address; + } + if (callback) { + callback.call(this, gMapContext); + } + }); + } else { + if (callback) { + callback.call(this, gmapContext); + } + } + + }, + locationFromLatLng: function(lnlg) { + return {latitude: lnlg.lat(), longitude: lnlg.lng()} + } + } + + function isPluginApplied(domObj) { + return getContextForElement(domObj) != undefined; + } + + function getContextForElement(domObj) { + return $(domObj).data("locationpicker"); + } + + function updateInputValues(inputBinding, gmapContext){ + if (!inputBinding) return; + var currentLocation = GmUtility.locationFromLatLng(gmapContext.location); + if (inputBinding.latitudeInput) { + inputBinding.latitudeInput.val(currentLocation.latitude); + } + if (inputBinding.longitudeInput) { + inputBinding.longitudeInput.val(currentLocation.longitude); + } + if (inputBinding.radiusInput) { + inputBinding.radiusInput.val(gmapContext.radius); + } + if (inputBinding.locationNameInput) { + inputBinding.locationNameInput.val(gmapContext.locationName); + } + } + + function setupInputListenersInput(inputBinding, gmapContext) { + if (inputBinding) { + inputBinding.radiusInput.on("change", function() { + gmapContext.radius = $(this).val(); + GmUtility.setPosition(gmapContext, gmapContext.location); + }); + if (inputBinding.locationNameInput && gmapContext.settings.enableAutocomplete) { + gmapContext.autocomplete = new google.maps.places.Autocomplete(inputBinding.locationNameInput.get(0)); + google.maps.event.addListener(gmapContext.autocomplete, 'place_changed', function() { + var place = gmapContext.autocomplete.getPlace(); + if (!place.geometry) { + gmapContext.onlocationnotfound(); + return; + } + GmUtility.setPosition(gmapContext, place.geometry.location, function() { + updateInputValues(inputBinding, gmapContext); + }); + }); + } + } + } + + /** + * Initialization: + * $("#myMap").locationpicker(options); + * @param options + * @param params + * @returns {*} + */ + $.fn.locationpicker = function( options, params ) { + if (typeof options == 'string') { // Command provided + var _targetDomElement = this.get(0); + // Plug-in is not applied - nothing to do. + if (!isPluginApplied(_targetDomElement)) return; + var gmapContext = getContextForElement(_targetDomElement); + switch (options) { + case "location": + if (params == undefined) { // Getter + var location = GmUtility.locationFromLatLng(gmapContext.location); + location.radius = gmapContext.radius; + location.name = gmapContext.locationName; + return location; + } else { // Setter + if (params.radius) { + gmapContext.radius = params.radius; + } + GmUtility.setPosition(gmapContext, new google.maps.LatLng(params.latitude, params.longitude), function(gmapContext) { + updateInputValues(gmapContext.settings.inputBinding, gmapContext); + }); + } + break; + case "subscribe": + /** + * Provides interface for subscribing for GoogleMap events. + * See Google API documentation for details. + * Parameters: + * - event: string, name of the event + * - callback: function, callback function to be invoked + */ + if (options == undefined) { // Getter is not available + return null; + } else { + var event = params.event; + var callback = params.callback; + if (!event || ! callback) { + console.error("LocationPicker: Invalid arguments for method \"subscribe\"") + return null; + } + google.maps.event.addListener(gmapContext.map, event, callback); + } + + break; + } + return null; + } + return this.each(function() { + var $target = $(this); + // If plug-in hasn't been applied before - initialize, otherwise - skip + if (isPluginApplied(this)) return; + // Plug-in initialization is required + // Defaults + var settings = $.extend($.fn.locationpicker.defaults, options ); + // Initialize + var gmapContext = new GMapContext(this, { + zoom: settings.zoom, + center: new google.maps.LatLng(settings.location.latitude, settings.location.longitude), + mapTypeId: google.maps.MapTypeId.ROADMAP, + mapTypeControl: false, + disableDoubleClickZoom: false, + scrollwheel: settings.scrollwheel, + streetViewControl: false, + radius: settings.radius, + locationName: settings.locationName, + settings: settings + }); + $(this).data("locationpicker", gmapContext); + // Subscribe GMap events + google.maps.event.addListener(gmapContext.marker, "dragend", function(event) { + GmUtility.setPosition(gmapContext, gmapContext.marker.position, function(){ + var currentLocation = GmUtility.locationFromLatLng(gmapContext.location); + settings.onchanged(currentLocation, gmapContext.radius, true); + updateInputValues(settings.inputBinding, gmapContext); + }); + }); + GmUtility.setPosition(gmapContext, new google.maps.LatLng(settings.location.latitude, settings.location.longitude), function(){ + updateInputValues(settings.inputBinding, gmapContext); + settings.oninitialized($target); + }); + // Set up input bindings if needed + setupInputListenersInput(settings.inputBinding, gmapContext); + }); + }; + $.fn.locationpicker.defaults = { + location: {latitude: 40.7324319, longitude: -73.82480799999996}, + locationName: "", + radius: 500, + zoom: 15, + scrollwheel: true, + inputBinding: { + latitudeInput: null, + longitudeInput: null, + radiusInput: null, + locationNameInput: null + }, + enableAutocomplete: false, + enableReverseGeocode: true, + onchanged: function(currentLocation, radius, isMarkerDropped) {}, + onlocationnotfound: function(locationName) {}, + oninitialized: function (component) {} + + } + +}( jQuery )); \ No newline at end of file From 00a6672878782f6220527030907ca833ea92579b Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Fri, 3 Jan 2014 17:03:46 +0200 Subject: [PATCH 04/19] Updated documentation --- css/style.css~ | 7 + images/basic_ui.png | Bin 0 -> 174426 bytes index.html | 209 +++++++++++++++++++++++++++-- js/locationpicker.jquery.js | 12 +- js/locationpicker.jquery.js~ | 251 +++++++++++++++++++++++++++++++++++ 5 files changed, 461 insertions(+), 18 deletions(-) create mode 100644 images/basic_ui.png create mode 100644 js/locationpicker.jquery.js~ diff --git a/css/style.css~ b/css/style.css~ index e69de29..4af7a61 100644 --- a/css/style.css~ +++ b/css/style.css~ @@ -0,0 +1,7 @@ +body { + padding-top: 50px; +} +.starter-template { + padding: 40px 15px; + text-align: center; +} diff --git a/images/basic_ui.png b/images/basic_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..fdb4fa43987ac7bd0b3db9601b6a8c5baaf4305f GIT binary patch literal 174426 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≥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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 4856cee..8d059db 100644 --- a/index.html +++ b/index.html @@ -11,6 +11,8 @@ + + jquery-location-picker demo @@ -39,26 +41,207 @@

diff --git a/js/locationpicker.jquery.js b/js/locationpicker.jquery.js index 0a9ce0f..b002eb5 100644 --- a/js/locationpicker.jquery.js +++ b/js/locationpicker.jquery.js @@ -197,7 +197,7 @@ if (isPluginApplied(this)) return; // Plug-in initialization is required // Defaults - var settings = $.extend($.fn.locationpicker.defaults, options ); + var settings = $.extend({}, $.fn.locationpicker.defaults, options ); // Initialize var gmapContext = new GMapContext(this, { zoom: settings.zoom, @@ -211,18 +211,18 @@ locationName: settings.locationName, settings: settings }); - $(this).data("locationpicker", gmapContext); + $target.data("locationpicker", gmapContext); // Subscribe GMap events google.maps.event.addListener(gmapContext.marker, "dragend", function(event) { - GmUtility.setPosition(gmapContext, gmapContext.marker.position, function(){ + GmUtility.setPosition(gmapContext, gmapContext.marker.position, function(context){ var currentLocation = GmUtility.locationFromLatLng(gmapContext.location); - settings.onchanged(currentLocation, gmapContext.radius, true); - updateInputValues(settings.inputBinding, gmapContext); + context.settings.onchanged(currentLocation, context.radius, true); + updateInputValues(gmapContext.settings.inputBinding, gmapContext); }); }); - GmUtility.setPosition(gmapContext, new google.maps.LatLng(settings.location.latitude, settings.location.longitude), function(){ + GmUtility.setPosition(gmapContext, new google.maps.LatLng(settings.location.latitude, settings.location.longitude), function(context){ updateInputValues(settings.inputBinding, gmapContext); - settings.oninitialized($target); + context.settings.oninitialized($target); }); // Set up input bindings if needed setupInputListenersInput(settings.inputBinding, gmapContext); From 80f375c2507f7612040ccc9adc3ca07ad4350721 Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Fri, 3 Jan 2014 18:19:19 +0200 Subject: [PATCH 07/19] Removed temp file --- css/style.css~ | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 css/style.css~ diff --git a/css/style.css~ b/css/style.css~ deleted file mode 100644 index 4af7a61..0000000 --- a/css/style.css~ +++ /dev/null @@ -1,7 +0,0 @@ -body { - padding-top: 50px; -} -.starter-template { - padding: 40px 15px; - text-align: center; -} From eaaeb9df8f80f8bd95be5378df03369768911105 Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Sun, 5 Jan 2014 01:57:07 +0200 Subject: [PATCH 08/19] Fixed issue #1. OnChanged event doesn't fire when using input field for changing location. --- js/locationpicker.jquery.js | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/js/locationpicker.jquery.js b/js/locationpicker.jquery.js index b002eb5..274b9f8 100644 --- a/js/locationpicker.jquery.js +++ b/js/locationpicker.jquery.js @@ -112,14 +112,16 @@ if (inputBinding.locationNameInput) { inputBinding.locationNameInput.val(gmapContext.locationName); } - } - + } + function setupInputListenersInput(inputBinding, gmapContext) { if (inputBinding) { if (inputBinding.radiusInput){ inputBinding.radiusInput.on("change", function() { gmapContext.radius = $(this).val(); - GmUtility.setPosition(gmapContext, gmapContext.location); + GmUtility.setPosition(gmapContext, gmapContext.location, function(context){ + context.settings.onchanged(GmUtility.locationFromLatLng(context.location), context.radius, false); + }); }); } if (inputBinding.locationNameInput && gmapContext.settings.enableAutocomplete) { @@ -130,11 +132,26 @@ gmapContext.onlocationnotfound(); return; } - GmUtility.setPosition(gmapContext, place.geometry.location, function() { - updateInputValues(inputBinding, gmapContext); + GmUtility.setPosition(gmapContext, place.geometry.location, function(context) { + updateInputValues(inputBinding, context); + context.settings.onchanged(GmUtility.locationFromLatLng(context.location), context.radius, false); }); }); } + if (inputBinding.latitudeInput) { + inputBinding.latitudeInput.on("change", function() { + GmUtility.setPosition(gmapContext, new google.maps.LatLng($(this).val(), gmapContext.location.lng()), function(context){ + context.settings.onchanged(GmUtility.locationFromLatLng(context.location), context.radius, false); + }); + }); + } + if (inputBinding.longitudeInput) { + inputBinding.longitudeInput.on("change", function() { + GmUtility.setPosition(gmapContext, new google.maps.LatLng(gmapContext.location.lat(), $(this).val()), function(context){ + context.settings.onchanged(GmUtility.locationFromLatLng(context.location), context.radius, false); + }); + }); + } } } From 74ce16bb9554cc9b25e509bdfdb9448374ffcf58 Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Sun, 4 May 2014 20:07:13 +0300 Subject: [PATCH 09/19] Fixed issue #5 --- js/locationpicker.jquery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/locationpicker.jquery.js b/js/locationpicker.jquery.js index 274b9f8..009f797 100644 --- a/js/locationpicker.jquery.js +++ b/js/locationpicker.jquery.js @@ -129,7 +129,7 @@ google.maps.event.addListener(gmapContext.autocomplete, 'place_changed', function() { var place = gmapContext.autocomplete.getPlace(); if (!place.geometry) { - gmapContext.onlocationnotfound(); + gmapContext.settings.onlocationnotfound(place.name); return; } GmUtility.setPosition(gmapContext, place.geometry.location, function(context) { From c800709477ee5180c35495b9361b8199ea6e9964 Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Wed, 2 Jul 2014 01:47:38 +0300 Subject: [PATCH 10/19] Added new example --- index.html | 389 +++++++++++++++++++++--------------- js/locationpicker.jquery.js | 33 ++- 2 files changed, 249 insertions(+), 173 deletions(-) diff --git a/index.html b/index.html index e7c07b5..a03caef 100644 --- a/index.html +++ b/index.html @@ -1,76 +1,89 @@ - - - - - - - - - - - - - jquery-location-picker demo - + + + + + + + + + + + + + jquery-location-picker demo + - -
+
+ +
+

JQuery Location Picker

+ +
+ + +

This plug-in allows to easily find and select a location on the Google map. Along with a single point + selection, it allows to choose an area by providing its center and the radius. All the data + can be saved to any HTML input element automatically as well as be processed by Javascript (callback + support).

-
-

JQuery Location Picker

-
- -

This plug-in allows to easily find and select a location on the Google map. Along with a single point selection, it allows to choose an area by providing its center and the radius. All the data can be saved to any HTML input element automatically as well as be processed by Javascript (callback support).

+

The other feature of the plug-in is automatic address resolver which allows to get address + line from the selected latitude and longitude. The plug-in also supports searching by address typed into the + bound input element which uses auto-complete feature from Google API to make the search process easier. In + this case the marker will be automatically positioned on the map after successful address resolution.

-

The other feature of the plug-in is automatic address resolver which allows to get address line from the selected latitude and longitude. The plug-in also supports searching by address typed into the bound input element which uses auto-complete feature from Google API to make the search process easier. In this case the marker will be automatically positioned on the map after successful address resolution.

-

The plug-in currently uses JQuery and Google Maps.

-

 

-

- Get from GitHub -

-
-
+

The plug-in currently uses JQuery and Google Maps.

-
- -
    -
  • Doesn't require JQuery UI. The only requirements are JQuery and GoogleMaps API
  • -
  • Allows to pick an area with specified radius
  • -
  • Automatical binding to UI components (bidirectional data exchange)
  • -
  • Autocomplete for address input
  • -
  • Navigation by cordinates as well as by address
  • -
-
+

 

-
- - The first step is including all requirements: +

+ Get from GitHub +

+
+
+ +
+ +
    +
  • Doesn't require JQuery UI. The only requirements are JQuery and GoogleMaps API
  • +
  • Allows to pick an area with specified radius
  • +
  • Automatical binding to UI components (bidirectional data exchange)
  • +
  • Autocomplete for address input
  • +
  • Navigation by cordinates as well as by address
  • +
+
+ +
+ + The first step is including all requirements:
 <head>
 <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
@@ -78,7 +91,7 @@ 
 <script src="js/locationpicker.jquery.js"></script>
 </head>
 				
- Basic usage without any settings: + Basic usage without any settings:
 <div id="somecomponent" style="width: 500px; height: 400px;"></div>
 <script>
@@ -86,10 +99,11 @@ 
 </script>				
 
-

Result

-
- -

Default options:

+

Result

+ +
+ +

Default options:

 {
     location: {latitude: 40.7324319, longitude: -73.82480799999996},
@@ -107,26 +121,30 @@ 

Default options:

enableReverseGeocode: true, }
-

Callback methods:

-
    -
  • onchanged(currentLocation, radius, isMarkerDropped) - - Will be fired once location has been changed. Parameter isMarkerDropped will be set to True in case when location has been set by dropping the marker on map. In case when position was set from test input or using API it will be set to False
  • -
  • - onlocationnotfound: function(locationName) - - Will be fired when it is impossible that resolve address from user input to coordinates -
  • -
  • - oninitialized: function (component) - - Will be fired after initialization and positioning marker to the initial location -
  • -
-

-
-
- -

- -

Providing options

+

Callback methods:

+
    +
  • onchanged(currentLocation, radius, isMarkerDropped) - + Will be fired once location has been changed. Parameter + isMarkerDropped will be set to True in case when location has been set by dropping the + marker on map. In case when position was set from test input or using API it will be set to False +
  • +
  • + onlocationnotfound: function(locationName) - + Will be fired when it is impossible that resolve address from user input to coordinates +
  • +
  • + oninitialized: function (component) - + Will be fired after initialization and positioning marker to the initial location +
  • +
+

+
+
+ + +

+ +

Providing options

 <div id="somecomponent" style="width: 500px; height: 400px;"></div>
 <script>
@@ -136,14 +154,15 @@ 

Providing options

}); </script>
-

Result

-
- -

-

Binding UI with the widget

+

Result

+ +
+ +

+

Binding UI with the widget

 Location: <input type="text" id="us2-address" style="width: 200px"/>
 Radius: <input type="text" id="us2-radius"/>
@@ -162,40 +181,47 @@ 

Binding UI with the widget

}); </script>
-

Result:

-
-
- -
-
-
- -
-
-
-
 
-
- -
- -
-
-
-
- -

-

Subscribing for events

-

The following example ilustrates how to subscribe "Change" event. See the list of the available events along with functions signature above.

+

Result:

+ +
+
+ + +
+
+
+ + +
+
+
+
 
+
+ + +
+ + +
+
+
+
+ +

+

Subscribing for events

+ +

The following example illustrates how to subscribe "Change" event. See the list of the available events along + with functions signature above.

 $('#us3').locationpicker({
 location: {latitude: 46.15242437752303, longitude: 2.7470703125},	
@@ -211,47 +237,78 @@ 

Subscribing for events

alert("Location changed. New location (" + currentLocation.latitude + ", " + currentLocation.longitude + ")"); }
-
-
- -
-
-
- -
-
-
-
 
-
- -
- -
-
-
- -
-
- - Dmitry Berezovsky, Logicify (http://logicify.com/) -
-
+
+
+ + +
+
+
+ + +
+
+
+
 
+
+ + +
+ + +
+
+
+ +
+

Manipulating map widget from callback

+ +

If you need direct access to the actual Google Maps widget you can use map method as follows. + This example illustrates how to set zoom pragmatically each time when location has been changed.

+
+$('#us4').locationpicker({
+location: {latitude: 46.15242437752303, longitude: 2.7470703125},
+radius: 300,
+onchanged: function(currentLocation, radius, isMarkerDropped) {
+	var mapContext = $(this).locationpicker('map');
+    mapContext.map.setZoom(20);
+}
+				
+
+
+ +

+
+
+ + Dmitry Berezovsky, Logicify (http://logicify.com/) +
+ -
+ +
diff --git a/js/locationpicker.jquery.js b/js/locationpicker.jquery.js index 009f797..b8e7a21 100644 --- a/js/locationpicker.jquery.js +++ b/js/locationpicker.jquery.js @@ -120,7 +120,8 @@ inputBinding.radiusInput.on("change", function() { gmapContext.radius = $(this).val(); GmUtility.setPosition(gmapContext, gmapContext.location, function(context){ - context.settings.onchanged(GmUtility.locationFromLatLng(context.location), context.radius, false); + context.settings.onchanged.apply(gmapContext.domContainer, + [GmUtility.locationFromLatLng(context.location), context.radius, false]); }); }); } @@ -134,21 +135,24 @@ } GmUtility.setPosition(gmapContext, place.geometry.location, function(context) { updateInputValues(inputBinding, context); - context.settings.onchanged(GmUtility.locationFromLatLng(context.location), context.radius, false); + context.settings.onchanged.apply(gmapContext.domContainer, + [GmUtility.locationFromLatLng(context.location), context.radius, false]); }); }); } if (inputBinding.latitudeInput) { inputBinding.latitudeInput.on("change", function() { GmUtility.setPosition(gmapContext, new google.maps.LatLng($(this).val(), gmapContext.location.lng()), function(context){ - context.settings.onchanged(GmUtility.locationFromLatLng(context.location), context.radius, false); + context.settings.onchanged.apply(gmapContext.domContainer, + [GmUtility.locationFromLatLng(context.location), context.radius, false]); }); }); } if (inputBinding.longitudeInput) { inputBinding.longitudeInput.on("change", function() { GmUtility.setPosition(gmapContext, new google.maps.LatLng(gmapContext.location.lat(), $(this).val()), function(context){ - context.settings.onchanged(GmUtility.locationFromLatLng(context.location), context.radius, false); + context.settings.onchanged.apply(gmapContext.domContainer, + [GmUtility.locationFromLatLng(context.location), context.radius, false]); }); }); } @@ -192,7 +196,7 @@ * - event: string, name of the event * - callback: function, callback function to be invoked */ - if (options == undefined) { // Getter is not available + if (params == undefined) { // Getter is not available return null; } else { var event = params.event; @@ -203,8 +207,23 @@ } google.maps.event.addListener(gmapContext.map, event, callback); } - break; + case "map": + /** + * Returns object which allows access actual google widget and marker paced on it. + * Structure: { + * map: Instance of the google map widget + * marker: marker placed on map + * } + */ + if (params == undefined) { // Getter is not available + return { + map: gmapContext.map, + marker: gmapContext.marker + } + } else { + return null; + } } return null; } @@ -233,7 +252,7 @@ google.maps.event.addListener(gmapContext.marker, "dragend", function(event) { GmUtility.setPosition(gmapContext, gmapContext.marker.position, function(context){ var currentLocation = GmUtility.locationFromLatLng(gmapContext.location); - context.settings.onchanged(currentLocation, context.radius, true); + context.settings.onchanged.apply(gmapContext.domContainer, [currentLocation, context.radius, true]); updateInputValues(gmapContext.settings.inputBinding, gmapContext); }); }); From cf35aa4a8a5e65e159bc60ced4d50ba9e6e87ba4 Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Fri, 18 Jul 2014 11:11:38 +0300 Subject: [PATCH 11/19] Fixed typo in documentation (# sign in selector) --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index a03caef..0958cb6 100644 --- a/index.html +++ b/index.html @@ -95,7 +95,7 @@
 <div id="somecomponent" style="width: 500px; height: 400px;"></div>
 <script>
-$('somecomponent').locationpicker();
+$('#somecomponent').locationpicker();
 </script>				
 
@@ -148,7 +148,7 @@

Providing options

 <div id="somecomponent" style="width: 500px; height: 400px;"></div>
 <script>
-$('somecomponent').locationpicker({
+$('#somecomponent').locationpicker({
 	location: {latitude: 46.15242437752303, longitude: 2.7470703125},
 	radius: 300
 	});

From 6c9211e08687b5f4aabbcc1bb1214b79cb1594be Mon Sep 17 00:00:00 2001
From: Dmitry Berezovsky 
Date: Wed, 3 Sep 2014 23:51:29 +0300
Subject: [PATCH 12/19] Updated documentation

---
 index.html                  |   2 +-
 js/locationpicker.jquery.js | 287 ------------------------------------
 2 files changed, 1 insertion(+), 288 deletions(-)
 delete mode 100644 js/locationpicker.jquery.js

diff --git a/index.html b/index.html
index 0958cb6..1181dcb 100644
--- a/index.html
+++ b/index.html
@@ -12,7 +12,7 @@
     
     
     
-    
+    
     jquery-location-picker demo
     
 
diff --git a/js/locationpicker.jquery.js b/js/locationpicker.jquery.js
deleted file mode 100644
index b8e7a21..0000000
--- a/js/locationpicker.jquery.js
+++ /dev/null
@@ -1,287 +0,0 @@
-(function ( $ ) {
-
-    /**
-     * Holds google map object and related utility entities.
-     * @constructor
-     */
-    function GMapContext(domElement, options) {
-        var _map = new google.maps.Map(domElement, options);
-        var _marker = new google.maps.Marker({
-            position: new google.maps.LatLng(54.19335, -3.92695),
-            map: _map,
-            title: "Drag Me",
-            draggable: true
-        });
-        return {
-            map: _map,
-            marker: _marker,
-            circle: null,
-            location: _marker.position,
-            radius: options.radius,
-            locationName: options.locationName,
-            settings: options.settings,
-            domContainer: domElement,
-            geodecoder: new google.maps.Geocoder()
-        }
-    }
-
-    // Utility functions for Google Map Manipulations
-    var GmUtility = {
-        /**
-         * Draw a circle over the the map. Returns circle object.
-         * Also writes new circle object in gmapContext.
-         *
-         * @param center - LatLng of the center of the circle
-         * @param radius - radius in meters
-         * @param gmapContext - context
-         * @param options
-         */
-        drawCircle: function(gmapContext, center, radius, options) {
-            if (gmapContext.circle != null) {
-                gmapContext.circle.setMap(null);
-            }
-            if (radius > 0) {
-                radius *= 1;
-                options = $.extend({
-                    strokeColor: "#0000FF",
-                    strokeOpacity: 0.35,
-                    strokeWeight: 2,
-                    fillColor: "#0000FF",
-                    fillOpacity: 0.20
-                }, options);
-                options.map = gmapContext.map;
-                options.radius = radius;
-                options.center = center;
-                gmapContext.circle = new google.maps.Circle(options);
-                return gmapContext.circle;
-            }
-            return null;
-        },
-        /**
-         *
-         * @param gMapContext
-         * @param location
-         * @param callback
-         */
-        setPosition: function(gMapContext, location, callback) {
-            gMapContext.location = location;
-            gMapContext.marker.setPosition(location);
-            gMapContext.map.panTo(location);
-            this.drawCircle(gMapContext, location, gMapContext.radius, {});
-            if (gMapContext.settings.enableReverseGeocode) {
-                gMapContext.geodecoder.geocode({latLng: gMapContext.location}, function(results, status){
-                    if (status == google.maps.GeocoderStatus.OK && results.length > 0){
-                        gMapContext.locationName = results[0].formatted_address;
-                    }
-                    if (callback) {
-                        callback.call(this, gMapContext);
-                    }
-                });
-            } else {
-                if (callback) {
-                    callback.call(this, gmapContext);
-                }
-            }
-
-        },
-        locationFromLatLng: function(lnlg) {
-            return {latitude: lnlg.lat(), longitude: lnlg.lng()}
-        }
-    }
-
-    function isPluginApplied(domObj) {
-        return getContextForElement(domObj) != undefined;
-    }
-
-    function getContextForElement(domObj) {
-        return $(domObj).data("locationpicker");
-    }
-
-    function updateInputValues(inputBinding, gmapContext){
-        if (!inputBinding) return;
-        var currentLocation = GmUtility.locationFromLatLng(gmapContext.location);
-        if (inputBinding.latitudeInput) {
-            inputBinding.latitudeInput.val(currentLocation.latitude);
-        }
-        if (inputBinding.longitudeInput) {
-            inputBinding.longitudeInput.val(currentLocation.longitude);
-        }
-        if (inputBinding.radiusInput) {
-            inputBinding.radiusInput.val(gmapContext.radius);
-        }
-        if (inputBinding.locationNameInput) {
-            inputBinding.locationNameInput.val(gmapContext.locationName);
-        }
-    } 
- 
-    function setupInputListenersInput(inputBinding, gmapContext) {
-        if (inputBinding) {
-            if (inputBinding.radiusInput){
-		          inputBinding.radiusInput.on("change", function() {
-		              gmapContext.radius = $(this).val();
-		              GmUtility.setPosition(gmapContext, gmapContext.location, function(context){
-		              	context.settings.onchanged.apply(gmapContext.domContainer,
-                            [GmUtility.locationFromLatLng(context.location), context.radius, false]);
-		              });
-		          });
-            }
-            if (inputBinding.locationNameInput && gmapContext.settings.enableAutocomplete) {
-                gmapContext.autocomplete = new google.maps.places.Autocomplete(inputBinding.locationNameInput.get(0));
-                google.maps.event.addListener(gmapContext.autocomplete, 'place_changed', function() {
-                    var place = gmapContext.autocomplete.getPlace();
-                    if (!place.geometry) {
-                        gmapContext.settings.onlocationnotfound(place.name);
-                        return;
-                    }
-                    GmUtility.setPosition(gmapContext, place.geometry.location, function(context) {		                    
-                        updateInputValues(inputBinding, context);
-                        context.settings.onchanged.apply(gmapContext.domContainer,
-                            [GmUtility.locationFromLatLng(context.location), context.radius, false]);
-                    });
-                });
-            }
-            if (inputBinding.latitudeInput) {
-            	inputBinding.latitudeInput.on("change", function() {
-            		GmUtility.setPosition(gmapContext, new google.maps.LatLng($(this).val(), gmapContext.location.lng()), function(context){
-		              	context.settings.onchanged.apply(gmapContext.domContainer,
-                            [GmUtility.locationFromLatLng(context.location), context.radius, false]);
-		            });
-            	});
-            }
-            if (inputBinding.longitudeInput) {
-            	inputBinding.longitudeInput.on("change", function() {
-            		GmUtility.setPosition(gmapContext, new google.maps.LatLng(gmapContext.location.lat(), $(this).val()), function(context){
-		              	context.settings.onchanged.apply(gmapContext.domContainer,
-                            [GmUtility.locationFromLatLng(context.location), context.radius, false]);
-		            });
-            	});
-            }
-        }
-    }
-
-    /**
-     * Initialization:
-     *  $("#myMap").locationpicker(options);
-     * @param options
-     * @param params
-     * @returns {*}
-     */
-    $.fn.locationpicker = function( options, params ) {
-        if (typeof options == 'string') { // Command provided
-            var _targetDomElement = this.get(0);
-            // Plug-in is not applied - nothing to do.
-            if (!isPluginApplied(_targetDomElement)) return;
-            var gmapContext = getContextForElement(_targetDomElement);
-            switch (options) {
-                case "location":
-                    if (params == undefined) { // Getter
-                        var location = GmUtility.locationFromLatLng(gmapContext.location);
-                        location.radius = gmapContext.radius;
-                        location.name = gmapContext.locationName;
-                        return location;
-                    } else { // Setter
-                        if (params.radius) {
-                            gmapContext.radius = params.radius;
-                        }
-                        GmUtility.setPosition(gmapContext, new google.maps.LatLng(params.latitude, params.longitude), function(gmapContext) {
-                            updateInputValues(gmapContext.settings.inputBinding, gmapContext);
-                        });
-                    }
-                    break;
-                case "subscribe":
-                    /**
-                     * Provides interface for subscribing for GoogleMap events.
-                     * See Google API documentation for details.
-                     * Parameters:
-                     * - event: string, name of the event
-                     * - callback: function, callback function to be invoked
-                     */
-                    if (params == undefined) { // Getter is not available
-                        return null;
-                    } else {
-                        var event = params.event;
-                        var callback = params.callback;
-                        if (!event || ! callback) {
-                            console.error("LocationPicker: Invalid arguments for method \"subscribe\"")
-                            return null;
-                        }
-                        google.maps.event.addListener(gmapContext.map, event, callback);
-                    }
-                    break;
-                case "map":
-                    /**
-                     * Returns object which allows access actual google widget and marker paced on it.
-                     * Structure: {
-                     *  map: Instance of the google map widget
-                     *  marker: marker placed on map
-                     * }
-                     */
-                    if (params == undefined) { // Getter is not available
-                        return {
-                            map: gmapContext.map,
-                            marker: gmapContext.marker
-                        }
-                    } else {
-                        return null;
-                    }
-            }
-            return null;
-        }
-        return this.each(function() {
-            var $target = $(this);
-            // If plug-in hasn't been applied before - initialize, otherwise - skip
-            if (isPluginApplied(this)) return;
-            // Plug-in initialization is required
-            // Defaults
-            var settings = $.extend({}, $.fn.locationpicker.defaults, options );
-            // Initialize
-            var gmapContext = new GMapContext(this, {
-                zoom: settings.zoom,
-                center: new google.maps.LatLng(settings.location.latitude, settings.location.longitude),
-                mapTypeId: google.maps.MapTypeId.ROADMAP,
-                mapTypeControl: false,
-                disableDoubleClickZoom: false,
-                scrollwheel: settings.scrollwheel,
-                streetViewControl: false,
-                radius: settings.radius,
-                locationName: settings.locationName,
-                settings: settings
-            });
-            $target.data("locationpicker", gmapContext);
-            // Subscribe GMap events
-            google.maps.event.addListener(gmapContext.marker, "dragend", function(event) {
-                GmUtility.setPosition(gmapContext, gmapContext.marker.position, function(context){
-                    var currentLocation = GmUtility.locationFromLatLng(gmapContext.location);
-                    context.settings.onchanged.apply(gmapContext.domContainer, [currentLocation, context.radius, true]);
-                    updateInputValues(gmapContext.settings.inputBinding, gmapContext);
-                });
-            });
-            GmUtility.setPosition(gmapContext, new google.maps.LatLng(settings.location.latitude, settings.location.longitude), function(context){
-                updateInputValues(settings.inputBinding, gmapContext);
-                context.settings.oninitialized($target);
-            });
-            // Set up input bindings if needed
-            setupInputListenersInput(settings.inputBinding, gmapContext);
-        });
-    };
-    $.fn.locationpicker.defaults = {
-        location: {latitude: 40.7324319, longitude: -73.82480799999996},
-        locationName: "",
-        radius: 500,
-        zoom: 15,
-        scrollwheel: true,
-        inputBinding: {
-            latitudeInput: null,
-            longitudeInput: null,
-            radiusInput: null,
-            locationNameInput: null
-        },
-        enableAutocomplete: false,
-        enableReverseGeocode: true,
-        onchanged: function(currentLocation, radius, isMarkerDropped) {},
-        onlocationnotfound: function(locationName) {},
-        oninitialized: function (component) {}
-
-    }
-
-}( jQuery ));

From 3430c05b1b30196a8f6a3ced61b3e20c7ff82b36 Mon Sep 17 00:00:00 2001
From: Dmitry Berezovsky 
Date: Thu, 4 Sep 2014 00:44:00 +0300
Subject: [PATCH 13/19] Updated documentation

---
 index.html | 282 ++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 183 insertions(+), 99 deletions(-)

diff --git a/index.html b/index.html
index 1181dcb..042ab37 100644
--- a/index.html
+++ b/index.html
@@ -12,7 +12,7 @@
     
     
     
-    
+    
     jquery-location-picker demo
     
 
@@ -125,8 +125,8 @@ 

Callback methods:

  • onchanged(currentLocation, radius, isMarkerDropped) - Will be fired once location has been changed. Parameter - isMarkerDropped will be set to True in case when location has been set by dropping the - marker on map. In case when position was set from test input or using API it will be set to False + isMarkerDropped will be set to True in case when location has been set by dropping the + marker on map. In case when position was set from test input or using API it will be set to False
  • onlocationnotfound: function(locationName) - @@ -137,14 +137,13 @@

    Callback methods:

    Will be fired after initialization and positioning marker to the initial location
-

- + -

+

-

Providing options

+

Providing options

 <div id="somecomponent" style="width: 500px; height: 400px;"></div>
 <script>
@@ -154,15 +153,15 @@ 

Providing options

}); </script>
-

Result

+

Result

-
- -

-

Binding UI with the widget

+
+ + +

Binding UI with the widget

 Location: <input type="text" id="us2-address" style="width: 200px"/>
 Radius: <input type="text" id="us2-radius"/>
@@ -181,47 +180,47 @@ 

Binding UI with the widget

}); </script>
-

Result:

+

Result:

-
-
- +
+
+ -
-
-
- +
+
+
+ -
-
-
-
 
-
- +
+
+
+
 
+
+ -
- +
+ -
-
-
+
- -

-

Subscribing for events

+
+
+ -

The following example illustrates how to subscribe "Change" event. See the list of the available events along - with functions signature above.

+

Subscribing for events

+ +

The following example illustrates how to subscribe "Change" event. See the list of the available events along + with functions signature above.

 $('#us3').locationpicker({
 location: {latitude: 46.15242437752303, longitude: 2.7470703125},	
@@ -237,78 +236,163 @@ 

Subscribing for events

alert("Location changed. New location (" + currentLocation.latitude + ", " + currentLocation.longitude + ")"); }
-
-
- +
+
+ -
-
-
- +
+
+
+ -
-
-
-
 
-
- +
+
+
+
 
+
+ -
- +
+ -
-
-
- +
-

Manipulating map widget from callback

+
+ +
+

Manipulating map widget from callback

-

If you need direct access to the actual Google Maps widget you can use map method as follows. - This example illustrates how to set zoom pragmatically each time when location has been changed.

+

If you need direct access to the actual Google Maps widget you can use map method as follows. + This example illustrates how to set zoom pragmatically each time when location has been changed.

 $('#us4').locationpicker({
 location: {latitude: 46.15242437752303, longitude: 2.7470703125},
 radius: 300,
 onchanged: function(currentLocation, radius, isMarkerDropped) {
-	var mapContext = $(this).locationpicker('map');
+    var mapContext = $(this).locationpicker('map');
     mapContext.map.setZoom(20);
 }
 				
-
-
- -

-
-
- - Dmitry Berezovsky, Logicify (http://logicify.com/) +
+ +

Advanced usage of geo decoder features

+ +

+ Along with decoded readable location name plugin returns address split on components + (state, postal code, etc.) which in some cases can be pretty useful. +

+
+$('#us5').locationpicker({
+    location: {latitude: 42.00, longitude: -73.82480799999996},
+    radius: 300,
+    onchanged: function (currentLocation, radius, isMarkerDropped) {
+        var addressComponents = $(this).locationpicker('map').location.addressComponents;
+        $('#us5-street1').val(addressComponents.addressLine1);
+        $('#us5-city').val(addressComponents.city);
+        $('#us5-state').val(addressComponents.stateOrProvince);
+        $('#us5-zip').val(addressComponents.postalCode);
+        $('#us5-country').val(addressComponents.country);
+    }
+});
+    
+
+
+
+
+

+
+
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+
-
-

Back to top

+
+ +
+ +
+ + Dmitry Berezovsky, Logicify (http://logicify.com/) +
+ +
+ +

Logicify

+
From 47427d1826e20d653640af66a13133b59cfc337f Mon Sep 17 00:00:00 2001 From: corvis Date: Sun, 4 Jan 2015 22:45:02 +0200 Subject: [PATCH 14/19] Corrected site pages --- index.html | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index 042ab37..9b936a0 100644 --- a/index.html +++ b/index.html @@ -12,7 +12,7 @@ - + jquery-location-picker demo @@ -306,16 +306,23 @@

Advanced usage of geo decoder features

(state, postal code, etc.) which in some cases can be pretty useful.

+function updateControls(addressComponents) {
+    $('#us5-street1').val(addressComponents.addressLine1);
+    $('#us5-city').val(addressComponents.city);
+    $('#us5-state').val(addressComponents.stateOrProvince);
+    $('#us5-zip').val(addressComponents.postalCode);
+    $('#us5-country').val(addressComponents.country);
+}
 $('#us5').locationpicker({
     location: {latitude: 42.00, longitude: -73.82480799999996},
     radius: 300,
     onchanged: function (currentLocation, radius, isMarkerDropped) {
         var addressComponents = $(this).locationpicker('map').location.addressComponents;
-        $('#us5-street1').val(addressComponents.addressLine1);
-        $('#us5-city').val(addressComponents.city);
-        $('#us5-state').val(addressComponents.stateOrProvince);
-        $('#us5-zip').val(addressComponents.postalCode);
-        $('#us5-country').val(addressComponents.country);
+        updateControls(addressComponents);
+    },
+    oninitialized: function(component) {
+        var addressComponents = $(component).locationpicker('map').location.addressComponents;
+        updateControls(addressComponents);
     }
 });
     
@@ -367,16 +374,23 @@

Advanced usage of geo decoder features

From 8164ea7f69f499bb4c094f97c65b0225492155b0 Mon Sep 17 00:00:00 2001 From: corvis Date: Mon, 5 Jan 2015 00:38:12 +0200 Subject: [PATCH 15/19] Updated documentation (autosize) --- index.html | 543 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 317 insertions(+), 226 deletions(-) diff --git a/index.html b/index.html index 9b936a0..cfc5b7e 100644 --- a/index.html +++ b/index.html @@ -43,47 +43,52 @@
-
-

JQuery Location Picker

- -
- - -

This plug-in allows to easily find and select a location on the Google map. Along with a single point - selection, it allows to choose an area by providing its center and the radius. All the data - can be saved to any HTML input element automatically as well as be processed by Javascript (callback - support).

- -

The other feature of the plug-in is automatic address resolver which allows to get address - line from the selected latitude and longitude. The plug-in also supports searching by address typed into the - bound input element which uses auto-complete feature from Google API to make the search process easier. In - this case the marker will be automatically positioned on the map after successful address resolution.

- -

The plug-in currently uses JQuery and Google Maps.

- -

 

- -

- Get from GitHub -

+
+

JQuery Location Picker

+ +
+ + +

This plug-in allows to easily find and select a location on the Google map. Along with a single point + selection, it allows to choose an area by providing its center and the radius. All the + data + can be saved to any HTML input element automatically as well as be processed by Javascript (callback + support).

+ +

The other feature of the plug-in is automatic address resolver which allows to get + address + line from the selected latitude and longitude. The plug-in also supports searching by address typed into + the + bound input element which uses auto-complete feature from Google API to make the search process easier. + In + this case the marker will be automatically positioned on the map after successful address resolution. +

+ +

The plug-in currently uses JQuery and Google Maps.

+ +

 

+ +

+ Get from GitHub +

+
-
-
- -
    -
  • Doesn't require JQuery UI. The only requirements are JQuery and GoogleMaps API
  • -
  • Allows to pick an area with specified radius
  • -
  • Automatical binding to UI components (bidirectional data exchange)
  • -
  • Autocomplete for address input
  • -
  • Navigation by cordinates as well as by address
  • -
-
+
+ +
    +
  • Doesn't require JQuery UI. The only requirements are JQuery and GoogleMaps API
  • +
  • Allows to pick an area with specified radius
  • +
  • Automatical binding to UI components (bidirectional data exchange)
  • +
  • Autocomplete for address input
  • +
  • Navigation by cordinates as well as by address
  • +
+
-
- - The first step is including all requirements: +
+ + The first step is including all requirements:
 <head>
 <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
@@ -91,7 +96,7 @@ 
 <script src="js/locationpicker.jquery.js"></script>
 </head>
 				
- Basic usage without any settings: + Basic usage without any settings:
 <div id="somecomponent" style="width: 500px; height: 400px;"></div>
 <script>
@@ -99,11 +104,11 @@ 
 </script>				
 
-

Result

+

Result

-
- -

Default options:

+
+ +

Default options:

 {
     location: {latitude: 40.7324319, longitude: -73.82480799999996},
@@ -121,29 +126,29 @@ 

Default options:

enableReverseGeocode: true, }
-

Callback methods:

-
    -
  • onchanged(currentLocation, radius, isMarkerDropped) - - Will be fired once location has been changed. Parameter - isMarkerDropped will be set to True in case when location has been set by dropping the - marker on map. In case when position was set from test input or using API it will be set to False -
  • -
  • - onlocationnotfound: function(locationName) - - Will be fired when it is impossible that resolve address from user input to coordinates -
  • -
  • - oninitialized: function (component) - - Will be fired after initialization and positioning marker to the initial location -
  • -
-
-
- +

Callback methods:

+
    +
  • onchanged(currentLocation, radius, isMarkerDropped) - + Will be fired once location has been changed. Parameter + isMarkerDropped will be set to True in case when location has been set by dropping the + marker on map. In case when position was set from test input or using API it will be set to False +
  • +
  • + onlocationnotfound: function(locationName) - + Will be fired when it is impossible that resolve address from user input to coordinates +
  • +
  • + oninitialized: function (component) - + Will be fired after initialization and positioning marker to the initial location +
  • +
+
+
+ -

+

-

Providing options

+

Providing options

 <div id="somecomponent" style="width: 500px; height: 400px;"></div>
 <script>
@@ -153,15 +158,15 @@ 

Providing options

}); </script>
-

Result

+

Result

-
- +
+ -

Binding UI with the widget

+

Binding UI with the widget

 Location: <input type="text" id="us2-address" style="width: 200px"/>
 Radius: <input type="text" id="us2-radius"/>
@@ -180,47 +185,47 @@ 

Binding UI with the widget

}); </script>
-

Result:

+

Result:

-
-
- +
+
+ -
-
-
- +
+
+
+ -
-
-
-
 
-
- +
+
+
+
 
+
+ -
- +
+ -
-
-
-
- +
+
+
+
+ -

Subscribing for events

+

Subscribing for events

-

The following example illustrates how to subscribe "Change" event. See the list of the available events along - with functions signature above.

+

The following example illustrates how to subscribe "Change" event. See the list of the available events along + with functions signature above.

 $('#us3').locationpicker({
 location: {latitude: 46.15242437752303, longitude: 2.7470703125},	
@@ -236,47 +241,47 @@ 

Subscribing for events

alert("Location changed. New location (" + currentLocation.latitude + ", " + currentLocation.longitude + ")"); }
-
-
- +
+
+ -
-
-
- +
+
+
+ -
-
-
-
 
-
- +
+
+
+
 
+
+ -
- +
+ -
-
-
- -
-

Manipulating map widget from callback

+
+
+
+ +
+

Manipulating map widget from callback

-

If you need direct access to the actual Google Maps widget you can use map method as follows. - This example illustrates how to set zoom pragmatically each time when location has been changed.

+

If you need direct access to the actual Google Maps widget you can use map method as follows. + This example illustrates how to set zoom pragmatically each time when location has been changed.

 $('#us4').locationpicker({
 location: {latitude: 46.15242437752303, longitude: 2.7470703125},
@@ -286,25 +291,25 @@ 

Manipulating map widget from callback

mapContext.map.setZoom(20); }
-
-
- -
+
+
+ +
-

Advanced usage of geo decoder features

+

Advanced usage of geo decoder features

-

- Along with decoded readable location name plugin returns address split on components - (state, postal code, etc.) which in some cases can be pretty useful. -

+

+ Along with decoded readable location name plugin returns address split on components + (state, postal code, etc.) which in some cases can be pretty useful. +

 function updateControls(addressComponents) {
     $('#us5-street1').val(addressComponents.addressLine1);
@@ -326,87 +331,173 @@ 

Advanced usage of geo decoder features

} });
-
-
-
-
-

-
-
-
-
- - -
- -
+
+
+
+
+

-
- - -
- +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
-
- +
+
+ +
-
- +

Using widget in modal

+

+ It is pretty common situation when you put widget into the container which is not visible during + initialization, e.g. modal dialog. In thins case you need to call "autosize" method each time you resize + container. +

+
+            $('#us6').locationpicker({
+                location: {latitude: 46.15242437752303, longitude: 2.7470703125},
+                radius: 300,
+                inputBinding: {
+                    latitudeInput: $('#us6-lat'),
+                    longitudeInput: $('#us6-lon'),
+                    radiusInput: $('#us6-radius'),
+                    locationNameInput: $('#us6-address')
+                },
+                enableAutocomplete: true
+            });
+            $('#us6-dialog').on('shown.bs.modal', function () {
+                $('#us6').locationpicker('autosize');
+            });
+        
+ + + -
- - Dmitry Berezovsky, Logicify (http://logicify.com/) -
-
-
+ +

Logicify

+
From 0762b3a60fff1459e0cb381b7fc29641f62f2a02 Mon Sep 17 00:00:00 2001 From: Sumragen Date: Tue, 20 Sep 2016 16:09:45 +0300 Subject: [PATCH 16/19] added new examples --- css/style.css | 6 + index.html | 997 ++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 735 insertions(+), 268 deletions(-) diff --git a/css/style.css b/css/style.css index 4181f74..9572270 100644 --- a/css/style.css +++ b/css/style.css @@ -5,6 +5,12 @@ body { padding: 40px 15px; text-align: center; } +#examples h3{ + cursor: pointer +} +.pac-container { + z-index: 99999; +} footer { margin-top: 45px; } diff --git a/index.html b/index.html index cfc5b7e..87dd1da 100644 --- a/index.html +++ b/index.html @@ -91,17 +91,17 @@ The first step is including all requirements:
 <head>
-<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
-<script type="text/javascript" src='http://maps.google.com/maps/api/js?sensor=false&libraries=places'></script>
-<script src="js/locationpicker.jquery.js"></script>
+    <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
+    <script type="text/javascript" src='http://maps.google.com/maps/api/js?sensor=false&libraries=places'></script>
+    <script src="js/locationpicker.jquery.js"></script>
 </head>
 				
Basic usage without any settings:
 <div id="somecomponent" style="width: 500px; height: 400px;"></div>
 <script>
-$('#somecomponent').locationpicker();
-</script>				
+    $('#somecomponent').locationpicker();
+</script>
 

Result

@@ -111,10 +111,15 @@

Default options:

 {
-    location: {latitude: 40.7324319, longitude: -73.82480799999996},
+    location: {
+        latitude: 40.7324319,
+        longitude: -73.82480777777776
+    },
     locationName: "",
     radius: 500,
     zoom: 15,
+    mapTypeId: google.maps.MapTypeId.ROADMAP,
+    styles: [],
     scrollwheel: true,
     inputBinding: {
         latitudeInput: null,
@@ -123,7 +128,14 @@ 

Default options:

locationNameInput: null }, enableAutocomplete: false, + enableAutocompleteBlur: false, + autocompleteOptions: null, + addressFormat: 'postal_code', enableReverseGeocode: true, + draggable: true, + markerIcon: undefined, + markerDraggable: true, + markerVisible : true }

Callback methods:

@@ -148,178 +160,557 @@

-

Providing options

-
+            
+
+
+        

Providing options

+ -

Binding UI with the widget

-
+        

Binding UI with the widget

+
-
-

JQuery Location Picker

-
- -
- Something -
+
+

JQuery Location Picker

+
+ +
- Features +
    +
  • Doesn't require JQuery UI. The only requirements are JQuery and GoogleMaps API
  • +
  • Allows to pick an area with specified radius
  • +
  • Automatical binding to UI components (bidirectional data exchange)
  • +
  • Autocomplete for address input
  • +
  • Navigation by cordinates as well as by address
  • +
-
+
- TBD + The first step is including all requirements: +
+<head>
+<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
+<script type="text/javascript" src='http://maps.google.com/maps/api/js?sensor=false&libraries=places'></script>
+<script src="js/locationpicker.jquery.js"></script>
+</head>
+				
+ Basic usage without any settings: +
+<div id="somecomponent" style="width: 500px; height: 400px;"></div>
+<script>
+$('somecomponent').locationpicker();
+</script>				
+
+ +

Result

+
+ +

Default options:

+
+{
+    location: {latitude: 40.7324319, longitude: -73.82480799999996},
+    locationName: "",
+    radius: 500,
+    zoom: 15,
+    scrollwheel: true,
+    inputBinding: {
+        latitudeInput: null,
+        longitudeInput: null,
+        radiusInput: null,
+        locationNameInput: null
+    },
+    enableAutocomplete: false,
+    enableReverseGeocode: true,
+}
+
+

Callback methods:

+
    +
  • onchanged(currentLocation, radius, isMarkerDropped) - + Will be fired once location has been changed. Parameter isMarkerDropped will be set to True in case when location has been set by dropping the marker on map. In case when position was set from test input or using API it will be set to False
  • +
  • + onlocationnotfound: function(locationName) - + Will be fired when it is impossible that resolve address from user input to coordinates +
  • +
  • + oninitialized: function (component) - + Will be fired after initialization and positioning marker to the initial location +
  • +
+

-
+
- TBD +

+ +

Providing options

+
+<div id="somecomponent" style="width: 500px; height: 400px;"></div>
+<script>
+$('somecomponent').locationpicker({
+	location: {latitude: 46.15242437752303, longitude: 2.7470703125},
+	radius: 300
+	});
+</script>				
+				
+

Result

+
+ +

+

Binding UI with the widget

+
+Location: <input type="text" id="us2-address" style="width: 200px"/>
+Radius: <input type="text" id="us2-radius"/>
+<div id="us2" style="width: 500px; height: 400px;"></div>				
+Lat.: <input type="text" id="us2-lat"/>
+Long.: <input type="text" id="us2-lon"/>
+<script>$('#us2').locationpicker({
+	location: {latitude: 46.15242437752303, longitude: 2.7470703125},	
+	radius: 300,
+	inputBinding: {
+        latitudeInput: $('#us2-lat'),
+        longitudeInput: $('#us2-lon'),
+        radiusInput: $('#us2-radius'),
+        locationNameInput: $('#us2-address')
+    }
+	});
+</script>				
+				
+

Result:

+
+
+ +
+
+
+ +
+
+
+
 
+
+ +
+ +
+
+
+
+ +

+

Subscribing for events

+

The following example ilustrates how to subscribe "Change" event. See the list of the available events along with functions signature above.

+
+$('#us3').locationpicker({
+location: {latitude: 46.15242437752303, longitude: 2.7470703125},	
+radius: 300,
+inputBinding: {
+	latitudeInput: $('#us3-lat'),
+	longitudeInput: $('#us3-lon'),
+	radiusInput: $('#us3-radius'),
+	locationNameInput: $('#us3-address')        
+},
+enableAutocomplete: true,
+onchanged: function(currentLocation, radius, isMarkerDropped) {
+	alert("Location changed. New location (" + currentLocation.latitude + ", " + currentLocation.longitude + ")");
+}				
+				
+
+
+ +
+
+
+ +
+
+
+
 
+
+ +
+ +
+
+
+
diff --git a/js/locationpicker.jquery.js b/js/locationpicker.jquery.js index 88b3def..0a9ce0f 100644 --- a/js/locationpicker.jquery.js +++ b/js/locationpicker.jquery.js @@ -116,10 +116,12 @@ function setupInputListenersInput(inputBinding, gmapContext) { if (inputBinding) { - inputBinding.radiusInput.on("change", function() { - gmapContext.radius = $(this).val(); - GmUtility.setPosition(gmapContext, gmapContext.location); - }); + if (inputBinding.radiusInput){ + inputBinding.radiusInput.on("change", function() { + gmapContext.radius = $(this).val(); + GmUtility.setPosition(gmapContext, gmapContext.location); + }); + } if (inputBinding.locationNameInput && gmapContext.settings.enableAutocomplete) { gmapContext.autocomplete = new google.maps.places.Autocomplete(inputBinding.locationNameInput.get(0)); google.maps.event.addListener(gmapContext.autocomplete, 'place_changed', function() { @@ -246,4 +248,4 @@ } -}( jQuery )); \ No newline at end of file +}( jQuery )); diff --git a/js/locationpicker.jquery.js~ b/js/locationpicker.jquery.js~ new file mode 100644 index 0000000..0a9ce0f --- /dev/null +++ b/js/locationpicker.jquery.js~ @@ -0,0 +1,251 @@ +(function ( $ ) { + + /** + * Holds google map object and related utility entities. + * @constructor + */ + function GMapContext(domElement, options) { + var _map = new google.maps.Map(domElement, options); + var _marker = new google.maps.Marker({ + position: new google.maps.LatLng(54.19335, -3.92695), + map: _map, + title: "Drag Me", + draggable: true + }); + return { + map: _map, + marker: _marker, + circle: null, + location: _marker.position, + radius: options.radius, + locationName: options.locationName, + settings: options.settings, + domContainer: domElement, + geodecoder: new google.maps.Geocoder() + } + } + + // Utility functions for Google Map Manipulations + var GmUtility = { + /** + * Draw a circle over the the map. Returns circle object. + * Also writes new circle object in gmapContext. + * + * @param center - LatLng of the center of the circle + * @param radius - radius in meters + * @param gmapContext - context + * @param options + */ + drawCircle: function(gmapContext, center, radius, options) { + if (gmapContext.circle != null) { + gmapContext.circle.setMap(null); + } + if (radius > 0) { + radius *= 1; + options = $.extend({ + strokeColor: "#0000FF", + strokeOpacity: 0.35, + strokeWeight: 2, + fillColor: "#0000FF", + fillOpacity: 0.20 + }, options); + options.map = gmapContext.map; + options.radius = radius; + options.center = center; + gmapContext.circle = new google.maps.Circle(options); + return gmapContext.circle; + } + return null; + }, + /** + * + * @param gMapContext + * @param location + * @param callback + */ + setPosition: function(gMapContext, location, callback) { + gMapContext.location = location; + gMapContext.marker.setPosition(location); + gMapContext.map.panTo(location); + this.drawCircle(gMapContext, location, gMapContext.radius, {}); + if (gMapContext.settings.enableReverseGeocode) { + gMapContext.geodecoder.geocode({latLng: gMapContext.location}, function(results, status){ + if (status == google.maps.GeocoderStatus.OK && results.length > 0){ + gMapContext.locationName = results[0].formatted_address; + } + if (callback) { + callback.call(this, gMapContext); + } + }); + } else { + if (callback) { + callback.call(this, gmapContext); + } + } + + }, + locationFromLatLng: function(lnlg) { + return {latitude: lnlg.lat(), longitude: lnlg.lng()} + } + } + + function isPluginApplied(domObj) { + return getContextForElement(domObj) != undefined; + } + + function getContextForElement(domObj) { + return $(domObj).data("locationpicker"); + } + + function updateInputValues(inputBinding, gmapContext){ + if (!inputBinding) return; + var currentLocation = GmUtility.locationFromLatLng(gmapContext.location); + if (inputBinding.latitudeInput) { + inputBinding.latitudeInput.val(currentLocation.latitude); + } + if (inputBinding.longitudeInput) { + inputBinding.longitudeInput.val(currentLocation.longitude); + } + if (inputBinding.radiusInput) { + inputBinding.radiusInput.val(gmapContext.radius); + } + if (inputBinding.locationNameInput) { + inputBinding.locationNameInput.val(gmapContext.locationName); + } + } + + function setupInputListenersInput(inputBinding, gmapContext) { + if (inputBinding) { + if (inputBinding.radiusInput){ + inputBinding.radiusInput.on("change", function() { + gmapContext.radius = $(this).val(); + GmUtility.setPosition(gmapContext, gmapContext.location); + }); + } + if (inputBinding.locationNameInput && gmapContext.settings.enableAutocomplete) { + gmapContext.autocomplete = new google.maps.places.Autocomplete(inputBinding.locationNameInput.get(0)); + google.maps.event.addListener(gmapContext.autocomplete, 'place_changed', function() { + var place = gmapContext.autocomplete.getPlace(); + if (!place.geometry) { + gmapContext.onlocationnotfound(); + return; + } + GmUtility.setPosition(gmapContext, place.geometry.location, function() { + updateInputValues(inputBinding, gmapContext); + }); + }); + } + } + } + + /** + * Initialization: + * $("#myMap").locationpicker(options); + * @param options + * @param params + * @returns {*} + */ + $.fn.locationpicker = function( options, params ) { + if (typeof options == 'string') { // Command provided + var _targetDomElement = this.get(0); + // Plug-in is not applied - nothing to do. + if (!isPluginApplied(_targetDomElement)) return; + var gmapContext = getContextForElement(_targetDomElement); + switch (options) { + case "location": + if (params == undefined) { // Getter + var location = GmUtility.locationFromLatLng(gmapContext.location); + location.radius = gmapContext.radius; + location.name = gmapContext.locationName; + return location; + } else { // Setter + if (params.radius) { + gmapContext.radius = params.radius; + } + GmUtility.setPosition(gmapContext, new google.maps.LatLng(params.latitude, params.longitude), function(gmapContext) { + updateInputValues(gmapContext.settings.inputBinding, gmapContext); + }); + } + break; + case "subscribe": + /** + * Provides interface for subscribing for GoogleMap events. + * See Google API documentation for details. + * Parameters: + * - event: string, name of the event + * - callback: function, callback function to be invoked + */ + if (options == undefined) { // Getter is not available + return null; + } else { + var event = params.event; + var callback = params.callback; + if (!event || ! callback) { + console.error("LocationPicker: Invalid arguments for method \"subscribe\"") + return null; + } + google.maps.event.addListener(gmapContext.map, event, callback); + } + + break; + } + return null; + } + return this.each(function() { + var $target = $(this); + // If plug-in hasn't been applied before - initialize, otherwise - skip + if (isPluginApplied(this)) return; + // Plug-in initialization is required + // Defaults + var settings = $.extend($.fn.locationpicker.defaults, options ); + // Initialize + var gmapContext = new GMapContext(this, { + zoom: settings.zoom, + center: new google.maps.LatLng(settings.location.latitude, settings.location.longitude), + mapTypeId: google.maps.MapTypeId.ROADMAP, + mapTypeControl: false, + disableDoubleClickZoom: false, + scrollwheel: settings.scrollwheel, + streetViewControl: false, + radius: settings.radius, + locationName: settings.locationName, + settings: settings + }); + $(this).data("locationpicker", gmapContext); + // Subscribe GMap events + google.maps.event.addListener(gmapContext.marker, "dragend", function(event) { + GmUtility.setPosition(gmapContext, gmapContext.marker.position, function(){ + var currentLocation = GmUtility.locationFromLatLng(gmapContext.location); + settings.onchanged(currentLocation, gmapContext.radius, true); + updateInputValues(settings.inputBinding, gmapContext); + }); + }); + GmUtility.setPosition(gmapContext, new google.maps.LatLng(settings.location.latitude, settings.location.longitude), function(){ + updateInputValues(settings.inputBinding, gmapContext); + settings.oninitialized($target); + }); + // Set up input bindings if needed + setupInputListenersInput(settings.inputBinding, gmapContext); + }); + }; + $.fn.locationpicker.defaults = { + location: {latitude: 40.7324319, longitude: -73.82480799999996}, + locationName: "", + radius: 500, + zoom: 15, + scrollwheel: true, + inputBinding: { + latitudeInput: null, + longitudeInput: null, + radiusInput: null, + locationNameInput: null + }, + enableAutocomplete: false, + enableReverseGeocode: true, + onchanged: function(currentLocation, radius, isMarkerDropped) {}, + onlocationnotfound: function(locationName) {}, + oninitialized: function (component) {} + + } + +}( jQuery )); From 58f1e9ec24e8b23413ac9f1135b7f9016b9ffc1a Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Fri, 3 Jan 2014 17:04:44 +0200 Subject: [PATCH 05/19] Removed temp files --- js/locationpicker.jquery.js~ | 251 ----------------------------------- 1 file changed, 251 deletions(-) delete mode 100644 js/locationpicker.jquery.js~ diff --git a/js/locationpicker.jquery.js~ b/js/locationpicker.jquery.js~ deleted file mode 100644 index 0a9ce0f..0000000 --- a/js/locationpicker.jquery.js~ +++ /dev/null @@ -1,251 +0,0 @@ -(function ( $ ) { - - /** - * Holds google map object and related utility entities. - * @constructor - */ - function GMapContext(domElement, options) { - var _map = new google.maps.Map(domElement, options); - var _marker = new google.maps.Marker({ - position: new google.maps.LatLng(54.19335, -3.92695), - map: _map, - title: "Drag Me", - draggable: true - }); - return { - map: _map, - marker: _marker, - circle: null, - location: _marker.position, - radius: options.radius, - locationName: options.locationName, - settings: options.settings, - domContainer: domElement, - geodecoder: new google.maps.Geocoder() - } - } - - // Utility functions for Google Map Manipulations - var GmUtility = { - /** - * Draw a circle over the the map. Returns circle object. - * Also writes new circle object in gmapContext. - * - * @param center - LatLng of the center of the circle - * @param radius - radius in meters - * @param gmapContext - context - * @param options - */ - drawCircle: function(gmapContext, center, radius, options) { - if (gmapContext.circle != null) { - gmapContext.circle.setMap(null); - } - if (radius > 0) { - radius *= 1; - options = $.extend({ - strokeColor: "#0000FF", - strokeOpacity: 0.35, - strokeWeight: 2, - fillColor: "#0000FF", - fillOpacity: 0.20 - }, options); - options.map = gmapContext.map; - options.radius = radius; - options.center = center; - gmapContext.circle = new google.maps.Circle(options); - return gmapContext.circle; - } - return null; - }, - /** - * - * @param gMapContext - * @param location - * @param callback - */ - setPosition: function(gMapContext, location, callback) { - gMapContext.location = location; - gMapContext.marker.setPosition(location); - gMapContext.map.panTo(location); - this.drawCircle(gMapContext, location, gMapContext.radius, {}); - if (gMapContext.settings.enableReverseGeocode) { - gMapContext.geodecoder.geocode({latLng: gMapContext.location}, function(results, status){ - if (status == google.maps.GeocoderStatus.OK && results.length > 0){ - gMapContext.locationName = results[0].formatted_address; - } - if (callback) { - callback.call(this, gMapContext); - } - }); - } else { - if (callback) { - callback.call(this, gmapContext); - } - } - - }, - locationFromLatLng: function(lnlg) { - return {latitude: lnlg.lat(), longitude: lnlg.lng()} - } - } - - function isPluginApplied(domObj) { - return getContextForElement(domObj) != undefined; - } - - function getContextForElement(domObj) { - return $(domObj).data("locationpicker"); - } - - function updateInputValues(inputBinding, gmapContext){ - if (!inputBinding) return; - var currentLocation = GmUtility.locationFromLatLng(gmapContext.location); - if (inputBinding.latitudeInput) { - inputBinding.latitudeInput.val(currentLocation.latitude); - } - if (inputBinding.longitudeInput) { - inputBinding.longitudeInput.val(currentLocation.longitude); - } - if (inputBinding.radiusInput) { - inputBinding.radiusInput.val(gmapContext.radius); - } - if (inputBinding.locationNameInput) { - inputBinding.locationNameInput.val(gmapContext.locationName); - } - } - - function setupInputListenersInput(inputBinding, gmapContext) { - if (inputBinding) { - if (inputBinding.radiusInput){ - inputBinding.radiusInput.on("change", function() { - gmapContext.radius = $(this).val(); - GmUtility.setPosition(gmapContext, gmapContext.location); - }); - } - if (inputBinding.locationNameInput && gmapContext.settings.enableAutocomplete) { - gmapContext.autocomplete = new google.maps.places.Autocomplete(inputBinding.locationNameInput.get(0)); - google.maps.event.addListener(gmapContext.autocomplete, 'place_changed', function() { - var place = gmapContext.autocomplete.getPlace(); - if (!place.geometry) { - gmapContext.onlocationnotfound(); - return; - } - GmUtility.setPosition(gmapContext, place.geometry.location, function() { - updateInputValues(inputBinding, gmapContext); - }); - }); - } - } - } - - /** - * Initialization: - * $("#myMap").locationpicker(options); - * @param options - * @param params - * @returns {*} - */ - $.fn.locationpicker = function( options, params ) { - if (typeof options == 'string') { // Command provided - var _targetDomElement = this.get(0); - // Plug-in is not applied - nothing to do. - if (!isPluginApplied(_targetDomElement)) return; - var gmapContext = getContextForElement(_targetDomElement); - switch (options) { - case "location": - if (params == undefined) { // Getter - var location = GmUtility.locationFromLatLng(gmapContext.location); - location.radius = gmapContext.radius; - location.name = gmapContext.locationName; - return location; - } else { // Setter - if (params.radius) { - gmapContext.radius = params.radius; - } - GmUtility.setPosition(gmapContext, new google.maps.LatLng(params.latitude, params.longitude), function(gmapContext) { - updateInputValues(gmapContext.settings.inputBinding, gmapContext); - }); - } - break; - case "subscribe": - /** - * Provides interface for subscribing for GoogleMap events. - * See Google API documentation for details. - * Parameters: - * - event: string, name of the event - * - callback: function, callback function to be invoked - */ - if (options == undefined) { // Getter is not available - return null; - } else { - var event = params.event; - var callback = params.callback; - if (!event || ! callback) { - console.error("LocationPicker: Invalid arguments for method \"subscribe\"") - return null; - } - google.maps.event.addListener(gmapContext.map, event, callback); - } - - break; - } - return null; - } - return this.each(function() { - var $target = $(this); - // If plug-in hasn't been applied before - initialize, otherwise - skip - if (isPluginApplied(this)) return; - // Plug-in initialization is required - // Defaults - var settings = $.extend($.fn.locationpicker.defaults, options ); - // Initialize - var gmapContext = new GMapContext(this, { - zoom: settings.zoom, - center: new google.maps.LatLng(settings.location.latitude, settings.location.longitude), - mapTypeId: google.maps.MapTypeId.ROADMAP, - mapTypeControl: false, - disableDoubleClickZoom: false, - scrollwheel: settings.scrollwheel, - streetViewControl: false, - radius: settings.radius, - locationName: settings.locationName, - settings: settings - }); - $(this).data("locationpicker", gmapContext); - // Subscribe GMap events - google.maps.event.addListener(gmapContext.marker, "dragend", function(event) { - GmUtility.setPosition(gmapContext, gmapContext.marker.position, function(){ - var currentLocation = GmUtility.locationFromLatLng(gmapContext.location); - settings.onchanged(currentLocation, gmapContext.radius, true); - updateInputValues(settings.inputBinding, gmapContext); - }); - }); - GmUtility.setPosition(gmapContext, new google.maps.LatLng(settings.location.latitude, settings.location.longitude), function(){ - updateInputValues(settings.inputBinding, gmapContext); - settings.oninitialized($target); - }); - // Set up input bindings if needed - setupInputListenersInput(settings.inputBinding, gmapContext); - }); - }; - $.fn.locationpicker.defaults = { - location: {latitude: 40.7324319, longitude: -73.82480799999996}, - locationName: "", - radius: 500, - zoom: 15, - scrollwheel: true, - inputBinding: { - latitudeInput: null, - longitudeInput: null, - radiusInput: null, - locationNameInput: null - }, - enableAutocomplete: false, - enableReverseGeocode: true, - onchanged: function(currentLocation, radius, isMarkerDropped) {}, - onlocationnotfound: function(locationName) {}, - oninitialized: function (component) {} - - } - -}( jQuery )); From 1628b62a2184c3e89544ae9d2c6c9c201570809b Mon Sep 17 00:00:00 2001 From: Dmitry Berezovsky Date: Fri, 3 Jan 2014 18:18:03 +0200 Subject: [PATCH 06/19] Fixed event subscriptions. Updated documents. --- css/style.css | 3 +++ index.html | 9 +++++++++ js/locationpicker.jquery.js | 14 +++++++------- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/css/style.css b/css/style.css index 4af7a61..4181f74 100644 --- a/css/style.css +++ b/css/style.css @@ -5,3 +5,6 @@ body { padding: 40px 15px; text-align: center; } +footer { + margin-top: 45px; +} diff --git a/index.html b/index.html index 8d059db..e7c07b5 100644 --- a/index.html +++ b/index.html @@ -34,6 +34,7 @@
  • Features
  • Usage
  • Examples
  • +
  • Credits
  • @@ -243,6 +244,14 @@

    Subscribing for events

    } });
    +
    + + Dmitry Berezovsky, Logicify (http://logicify.com/) +
    +