diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2019-05-11 13:02:16 +0200 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2019-05-11 13:02:16 +0200 | 
| commit | c77a7d2cd2a71b879c96f9dbddfd062c40d96824 (patch) | |
| tree | defde85fb415f7dab052b84075e0f3cb8e2b07f8 | |
| parent | 4412283f3b32dbcbf772ad7f7e65a87405ad59e9 (diff) | |
| parent | 94febe86cd81f2d40d4e5f93f7dfb9be82dbff15 (diff) | |
Merge branch 'marudor-geoLocationNagging'
closes #10
| -rw-r--r-- | public/service-worker.js | 24 | ||||
| -rw-r--r-- | public/static/css/material-icons.css | 8 | ||||
| -rw-r--r-- | public/static/js/geolocation.js | 31 | ||||
| -rw-r--r-- | public/static/js/geolocation.min.js | 2 | ||||
| -rw-r--r-- | public/static/manifest.json | 12 | ||||
| l--------- | public/static/v19 (renamed from public/static/v17) | 0 | ||||
| -rwxr-xr-x | scripts/asset-release | 8 | ||||
| -rw-r--r-- | templates/landingpage.html.ep | 3 | ||||
| -rw-r--r-- | templates/layouts/default.html.ep | 2 | 
9 files changed, 53 insertions, 37 deletions
diff --git a/public/service-worker.js b/public/service-worker.js index e5cbf68..4f92662 100644 --- a/public/service-worker.js +++ b/public/service-worker.js @@ -1,18 +1,18 @@ -const CACHE_NAME = 'static-cache-v18'; +const CACHE_NAME = 'static-cache-v19';  const FILES_TO_CACHE = [    '/favicon.ico',    '/offline.html', -  '/static/v18/css/materialize.min.css', -  '/static/v18/css/material-icons.css', -  '/static/v18/css/local.css', -  '/static/v18/fonts/MaterialIcons-Regular.woff2', -  '/static/v18/fonts/MaterialIcons-Regular.woff', -  '/static/v18/fonts/MaterialIcons-Regular.ttf', -  '/static/v18/js/jquery-3.4.1.min.js', -  '/static/v18/js/materialize.min.js', -  '/static/v18/js/travelynx-actions.min.js', -  '/static/v18/js/autocomplete.min.js', -  '/static/v18/js/geolocation.min.js', +  '/static/v19/css/materialize.min.css', +  '/static/v19/css/material-icons.css', +  '/static/v19/css/local.css', +  '/static/v19/fonts/MaterialIcons-Regular.woff2', +  '/static/v19/fonts/MaterialIcons-Regular.woff', +  '/static/v19/fonts/MaterialIcons-Regular.ttf', +  '/static/v19/js/jquery-3.4.1.min.js', +  '/static/v19/js/materialize.min.js', +  '/static/v19/js/travelynx-actions.min.js', +  '/static/v19/js/autocomplete.min.js', +  '/static/v19/js/geolocation.min.js',  ];  self.addEventListener('install', (evt) => { diff --git a/public/static/css/material-icons.css b/public/static/css/material-icons.css index e2de606..36185f0 100644 --- a/public/static/css/material-icons.css +++ b/public/static/css/material-icons.css @@ -2,12 +2,12 @@    font-family: 'Material Icons';    font-style: normal;    font-weight: 400; -  src: url(/static/v18/fonts/MaterialIcons-Regular.eot); /* For IE6-8 */ +  src: url(/static/v19/fonts/MaterialIcons-Regular.eot); /* For IE6-8 */    src: local('Material Icons'),         local('MaterialIcons-Regular'), -       url(/static/v18/fonts/MaterialIcons-Regular.woff2) format('woff2'), -       url(/static/v18/fonts/MaterialIcons-Regular.woff) format('woff'), -       url(/static/v18/fonts/MaterialIcons-Regular.ttf) format('truetype'); +       url(/static/v19/fonts/MaterialIcons-Regular.woff2) format('woff2'), +       url(/static/v19/fonts/MaterialIcons-Regular.woff) format('woff'), +       url(/static/v19/fonts/MaterialIcons-Regular.ttf) format('truetype');  }  .material-icons { diff --git a/public/static/js/geolocation.js b/public/static/js/geolocation.js index ccc8c3a..cb16e72 100644 --- a/public/static/js/geolocation.js +++ b/public/static/js/geolocation.js @@ -1,9 +1,9 @@  $(document).ready(function() { -	var prePlaceholder = $('p.geolocationhint'); -	var placeholder = $('div.geolocation div.progress'); +	function getPlaceholder() { +		return $('div.geolocation div.progress'); +	}  	var showError = function(header, message, code) { -		prePlaceholder.remove(); -		placeholder.remove(); +		getPlaceholder().remove();  		var errnode = $(document.createElement('div'));  		errnode.attr('class', 'error');  		errnode.text(message); @@ -36,7 +36,7 @@ $(document).ready(function() {  				resultBody.append('<tr><td><a href="/s/' + ds100 + '">' + name + '</a></td></tr>');  			}); -			placeholder.replaceWith(resultTable); +			getPlaceholder().replaceWith(resultTable);  		}  	}; @@ -56,9 +56,26 @@ $(document).ready(function() {  		}  	}; -	if ($('div.geolocation').length) { +	var geoLocationButton = $('div.geolocation > button'); +	var getGeoLocation = function() { +		geoLocationButton.replaceWith($('<p class="geolocationhint">Stationen in der Umgebung:</p><div class="progress"><div class="indeterminate"></div></div>')); +		navigator.geolocation.getCurrentPosition(processLocation, processError); +	} + +	if (geoLocationButton.length) {  		if (navigator.geolocation) { -			navigator.geolocation.getCurrentPosition(processLocation, processError); +			if (navigator.permissions) { +				navigator.permissions.query({ name:'geolocation' }).then(function(value) { +					if (value.state === 'prompt') { +						geoLocationButton.on('click', getGeoLocation); +					} else { +						// User either rejected or granted permission. User wont get prompted and we can show stations/error +						getGeoLocation(); +					} +				}); +			} else { +				geoLocationButton.on('click', getGeoLocation); +			}  		} else {  			showError('Standortanfragen werden von diesem Browser nicht unterstützt', '', null);  		} diff --git a/public/static/js/geolocation.min.js b/public/static/js/geolocation.min.js index 7862b5b..66e0e47 100644 --- a/public/static/js/geolocation.min.js +++ b/public/static/js/geolocation.min.js @@ -1 +1 @@ -$(document).ready(function(){var e=$("p.geolocationhint"),t=$("div.geolocation div.progress"),n=function(n,r,o){e.remove(),t.remove();var a=$(document.createElement("div"));a.attr("class","error"),a.text(r);var i=$(document.createElement("strong"));i.text(n),a.prepend(i),$("div.geolocation").append(a)},r=function(e){e.error?n("Backend-Fehler:",e.error):0==e.candidates.length?n("Keine Bahnhöfe in 70km Umkreis gefunden",""):(resultTable=$("<table><tbody></tbody></table>"),resultBody=resultTable.children(),$.each(e.candidates,function(e,t){var n=t.ds100,r=t.name,o=t.distance;o=o.toFixed(1);var a=$(document.createElement("a"));a.attr("href",n),a.text(r),resultBody.append('<tr><td><a href="/s/'+n+'">'+r+"</a></td></tr>")}),t.replaceWith(resultTable))},o=function(e){$.post("/geolocation",{lon:e.coords.longitude,lat:e.coords.latitude},r)},a=function(e){e.code==e.PERMISSION_DENIED?n("Standortanfrage nicht möglich.","Vermutlich fehlen die Rechte im Browser oder der Android Location Service ist deaktiviert."):e.code==e.POSITION_UNAVAILABLE?n("Standort konnte nicht ermittelt werden","(Service nicht verfügbar)"):e.code==e.TIMEOUT?n("Standort konnte nicht ermittelt werden","(Timeout)"):n("Standort konnte nicht ermittelt werden","(unbekannter Fehler)")};$("div.geolocation").length&&(navigator.geolocation?navigator.geolocation.getCurrentPosition(o,a):n("Standortanfragen werden von diesem Browser nicht unterstützt",""))}); +$(document).ready(function(){function i(){return $("div.geolocation div.progress")}function t(e,t,n){i().remove();var o=$(document.createElement("div"));o.attr("class","error"),o.text(t);var r=$(document.createElement("strong"));r.text(e),o.prepend(r),$("div.geolocation").append(o)}function n(e){e.error?t("Backend-Fehler:",e.error):0==e.candidates.length?t("Keine Bahnhöfe in 70km Umkreis gefunden",""):(resultTable=$("<table><tbody></tbody></table>"),resultBody=resultTable.children(),$.each(e.candidates,function(e,t){var n=t.ds100,o=t.name,r=t.distance;r=r.toFixed(1);var i=$(document.createElement("a"));i.attr("href",n),i.text(o),resultBody.append('<tr><td><a href="/s/'+n+'">'+o+"</a></td></tr>")}),i().replaceWith(resultTable))}function e(e){$.post("/geolocation",{lon:e.coords.longitude,lat:e.coords.latitude},n)}function o(e){e.code==e.PERMISSION_DENIED?t("Standortanfrage nicht möglich.","Vermutlich fehlen die Rechte im Browser oder der Android Location Service ist deaktiviert."):e.code==e.POSITION_UNAVAILABLE?t("Standort konnte nicht ermittelt werden","(Service nicht verfügbar)"):e.code==e.TIMEOUT?t("Standort konnte nicht ermittelt werden","(Timeout)"):t("Standort konnte nicht ermittelt werden","(unbekannter Fehler)")}function r(){a.replaceWith($('<p class="geolocationhint">Stationen in der Umgebung:</p><div class="progress"><div class="indeterminate"></div></div>')),navigator.geolocation.getCurrentPosition(e,o)}var a=$("div.geolocation > button");a.length&&(navigator.geolocation?navigator.permissions?navigator.permissions.query({name:"geolocation"}).then(function(e){"prompt"===e.state?a.on("click",r):r()}):a.on("click",r):t("Standortanfragen werden von diesem Browser nicht unterstützt",""))}); diff --git a/public/static/manifest.json b/public/static/manifest.json index 9fcb00e..30116d5 100644 --- a/public/static/manifest.json +++ b/public/static/manifest.json @@ -3,27 +3,27 @@    "short_name": "Travelynx",    "scope": "/",    "icons": [{ -    "src": "/static/v18/icons/icon-128x128.png", +    "src": "/static/v19/icons/icon-128x128.png",        "sizes": "128x128",        "type": "image/png"      }, { -      "src": "/static/v18/icons/icon-144x144.png", +      "src": "/static/v19/icons/icon-144x144.png",        "sizes": "144x144",        "type": "image/png"      }, { -      "src": "/static/v18/icons/icon-152x152.png", +      "src": "/static/v19/icons/icon-152x152.png",        "sizes": "152x152",        "type": "image/png"      }, { -      "src": "/static/v18/icons/icon-192x192.png", +      "src": "/static/v19/icons/icon-192x192.png",        "sizes": "192x192",        "type": "image/png"      }, { -      "src": "/static/v18/icons/icon-256x256.png", +      "src": "/static/v19/icons/icon-256x256.png",        "sizes": "256x256",        "type": "image/png"      }, { -      "src": "/static/v18/icons/icon-512x512.png", +      "src": "/static/v19/icons/icon-512x512.png",        "sizes": "512x512",        "type": "image/png"      }], diff --git a/public/static/v17 b/public/static/v19 index 945c9b4..945c9b4 120000 --- a/public/static/v17 +++ b/public/static/v19 diff --git a/scripts/asset-release b/scripts/asset-release index 5a65bca..20d08e7 100755 --- a/scripts/asset-release +++ b/scripts/asset-release @@ -2,16 +2,16 @@  set -ex -current="$(ls -d public/static/v* | tail -n 1 | grep -o '..$')" +current="$(find -d public/static/v* | tail -n 1 | grep -o '..$')"  prev=$((current - 1))  next=$((current + 1))  git mv public/static/v${prev} public/static/v${next} -sed -i "s!/v${current}/!/v${next}/!g" \ +perl -pi -e "s!/v${current}/!/v${next}/!g" \  	public/service-worker.js public/static/manifest.json \  	public/static/css/material-icons.css -sed -i "s!static-cache-v${current}!static-cache-v${next}!" public/service-worker.js +perl -pi -e "s!static-cache-v${current}!static-cache-v${next}!" public/service-worker.js -sed -i "s!av = 'v${current}'!av = 'v${next}'!" templates/layouts/default.html.ep +perl -pi -e "s!av = 'v${current}'!av = 'v${next}'!" templates/layouts/default.html.ep diff --git a/templates/landingpage.html.ep b/templates/landingpage.html.ep index 2d531fc..9d5b979 100644 --- a/templates/landingpage.html.ep +++ b/templates/landingpage.html.ep @@ -51,9 +51,8 @@  					<div class="card-content white-text">  						<span class="card-title">Hallo, <%= current_user()->{name} %>!</span>  						<p>Du bist gerade nicht eingecheckt.</p> -						<p class="geolocationhint">Stationen in der Umgebung:</p>  						<div class="geolocation"> -							<div class="progress"><div class="indeterminate"></div></div> +							<button class="btn waves-effect waves-light btn-flat white">Stationen in der Umgebung abfragen</button>  						</div>  						%= form_for 'list_departures' => begin  							<div class="input-field"> diff --git a/templates/layouts/default.html.ep b/templates/layouts/default.html.ep index fa793c2..fe7a088 100644 --- a/templates/layouts/default.html.ep +++ b/templates/layouts/default.html.ep @@ -9,7 +9,7 @@  	<meta name="apple-mobile-web-app-capable" content="yes">  	<meta name="apple-mobile-web-app-status-bar-style" content="black">  	<meta name="apple-mobile-web-app-title" content="Travelynx"> -	% my $av = 'v18'; # asset version +	% my $av = 'v19'; # asset version  	<link rel="icon" type="image/png" href="/static/<%= $av %>/icons/icon-16x16.png" sizes="16x16">  	<link rel="icon" type="image/png" href="/static/<%= $av %>/icons/icon-32x32.png" sizes="32x32">  	<link rel="icon" type="image/png" href="/static/<%= $av %>/icons/icon-96x96.png" sizes="96x96">  | 
