From ac7f002293dee1c3199fc6d3f96dab49d8392529 Mon Sep 17 00:00:00 2001 From: Jonny Barnes Date: Wed, 5 Oct 2016 16:10:00 +0100 Subject: [PATCH] Notes created via the micropub client can now have associated places Squashed commit of the following: commit d98a19ac59d29540f9eeca473013da4e52ad99eb Author: Jonny Barnes Date: Wed Oct 5 16:09:33 2016 +0100 Get places working again, location info will add a place to a note commit 98ec16174cb4431e6e0e13f5f1d3303ceafcd7b1 Author: Jonny Barnes Date: Wed Oct 5 16:08:32 2016 +0100 gulp build assets from js commit 2e7e50a6f6f7f8b129bb472d92a38801575020a8 Author: Jonny Barnes Date: Wed Oct 5 16:07:21 2016 +0100 Use full URIs instead of slugs for places --- .../Controllers/MicropubClientController.php | 14 +++----- app/Http/Controllers/MicropubController.php | 3 ++ app/Services/NoteService.php | 30 +++++++++++++----- public/assets/js/maps/newnote.js.map | 2 +- public/assets/js/newnote.js | 2 +- public/assets/js/newnote.js.br | Bin 1609 -> 1608 bytes public/assets/js/newnote.js.gz | Bin 1820 -> 1819 bytes resources/assets/js/newnote.js | 4 +-- 8 files changed, 33 insertions(+), 22 deletions(-) diff --git a/app/Http/Controllers/MicropubClientController.php b/app/Http/Controllers/MicropubClientController.php index 0a39ed7c..5ed38ccd 100644 --- a/app/Http/Controllers/MicropubClientController.php +++ b/app/Http/Controllers/MicropubClientController.php @@ -166,17 +166,11 @@ class MicropubClientController extends Controller ]; } } - if ($request->input('confirmlocation')) { - $latLng = $request->input('location'); - $geoURL = 'geo:' . str_replace(' ', '', $latLng); - $multipart[] = [ - 'name' => 'location', - 'contents' => $geoURL, - ]; - if ($request->input('address') != '') { + if ($request->input('location')) { + if ($request->input('location') !== 'no-location') { $multipart[] = [ - 'name' => 'place_name', - 'contents' => $request->input('address'), + 'name' => 'location', + 'contents' => $request->input('location') ]; } } diff --git a/app/Http/Controllers/MicropubController.php b/app/Http/Controllers/MicropubController.php index 48979e31..1858fc8b 100644 --- a/app/Http/Controllers/MicropubController.php +++ b/app/Http/Controllers/MicropubController.php @@ -149,6 +149,9 @@ class MicropubController extends Controller ); $distance = (count($matches[0]) == 3) ? 100 * $matches[0][2] : 1000; $places = Place::near($matches[0][0], $matches[0][1], $distance); + foreach ($places as $place) { + $place->uri = config('app.url') . '/place/' . $place->slug; + } return response()->json([ 'response' => 'places', diff --git a/app/Services/NoteService.php b/app/Services/NoteService.php index a4ad5ce1..409ff790 100644 --- a/app/Services/NoteService.php +++ b/app/Services/NoteService.php @@ -22,14 +22,14 @@ class NoteService if ($request->header('Content-Type') == 'application/json') { $content = $request->input('properties.content')[0]; $inReplyTo = $request->input('properties.in-reply-to')[0]; - $placeSlug = $request->input('properties.location'); - if (is_array($placeSlug)) { - $placeSlug = $placeSlug[0]; + $place = $request->input('properties.location'); + if (is_array($place)) { + $place = $place[0]; } } else { $content = $request->input('content'); $inReplyTo = $request->input('in-reply-to'); - $placeSlug = $request->input('location'); + $place = $request->input('location'); } $note = Note::create( @@ -40,10 +40,24 @@ class NoteService ] ); - if ($placeSlug !== null && $placeSlug !== 'no-location') { - $place = Place::where('slug', '=', $placeSlug)->first(); - $note->place()->associate($place); - $note->save(); + if ($place !== null && $place !== 'no-location') { + if (substr($place, 0, strlen(config('app.url'))) == config('app.url')) { + //uri of form http://host/place/slug, we want slug so chop off start + //that’s the app’s url plus `/place/` + $slug = mb_substr($place, mb_strlen(config('app.url')) + 7); + $placeModel = Place::where('slug', '=', $slug)->first(); + $note->place()->associate($placeModel); + $note->save(); + } + if (substr($place, 0, 4) == 'geo:') { + preg_match_all( + '/([0-9\.\-]+)/', + $place, + $matches + ); + $note->location = $matches[0][0] . ', ' . $matches[0][1]; + $note->save(); + } } //add images to media library diff --git a/public/assets/js/maps/newnote.js.map b/public/assets/js/maps/newnote.js.map index d67eb6e7..ae43e7bb 100644 --- a/public/assets/js/maps/newnote.js.map +++ b/public/assets/js/maps/newnote.js.map @@ -1 +1 @@ -{"version":3,"sources":["newnote.js"],"names":["getLocation","navigator","geolocation","getCurrentPosition","position","addPlacesMap","coords","latitude","longitude","accuracy","uncertainty","fetch","credentials","method","then","response","json","j","error","alertify","reset","error_description","places","length","i","latlng","parseLocation","location","name","slug","push","addMap","catch","err","console","arguments","form","button","parentNode","div","document","createElement","setAttribute","appendChild","L","mapbox","accessToken","map","setView","addLayer","tileLayer","detectRetina","marker","draggable","addTo","on","placeFormLatitude","querySelector","value","getLatitudeFromMapboxMarker","getLatLng","placeFormLongitude","getLongitudeFromMapboxMarker","selectEl","noLocation","noLocText","createTextNode","insertBefore","forEach","item","option","text","dataset","placeMarker","icon","marker-size","marker-symbol","marker-color","bindPopup","closeButton","panTo","selectPlace","addEventListener","placeLat","selectedIndex","placeLon","newLocButton","nameLabel","classList","add","nameEl","descLabel","descEl","latLabel","latEl","lonLabel","lonEl","placeSubmit","formData","FormData","append","body","placeJson","Error","urlParts","split","pop","removeChild","labels","querySelectorAll","removeLayer","newOption","newPlaceMarker","newName","placeError","point","re","resultArray","exec","selected","replace","disabled"],"mappings":"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","file":"newnote.js","sourcesContent":["/* global L, alertify */\nif ('geolocation' in navigator) {\n var button = document.querySelector('#locate');\n if (button.addEventListener) {\n //if we have javascript, event listeners and geolocation, make the locate\n //button clickable and add event\n button.disabled = false;\n button.addEventListener('click', getLocation);\n }\n}\n\nfunction getLocation() {\n navigator.geolocation.getCurrentPosition(function (position) {\n //the locate button has been clicked so add the places/map\n addPlacesMap(position.coords.latitude, position.coords.longitude, position.coords.accuracy);\n });\n}\n\nfunction addPlacesMap(latitude, longitude, uncertainty) {\n //get the nearby places\n fetch('/places/near/' + latitude + '/' + longitude + '?u=' + uncertainty, {\n credentials: 'same-origin',\n method: 'get'\n }).then(function (response) {\n return response.json();\n }).then(function (j) {\n if (j.error == true) {\n alertify.reset();\n alertify.error(j.error_description);\n }\n if (j.places.length > 0) {\n var i;\n var places = [];\n for (i = 0; i < j.places.length; ++i) {\n var latlng = parseLocation(j.places[i].location);\n var name = j.places[i].name;\n var slug = j.places[i].slug;\n places.push([name, slug, latlng[0], latlng[1]]);\n }\n //add a map with the nearby places\n addMap(latitude, longitude, places);\n } else {\n //add a map with just current location\n addMap(latitude, longitude);\n }\n }).catch(function (err) {\n console.error(err);\n });\n}\n\nfunction addMap(latitude, longitude, places) {\n //make places null if not supplied\n if (arguments.length == 2) {\n places = null;\n }\n var form = button.parentNode;\n var div = document.createElement('div');\n div.setAttribute('id', 'map');\n //add the map div\n form.appendChild(div);\n L.mapbox.accessToken = 'pk.eyJ1Ijoiam9ubnliYXJuZXMiLCJhIjoiVlpndW1EYyJ9.aP9fxAqLKh7lj0LpFh5k1w';\n var map = L.mapbox.map('map', 'jonnybarnes.gnoihnim')\n .setView([latitude, longitude], 15)\n .addLayer(L.mapbox.tileLayer('jonnybarnes.gnoihnim', {\n detectRetina: true\n }));\n //add a marker for the current location\n var marker = L.marker([latitude, longitude], {\n draggable: true\n }).addTo(map);\n //when the location marker is dragged, if the new place form elements exist\n //update the lat/lng values\n marker.on('dragend', function () {\n var placeFormLatitude = document.querySelector('#place-latitude');\n if (placeFormLatitude !== null) {\n placeFormLatitude.value = getLatitudeFromMapboxMarker(marker.getLatLng());\n }\n var placeFormLongitude = document.querySelector('#place-longitude');\n if (placeFormLongitude !== null) {\n placeFormLongitude.value = getLongitudeFromMapboxMarker(marker.getLatLng());\n }\n });\n //create the \n places.forEach(function (item) {\n var option = document.createElement('option');\n option.setAttribute('value', item[1]);\n var text = document.createTextNode(item[0]);\n option.appendChild(text);\n option.dataset.latitude = item[2];\n option.dataset.longitude = item[3];\n selectEl.appendChild(option);\n var placeMarker = L.marker([item[2], item[3]], {\n icon: L.mapbox.marker.icon({\n 'marker-size': 'large',\n 'marker-symbol': 'building',\n 'marker-color': '#fa0'\n })\n }).addTo(map);\n var name = 'Name: ' + item[0];\n placeMarker.bindPopup(name, {\n closeButton: true\n });\n placeMarker.on('click', function () {\n map.panTo([item[2], item[3]]);\n selectPlace(item[1]);\n });\n });\n //add an event listener\n selectEl.addEventListener('change', function () {\n if (selectEl.value !== 'no-location') {\n var placeLat = selectEl[selectEl.selectedIndex].dataset.latitude;\n var placeLon = selectEl[selectEl.selectedIndex].dataset.longitude;\n map.panTo([placeLat, placeLon]);\n }\n });\n }\n //add a button to add a new place\n var newLocButton = document.createElement('button');\n newLocButton.setAttribute('type', 'button');\n newLocButton.setAttribute('id', 'create-new-place');\n newLocButton.appendChild(document.createTextNode('Create New Place?'));\n //the event listener\n newLocButton.addEventListener('click', function() {\n //add the form elements\n var nameLabel = document.createElement('label');\n nameLabel.setAttribute('for', 'place-name');\n nameLabel.classList.add('place-label');\n nameLabel.appendChild(document.createTextNode('Place Name:'));\n var nameEl = document.createElement('input');\n nameEl.setAttribute('placeholder', 'Name');\n nameEl.setAttribute('name', 'place-name');\n nameEl.setAttribute('id', 'place-name');\n nameEl.setAttribute('type', 'text');\n var descLabel = document.createElement('label');\n descLabel.setAttribute('for', 'place-description');\n descLabel.classList.add('place-label');\n descLabel.appendChild(document.createTextNode('Place Description:'));\n var descEl = document.createElement('input');\n descEl.setAttribute('placeholder', 'Description');\n descEl.setAttribute('name', 'place-description');\n descEl.setAttribute('id', 'place-description');\n descEl.setAttribute('type', 'text');\n var latLabel = document.createElement('label');\n latLabel.setAttribute('for', 'place-latitude');\n latLabel.classList.add('place-label');\n latLabel.appendChild(document.createTextNode('Place Latitude:'));\n var latEl = document.createElement('input');\n latEl.setAttribute('name', 'place-latitude');\n latEl.setAttribute('id', 'place-latitude');\n latEl.setAttribute('type', 'text');\n latEl.value = getLatitudeFromMapboxMarker(marker.getLatLng());\n var lonLabel = document.createElement('label');\n lonLabel.setAttribute('for', 'place-longitude');\n lonLabel.classList.add('place-label');\n lonLabel.appendChild(document.createTextNode('Place Longitude:'));\n var lonEl = document.createElement('input');\n lonEl.setAttribute('name', 'place-longitude');\n lonEl.setAttribute('id', 'place-longitude');\n lonEl.setAttribute('type', 'text');\n lonEl.value = getLongitudeFromMapboxMarker(marker.getLatLng());\n var placeSubmit = document.createElement('button');\n placeSubmit.setAttribute('id', 'place-submit');\n placeSubmit.setAttribute('value', 'Submit New Place');\n placeSubmit.setAttribute('name', 'place-submit');\n placeSubmit.setAttribute('type', 'button');\n placeSubmit.appendChild(document.createTextNode('Submit New Place'));\n form.appendChild(nameLabel);\n form.appendChild(nameEl);\n form.appendChild(descLabel);\n form.appendChild(descEl);\n form.appendChild(latLabel);\n form.appendChild(latEl);\n form.appendChild(lonLabel);\n form.appendChild(lonEl);\n form.appendChild(placeSubmit);\n //the event listener for the new place form\n placeSubmit.addEventListener('click', function () {\n //create the form data to send\n var formData = new FormData();\n formData.append('place-name', document.querySelector('#place-name').value);\n formData.append('place-description', document.querySelector('#place-description').value);\n formData.append('place-latitude', document.querySelector('#place-latitude').value);\n formData.append('place-longitude', document.querySelector('#place-longitude').value);\n //post the new place\n fetch('/places/new', {\n //send cookies with the request\n credentials: 'same-origin',\n method: 'post',\n body: formData\n })\n .then(function (response) {\n return response.json();\n })\n .then(function (placeJson) {\n if (placeJson.error == true) {\n throw new Error(placeJson.error_description);\n }\n //create the slug from the url\n var urlParts = placeJson.split('/');\n var slug = urlParts.pop();\n //remove un-needed form elements\n form.removeChild(document.querySelector('#place-name'));\n form.removeChild(document.querySelector('#place-description'));\n form.removeChild(document.querySelector('#place-latitude'));\n form.removeChild(document.querySelector('#place-longitude'));\n var labels = document.querySelectorAll('.place-label');\n for (var i = 0; i < labels.length; ++i) {\n form.removeChild(labels[i]);\n }\n form.removeChild(document.querySelector('#place-submit'));\n form.removeChild(document.querySelector('#create-new-place'));\n //remove location marker\n map.removeLayer(marker);\n //add place marker\n var newOption = document.createElement('option');\n newOption.setAttribute('value', slug);\n newOption.appendChild(document.createTextNode(placeJson['name']));\n newOption.dataset.latitude = placeJson['latitude'];\n newOption.dataset.longitude = placeJson['longitude'];\n selectEl.appendChild(newOption);\n var newPlaceMarker = L.marker([placeJson['latitude'], placeJson['longitude']], {\n icon: L.mapbox.marker.icon({\n 'marker-size': 'large',\n 'marker-symbol': 'building',\n 'marker-color': '#fa0'\n })\n }).addTo(map);\n var newName = 'Name: ' + placeJson['name'];\n newPlaceMarker.bindPopup(newName, {\n closeButton: true\n });\n newPlaceMarker.on('click', function () {\n map.panTo([placeJson['latitude'], placeJson['longitude']]);\n selectPlace(slug);\n });\n //make selected\n selectPlace(slug);\n }).catch(function (placeError) {\n alertify.reset();\n alertify.error(placeError);\n });\n });\n });\n form.insertBefore(newLocButton, div);\n}\n\nfunction parseLocation(point) {\n var re = /\\((.*)\\)/;\n var resultArray = re.exec(point);\n var location = resultArray[1].split(' ');\n\n return [location[1], location[0]];\n}\n\nfunction selectPlace(slug) {\n document.querySelector('select [value=' + slug + ']').selected = true;\n}\n\nfunction getLatitudeFromMapboxMarker(latlng) {\n var resultArray = /\\((.*)\\)/.exec(latlng);\n var location = resultArray[1].split(' ');\n\n return location[0].replace(',', '');\n}\n\nfunction getLongitudeFromMapboxMarker(latlng) {\n var resultArray = /\\((.*)\\)/.exec(latlng);\n var location = resultArray[1].split(' ');\n\n return location[1];\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["newnote.js"],"names":["getLocation","navigator","geolocation","getCurrentPosition","position","addPlacesMap","coords","latitude","longitude","accuracy","uncertainty","fetch","credentials","method","then","response","json","j","error","alertify","reset","error_description","places","length","i","latlng","parseLocation","location","name","uri","push","addMap","catch","err","console","arguments","form","button","parentNode","div","document","createElement","setAttribute","appendChild","L","mapbox","accessToken","map","setView","addLayer","tileLayer","detectRetina","marker","draggable","addTo","on","placeFormLatitude","querySelector","value","getLatitudeFromMapboxMarker","getLatLng","placeFormLongitude","getLongitudeFromMapboxMarker","selectEl","noLocation","noLocText","createTextNode","insertBefore","forEach","item","option","text","dataset","placeMarker","icon","marker-size","marker-symbol","marker-color","bindPopup","closeButton","panTo","selectPlace","addEventListener","placeLat","selectedIndex","placeLon","newLocButton","nameLabel","classList","add","nameEl","descLabel","descEl","latLabel","latEl","lonLabel","lonEl","placeSubmit","formData","FormData","append","body","placeJson","Error","urlParts","split","slug","pop","removeChild","labels","querySelectorAll","removeLayer","newOption","newPlaceMarker","newName","placeError","point","re","resultArray","exec","selected","replace","disabled"],"mappings":"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","file":"newnote.js","sourcesContent":["/* global L, alertify */\nif ('geolocation' in navigator) {\n var button = document.querySelector('#locate');\n if (button.addEventListener) {\n //if we have javascript, event listeners and geolocation, make the locate\n //button clickable and add event\n button.disabled = false;\n button.addEventListener('click', getLocation);\n }\n}\n\nfunction getLocation() {\n navigator.geolocation.getCurrentPosition(function (position) {\n //the locate button has been clicked so add the places/map\n addPlacesMap(position.coords.latitude, position.coords.longitude, position.coords.accuracy);\n });\n}\n\nfunction addPlacesMap(latitude, longitude, uncertainty) {\n //get the nearby places\n fetch('/places/near/' + latitude + '/' + longitude + '?u=' + uncertainty, {\n credentials: 'same-origin',\n method: 'get'\n }).then(function (response) {\n return response.json();\n }).then(function (j) {\n if (j.error == true) {\n alertify.reset();\n alertify.error(j.error_description);\n }\n if (j.places.length > 0) {\n var i;\n var places = [];\n for (i = 0; i < j.places.length; ++i) {\n var latlng = parseLocation(j.places[i].location);\n var name = j.places[i].name;\n var uri = j.places[i].uri;\n places.push([name, uri, latlng[0], latlng[1]]);\n }\n //add a map with the nearby places\n addMap(latitude, longitude, places);\n } else {\n //add a map with just current location\n addMap(latitude, longitude);\n }\n }).catch(function (err) {\n console.error(err);\n });\n}\n\nfunction addMap(latitude, longitude, places) {\n //make places null if not supplied\n if (arguments.length == 2) {\n places = null;\n }\n var form = button.parentNode;\n var div = document.createElement('div');\n div.setAttribute('id', 'map');\n //add the map div\n form.appendChild(div);\n L.mapbox.accessToken = 'pk.eyJ1Ijoiam9ubnliYXJuZXMiLCJhIjoiVlpndW1EYyJ9.aP9fxAqLKh7lj0LpFh5k1w';\n var map = L.mapbox.map('map', 'jonnybarnes.gnoihnim')\n .setView([latitude, longitude], 15)\n .addLayer(L.mapbox.tileLayer('jonnybarnes.gnoihnim', {\n detectRetina: true\n }));\n //add a marker for the current location\n var marker = L.marker([latitude, longitude], {\n draggable: true\n }).addTo(map);\n //when the location marker is dragged, if the new place form elements exist\n //update the lat/lng values\n marker.on('dragend', function () {\n var placeFormLatitude = document.querySelector('#place-latitude');\n if (placeFormLatitude !== null) {\n placeFormLatitude.value = getLatitudeFromMapboxMarker(marker.getLatLng());\n }\n var placeFormLongitude = document.querySelector('#place-longitude');\n if (placeFormLongitude !== null) {\n placeFormLongitude.value = getLongitudeFromMapboxMarker(marker.getLatLng());\n }\n });\n //create the \n places.forEach(function (item) {\n var option = document.createElement('option');\n option.setAttribute('value', item[1]);\n var text = document.createTextNode(item[0]);\n option.appendChild(text);\n option.dataset.latitude = item[2];\n option.dataset.longitude = item[3];\n selectEl.appendChild(option);\n var placeMarker = L.marker([item[2], item[3]], {\n icon: L.mapbox.marker.icon({\n 'marker-size': 'large',\n 'marker-symbol': 'building',\n 'marker-color': '#fa0'\n })\n }).addTo(map);\n var name = 'Name: ' + item[0];\n placeMarker.bindPopup(name, {\n closeButton: true\n });\n placeMarker.on('click', function () {\n map.panTo([item[2], item[3]]);\n selectPlace(item[1]);\n });\n });\n //add an event listener\n selectEl.addEventListener('change', function () {\n if (selectEl.value !== 'no-location') {\n var placeLat = selectEl[selectEl.selectedIndex].dataset.latitude;\n var placeLon = selectEl[selectEl.selectedIndex].dataset.longitude;\n map.panTo([placeLat, placeLon]);\n }\n });\n }\n //add a button to add a new place\n var newLocButton = document.createElement('button');\n newLocButton.setAttribute('type', 'button');\n newLocButton.setAttribute('id', 'create-new-place');\n newLocButton.appendChild(document.createTextNode('Create New Place?'));\n //the event listener\n newLocButton.addEventListener('click', function() {\n //add the form elements\n var nameLabel = document.createElement('label');\n nameLabel.setAttribute('for', 'place-name');\n nameLabel.classList.add('place-label');\n nameLabel.appendChild(document.createTextNode('Place Name:'));\n var nameEl = document.createElement('input');\n nameEl.setAttribute('placeholder', 'Name');\n nameEl.setAttribute('name', 'place-name');\n nameEl.setAttribute('id', 'place-name');\n nameEl.setAttribute('type', 'text');\n var descLabel = document.createElement('label');\n descLabel.setAttribute('for', 'place-description');\n descLabel.classList.add('place-label');\n descLabel.appendChild(document.createTextNode('Place Description:'));\n var descEl = document.createElement('input');\n descEl.setAttribute('placeholder', 'Description');\n descEl.setAttribute('name', 'place-description');\n descEl.setAttribute('id', 'place-description');\n descEl.setAttribute('type', 'text');\n var latLabel = document.createElement('label');\n latLabel.setAttribute('for', 'place-latitude');\n latLabel.classList.add('place-label');\n latLabel.appendChild(document.createTextNode('Place Latitude:'));\n var latEl = document.createElement('input');\n latEl.setAttribute('name', 'place-latitude');\n latEl.setAttribute('id', 'place-latitude');\n latEl.setAttribute('type', 'text');\n latEl.value = getLatitudeFromMapboxMarker(marker.getLatLng());\n var lonLabel = document.createElement('label');\n lonLabel.setAttribute('for', 'place-longitude');\n lonLabel.classList.add('place-label');\n lonLabel.appendChild(document.createTextNode('Place Longitude:'));\n var lonEl = document.createElement('input');\n lonEl.setAttribute('name', 'place-longitude');\n lonEl.setAttribute('id', 'place-longitude');\n lonEl.setAttribute('type', 'text');\n lonEl.value = getLongitudeFromMapboxMarker(marker.getLatLng());\n var placeSubmit = document.createElement('button');\n placeSubmit.setAttribute('id', 'place-submit');\n placeSubmit.setAttribute('value', 'Submit New Place');\n placeSubmit.setAttribute('name', 'place-submit');\n placeSubmit.setAttribute('type', 'button');\n placeSubmit.appendChild(document.createTextNode('Submit New Place'));\n form.appendChild(nameLabel);\n form.appendChild(nameEl);\n form.appendChild(descLabel);\n form.appendChild(descEl);\n form.appendChild(latLabel);\n form.appendChild(latEl);\n form.appendChild(lonLabel);\n form.appendChild(lonEl);\n form.appendChild(placeSubmit);\n //the event listener for the new place form\n placeSubmit.addEventListener('click', function () {\n //create the form data to send\n var formData = new FormData();\n formData.append('place-name', document.querySelector('#place-name').value);\n formData.append('place-description', document.querySelector('#place-description').value);\n formData.append('place-latitude', document.querySelector('#place-latitude').value);\n formData.append('place-longitude', document.querySelector('#place-longitude').value);\n //post the new place\n fetch('/places/new', {\n //send cookies with the request\n credentials: 'same-origin',\n method: 'post',\n body: formData\n })\n .then(function (response) {\n return response.json();\n })\n .then(function (placeJson) {\n if (placeJson.error == true) {\n throw new Error(placeJson.error_description);\n }\n //create the slug from the url\n var urlParts = placeJson.split('/');\n var slug = urlParts.pop();\n //remove un-needed form elements\n form.removeChild(document.querySelector('#place-name'));\n form.removeChild(document.querySelector('#place-description'));\n form.removeChild(document.querySelector('#place-latitude'));\n form.removeChild(document.querySelector('#place-longitude'));\n var labels = document.querySelectorAll('.place-label');\n for (var i = 0; i < labels.length; ++i) {\n form.removeChild(labels[i]);\n }\n form.removeChild(document.querySelector('#place-submit'));\n form.removeChild(document.querySelector('#create-new-place'));\n //remove location marker\n map.removeLayer(marker);\n //add place marker\n var newOption = document.createElement('option');\n newOption.setAttribute('value', slug);\n newOption.appendChild(document.createTextNode(placeJson['name']));\n newOption.dataset.latitude = placeJson['latitude'];\n newOption.dataset.longitude = placeJson['longitude'];\n selectEl.appendChild(newOption);\n var newPlaceMarker = L.marker([placeJson['latitude'], placeJson['longitude']], {\n icon: L.mapbox.marker.icon({\n 'marker-size': 'large',\n 'marker-symbol': 'building',\n 'marker-color': '#fa0'\n })\n }).addTo(map);\n var newName = 'Name: ' + placeJson['name'];\n newPlaceMarker.bindPopup(newName, {\n closeButton: true\n });\n newPlaceMarker.on('click', function () {\n map.panTo([placeJson['latitude'], placeJson['longitude']]);\n selectPlace(slug);\n });\n //make selected\n selectPlace(slug);\n }).catch(function (placeError) {\n alertify.reset();\n alertify.error(placeError);\n });\n });\n });\n form.insertBefore(newLocButton, div);\n}\n\nfunction parseLocation(point) {\n var re = /\\((.*)\\)/;\n var resultArray = re.exec(point);\n var location = resultArray[1].split(' ');\n\n return [location[1], location[0]];\n}\n\nfunction selectPlace(slug) {\n document.querySelector('select [value=' + slug + ']').selected = true;\n}\n\nfunction getLatitudeFromMapboxMarker(latlng) {\n var resultArray = /\\((.*)\\)/.exec(latlng);\n var location = resultArray[1].split(' ');\n\n return location[0].replace(',', '');\n}\n\nfunction getLongitudeFromMapboxMarker(latlng) {\n var resultArray = /\\((.*)\\)/.exec(latlng);\n var location = resultArray[1].split(' ');\n\n return location[1];\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/public/assets/js/newnote.js b/public/assets/js/newnote.js index eaeb52dd..5a092f6e 100644 --- a/public/assets/js/newnote.js +++ b/public/assets/js/newnote.js @@ -1,2 +1,2 @@ -function getLocation(){navigator.geolocation.getCurrentPosition(function(e){addPlacesMap(e.coords.latitude,e.coords.longitude,e.coords.accuracy)})}function addPlacesMap(e,t,a){fetch("/places/near/"+e+"/"+t+"?u="+a,{credentials:"same-origin",method:"get"}).then(function(e){return e.json()}).then(function(a){if(1==a.error&&(alertify.reset(),alertify.error(a.error_description)),a.places.length>0){var n,r=[];for(n=0;n0){var n,r=[];for(n=0;n8Td_KPzAS!u=hD~Rzurdj?6{-3{7(D+`g>FB>+Rb3&)?UbS6_dAz1_zD zvHSm2|IIu8X!_irS1c{%NZ^6#FpR4`+jY`|JoX5&YspqaZUG=(u#Uj6aW$lIv*^Tw=Q?F?(vd;<++Iu@GZ>RCHTgyMmF+Y5A zIQjXDf3>dPHW@pdb#W-rIXbOBVr$)-==^-ebw3Zxy~NYlwZt<_O(|6+THuuF)^BIm z%O);)beKPsJ4y82*Gl7{)Ss-IBuZB;`1+IKM?Pne<|6TDS1tTzhyMD+ziZO$IM(7P zK|9}Eyiu~CA#wYWXS#4OhCttbJ98?$4 zbUGw?>2XFoookC9I3$(D6<%3$&PqmbN|Pz`x!gtNOZFs)GRXCB-+r~zb>e~t|Eyo` zZB>1cEvs5_*s@^T?zTS-AADyge{B3_U9+w(y-!pm(I%;^zQB6LBSD{lzQfmQk5~(B zm~(b5t9m@!(jD$%aV36})@QrUo>1>nbIL+x%X;0e7Z?7$+2)>_#X8^dT9=rCB}4z* zb6cI3iymE^d-;}d`K+DB`N|W{tPZT!h{=93VcMJUV>jkqR$8Q0AhurikcMltqv*W3 zMzMZdc@C+ms!pA9F;c(2>-Q(dOlfSq(~#@%=?}|ZpV=<4Tp3UeuSs#&DpJ+ z%`e{ctou^%=?3Q5?zT%u(?5w#`+Pn*{>u&P;G6fG^(}scTc73T{>iphto~4pgGSVa zdu-1S?b*J3!JAdn&zE^r$HnZ8Z#h3zwCH(k!1f@m1tRNT?6MS{_Q`+K=6RYo9p7dO zO^!aX^3cH>6@0ZzPFDSRXKYaR?#sU)(aTFXHAeqZtXEi!=T&nfs`& z-ile*YNMvw(!<|*Ct4pD=jT54k0-w}?dgWJliTZr4ClC)?Oe9JcKv~pBKPlR;A_)FZr5Y;mR$5#`WfHm z;ir1^|1!y^YV%`LYB#;HH`{y0ujAjBy_?QY<No4>uxst6U`xiW3l^oj%F zs~Y_l>|K29_W_5m2M>Fnub#fMFf=zS{KB>RcfaplJb6^m>}t#hPhK{jhP+SzJMZj0 z^3}v@?wPSTLTkc_XQBXykCKQ0 delta 1303 zcmX@XbCQQiT6QCo8)N--p4yk+HksVH_hp&s#+A?d*=u7v@JD0vL|9X3~M8VErzn%Q`|MzJB|5w8!KW~4uP5u9Q@wG|+ zch~*={_AevQGM&rtC#<`-xHtnHT`P)m#mG2aq&(POK&&YM~9@_MObv7xxReHOt#yF zJluTV3qCK%x)#VQX}P8DW$V5BnH4dY4LNOf{Wjixw>Ex$)K51diSpy22luHT|77{} zm-7K-$=!aj2duY!y(S;%I`^Ji7{f=a`Xv6WwSg}6A?ue^Z$EmcC_P}SKdT+vp_A>$ z&t3fcyX#GBdc(ZVh6fp4y7C*d{@&Pr@19f4=SJ(Ll1!qWlh^pVobuSFFeN+d?d*8# zLmtQ5@ z(apv68y!`c?6<{Aw8U+@Hb3X*gsii{F0XmY7RH+1_6}h>Ve8IS!I5`-#Y*<2e>Sj8 zUwO={pSdPtjr+mIBk%S+S`j(7)Iv#vHJfeDZI|~Rl?SyLY~=Fu*9dnjIUba)xKz#U zec+~**N3*v4|2+REtww9-gf*EGjGL@n7`*_v^5S@9I1cvpe^92@{9#C?Q8#cd{;@Z zoEfo$FpnC#8qKtj6pvIt7;!^?rM8xXg^uc#k54^q}7ZI zawhkdDQpn)d3WQ1ql*Q@?S>~mId{!8>zpR{+)%*o>qX}+>W>p!qa8l1KNDk79eqts zkL9fR($&)#*>{QYF6}@6L|5ne{NwvxY%E{4X+L{>!H4x_v&6+d@kZ6_w(M*O*s@?R z@442>e1FHAq5AXRPWZNGN7a6g`P$k~&h1{1w=~2-Gwxz(v6jx$`6=nP!JC?IT~<-s zJ|VcZdE-Z!Umlykez==n@I>Q_k`8-wbmrtWSB@SEwcBvv8vA3P%$TSZBC1-OjWqUd z(g-&2xt0)^yzF#xOI$@`Q}wa@o_Zs-edqKgHt;@Qb~sBX>(W{?&iU(t!sPsBHol#y zdf3)*i_bHK(@pw{OPHQJ-hZ?9%G{$56@yiZ?FY|3BBYoE@XdU$qH{$G_8i~cu7zW%@C8n-S9jhVV(ezMo* zdX~GL&u7jq@Nl~1dw8q4)$I>EHQf~Zx~fi}-F(vK&*sI~vJZ)I_1bzap6~K$KhMND zUS0ovjZgX7?LP4<ibsOs?vww*JF7ci zXI3P*yB9tS+4u{^KEl9cal-1q5H-Vg^6di0e>!uGXMYp diff --git a/public/assets/js/newnote.js.gz b/public/assets/js/newnote.js.gz index b689344e63c37f4b2bc7128c495b640349ca7d5c..a50969b52ecb28dc4dfff1b38cf3d9c3ee851184 100644 GIT binary patch delta 1789 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