add first run and update info dialogs
authorRobert Kaiser <kairo@kairo.at>
Sun, 22 Oct 2017 22:58:45 +0000 (00:58 +0200)
committerRobert Kaiser <kairo@kairo.at>
Sun, 22 Oct 2017 22:58:45 +0000 (00:58 +0200)
index.html
js/ui.js
manifest.appcache
style/lantea.css

index c3c491d..3ca9752 100644 (file)
@@ -66,7 +66,7 @@ operator to any other services, e.g. OpenStreetMap.</p>
 </p>
 </div>
 <div id="uploadStatus">
-<p class="dialogTitle">Track Upload to Lantea Maps Server</p>
+<p class="subTitle">Track Upload to Lantea Maps Server</p>
 <p id="uploadInProgress"><img id="actionimg" src="style/loading_action.png">
   Upload in progress&hellip;</p>
 <p id="uploadSuccess" style="display:none;">Track upload successful!</p>
@@ -146,6 +146,40 @@ upload from multiple devices.</p>
 <div id="noGLwarning">
   Unable to initialize WebGL. You need a browser that supports it.
 </div>
+<div id="firstRunIntro">
+<p class="dialogTitle">Welcome to Lantea Maps!</p>
+<p>This web app lets you record GPS tracks of your journeys, which you can
+   upload to our backend servers and download as GPX files.</p>
+<p>You can find track details, upload, etc. in the "track" drawer that you can
+   access via the <image src="style/track.svg"> icon at the left top of the
+   window.</p>
+<p>Right underneath that icon, you find <image src="style/settings.svg">
+   settings.</p>
+<p>Both track and settings "drawers" can be closed by clicking/tapping on their
+   title line.</p>
+<p>From the track "drawer", you can also access a library of uploaded tracks,
+   their name/comment links to the GPX download of the specific track.</p>
+<p class="dialogButtonLine">
+  <button id="firstRunDialogCloseButton"
+          onclick="closeDialog();">Close</button>
+</p>
+</div>
+<div id="infoDialog">
+<p class="dialogTitle">Lantea Maps has changed!</p>
+<p>Lantea Maps has been updated with a few significant changes.</p>
+<p>Most importantly, the previously broken upload functionality for tracks has
+   been fixed and improved to use our own Lantea Maps server instead of
+   OpenStreetMaps. For using it, you need to log in with KaiRo.at via their
+   "sign in" button now in the track "drawer".</p>
+<p>From there, you can also access a library of uploaded tracks, their
+   name/comment links to the GPX download of the specific track.</p>
+<p>If you set a device name in the settings, you can even distinguish tracks
+   uploaded to the same account by different devices you're using.</p>
+<p class="dialogButtonLine">
+  <button id="firstRunDialogCloseButton"
+          onclick="closeDialog();">Close</button>
+</p>
+</div>
 </div>
 
 <div id="libraryArea" class="overlayArea fullScreenOverlay secondaryUI hidden">
index f737507..f451fbe 100644 (file)
--- a/js/ui.js
+++ b/js/ui.js
@@ -8,6 +8,7 @@ window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequest
 
 var mainDB;
 var gAppInitDone = false;
+var firstRun = false;
 var gUIHideCountdown = 0;
 var gWaitCounter = 0;
 var gTrackUpdateInterval;
@@ -101,6 +102,17 @@ function postInit(aEvent) {
       document.getElementById("uploadDevName").value = aValue;
     }
   });
+  if (firstRun) {
+    showFirstRunDialog();
+  }
+  else {
+    gPrefs.get("lastInfoShown", function(aValue) {
+      if (!aValue || !parseInt(aValue) || parseInt(aValue) < 1) {
+        showInfoDialog();
+      }
+    });
+  }
+  gPrefs.set("lastInfoShown", 1);
 }
 
 window.onresize = function() {
@@ -241,6 +253,7 @@ function initDB(aEvent) {
     if (!mainDB.objectStoreNames.contains("prefs")) {
       // Create a "prefs" objectStore.
       var prefsStore = mainDB.createObjectStore("prefs");
+      firstRun = true;
     }
     if (!mainDB.objectStoreNames.contains("track")) {
       // Create a "track" objectStore.
@@ -352,6 +365,11 @@ function showUploadDialog() {
   dia.classList.remove("hidden");
 }
 
+function cancelTrackDialog() {
+  document.getElementById("trackDialogArea").classList.add("hidden");
+  document.getElementById("uploadTrackButton").disabled = false;
+}
+
 function showGLWarningDialog() {
   var dia = document.getElementById("dialogArea");
   var areas = dia.children;
@@ -362,9 +380,28 @@ function showGLWarningDialog() {
   dia.classList.remove("hidden");
 }
 
-function cancelTrackDialog() {
-  document.getElementById("trackDialogArea").classList.add("hidden");
-  document.getElementById("uploadTrackButton").disabled = false;
+function showFirstRunDialog() {
+  var dia = document.getElementById("dialogArea");
+  var areas = dia.children;
+  for (var i = 0; i <= areas.length - 1; i++) {
+    areas[i].style.display = "none";
+  }
+  document.getElementById("firstRunIntro").style.display = "block";
+  dia.classList.remove("hidden");
+}
+
+function closeDialog() {
+  document.getElementById("dialogArea").classList.add("hidden");
+}
+
+function showInfoDialog() {
+  var dia = document.getElementById("dialogArea");
+  var areas = dia.children;
+  for (var i = 0; i <= areas.length - 1; i++) {
+    areas[i].style.display = "none";
+  }
+  document.getElementById("infoDialog").style.display = "block";
+  dia.classList.remove("hidden");
 }
 
 var uiEvHandler = {
index 3c8c0b4..244ce5c 100644 (file)
@@ -1,6 +1,6 @@
 CACHE MANIFEST
 
-# 2017-10-08
+# 2017-10-22
 index.html
 login.html
 manifest.webapp
index 589beff..64ee62f 100644 (file)
@@ -219,11 +219,6 @@ h1 {
   font-size: .75em;
 }
 
-.dialogTitle {
-  margin: 0 0 .5em;
-  font-weight: bold;
-}
-
 .dialogHelp {
   margin: .5em 0;
   font-size: .8em;
@@ -415,12 +410,13 @@ h1 {
   color: #FFFFFF;
 }
 
-/* dialog area - only used for loading error */
+/* dialog area - for loading error and welcome messages */
 #dialogArea {
+  position: absolute;
   top: 20%;
   right: 0;
   left: 0;
-  width: 30ch;
+  width: 50ch;
   max-width: 92%;
   z-index: 10;
   background-color: rgba(255, 255, 255, .8);
@@ -431,10 +427,19 @@ h1 {
 }
 
 #dialogArea.hidden {
-  top: -100%;
+  top: -1000%;
   display: block;
 }
 
+.dialogTitle {
+  margin: 0 0 .5em;
+  font-weight: bold;
+}
+
+.dialogButtonLine {
+  text-align: center;
+}
+
 /* full screen overlay - library, etc. */
 .fullScreenOverlay {
   position: absolute;