add admin UI for loading tracks
[lantea.git] / js / library.js
index 3d0c521849c47aff71ee6b551f13be848c1f066b..5e08793b63ffed454237d5612b3ed9edbaf2731b 100644 (file)
@@ -21,11 +21,37 @@ function showLibrary() {
         litem.textContent = "Error: " + aResult;
         tlist.appendChild(litem);
       }
+      else if (!aResult.length) {
+        var litem = document.createElement("li");
+        litem.textContent = "No tracks uploaded yet.";
+        tlist.appendChild(litem);
+      }
       else {
         for (var i = 0; i < aResult.length; i++) {
           var litem = document.createElement("li");
-          litem.textContent = aResult[i]["time_created"] + " - " + aResult[i]["comment"] +
-                              (aResult[i]["devicename"] ? " (" + aResult[i]["devicename"] +  ")" : "");
+          litem.textContent = dtformat(aResult[i]["time_created"]) + " - ";
+          var llink = document.createElement("a");
+          var dlurl = gBackendURL + "/track_gpx?id=" + aResult[i]["id"];
+          llink.setAttribute("href", dlurl);
+          llink.textContent = aResult[i]["comment"];
+          litem.appendChild(llink);
+          if (aResult[i]["devicename"]) {
+            litem.appendChild(document.createTextNode(" (" + aResult[i]["devicename"] +  ")"));
+          }
+          if (userData && userData["permissions"].includes("admin")) {
+            // Show load entry for debugging purposes
+            litem.appendChild(document.createTextNode(" "));
+            var ldbtn = document.createElement("button");
+            ldbtn.onclick = loadButtonClicked;
+            ldbtn.textContent = "load";
+            ldbtn.classList.add("minorbutton");
+            ldbtn.dataset.id = aResult[i]["id"];
+            litem.appendChild(ldbtn);
+            litem.appendChild(document.createTextNode(" "));
+            var lderror = document.createElement("span");
+            lderror.classList.add("statusmsg");
+            litem.appendChild(lderror);
+          }
           tlist.appendChild(litem);
         }
       }
@@ -33,7 +59,26 @@ function showLibrary() {
   );
 }
 
+function loadButtonClicked(aEvent) {
+  var feedbackspan = aEvent.target.nextElementSibling;
+  feedbackspan.textContent = "";
+  feedbackspan.classList.remove("error");
+  loadTrackFromBackend(aEvent.target.dataset.id, feedbackspan, hideLibrary);
+}
+
 function hideLibrary() {
   document.getElementById("libraryArea").classList.add("hidden");
 }
 
+function dtformat(aUnixTimestamp) {
+  // Library display time format: YYYY-MM-DD HH:mm
+  // Note that JS has millisecond timestamps while standard/unix has seconds.
+  var tsDate = new Date(aUnixTimestamp * 1000);
+  // Note that .getUTCMonth() returns a number between 0 and 11 (0 for January)!
+  return tsDate.getUTCFullYear() + "-" +
+         (tsDate.getUTCMonth() < 9 ? "0" : "") + (tsDate.getUTCMonth() + 1 ) + "-" +
+         (tsDate.getUTCDate() < 10 ? "0" : "") + tsDate.getUTCDate() + " " +
+         (tsDate.getUTCHours() < 10 ? "0" : "") + tsDate.getUTCHours() + ":" +
+         (tsDate.getUTCMinutes() < 10 ? "0" : "") + tsDate.getUTCMinutes();
+}
+