]> git.ktnx.net Git - lsl.git/blobdiff - public/javascripts/lsl.js
add a splash screen
[lsl.git] / public / javascripts / lsl.js
index bd767d3ce6a25b666e17d982ce7bdbda32844dbb..fa6b4127fb6d9758d9523b785e5ab51f449a1924 100644 (file)
@@ -1,12 +1,19 @@
 "use strict";
 (function(){
+var uri_base, environment, devel_env;   // filled on page load from an HTML attribute
+var start_time = Date.now();
+
 var ui_icon_class_re = new RegExp('\\bui-icon-\\S+\\b');
 var uri_id_re = new RegExp('/(\\d+)$');
-var uri_base;   // filled on page load from an HTML attribute
 var lists_version = -1;
 var lists = [];
 var selected_list;
 
+function debug(...args) {
+    if (devel_env)
+        console.debug.apply(console, args);
+}
+
 function uri_id(uri) {
     var m = uri.match(uri_id_re);
     return m ? m[1] : null;
@@ -19,7 +26,8 @@ function add_list_item(data) {
     item.append($('<span class="description">').text(data.description || ''));
     item.append($('<span class="edit-trigger">').text('…'));
 
-    $('#list-items').append(item).addClass('have-list-items');
+    $('#list-items').append(item);
+    $('#list-contents').addClass('have-list-items');
 }
 function got_lists_version(new_version) {
     if (new_version != lists_version)
@@ -39,7 +47,8 @@ function load_list_items(uri, target) {
         // keep track of the last existing item, and append new one
         // after it, prepending if there is no last existing item
         // the newly prepended/inserted item becomes the last existing
-        var item_list = $('#list-items').empty().removeClass('have-list-items');
+        $('#list-contents').removeClass('have-list-items');
+        var item_list = $('#list-items').empty();
 
         $.each(item_data.items, (i,item) => {
             add_list_item(item);
@@ -73,6 +82,26 @@ function select_list(new_selected_list) {
 }
 function load_lists() {
     $.get(uri_base + '/api/v1/list')
+    .always(()=>{
+        var splash = $('#splash');
+        if (splash.length) {
+            var dur = splash.css('transition-duration');
+            if (dur && dur.endsWith('s')) {
+                dur = 1000 * parseFloat(dur.substring(0, dur.length-1));
+            }
+            else
+                dur = 1000;
+
+            var now = Date.now();
+            window.setTimeout(() => {
+                splash.addClass('done');
+                debug('scheduling splash removal in '+dur+'ms');
+                window.setTimeout(()=>{ splash.remove(); }, dur);
+            },
+                Math.max(0, 500 - (now - start_time))
+            );
+        }
+    })
     .done(data => {
         lists_version = data.lists_version;
 
@@ -169,6 +198,9 @@ function handle_list_item_state_changed(ev) {
 }
 $(function(){
     uri_base = $('#page').attr('lsl-uri-base');
+    environment = $('#page').attr('lsl-environment');
+    devel_env = environment == 'development';
+
     $(document).ajaxStart(function(){
         $(document).addClass('blocked');
         window.setTimeout(