From d37265f71e7d98d37ed77e1b3e0972e89e6996cd Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Fri, 25 Apr 2014 17:01:21 +0600 Subject: [PATCH] Component Viewer: header --- .../main/coffee/component-viewer/main.coffee | 38 ++++++++++- .../coffee/component-viewer/source.coffee | 7 ++- .../src/main/hbs/component-viewer/source.hbs | 63 ++++++++++++++++++- sonar-server/src/main/js/issues/extra.js | 7 ++- .../src/main/less/component-viewer.less | 47 ++++++++++++++ .../WEB-INF/app/views/issues/search.html.erb | 32 +++++++++- 6 files changed, 186 insertions(+), 8 deletions(-) diff --git a/sonar-server/src/main/coffee/component-viewer/main.coffee b/sonar-server/src/main/coffee/component-viewer/main.coffee index 4d55a066ebb..5601a7b88d1 100644 --- a/sonar-server/src/main/coffee/component-viewer/main.coffee +++ b/sonar-server/src/main/coffee/component-viewer/main.coffee @@ -16,6 +16,15 @@ define [ API_SOURCES = "#{baseUrl}/api/sources" API_RESOURCES = "#{baseUrl}/api/resources" + SOURCE_METRIC_LIST = 'lines,ncloc,functions,accessors,classes,statements,complexity,function_complexity,' + + 'comment_lines_density,comment_lines,public_documented_api_density,public_undocumented_api,' + + 'public_api' + + COVERAGE_METRIC_LIST = 'coverage,line_coverage,branch_coverage,' + + 'coverage_line_hits_data,covered_conditions_by_line,conditions_by_line' + + ISSUES_METRIC_LIST = 'blocker_violations,critical_violations,major_violations,minor_violations,info_violations' + class ComponentViewer extends Marionette.Layout @@ -62,6 +71,14 @@ define [ @component.set data[0] + requestComponentCoverage: (key) -> + $.get API_RESOURCES, resource: key, metrics: COVERAGE_METRIC_LIST + + + requestComponentIssues: (key) -> + $.get API_RESOURCES, resource: key, metrics: ISSUES_METRIC_LIST + + requestSource: (key) -> $.get API_SOURCES, resource: key, (data) => @source.set source: data[0] @@ -83,6 +100,16 @@ define [ coverage: coverage coverageConditions: coverageConditions conditions: conditions + coverageMeasures = _.reject data[0].msr, (m) -> + m.key == 'coverage_line_hits_data' || m.key == 'covered_conditions_by_line' || m.key == 'conditions_by_line' + @component.set 'coverageMeasures', coverageMeasures + + + extractIssues: (data) -> + issuesMeasures = {} + data[0].msr.forEach (q) -> + issuesMeasures[q.key] = q.frmt_val + @component.set 'issuesMeasures', issuesMeasures open: (key) -> @@ -94,7 +121,7 @@ define [ @key = key @sourceView.showSpinner() source = @requestSource key - component = @requestComponent key + component = @requestComponent key, SOURCE_METRIC_LIST $.when(source, component).done => @workspace.where(key: key).forEach (model) => model.set 'component': @component.toJSON() @@ -105,8 +132,7 @@ define [ showCoverage: -> @settings.set 'coverage', true unless @source.has 'coverage' - metrics = 'coverage_line_hits_data,covered_conditions_by_line,conditions_by_line' - @requestComponent(@key, metrics).done (data) => + @requestComponentCoverage(@key).done (data) => @extractCoverage data @sourceView.render() else @@ -130,6 +156,12 @@ define [ showIssues: (issues) -> @settings.set 'issues', true + + unless @source.has 'issues' + @requestComponentIssues(@key).done (data) => + @extractIssues data + @sourceView.render() + if _.isArray(issues) && issues.length > 0 @source.set 'issues', issues @sourceView.render() diff --git a/sonar-server/src/main/coffee/component-viewer/source.coffee b/sonar-server/src/main/coffee/component-viewer/source.coffee index 72f7c7e7b14..74b37753166 100644 --- a/sonar-server/src/main/coffee/component-viewer/source.coffee +++ b/sonar-server/src/main/coffee/component-viewer/source.coffee @@ -21,7 +21,8 @@ define [ events: - 'click .settings-toggle button': 'toggleSettings' + 'click .js-toggle-settings': 'toggleSettings' + 'click .js-toggle-measures': 'toggleMeasures' 'change #source-coverage': 'toggleCoverage' 'change #source-workspace': 'toggleWorkspace' 'click .coverage-tests': 'showCoveragePopup' @@ -53,6 +54,10 @@ define [ @$('.component-viewer-source-settings').toggleClass 'open' + toggleMeasures: -> + @$('.component-viewer-measures-section').toggleClass 'brief' + + toggleCoverage: (e) -> active = $(e.currentTarget).is ':checked' @showSettings = true diff --git a/sonar-server/src/main/hbs/component-viewer/source.hbs b/sonar-server/src/main/hbs/component-viewer/source.hbs index 53c30e18648..c6372ef5da1 100644 --- a/sonar-server/src/main/hbs/component-viewer/source.hbs +++ b/sonar-server/src/main/hbs/component-viewer/source.hbs @@ -6,7 +6,7 @@ {{/if}} - @@ -37,6 +37,67 @@ {{qualifierIcon component.qualifier}} {{component.name}} + + {{#if settings.coverage}} + + + {{/if}} + + + + + + + diff --git a/sonar-server/src/main/js/issues/extra.js b/sonar-server/src/main/js/issues/extra.js index b2e3c025e79..a9c8069819a 100644 --- a/sonar-server/src/main/js/issues/extra.js +++ b/sonar-server/src/main/js/issues/extra.js @@ -180,8 +180,11 @@ define( componentViewer.open(that.model.get('component')).done(function() { componentViewer.showIssues([that.model.toJSON()], true); - var top = componentViewer.$('.code-issues:first').closest('tr').position().top; - jQuery('.navigator-details').scrollTop(top - 40); + var row = componentViewer.$('.code-issue:first').closest('.row'); + if (row.data('line-number') > 0) { + var top = row.position().top; + jQuery('.navigator-details').scrollTop(top - 40); + } }); }; diff --git a/sonar-server/src/main/less/component-viewer.less b/sonar-server/src/main/less/component-viewer.less index 03d66e988da..6f1d21d59e2 100644 --- a/sonar-server/src/main/less/component-viewer.less +++ b/sonar-server/src/main/less/component-viewer.less @@ -95,6 +95,7 @@ } &.settings-toggle { + vertical-align: top; border-right: 1px solid @barBorderColor; text-align: center; white-space: nowrap; @@ -127,6 +128,7 @@ .sources2 .lid { min-width: 18px; + padding-left: 10px; padding-right: 10px; } @@ -134,6 +136,13 @@ cursor: pointer; } + .sources2 .measures { + padding: 4px 5px; + border-left: 1px solid @barBorderColor; + border-bottom: 1px solid @barBorderColor; + background-color: @barBackgroundColor; + } + .sources2 .issue pre { background-color: #ff9090; } @@ -172,6 +181,44 @@ } +.component-viewer-measures { + font-size: 0; +} + +.component-viewer-measures-section { + display: inline-block; + vertical-align: top; + width: 25%; + max-width: 260px; + padding-right: 40px; + .box-sizing(border-box); + font-size: @baseFontSize; + + &.brief { + dt { display: none; } + dt:first-of-type { display: block; } + dd { display: none; } + dd:first-of-type { display: block; } + } + + &:not(.brief) { + padding-top: 3px; + padding-bottom: 3px; + } + + dt { + float: left; + clear: left; + } + + dd { + float: right; + font-weight: bold; + } +} + + + @popupArrowSize: 8px; .component-viewer-popup { diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb index c30a3ecbef0..d09c9d319c3 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb @@ -208,6 +208,36 @@ 'severity.CRITICAL': '<%= escape_javascript message('severity.CRITICAL') -%>', 'severity.MAJOR': '<%= escape_javascript message('severity.MAJOR') -%>', 'severity.MINOR': '<%= escape_javascript message('severity.MINOR') -%>', - 'severity.INFO': '<%= escape_javascript message('severity.INFO') -%>' + 'severity.INFO': '<%= escape_javascript message('severity.INFO') -%>', + + 'metric.accessors.name': '<%= escape_javascript message('metric.accessors.name') -%>', + 'metric.alert_status.name': '<%= escape_javascript message('metric.alert_status.name') -%>', + 'metric.classes.name': '<%= escape_javascript message('metric.classes.name') -%>', + 'metric.comment_blank_lines.name': '<%= escape_javascript message('metric.comment_blank_lines.name') -%>', + 'metric.comment_lines.name': '<%= escape_javascript message('metric.comment_lines.name') -%>', + 'metric.comment_lines_density.name': '<%= escape_javascript message('metric.comment_lines_density.name') -%>', + 'metric.commented_out_code_lines.name': '<%= escape_javascript message('metric.commented_out_code_lines.name') -%>', + 'metric.complexity.name': '<%= escape_javascript message('metric.complexity.name') -%>', + 'metric.directories.name': '<%= escape_javascript message('metric.directories.name') -%>', + 'metric.files.name': '<%= escape_javascript message('metric.files.name') -%>', + 'metric.functions.name': '<%= escape_javascript message('metric.functions.name') -%>', + 'metric.generated_lines.name': '<%= escape_javascript message('metric.generated_lines.name') -%>', + 'metric.generated_ncloc.name': '<%= escape_javascript message('metric.generated_ncloc.name') -%>', + 'metric.lines.name': '<%= escape_javascript message('metric.lines.name') -%>', + 'metric.ncloc.name': '<%= escape_javascript message('metric.ncloc.name') -%>', + 'metric.packages.name': '<%= escape_javascript message('metric.packages.name') -%>', + 'metric.public_api.name': '<%= escape_javascript message('metric.public_api.name') -%>', + 'metric.public_documented_api_density.name': '<%= escape_javascript message('metric.public_documented_api_density.name') -%>', + 'metric.public_undocumented_api.name': '<%= escape_javascript message('metric.public_undocumented_api.name') -%>', + 'metric.statements.name': '<%= escape_javascript message('metric.statements.name') -%>', + 'metric.class_complexity.name': '<%= escape_javascript message('metric.class_complexity.name') -%>', + 'metric.function_complexity.name': '<%= escape_javascript message('metric.function_complexity.name') -%>', + 'metric.file_complexity.name': '<%= escape_javascript message('metric.file_complexity.name') -%>', + 'metric.class_complexity_distribution.name': '<%= escape_javascript message('metric.class_complexity_distribution.name') -%>', + 'metric.function_complexity_distribution.name': '<%= escape_javascript message('metric.function_complexity_distribution.name') -%>', + 'metric.file_complexity_distribution.name': '<%= escape_javascript message('metric.file_complexity_distribution.name') -%>', + 'metric.coverage.name': '<%= escape_javascript message('metric.coverage.name') -%>', + 'metric.line_coverage.name': '<%= escape_javascript message('metric.line_coverage.name') -%>', + 'metric.branch_coverage.name': '<%= escape_javascript message('metric.branch_coverage.name') -%>' }; -- 2.39.5