]> arthur.barton.de Git - netdata.git/commitdiff
more javascript fixes
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Sun, 13 Apr 2014 20:35:01 +0000 (23:35 +0300)
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Sun, 13 Apr 2014 20:35:01 +0000 (23:35 +0300)
web/index.html

index 8d798dc1a63c70bd7dd769acc7c74ba518e5a992..163c9d72cafa772170dcc49e01fccb5954291cd9 100644 (file)
 
        function chartIsLoadingHTML(width, height) { return "<table><tr><td align=\"center\" width=\"" + width + "\" height=\"" + height + "\" style=\"vertical-align:middle\"><h4><span class=\"glyphicon glyphicon-refresh\"></span><br/><br/>loading chart<br/><br/><span class=\"label label-default\">Please wait...</span></h4></td></tr></table>"; }
 
-       function showChartIsLoading(id, width, height) { document.getElementById(id).innerHTML = chartIsLoadingHTML(width, height); }
+       function showChartIsLoading(id, width, height) {
+               //mylog('adding loading chart html in div with id ' + id);
+               document.getElementById(id).innerHTML = chartIsLoadingHTML(width, height);
+       }
 
        function thumbChartActions(i, c, nogroup) {
                var name = c.name;
                return html;
        }
 
-       function disableChart(i) {
-               var chart = null;
-
-               var count = 0;
-               if(group_charts) $.each(group_charts, function(i, c) {
-                       if(c.enabled) count++;
-               });
-               if(count <= 1) {
-                       alert('Cannot close the last chart shown.');
-                       return;
-               }
-
-               if(group_charts) 
-                       chart = group_charts[i];
-               else
-                       chart = mycharts[i];
-
-               if(chart) {
-                       chart.enabled = false;
-                       if(chart.chart) chart.chart.clearChart();
-                       chart.chart = null;
-               }
-               var div = document.getElementById(chart.div);
-               if(div) div.innerHTML = "";
-
-               div = document.getElementById(chart.div + "_parent");
-               if(div) div.innerHTML = "";
-
-               resizeCharts();
+       function mylog(txt) {
+               console.log(txt);
        }
 
        function chartssort(a, b) {
        // copy the chart c to mainchart
        // switch to main graphs screen
        function initMainChart(c) {
-               if(mainchart && mainchart.chart) {
-                       mainchart.chart.clearChart();
-                       mainchart.chart = null;
-               }
+               if(mainchart) cleanThisChart(mainchart);
 
                mainchart = $.extend(true, {}, c);
 
 
        var last_main_chart_max='normal';
        function setMainChartMax(m) {
-               if(!mainchart || mode != MODE_MAIN) return;
+               if(!mainchart) return;
 
                if(m == 'toggle') {
                        if(last_main_chart_max == 'maximized') m = 'normal';
        }
 
        function setMainChartGroup(g) {
-               if(!mainchart || mode != MODE_MAIN) return;
+               if(!mainchart) return;
 
                mainchart.group = g;
                mainchart.last_updated = 0;
 
        var last_main_chart_avg = null;
        function setMainChartGroupMethod(g, norefresh) {
-               if(!mainchart || mode != MODE_MAIN) return;
+               if(!mainchart) return;
 
                if(g == 'toggle') {
                        if(last_main_chart_avg == 'max') g = 'average';
        // Chart resizing
 
        function screenWidth() {
-               return (($(window).width() * 0.95) - 40);
+               return (($(window).width() * 0.95) - 50);
        }
 
        // calculate the proper width for the thumb charts
 
        function groupChartSizes() {
                var s = { width: screenWidth() / 2, height: ($(window).height() - 130) / 3 - 10};
-               if(s.width < MINIMUM_THUMB_GRAPH_WIDTH) s.width = screenWidth();
+               if(s.width < MINIMUM_THUMB_GRAPH_WIDTH * 1.5) s.width = screenWidth();
 
                var count = 0;
                if(group_charts) $.each(group_charts, function(i, c) {
                width = thumbWidth();
                $.each(mycharts, function(i, c) {
                        if(c.enabled && c.chartOptions.width != width) {
-                               if(c.chart) c.chart.clearChart();
-                               c.chart = null;
+                               cleanThisChart(c);
                                c.chartOptions.width = width;
                                showChartIsLoading(c.div, c.chartOptions.width, c.chartOptions.height);
                                c.last_updated = 0;
                        var sizes = groupChartSizes();
 
                        if(c.enabled && (c.chartOptions.width != sizes.width || c.chartOptions.height != sizes.height)) {
-                               if(c.chart) c.chart.clearChart();
-                               c.chart = null;
+                               cleanThisChart(c);
                                c.chartOptions.width = sizes.width;
                                c.chartOptions.height = sizes.height;
                                showChartIsLoading(c.div, c.chartOptions.width, c.chartOptions.height);
                                c.last_updated = 0;
                        }
                });
-
-               playGraphs();
        }
 
+       var resize_request = false;
        window.onresize = function(event) {
-               resizeCharts();
+               resize_request = true;
        };
 
 
                        var now = new Date().getTime();
                        if((now - last_refresh) > 5000) {
                                // it died!
-                               console.log('It seems the refresh thread died. Restarting it.');
+                               //mylog('It seems the refresh thread died. Restarting it.');
                                chartsRefresh();
                        }
                        return;
        // this is an internal function.
        // never call it directly, or new javascript threads will be spawn
        var timeout;
+       var refresh_count = 0;
        function chartsRefresh() {
-               if(stop_refreshing) return;
+               refresh_count++;
+
+               if(resize_request) {
+                       resizeCharts();
+                       resize_request = false;
+                       stop_refreshing = 0;
+               }
+
+               if(stop_refreshing) {
+                       //mylog("stop refresh");
+                       return;
+               }
 
                last_refresh = new Date().getTime();
 
        // this is an internal function.
        // never call it directly, or new javascript threads will be spawn
        function triggerRefresh() {
+               //mylog('triggerRefresh(' + refresh_count + ')');
+
                // cleanup has to take place when the charts are not refreshed
                // since the refreshing thread is in this function, it means
                // nothing is being refreshed.
        // refresh the main chart
        // make sure we don't loose the refreshing thread
        function mainChartRefresh() {
+               //mylog('mainChartRefresh()');
+
                if(mode != MODE_MAIN || !mainchart) {
                        triggerRefresh();
                        return;
                        triggerRefresh();
        }
 
+       function roundRobinRefresh(charts, startat) {
+               var refreshed = false;
+
+               // find a chart to refresh
+               var all = charts.length;
+               var cur = startat;
+               var count = 0;
+
+               for(count = 0; count < all ; count++, cur++) {
+                       if(cur >= all) cur = 0;
+
+                       if(charts[cur].enabled) {
+                               //mylog('going to refresh chart ' + charts[cur].name);
+                               refreshed = refreshChart(charts[cur], chartsRefresh);
+                               if(refreshed) break;
+                       }
+               }
+
+               if(!refreshed) triggerRefresh();
+               return cur;
+       }
+
        // refresh the thumb charts
        // make sure we don't loose the refreshing thread
        var last_thumb_updated = 0;
        function thumbChartsRefresh() {
+               //mylog('thumbChartsRefresh()');
+
                if(mycharts.length == 0 || mode != MODE_THUMBS) {
                        triggerRefresh();
                        return;
                }
 
-               if(last_thumb_updated >= mycharts.length) last_thumb_updated = 0;
-
-               // find a chart to refresh
-               var orig = last_thumb_updated;
-               var refreshed = false;
-
-               last_thumb_updated++;
-               if(last_thumb_updated >= mycharts.length) last_thumb_updated = 0;
-
-               while(1) {
-                       refreshed = refreshChart(mycharts[last_thumb_updated], chartsRefresh);
-                       if(refreshed) break;
-
-                       last_thumb_updated++;
-                       if(last_thumb_updated >= mycharts.length) last_thumb_updated = 0;
-                       if(last_thumb_updated == orig) break;
-               }
-
-               // no chart refreshed
-               if(!refreshed) triggerRefresh();
+               last_thumb_updated = roundRobinRefresh(mycharts, last_thumb_updated);
        }
 
        // refresh the group charts
        // make sure we don't loose the refreshing thread
        var last_group_updated = 0;
        function groupChartsRefresh() {
+               //mylog('groupChartsRefresh()');
+
                if(!group_charts || group_charts.length == 0 || mode != MODE_GROUP_THUMBS) {
+                       //mylog('cannot refresh charts');
                        triggerRefresh();
                        return;
                }
 
-               if(last_group_updated >= group_charts.length) last_group_updated = 0;
+               last_group_updated = roundRobinRefresh(group_charts, last_group_updated);
+       }
 
-               // find a chart to refresh
-               var orig = last_group_updated;
-               var refreshed = false;
 
-               last_group_updated++;
-               if(last_group_updated >= group_charts.length) last_group_updated = 0;
+       // ------------------------------------------------------------------------
+       // switch the screen between views
+       // these should be called only from initXXXX()
+
+       function disableChart(i) {
+               //mylog('disableChart(' + i + ')');
 
-               while(1) {
-                       refreshed = refreshChart(group_charts[last_group_updated], chartsRefresh);
-                       if(refreshed) break;
+               var chart = null;
 
-                       last_group_updated++;
-                       if(last_group_updated >= group_charts.length) last_group_updated = 0;
-                       if(last_group_updated == orig) break;
+               var count = 0;
+               if(mode == MODE_GROUP_THUMBS && group_charts) {
+                       $.each(group_charts, function(i, c) {
+                               if(c.enabled) count++;
+                       });
+
+                       if(i < group_charts.length) chart = group_charts[i];
                }
+               else if(mode == MODE_THUMBS) {
+                       $.each(mycharts, function(i, c) {
+                               if(c.enabled) count++;
+                       });
 
-               // no chart refreshed
-               if(!refreshed) triggerRefresh();
+                       if(i < mycharts.length) chart = mycharts[i];
+               }
+
+               if(!chart) return;
+
+               if(count <= 1) {
+                       alert('Cannot close the last chart shown.');
+                       return;
+               }
+
+               if(chart) {
+                       //mylog("disabling chart " + chart.name);
+                       chart.disablethisplease = true;
+               }
        }
 
+       function cleanThisChart(chart, emptydivs) {
+               //mylog('cleanThisChart(' + chart.name + ', ' + emptydivs +')');
 
-       // ------------------------------------------------------------------------
-       // switch the screen between views
-       // these should be called only from initXXXX()
+               if(chart.chart) chart.chart.clearChart();
+               chart.chart = null;
+
+               if(emptydivs) {
+                       var div = document.getElementById(chart.div);
+                       if(div) {
+                               div.style.display = 'none';
+                               div.innerHTML = "";
+                       }
+
+                       div = document.getElementById(chart.div + "_parent");
+                       if(div) {
+                               div.style.display = 'none';
+                               div.innerHTML = "";
+                       }
+               }
+
+               //mylog("chart " + chart.name + " cleaned with option " + emptydivs);
+       }
 
        // cleanup the previously shown charts
        function cleanupCharts() {
+               //mylog('cleanupCharts()');
+
                if(mode != MODE_MAIN && mainchart) {
-                       if(mainchart.chart) {
-                               mainchart.chart.clearChart();
-                               mainchart.chart = null;
-                       }
+                       if(mainchart.chart) cleanThisChart(mainchart);
                        mainchart = null;
                }
 
                        clearGroupGraphs();
                }
 
+               // cleanup the disabled charts
+               $.each(mycharts, function(i, c) {
+                       if(c.disablethisplease && c.enabled) {
+                               cleanThisChart(c, 'emptydivs');
+                               c.disablethisplease = false;
+                               c.enabled = false;
+                               resize_request = true;
+                               //mylog("disabled chart " + c.name + " removed");
+                       }
+               });
+
+               if(group_charts) $.each(group_charts, function(i, c) {
+                       if(c.disablethisplease && c.enabled) {
+                               cleanThisChart(c, 'emptydivs');
+                               c.disablethisplease = false;
+                               c.enabled = false;
+                               resize_request = true;
+                               //mylog("disabled chart " + c.name + " removed");
+                       }
+               });
+
                // we never cleanup the thumb charts
        }
 
 
        var thumbsScrollPosition = null;
        function switchToMainGraph() {
+               //mylog('switchToMainGraph()');
+
                if(!mainchart) return;
 
                if(!group_charts) thumbsScrollPosition = window.pageYOffset;
 
                document.getElementById("main_menu_div").innerHTML = "<ul class=\"nav navbar-nav\"><li><a href=\"javascript:switchToThumbGraphs();\">Back to Home</a></li><li class=\"active\"><a href=\"#\">" + mainchart.title + "</a></li></ul>";
 
+               window.scrollTo(0, 0);
+
                mode = MODE_MAIN;
                playGraphs();
                updateUI();
        }
 
        function switchToThumbGraphs() {
+               //mylog('switchToThumbGraphs()');
+
                document.getElementById('maingraph_container').style.display = 'none';
                document.getElementById('thumbgraphs_container').style.display = 'block';
                document.getElementById('groupgraphs_container').style.display = 'none';
        }
 
        function switchToGroupGraphs() {
+               //mylog('switchToGroupGraphs()');
+
                if(!group_charts) return;
 
                if(!mainchart) thumbsScrollPosition = window.pageYOffset;
        function clearGroupGraphs() {
                if(group_charts && group_charts.length) {
                        $.each(group_charts, function(i, c) {
-                               if(c.chart) c.chart.clearChart();
-                               c.chart = null;
+                               cleanThisChart(c, 'emptydivs');
                        });
 
                        group_charts = null;
        </div>
        </div>
 
+    <div class="container graphs" id="groupgraphs_container">
+       &nbsp;<p/>
+       <hr/>
+    <h4>NetData</h4>
+    Realtime System Information over the web for all linux systems.
+    <p/>
+    Distributed under GPL.
+    <p/>
+    (c) 2014 Costa Tsaousis <a href="mailto:costa@tsaousis.gr">costa@tsaousis.gr</a>
+       </div>
+
        <script type='text/javascript'>
                $(document).ready(function(){
                        document.getElementById('splash').height = $(window).height();