fixes & improvements
diff --git a/code/default/launcher/web_ui/index.html b/code/default/launcher/web_ui/index.html
index 24cb293d93..a86630592d 100644
--- a/code/default/launcher/web_ui/index.html
+++ b/code/default/launcher/web_ui/index.html
@@ -61,6 +61,7 @@
 <div id="content">
     <div class="container">
         <div id="welcome" class="hero-unit hide" style="padding-left: 70px;">
+            <button type="button" class="close" onclick="welcomeClose();" aria-hidden="true">&times;</button>
             <h1 id="welcome-title">{{ _( "Hello!" ) }}</h1>
             <p id="welcome-message">{{ _( "You seem to be on your first visit." ) }}</p>
             <a id="btn-learnmore" class="btn btn-primary btn-large">{{ _( "Learn more" ) }}</a>
@@ -142,6 +143,11 @@ <h2 id="title"></h2>
             $('#welcome').addClass('hide');
         }, 1000);
     });
+
+    function welcomeClose() {
+        $('#welcome').addClass('hide');
+        setConfig('postUpdateStat', "noChange");
+    }
 </script>
 <script type="text/javascript">
     function getConfig(key) {
@@ -238,38 +244,33 @@ <h2 id="title"></h2>
                     },
                     error: function (result) {
                         console.log("Failed getting RELEASENOTE_ISSUEID.");
+                    },
+                    complete: function (result) {
+                        switch (getConfig('postUpdateStat')) {
+                            case "noChange":
+                                $('#welcome').addClass('hide');
+                                break;
+                            case "isNew":
+                                $('#welcome-title').text('{{ _( "Hello!" ) }}');
+                                $('#welcome-message').text('{{ _( "You seem to be on your first visit." ) }}');
+                                window.welcomeISSUEID = window.wiki_ISSUEID;
+                                $('#welcome').removeClass('hide');
+                                setTimeout(welcomeClose(), 15 * 1000);
+                                break;
+                            case "isPostUpdate":
+                                $('#welcome-title').text('{{ _( "Hello!" ) }}');
+                                $('#welcome-message').text('{{ _( "new to this version?" ) }}');
+                                window.welcomeISSUEID = window.RELEASENOTE_ISSUEID;
+                                $('#welcome').removeClass('hide');
+                                setTimeout(welcomeClose(), 15 * 1000);
+                                break;
+                            default:
+                        }
                     }
                 });
             }
         });
 
-        switch (getConfig('postUpdateStat')) {
-            case "noChange":
-                $('#welcome').addClass('hide');
-                break;
-            case "isNew":
-                $('#welcome-title').text('{{ _( "Hello!" ) }}');
-                $('#welcome-message').text('{{ _( "You seem to be on your first visit." ) }}');
-                window.welcomeISSUEID = window.wiki_ISSUEID;
-                $('#welcome').removeClass('hide');
-                setTimeout(function () {
-                    $('#welcome').addClass('hide');
-                    setConfig('postUpdateStat', "noChange");
-                }, 15 * 1000);
-                break;
-            case "isPostUpdate":
-                $('#welcome-title').text('{{ _( "Hello!" ) }}');
-                $('#welcome-message').text('{{ _( "new to this version?" ) }}');
-                window.welcomeISSUEID = window.RELEASENOTE_ISSUEID;
-                $('#welcome').removeClass('hide');
-                setTimeout(function () {
-                    $('#welcome').addClass('hide');
-                    setConfig('postUpdateStat', "noChange");
-                }, 15 * 1000);
-                break;
-            default:
-        }
-
         if (getConfig('allow_remote_connect') !== 0) {
             $('#remote-connection-identifier').show();
         }
diff --git a/code/default/x_tunnel/lang/zh_CN/LC_MESSAGES/messages.po b/code/default/x_tunnel/lang/zh_CN/LC_MESSAGES/messages.po
index bebbe023f5..9063594528 100644
--- a/code/default/x_tunnel/lang/zh_CN/LC_MESSAGES/messages.po
+++ b/code/default/x_tunnel/lang/zh_CN/LC_MESSAGES/messages.po
@@ -20,6 +20,9 @@ msgstr ""
 msgid "Heroku"
 msgstr ""
 
+msgid "TLS-Relay"
+msgstr ""
+
 msgid "Front"
 msgstr "前端"
 
diff --git a/code/default/x_tunnel/web_ui/menu.yaml b/code/default/x_tunnel/web_ui/menu.yaml
index eeb5fb12e1..06663b97e2 100644
--- a/code/default/x_tunnel/web_ui/menu.yaml
+++ b/code/default/x_tunnel/web_ui/menu.yaml
@@ -20,10 +20,9 @@ sub_menus: {
 #  5:{
 #    title: {{ _("Heroku") }}{{ _("Front") }}{{ _("Log") }},
 #    url: heroku_front_logging
-#  }
-
-  6:{
-    title: {{ _("TLS Relay") }}{{ _("Front") }}{{ _("Log") }},
+#  },
+  5:{
+    title: {{ _("TLS-Relay") }}{{ _("Front") }}{{ _("Log") }},
     url: tls_relay_front_logging
   },
 }
\ No newline at end of file
diff --git a/code/default/x_tunnel/web_ui/tls_relay_front_logging.html b/code/default/x_tunnel/web_ui/tls_relay_front_logging.html
index 63f3fc87ed..f5409b1efa 100644
--- a/code/default/x_tunnel/web_ui/tls_relay_front_logging.html
+++ b/code/default/x_tunnel/web_ui/tls_relay_front_logging.html
@@ -3,7 +3,7 @@
 </div> <!-- #log-container -->
 
 <script type="text/javascript">
-    title('{{ _("TLS Relay Front") }}{{ _("Front") }} {{ _("Log") }}');
+    title('{{ _("TLS-Relay") }}{{ _("Front") }} {{ _("Log") }}');
 </script>
 <style type="text/css">
     .DUMMY { color: black }
@@ -14,11 +14,11 @@
     .CRITICAL { color: #d7df01 }
 </style>
 <script type="text/javascript">
-    $(function() {
+    $(function () {
         resizeLogWindow();
     });
 
-    $(window).resize(function() {
+    $(window).resize(function () {
         resizeLogWindow();
     });
 </script>
@@ -31,14 +31,14 @@
     }
 </script>
 <script type="text/javascript">
-    $(function() {
+    $(function () {
         window.previousOffset     = 0;
         window.offset             = 1;
         window.logLineNum         = 0;
         window.isAutoScrollLog    = true;
         window.isgetLogProcessing = false;
 
-        var timer = $.timer(function() {
+        var timer = $.timer(function () {
             getLog();
         });
         timer.set({
@@ -48,57 +48,53 @@
     });
 </script>
 <script type="text/javascript">
-    $(function() {
+    $(function () {
         getLog();
     });
 </script>
 <script type="text/javascript">
-    $('#log').scroll(function() {
+    $('#log').scroll(function () {
         var preservedHeight = $('#log').height() + 10,
             scrollHeight    = $('#log')[0].scrollHeight,
             scrollTop       = $('#log').scrollTop();
 
-        if ( scrollTop + preservedHeight == scrollHeight ) {
-            window.isAutoScrollLog = true;
-        } else {
-            window.isAutoScrollLog = false;
-        }
+        window.isAutoScrollLog = (scrollTop + preservedHeight === scrollHeight);
     });
 </script>
 <script type="text/javascript">
     function scrollLog() {
-        if ( window.isAutoScrollLog ) {
+        if (window.isAutoScrollLog) {
             $('#log').scrollTop($('#log')[0].scrollHeight);
         }
     }
 </script>
 <script type="text/javascript">
     function getLog() {
-        if ( window.isgetLogProcessing ) { 
-            return; 
+        if (window.isgetLogProcessing) {
+            return;
         }
-        if ( !window.isAutoScrollLog ) { 
-            return; 
+        if (!window.isAutoScrollLog) {
+            return;
         }
         window.isgetLogProcessing = true;
+
         var pageRequests = {
             'cmd': 'get_new',
             'last_no': offset
         };
-
         $.ajax({
             type: 'GET',
             url: '/module/x_tunnel/control/tls_relay_front/log',
             data: pageRequests,
             dataType: 'JSON',
-            success: function(result) {
+            success: function (result) {
                 var newlines = document.createDocumentFragment();
                 var newlineNum = 0;
-                $.each(result, function(lineNumber, log) {
+                $.each(result, function (lineNumber, log) {
                     window.offset = lineNumber;
 
                     var logTemplate = '<p class="%s">%s</p>\n';
-                    if ( window.previousOffset != window.offset ) {
+                    if (window.previousOffset != window.offset) {
                         var newline = $(logTemplate.format(getLogLevel(log), log));
                         $(newlines).append(newline);
                         newlineNum += 1;
@@ -108,11 +104,11 @@
                 $('#log').append(newlines);
                 var maxLineNum = 1000;
                 var cutStep = 10;
-                if(window.logLineNum > maxLineNum + cutStep){
+                if (window.logLineNum > maxLineNum + cutStep) {
                     var numToCut = window.logLineNum - maxLineNum;
                     var textblock = $('#log').html();
                     var lines = textblock.split('\n');
-                    lines.splice(0,numToCut);
+                    lines.splice(0, numToCut);
                     var newtext = lines.join('\n');
                     $('#log').html(newtext);
                     window.logLineNum -= numToCut;
@@ -122,7 +118,7 @@
                 window.previousOffset = window.offset;
                 window.isgetLogProcessing = false;
             },
-            error: function(xml, info, obj) {
+            error: function (xml, info, obj) {
                 window.isgetLogProcessing = false;
             }
         });
@@ -130,17 +126,16 @@
 </script>
 <script type="text/javascript">
     function getLogLevel(log) {
-        if ( log.indexOf('[DEBUG]') != -1 ) {
+        if (log.indexOf('[DEBUG]') != -1) {
             return 'DEBUG';
-        } else if ( log.indexOf('[INFO]') != -1 ) {
+        } else if (log.indexOf('[INFO]') != -1) {
             return 'INFO';
-        } else if ( log.indexOf('[WARNING]') != -1 ) {
+        } else if (log.indexOf('[WARNING]') != -1) {
             return 'WARNING';
-        } else if ( log.indexOf('[ERROR]') != -1 ) {
+        } else if (log.indexOf('[ERROR]') != -1) {
             return 'ERROR';
-        } else if ( log.indexOf('[CRITICAL]') != -1 ) {
+        } else if (log.indexOf('[CRITICAL]') != -1) {
             return 'CRITICAL';
-        }
-        return 'DUMMY';
+        } else return 'DUMMY';
     }
 </script>

- improve '#welcome'

- fix 'tls_relay_front_logging'