Explorar el Código

SONAR-6748 Display a warning when open non-existent file/rule

tags/5.2-RC1
Stas Vilchik hace 8 años
padre
commit
c884d61860

+ 13
- 2
server/sonar-web/src/main/js/components/source-viewer/main.js Ver fichero

@@ -158,8 +158,19 @@ define([
requestComponent: function () {
var that = this,
url = baseUrl + '/api/components/app',
options = { uuid: this.model.id };
return $.get(url, options).done(function (data) {
data = { uuid: this.model.id };
return $.ajax({
type: 'GET',
url: url,
data: data,
statusCode: {
404: function () {
that.model.set({ exist: false });
that.render();
that.trigger('loaded');
}
}
}).done(function (data) {
that.model.set(data);
that.model.set({ isUnitTest: data.q === 'UTS' });
});

+ 2
- 0
server/sonar-web/src/main/js/components/source-viewer/source.js Ver fichero

@@ -24,6 +24,8 @@ define(function () {

defaults: function () {
return {
exist: true,

hasSource: false,
hasCoverage: false,
hasITCoverage: false,

+ 85
- 75
server/sonar-web/src/main/js/components/source-viewer/templates/source-viewer.hbs Ver fichero

@@ -2,93 +2,103 @@

{{#if canSeeCode}}

{{#if hasSourceBefore}}
<i class="spinner js-component-viewer-source-before"></i>
{{/if}}
{{#if exist}}

<table class="source-table">
{{#each source}}
<tr class="source-line {{#eq line 0}}{{#empty issues}}hidden{{/empty}}{{/eq}}" {{#if line}}data-line-number="{{line}}"{{/if}}>
<td class="source-meta source-line-number" {{#if line}}data-line-number="{{line}}"{{/if}}></td>

<td class="source-meta source-line-scm" {{#if line}}data-line-number="{{line}}"{{/if}}>
{{#ifSCMChanged2 ../source line}}
<div class="source-line-scm-inner" data-author="{{scmAuthor}}"></div>
{{/ifSCMChanged2}}
</td>

{{#if ../hasUTCoverage}}
<td class="source-meta source-line-coverage {{#notNull utCoverageStatus}}source-line-{{utCoverageStatus}}{{/notNull}}"
data-tests="ut"
data-line-number="{{line}}" {{#notNull utCoverageStatus}}title="{{t 'source_viewer.tooltip.ut' utCoverageStatus}}" data-placement="right" data-toggle="tooltip"{{/notNull}}>
<div class="source-line-bar"></div>
{{#if hasSourceBefore}}
<i class="spinner js-component-viewer-source-before"></i>
{{/if}}

<table class="source-table">
{{#each source}}
<tr class="source-line {{#eq line 0}}{{#empty issues}}hidden{{/empty}}{{/eq}}" {{#if line}}data-line-number="{{line}}"{{/if}}>
<td class="source-meta source-line-number" {{#if line}}data-line-number="{{line}}"{{/if}}></td>

<td class="source-meta source-line-scm" {{#if line}}data-line-number="{{line}}"{{/if}}>
{{#ifSCMChanged2 ../source line}}
<div class="source-line-scm-inner" data-author="{{scmAuthor}}"></div>
{{/ifSCMChanged2}}
</td>
{{/if}}

{{#if ../hasITCoverage}}
<td class="source-meta source-line-coverage {{#notNull itCoverageStatus}}source-line-{{itCoverageStatus}}{{/notNull}}"
data-tests="it"
data-line-number="{{line}}" {{#notNull itCoverageStatus}}title="{{t 'source_viewer.tooltip.it' itCoverageStatus}}" data-placement="right" data-toggle="tooltip"{{/notNull}}>
<div class="source-line-bar"></div>
{{#if ../hasUTCoverage}}
<td class="source-meta source-line-coverage {{#notNull utCoverageStatus}}source-line-{{utCoverageStatus}}{{/notNull}}"
data-tests="ut"
data-line-number="{{line}}" {{#notNull utCoverageStatus}}title="{{t 'source_viewer.tooltip.ut' utCoverageStatus}}" data-placement="right" data-toggle="tooltip"{{/notNull}}>
<div class="source-line-bar"></div>
</td>
{{/if}}

{{#if ../hasITCoverage}}
<td class="source-meta source-line-coverage {{#notNull itCoverageStatus}}source-line-{{itCoverageStatus}}{{/notNull}}"
data-tests="it"
data-line-number="{{line}}" {{#notNull itCoverageStatus}}title="{{t 'source_viewer.tooltip.it' itCoverageStatus}}" data-placement="right" data-toggle="tooltip"{{/notNull}}>
<div class="source-line-bar"></div>
</td>
{{/if}}

{{#if ../hasDuplications}}
<td class="source-meta source-line-duplications {{#if duplicated}}source-line-duplicated{{/if}}"
{{#if duplicated}}title="{{t 'source_viewer.tooltip.duplicated_line'}}" data-placement="right" data-toggle="tooltip"{{/if}}>
<div class="source-line-bar"></div>
</td>

{{#each duplications}}
<td class="source-meta source-line-duplications-extra {{#if this}}source-line-duplicated{{/if}}"
data-index="{{this}}" data-line-number="{{../line}}"
{{#if this}}title="{{t 'source_viewer.tooltip.duplicated_block'}}" data-placement="right" data-toggle="tooltip"{{/if}}>
<div class="source-line-bar"></div>
</td>
{{/each}}
{{/if}}

<td class="source-meta source-line-issues {{#notEmpty issues}}source-line-with-issues{{/notEmpty}}"
data-line-number="{{line}}">
{{#withFirst issues}}
{{severityIcon severity}}
{{/withFirst}}
{{#ifLengthGT issues 1}}
<span class="source-line-issues-counter">{{length issues}}</span>
{{/ifLengthGT}}
</td>
{{/if}}

{{#if ../hasDuplications}}
<td class="source-meta source-line-duplications {{#if duplicated}}source-line-duplicated{{/if}}"
{{#if duplicated}}title="{{t 'source_viewer.tooltip.duplicated_line'}}" data-placement="right" data-toggle="tooltip"{{/if}}>
<td class="source-meta source-line-filtered-container" data-line-number="{{line}}">
<div class="source-line-bar"></div>
</td>

{{#each duplications}}
<td class="source-meta source-line-duplications-extra {{#if this}}source-line-duplicated{{/if}}"
data-index="{{this}}" data-line-number="{{../line}}"
{{#if this}}title="{{t 'source_viewer.tooltip.duplicated_block'}}" data-placement="right" data-toggle="tooltip"{{/if}}>
<div class="source-line-bar"></div>
</td>
{{/each}}
{{/if}}

<td class="source-meta source-line-issues {{#notEmpty issues}}source-line-with-issues{{/notEmpty}}"
data-line-number="{{line}}">
{{#withFirst issues}}
{{severityIcon severity}}
{{/withFirst}}
{{#ifLengthGT issues 1}}
<span class="source-line-issues-counter">{{length issues}}</span>
{{/ifLengthGT}}
</td>

<td class="source-meta source-line-filtered-container" data-line-number="{{line}}">
<div class="source-line-bar"></div>
</td>

<td class="source-line-code code {{#notEmpty issues}}has-issues{{/notEmpty}}" data-line-number="{{line}}">
<div class="source-line-code-inner">
{{#notNull code}}
<pre>{{{codeWithIssueLocations code issueLocations}}}</pre>
{{/notNull}}

<div class="source-line-issue-locations"></div>
</div>

{{#notEmpty issues}}
<div class="issue-list">
{{#each issues}}
<div class="issue" id="issue-{{key}}"></div>
{{/each}}
<td class="source-line-code code {{#notEmpty issues}}has-issues{{/notEmpty}}" data-line-number="{{line}}">
<div class="source-line-code-inner">
{{#notNull code}}
<pre>{{{codeWithIssueLocations code issueLocations}}}</pre>
{{/notNull}}

<div class="source-line-issue-locations"></div>
</div>
{{/notEmpty}}
</td>
</tr>
{{/each}}
</table>

{{#if hasSourceAfter}}
<i class="spinner js-component-viewer-source-after"></i>

{{#notEmpty issues}}
<div class="issue-list">
{{#each issues}}
<div class="issue" id="issue-{{key}}"></div>
{{/each}}
</div>
{{/notEmpty}}
</td>
</tr>
{{/each}}
</table>

{{#if hasSourceAfter}}
<i class="spinner js-component-viewer-source-after"></i>
{{/if}}

{{else}}

{{! does not exist }}
<div class="alert alert-warning spacer-top">{{t 'component_viewer.no_component'}}</div>

{{/if}}

{{else}}

<div class="alert alert-warning">{{t 'code_viewer.no_source_code_displayed_due_to_security'}}</div>
{{! can't see code }}
<div class="alert alert-warning spacer-top">{{t 'code_viewer.no_source_code_displayed_due_to_security'}}</div>

{{/if}}

+ 8
- 3
server/sonar-web/src/main/js/components/workspace/main.js Ver fichero

@@ -119,9 +119,14 @@ define([

showRule: function (model) {
var that = this;
this.fetchRule(model).done(function () {
that.showViewer(RuleView, model);
});
this.fetchRule(model)
.done(function () {
model.set({ exist: true });
that.showViewer(RuleView, model);
}).fail(function () {
model.set({ exist: false });
that.showViewer(RuleView, model);
});
},

fetchRule: function (model) {

+ 55
- 46
server/sonar-web/src/main/js/components/workspace/templates/workspace-rule.hbs Ver fichero

@@ -2,64 +2,73 @@

<div class="workspace-viewer-container">

<ul class="coding-rules-detail-properties">
{{#if severity}}
{{#unless isManual}}
<li class="coding-rules-detail-property"
data-toggle="tooltip" data-placement="bottom" title="Default rule severity">
{{severityIcon severity}}&nbsp;{{t "severity" severity}}
</li>
{{/unless}}
{{/if}}
{{#if exist}}

{{#notEq status 'READY'}}
<li class="coding-rules-detail-property"
data-toggle="tooltip" data-placement="bottom" title="Rule status">{{status}}</li>
{{/notEq}}
<ul class="coding-rules-detail-properties">
{{#if severity}}
{{#unless isManual}}
<li class="coding-rules-detail-property"
data-toggle="tooltip" data-placement="bottom" title="Default rule severity">
{{severityIcon severity}}&nbsp;{{t "severity" severity}}
</li>
{{/unless}}
{{/if}}

<li class="coding-rules-detail-property coding-rules-detail-tag-list {{#if canWrite}}coding-rules-detail-tags-change{{/if}}"
data-toggle="tooltip" data-placement="bottom" title="Rule tags">
<i class="icon-tags"></i>
<span>{{#if allTags}}{{join allTags ', '}}{{else}}{{t 'coding_rules.no_tags'}}{{/if}}</span>
</li>
{{#notEq status 'READY'}}
<li class="coding-rules-detail-property"
data-toggle="tooltip" data-placement="bottom" title="Rule status">{{status}}</li>
{{/notEq}}

<li class="coding-rules-detail-property">{{t 'coding_rules.available_since'}} {{d createdAt}}</li>
<li class="coding-rules-detail-property coding-rules-detail-tag-list {{#if canWrite}}coding-rules-detail-tags-change{{/if}}"
data-toggle="tooltip" data-placement="bottom" title="Rule tags">
<i class="icon-tags"></i>
<span>{{#if allTags}}{{join allTags ', '}}{{else}}{{t 'coding_rules.no_tags'}}{{/if}}</span>
</li>

<li class="pull-right spacer-left">
<a class="icon-link" target="_blank" href="{{rulePermalink key}}"></a>
</li>
<li class="coding-rules-detail-property">{{t 'coding_rules.available_since'}} {{d createdAt}}</li>

<li class="pull-right">
<span class="note">{{key}}</span>
</li>
</ul>
<li class="pull-right spacer-left">
<a class="icon-link" target="_blank" href="{{rulePermalink key}}"></a>
</li>

{{#if debtCharName}}
<ul class="coding-rules-detail-properties">
<li class="coding-rules-detail-property"
data-toggle="tooltip" data-placement="bottom" title="Rule characteristic">
{{debtCharName}}{{#if debtSubCharName}} > {{debtSubCharName}}{{/if}}
<li class="pull-right">
<span class="note">{{key}}</span>
</li>
</ul>

{{#if debtRemFnType}}
{{#if debtCharName}}
<ul class="coding-rules-detail-properties">
<li class="coding-rules-detail-property"
data-toggle="tooltip" data-placement="bottom" title="{{t 'coding_rules.remediation_function'}}">
{{t 'coding_rules.remediation_function' debtRemFnType}}:

{{#if debtRemFnOffset}}{{debtRemFnOffset}}{{/if}}
{{#if debtRemFnCoeff}}{{#if debtRemFnOffset}}+{{/if}}{{debtRemFnCoeff}}{{/if}}
{{#if effortToFixDescription}}{{effortToFixDescription}}{{/if}}
data-toggle="tooltip" data-placement="bottom" title="Rule characteristic">
{{debtCharName}}{{#if debtSubCharName}} > {{debtSubCharName}}{{/if}}
</li>
{{/if}}
</ul>
{{/if}}

<div class="coding-rules-detail-description rule-desc markdown">{{{htmlDesc}}}</div>
{{#if debtRemFnType}}
<li class="coding-rules-detail-property"
data-toggle="tooltip" data-placement="bottom" title="{{t 'coding_rules.remediation_function'}}">
{{t 'coding_rules.remediation_function' debtRemFnType}}:

{{#if debtRemFnOffset}}{{debtRemFnOffset}}{{/if}}
{{#if debtRemFnCoeff}}{{#if debtRemFnOffset}}+{{/if}}{{debtRemFnCoeff}}{{/if}}
{{#if effortToFixDescription}}{{effortToFixDescription}}{{/if}}
</li>
{{/if}}
</ul>
{{/if}}

<div class="coding-rules-detail-description rule-desc markdown">{{{htmlDesc}}}</div>

{{#if htmlNote}}
<div id="coding-rules-detail-description-extra">
<div class="rule-desc markdown">{{{htmlNote}}}</div>
</div>
{{/if}}

{{else}}

{{! does not exist}}
<div class="alert alert-warning">{{t 'workspace.no_rule'}}</div>

{{#if htmlNote}}
<div id="coding-rules-detail-description-extra">
<div class="rule-desc markdown">{{{htmlNote}}}</div>
</div>
{{/if}}

</div>

+ 2
- 0
sonar-core/src/main/resources/org/sonar/l10n/core.properties Ver fichero

@@ -2973,6 +2973,7 @@ component_viewer.issues_limit_reached_tooltip={0}\n\nRefine your filter to be ab
component_viewer.cannot_show=We're sorry, but something went wrong. Please try back in a few minutes and contact support if the problem persists.
component_viewer.show_details=Show Details
component_viewer.show_all_measures=Show all measures
component_viewer.no_component=The component has been removed or never existed.

component_viewer.workspace=Workspace
component_viewer.workspace.tooltip=Keeps track of history of navigation
@@ -3020,6 +3021,7 @@ workspace.minimize=Minimize
workspace.full_window=Expand to full window
workspace.normal_size=Collapse to normal size
workspace.close=Remove from the list of pinned files
workspace.no_rule=The rule has been removed or never existed.




Cargando…
Cancelar
Guardar