private void AddSectionCommitsForEachMonth(ExcelWorksheet sheet)
        {
            Header(sheet, "Commits for each sub-folder");

            int rowCounter = 3;

            TableHeader(sheet, rowCounter, 1, "Folder", 40);
            sheet.Column(1).Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Right;
            TableHeader(sheet, rowCounter, 2, "File changes", 13);
            sheet.Column(2).Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Right;
            TableHeader(sheet, rowCounter, 3, "Percentage", 10);
            sheet.Column(3).Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Right;
            sheet.Column(3).Style.Numberformat.Format = "#,##0.00%";

            rowCounter++;
            var totalCommits = FileCommitsList.Sum(fc => fc.CommitCount);

            foreach (var folder in FolderCommitsList.Take(25))
            {
                sheet.Cells[rowCounter, 1].Value = folder.FolderName;
                sheet.Cells[rowCounter, 2].Value = FolderCommits[folder.FolderName].FileChanges;
                var percentage = (double)FolderCommits[folder.FolderName].FileChanges / (double)totalCommits;
                sheet.Cells[rowCounter, 3].Value = percentage;
                rowCounter++;
            }
            var chart = sheet.Drawings.AddChart("Commits each day", OfficeOpenXml.Drawing.Chart.eChartType.Pie);

            chart.SetSize(500, 500);
            chart.SetPosition(0, 450);
            var series1 = chart.Series.Add($"$B$4:$B${rowCounter}", $"$A$4:$A${rowCounter}");
        }
示例#2
0
        private void AddSectionCommitsForEachFolder(StringBuilder sb)
        {
            var totalCommits = FileCommitsList.Sum(fc => fc.CommitCount);

            sb.AppendLine("<div class=\"row\">");
            sb.AppendLine("<div class=\"col-md-6\">");
            sb.AppendLine("<h2>Commits for each sub-folder</h2>");
            sb.AppendLine("<table class=\"table pull-left\" style=\"width: 500px\">");
            sb.AppendLine("<tr><th class=\"text-right\">Folder</th><th class=\"text-right\">File changes</th><th></th></tr>");
            int folderCounter = 1;

            foreach (var folder in FolderCommitsList.Take(25))
            {
                var changeCount = string.Format("{0,5}", FolderCommits[folder.FolderName].FileChanges);
                var percentage  = string.Format("{0,5:#0.0}", ((double)FolderCommits[folder.FolderName].FileChanges / (double)totalCommits) * 100);
                var expand      = folder.Children.Keys.Count > 0 ? $"<span onclick=\"expandFolder({folderCounter})\" id=\"folderSpanExpand{folderCounter}\" class=\"treeViewCaret\">Expand</span>" : "";
                sb.AppendLine($"<tr><td class=\"text-right\">{WebUtility.HtmlEncode(folder.FolderName)}</td><td class=\"text-right text-nowrap\">{changeCount} ({percentage}%)</td><td>{expand}</td></tr>");
                if (folder.Children.Keys.Count > 0)
                {
                    sb.AppendLine($"<tr id=\"folderTrExpand{folderCounter}\" class=\"nested\"><td colspan=\"3\" style=\"overflow: scroll\">");
                    sb.AppendLine($"<ul id=\"folderUlExpand{folderCounter}\" class=\"nested\">");
                    AddSectionCommitsForEachFolderChildren(sb, folder, 0);
                    sb.AppendLine("</ul>");
                    sb.AppendLine("</td></tr>");
                }
                folderCounter++;
            }
            var total = string.Format("{0,5}", totalCommits);

            sb.AppendLine($"<tr><td class=\"text-right\">Total number of Commits analyzed</td><td class=\"text-right\">{total} ({string.Format("{0,5:##0.0}", 100)}%)</td></td></tr>");
            sb.AppendLine("</table>\n");
            sb.AppendLine("</div>");
            sb.AppendLine("<div class=\"col-md-6\">");
            AddPieChartJavascript(sb);
            sb.AppendLine("<div id=\"piechart\" style=\"width: 48px; height: 48px;\" class=\"spinner\"></div>");
            sb.AppendLine("<script type=\"text/javascript\">");
            sb.AppendLine("var toggler = document.getElementsByClassName(\"treeViewCaret\");");
            sb.AppendLine("var i;");
            sb.AppendLine("for (i = 0; i < toggler.length; i++) {");
            sb.AppendLine("  toggler[i].addEventListener(\"click\", function() {");
            sb.AppendLine("    var children = this.parentElement.querySelector(\".nested\");");
            sb.AppendLine("    if(children) {");
            sb.AppendLine("       children.classList.toggle(\"active\");");
            sb.AppendLine("       this.classList.toggle(\"caret-down\");");
            sb.AppendLine("    }");
            sb.AppendLine("  });");
            sb.AppendLine("}");
            sb.AppendLine("function expandFolder(folderId) {");
            sb.AppendLine("  var folderExpander = document.getElementById('folderTrExpand' + folderId);");
            sb.AppendLine("  folderExpander.classList.toggle('active');");
            sb.AppendLine("  folderExpander = document.getElementById('folderUlExpand' + folderId);");
            sb.AppendLine("  folderExpander.classList.toggle('active');");
            sb.AppendLine("  folderExpander = document.getElementById('folderSpanExpand' + folderId)");
            sb.AppendLine("  folderExpander.classList.toggle('caret-down');");
            sb.AppendLine("}");
            sb.AppendLine("</script>");
            sb.AppendLine("</div></div>");
        }
示例#3
0
 private void AddPieChartJavascript(StringBuilder sb)
 {
     sb.AppendLine("<script type=\"text/javascript\">");
     sb.AppendLine("google.charts.load('current', { 'packages':['corechart']});");
     sb.AppendLine("google.charts.setOnLoadCallback(drawChart);");
     sb.AppendLine("function drawChart() {");
     sb.AppendLine("   var data = google.visualization.arrayToDataTable([['Folder', 'Commits'], ");
     foreach (var folder in FolderCommitsList.Take(25))
     {
         sb.AppendLine($"      ['{folder.FolderName}', {folder.FileChanges}],");
     }
     sb.AppendLine("   ]);");
     sb.AppendLine("   var options = { title: 'Commits for each sub-folder' }; ");
     sb.AppendLine("   var element = document.getElementById('piechart');");
     sb.AppendLine("   element.classList.remove(\"spinner\");");
     sb.AppendLine("   element.style = \"width: 900px; height: 500px;\"");
     sb.AppendLine("   var chart = new google.visualization.PieChart(element);");
     sb.AppendLine("   chart.draw(data, options);");
     sb.AppendLine("}");
     sb.AppendLine("</script>");
 }