<div class="component-viewer-header-bar">
<div class="component-viewer-header-component">
- {{#if component.projectName}}
- <div class="component-viewer-header-component-project">
- {{qualifierIcon 'TRK'}}
- <a class="link-action" href="{{dashboardUrl component.project}}">{{component.projectName}}</a>
- {{#if component.subProjectName}}
- / <a class="link-action" href="{{dashboardUrl component.subProject}}">{{component.subProjectName}}</a>
- {{/if}}
- </div>
- {{/if}}
-
- <div class="component-viewer-header-component-name">
- {{qualifierIcon component.q}} {{component.path}}
-
- {{#if state.canMarkAsFavourite}}
- <a class="js-favorite component-viewer-header-favorite"
- title="{{#if component.fav}}{{t 'click_to_remove_from_favorites'}}{{else}}{{t 'click_to_add_to_favorites'}}{{/if}}">
- <i class="{{#if component.fav}}icon-favorite{{else}}icon-not-favorite{{/if}}"></i>
- </a>
+ {{#unless state.removed}}
+ {{#if component.projectName}}
+ <div class="component-viewer-header-component-project">
+ {{qualifierIcon 'TRK'}}
+ <a class="link-action" href="{{dashboardUrl component.project}}">{{component.projectName}}</a>
+ {{#if component.subProjectName}}
+ / <a class="link-action" href="{{dashboardUrl component.subProject}}">{{component.subProjectName}}</a>
+ {{/if}}
+ </div>
{{/if}}
- </div>
- </div>
- <div class="component-viewer-header-links">
- <a><i class="icon-link"></i></a>
- {{#ifNotEmpty state.extensions}}
- <a class="js-extensions">
- <i class="icon-extension"></i>
- <i class="icon-dropdown"></i>
- </a>
- {{/ifNotEmpty}}
- </div>
+ <div class="component-viewer-header-component-name">
+ {{qualifierIcon component.q}} {{default component.path component.name}}
- <div class="component-viewer-header-measures">
- {{#if component.isUnitTest}}
- <div class="component-viewer-header-measures-scope">
- <a data-scope="tests" class="component-viewer-header-measures-expand">
- <div class="component-viewer-header-measure">
- <span class="component-viewer-header-measure-value">{{component.measures.fTests}}</span>
- <span class="component-viewer-header-measure-label">{{t 'metric.tests.name'}}</span>
- </div>
- <i class="icon-dropdown"></i>
- </a>
+ {{#if state.canMarkAsFavourite}}
+ <a class="js-favorite component-viewer-header-favorite"
+ title="{{#if component.fav}}{{t 'click_to_remove_from_favorites'}}{{else}}{{t 'click_to_add_to_favorites'}}{{/if}}">
+ <i class="{{#if component.fav}}icon-favorite{{else}}icon-not-favorite{{/if}}"></i>
+ </a>
+ {{/if}}
</div>
- {{/if}}
+ {{else}}
+ <div class="component-viewer-header-component-project removed">Removed</div>
+ {{/unless}}
+ </div>
- {{#unless component.isUnitTest}}
- <div class="component-viewer-header-measures-scope">
- <span data-scope="basic" class="js-toggle-coverage component-viewer-header-measures-toggle-scope inactive"></span>
- <a data-scope="basic" class="component-viewer-header-measures-expand">
- <div class="component-viewer-header-measure">
- <span class="component-viewer-header-measure-value">{{default component.measures.fNcloc '–'}}</span>
- <span class="component-viewer-header-measure-label">{{t 'metric.ncloc.name'}}</span>
- </div>
+ {{#unless state.removed}}
+ <div class="component-viewer-header-links">
+ <a><i class="icon-link"></i></a>
+ {{#ifNotEmpty state.extensions}}
+ <a class="js-extensions">
+ <i class="icon-extension"></i>
<i class="icon-dropdown"></i>
</a>
- </div>
- {{/unless}}
+ {{/ifNotEmpty}}
+ </div>
- <div class="component-viewer-header-measures-scope">
- <a data-scope="issues" class="component-viewer-header-measures-expand">
- <div class="component-viewer-header-measure">
- <span class="component-viewer-header-measure-value">{{default component.measures.fDebt '–'}}</span>
- <span class="component-viewer-header-measure-label">{{t 'component_viewer.header.debt'}}</span>
- </div>
- {{#if component.measures.fIssues}}
- <div class="component-viewer-header-measure">
- <span class="component-viewer-header-measure-value">{{component.measures.fIssues}}</span>
- <span class="component-viewer-header-measure-label">{{t 'metric.violations.name'}}</span>
- </div>
- {{/if}}
- {{#if component.measures.fIssues}}
- <div class="component-viewer-header-measure">
- <div class="component-viewer-header-measure-issues">
- <div class="component-viewer-header-measure-issue s-blocker"
- style="width: {{percent component.measures.fBlockerIssues component.measures.maxIssues}};"></div>
- <div class="component-viewer-header-measure-issue s-critical"
- style="width: {{percent component.measures.fCriticalIssues component.measures.maxIssues}};"></div>
- <div class="component-viewer-header-measure-issue s-major"
- style="width: {{percent component.measures.fMajorIssues component.measures.maxIssues}};"></div>
- <div class="component-viewer-header-measure-issue s-minor"
- style="width: {{percent component.measures.fMinorIssues component.measures.maxIssues}};"></div>
- <div class="component-viewer-header-measure-issue s-info"
- style="width: {{percent component.measures.fInfoIssues component.measures.maxIssues}};"></div>
+ <div class="component-viewer-header-measures">
+ {{#if component.isUnitTest}}
+ <div class="component-viewer-header-measures-scope">
+ <a data-scope="tests" class="component-viewer-header-measures-expand">
+ <div class="component-viewer-header-measure">
+ <span class="component-viewer-header-measure-value">{{component.measures.fTests}}</span>
+ <span class="component-viewer-header-measure-label">{{t 'metric.tests.name'}}</span>
</div>
- </div>
- {{/if}}
- <i class="icon-dropdown"></i>
- </a>
- <a data-scope="issues" title="{{t 'component_viewer.header.toggle_issues'}}"
- class="js-toggle-issues component-viewer-header-measures-toggle-scope {{#if settings.issues}}active{{/if}}"></a>
- </div>
+ <i class="icon-dropdown"></i>
+ </a>
+ </div>
+ {{/if}}
- {{#inArray state.tabs 'coverage'}}
- <div class="component-viewer-header-measures-scope">
- <a data-scope="coverage" class="component-viewer-header-measures-expand">
+ {{#unless component.isUnitTest}}
+ <div class="component-viewer-header-measures-scope">
+ <span data-scope="basic" class="js-toggle-coverage component-viewer-header-measures-toggle-scope inactive"></span>
+ <a data-scope="basic" class="component-viewer-header-measures-expand">
<div class="component-viewer-header-measure">
- <span class="component-viewer-header-measure-value">{{default component.measures.fCoverage '–'}}</span>
- <span class="component-viewer-header-measure-label">{{t 'metric.coverage.name'}}</span>
+ <span class="component-viewer-header-measure-value">{{default component.measures.fNcloc '–'}}</span>
+ <span class="component-viewer-header-measure-label">{{t 'metric.ncloc.name'}}</span>
</div>
- <i class="icon-dropdown"></i>
- </a>
- <a data-scope="coverage" title="{{t 'component_viewer.header.toggle_coverage'}}"
- class="js-toggle-coverage component-viewer-header-measures-toggle-scope {{#if settings.coverage}}active{{/if}}"></a>
- </div>
- {{/inArray}}
+ <i class="icon-dropdown"></i>
+ </a>
+ </div>
+ {{/unless}}
- {{#inArray state.tabs 'duplications'}}
<div class="component-viewer-header-measures-scope">
- <a data-scope="duplications" class="component-viewer-header-measures-expand">
+ <a data-scope="issues" class="component-viewer-header-measures-expand">
+ <div class="component-viewer-header-measure">
+ <span class="component-viewer-header-measure-value">{{default component.measures.fDebt '–'}}</span>
+ <span class="component-viewer-header-measure-label">{{t 'component_viewer.header.debt'}}</span>
+ </div>
+ {{#if component.measures.fIssues}}
+ <div class="component-viewer-header-measure">
+ <span class="component-viewer-header-measure-value">{{component.measures.fIssues}}</span>
+ <span class="component-viewer-header-measure-label">{{t 'metric.violations.name'}}</span>
+ </div>
+ {{/if}}
+ {{#if component.measures.fIssues}}
<div class="component-viewer-header-measure">
- <span class="component-viewer-header-measure-value">{{default component.measures.fDuplicationDensity '–'}}</span>
- <span class="component-viewer-header-measure-label">{{t 'metric.duplicated_lines_density.name'}}</span>
+ <div class="component-viewer-header-measure-issues">
+ <div class="component-viewer-header-measure-issue s-blocker"
+ style="width: {{percent component.measures.fBlockerIssues component.measures.maxIssues}};"></div>
+ <div class="component-viewer-header-measure-issue s-critical"
+ style="width: {{percent component.measures.fCriticalIssues component.measures.maxIssues}};"></div>
+ <div class="component-viewer-header-measure-issue s-major"
+ style="width: {{percent component.measures.fMajorIssues component.measures.maxIssues}};"></div>
+ <div class="component-viewer-header-measure-issue s-minor"
+ style="width: {{percent component.measures.fMinorIssues component.measures.maxIssues}};"></div>
+ <div class="component-viewer-header-measure-issue s-info"
+ style="width: {{percent component.measures.fInfoIssues component.measures.maxIssues}};"></div>
+ </div>
</div>
+ {{/if}}
<i class="icon-dropdown"></i>
</a>
- <a data-scope="duplications" title="{{t 'component_viewer.header.toggle_duplications'}}"
- class="js-toggle-duplications component-viewer-header-measures-toggle-scope {{#if settings.duplications}}active{{/if}}"></a>
+ <a data-scope="issues" title="{{t 'component_viewer.header.toggle_issues'}}"
+ class="js-toggle-issues component-viewer-header-measures-toggle-scope {{#if settings.issues}}active{{/if}}"></a>
</div>
- {{/inArray}}
- {{#inArray state.tabs 'scm'}}
- <div class="component-viewer-header-measures-scope">
- <a data-scope="scm" class="component-viewer-header-measures-expand">
- <div class="component-viewer-header-measure">
- <span class="component-viewer-header-measure-value"><i class="icon-calendar"></i></span>
- <span class="component-viewer-header-measure-label">SCM</span>
- </div>
- <i class="icon-dropdown"></i>
- </a>
- <a data-scope="scm" title="{{t 'component_viewer.header.toggle_scm'}}"
- class="js-toggle-scm component-viewer-header-measures-toggle-scope {{#if settings.scm}}active{{/if}}"></a>
- </div>
- {{/inArray}}
- </div>
+ {{#inArray state.tabs 'coverage'}}
+ <div class="component-viewer-header-measures-scope">
+ <a data-scope="coverage" class="component-viewer-header-measures-expand">
+ <div class="component-viewer-header-measure">
+ <span class="component-viewer-header-measure-value">{{default component.measures.fCoverage '–'}}</span>
+ <span class="component-viewer-header-measure-label">{{t 'metric.coverage.name'}}</span>
+ </div>
+ <i class="icon-dropdown"></i>
+ </a>
+ <a data-scope="coverage" title="{{t 'component_viewer.header.toggle_coverage'}}"
+ class="js-toggle-coverage component-viewer-header-measures-toggle-scope {{#if settings.coverage}}active{{/if}}"></a>
+ </div>
+ {{/inArray}}
+
+ {{#inArray state.tabs 'duplications'}}
+ <div class="component-viewer-header-measures-scope">
+ <a data-scope="duplications" class="component-viewer-header-measures-expand">
+ <div class="component-viewer-header-measure">
+ <span class="component-viewer-header-measure-value">{{default component.measures.fDuplicationDensity '–'}}</span>
+ <span class="component-viewer-header-measure-label">{{t 'metric.duplicated_lines_density.name'}}</span>
+ </div>
+ <i class="icon-dropdown"></i>
+ </a>
+ <a data-scope="duplications" title="{{t 'component_viewer.header.toggle_duplications'}}"
+ class="js-toggle-duplications component-viewer-header-measures-toggle-scope {{#if settings.duplications}}active{{/if}}"></a>
+ </div>
+ {{/inArray}}
+
+ {{#inArray state.tabs 'scm'}}
+ <div class="component-viewer-header-measures-scope">
+ <a data-scope="scm" class="component-viewer-header-measures-expand">
+ <div class="component-viewer-header-measure">
+ <span class="component-viewer-header-measure-value"><i class="icon-calendar"></i></span>
+ <span class="component-viewer-header-measure-label">SCM</span>
+ </div>
+ <i class="icon-dropdown"></i>
+ </a>
+ <a data-scope="scm" title="{{t 'component_viewer.header.toggle_scm'}}"
+ class="js-toggle-scm component-viewer-header-measures-toggle-scope {{#if settings.scm}}active{{/if}}"></a>
+ </div>
+ {{/inArray}}
+ </div>
+ {{/unless}}
</div>
<div class="component-viewer-header-expanded-bar"></div>
\ No newline at end of file
-<div class="component-viewer-header-time-changes">
- <a class="highlighted-link js-coverage-time-changes">
- {{#if period}}Δ {{period.label}}{{else}}<i class="icon-period"></i> {{t 'component_viewer.time_changes'}}{{/if}}
- </a>
-</div>
+{{#if state.hasSource}}
+ <div class="component-viewer-header-time-changes">
+ <a class="highlighted-link js-coverage-time-changes">
+ {{#if period}}Δ {{period.label}}{{else}}<i class="icon-period"></i> {{t 'component_viewer.time_changes'}}{{/if}}
+ </a>
+ </div>
+{{/if}}
{{#with component.measures}}
{{#any coverage line_coverage lines_to_cover covered_lines uncovered_lines branch_coverage conditions_to_cover covered_conditions uncovered_conditions it_coverage it_line_coverage it_lines_to_cover it_covered_lines it_uncovered_lines it_branch_coverage it_conditions_to_cover it_covered_conditions it_uncovered_conditions}}
<ul class="component-viewer-header-expanded-bar-section-list">
{{{componentViewerHeaderItem coverage 'coverage'}}}
{{{componentViewerHeaderItem line_coverage 'line_coverage'}}}
- {{{componentViewerHeaderLink lines_to_cover 'lines_to_cover' 'js-filter-lines-to-cover'}}}
- {{{componentViewerHeaderLink uncovered_lines 'uncovered_lines' 'js-filter-uncovered-lines'}}}
+ {{#if ../../state.hasSource}}
+ {{{componentViewerHeaderLink lines_to_cover 'lines_to_cover' 'js-filter-lines-to-cover'}}}
+ {{{componentViewerHeaderLink uncovered_lines 'uncovered_lines' 'js-filter-uncovered-lines'}}}
+ {{else}}
+ {{{componentViewerHeaderItem lines_to_cover 'lines_to_cover'}}}
+ {{{componentViewerHeaderItem uncovered_lines 'uncovered_lines'}}}
+ {{/if}}
</ul>
</div>
{{/any}}
<li><span class="item"> </span></li>
{{/any}}
{{{componentViewerHeaderItem branch_coverage 'branch_coverage'}}}
- {{{componentViewerHeaderLink conditions_to_cover 'conditions_to_cover' 'js-filter-branches-to-cover'}}}
- {{{componentViewerHeaderLink uncovered_conditions 'uncovered_conditions' 'js-filter-uncovered-branches'}}}
+ {{#if ../../state.hasSource}}
+ {{{componentViewerHeaderLink conditions_to_cover 'conditions_to_cover' 'js-filter-branches-to-cover'}}}
+ {{{componentViewerHeaderLink uncovered_conditions 'uncovered_conditions' 'js-filter-uncovered-branches'}}}
+ {{else}}
+ {{{componentViewerHeaderItem conditions_to_cover 'conditions_to_cover'}}}
+ {{{componentViewerHeaderItem uncovered_conditions 'uncovered_conditions'}}}
+ {{/if}}
</ul>
</div>
{{/any}}
<ul class="component-viewer-header-expanded-bar-section-list">
{{{componentViewerHeaderItem it_coverage 'coverage'}}}
{{{componentViewerHeaderItem it_line_coverage 'line_coverage'}}}
- {{{componentViewerHeaderLink it_lines_to_cover 'lines_to_cover' 'js-filter-lines-to-cover-it'}}}
- {{{componentViewerHeaderLink it_uncovered_lines 'uncovered_lines' 'js-filter-uncovered-lines-it'}}}
+ {{#if ../../state.hasSource}}
+ {{{componentViewerHeaderLink it_lines_to_cover 'lines_to_cover' 'js-filter-lines-to-cover-it'}}}
+ {{{componentViewerHeaderLink it_uncovered_lines 'uncovered_lines' 'js-filter-uncovered-lines-it'}}}
+ {{else}}
+ {{{componentViewerHeaderItem it_lines_to_cover 'lines_to_cover'}}}
+ {{{componentViewerHeaderItem it_uncovered_lines 'uncovered_lines'}}}
+ {{/if}}
</ul>
</div>
{{/any}}
<li><span class="item"> </span></li>
{{/any}}
{{{componentViewerHeaderItem it_branch_coverage 'branch_coverage'}}}
- {{{componentViewerHeaderLink it_conditions_to_cover 'conditions_to_cover' 'js-filter-branches-to-cover-it'}}}
- {{{componentViewerHeaderLink it_uncovered_conditions 'uncovered_conditions' 'js-filter-uncovered-branches-it'}}}
+ {{#if ../../state.hasSource}}
+ {{{componentViewerHeaderLink it_conditions_to_cover 'conditions_to_cover' 'js-filter-branches-to-cover-it'}}}
+ {{{componentViewerHeaderLink it_uncovered_conditions 'uncovered_conditions' 'js-filter-uncovered-branches-it'}}}
+ {{else}}
+ {{{componentViewerHeaderItem it_conditions_to_cover 'conditions_to_cover'}}}
+ {{{componentViewerHeaderItem it_uncovered_conditions 'uncovered_conditions'}}}
+ {{/if}}
</ul>
</div>
{{/any}}
-<div class="component-viewer-header-time-changes">
- <a class="highlighted-link js-issues-time-changes">
- {{#if period}}{{t 'component_viewer.added'}} {{period.label}}{{else}}<i class="icon-period"></i> {{t 'component_viewer.time_changes'}}{{/if}}
- </a>
-</div>
+{{#if state.hasSource}}
+ <div class="component-viewer-header-time-changes">
+ <a class="highlighted-link js-issues-time-changes">
+ {{#if period}}{{t 'component_viewer.added'}} {{period.label}}{{else}}<i class="icon-period"></i> {{t 'component_viewer.time_changes'}}{{/if}}
+ </a>
+ </div>
+{{/if}}
{{#ifNotEmpty state.severities}}
<div class="component-viewer-header-expanded-bar-section">
</div>
<ul class="component-viewer-header-expanded-bar-section-list">
{{#each state.severities}}
- <li><a class="item js-filter-{{key}}-issues">
- <span>{{severityIcon key}} {{name}}</span>
- <span class="number">{{count}}</span>
- <i class="icon-chevron-right"></i>
- </a></li>
+ {{#if ../../state.hasSource}}
+ <li><a class="item js-filter-{{key}}-issues">
+ <span>{{severityIcon key}} {{name}}</span>
+ <span class="number">{{count}}</span>
+ <i class="icon-chevron-right"></i>
+ </a></li>
+ {{else}}
+ <li><span class="item">
+ <span>{{severityIcon key}} {{name}}</span>
+ <span class="number">{{count}}</span>
+ </span></li>
+ {{/if}}
{{/each}}
</ul>
</div>
</div>
<ul class="component-viewer-header-expanded-bar-section-list">
{{#each state.rules}}
- <li><a class="item js-filter-rule" data-rule="{{key}}" title="{{name}}">
- <span>{{name}}</span>
- <span class="number">{{count}}</span>
- <i class="icon-chevron-right"></i>
- </a></li>
+ {{#if ../../state.hasSource}}
+ <li><a class="item js-filter-rule" data-rule="{{key}}" title="{{name}}">
+ <span>{{name}}</span>
+ <span class="number">{{count}}</span>
+ <i class="icon-chevron-right"></i>
+ </a></li>
+ {{else}}
+ <li><span class="item">
+ <span>{{name}}</span>
+ <span class="number">{{count}}</span>
+ </span></li>
+ {{/if}}
{{/each}}
</ul>
</div>
<i class="icon-chevron-right"></i>
</a></li>
{{/if}}
- <li><a class="item js-filter-unresolved-issues">
- <span>{{t 'component_viewer.issues.unresolved_issues'}}</span>
- <i class="icon-chevron-right"></i>
- </a></li>
- <li><a class="item js-filter-fixed-issues">
- <span>{{t 'component_viewer.issues.fixed_issues'}}</span>
- <i class="icon-chevron-right"></i>
- </a></li>
- <li><a class="item js-filter-false-positive-issues">
- <span>{{t 'component_viewer.issues.false_positive_issues'}}</span>
- <span class="number">{{component.measures.false_positive_issues}}</span>
- <i class="icon-chevron-right"></i>
- </a></li>
+ {{#if state.hasSource}}
+ <li><a class="item js-filter-unresolved-issues">
+ <span>{{t 'component_viewer.issues.unresolved_issues'}}</span>
+ <i class="icon-chevron-right"></i>
+ </a></li>
+ {{/if}}
+ {{#if state.hasSource}}
+ <li><a class="item js-filter-fixed-issues">
+ <span>{{t 'component_viewer.issues.fixed_issues'}}</span>
+ <i class="icon-chevron-right"></i>
+ </a></li>
+ {{/if}}
+ {{#if state.hasSource}}
+ <li><a class="item js-filter-false-positive-issues">
+ <span>{{t 'component_viewer.issues.false_positive_issues'}}</span>
+ <span class="number">{{component.measures.false_positive_issues}}</span>
+ <i class="icon-chevron-right"></i>
+ </a></li>
+ {{else}}
+ {{#if component.measures.false_positive_issues}}
+ <li><span class="item">
+ <span>{{t 'component_viewer.issues.false_positive_issues'}}</span>
+ <span class="number">{{component.measures.false_positive_issues}}</span>
+ </span></li>
+ {{/if}}
+ {{/if}}
</ul>
</div>