diff options
author | Stas Vilchik <vilchiks@gmail.com> | 2014-03-04 15:11:54 +0100 |
---|---|---|
committer | Stas Vilchik <vilchiks@gmail.com> | 2014-03-04 15:11:54 +0100 |
commit | e86913bf2d7157ebab37312bfe5252c62fffc31a (patch) | |
tree | 10ffc649dcb7b65ecd5c57b7ef0a440543234c4f /sonar-server | |
parent | f69cb0b210aafe5bb9a5738920774261b5c0e000 (diff) | |
download | sonarqube-e86913bf2d7157ebab37312bfe5252c62fffc31a.tar.gz sonarqube-e86913bf2d7157ebab37312bfe5252c62fffc31a.zip |
SONAR-5083 Support of WORK_DUR
Diffstat (limited to 'sonar-server')
10 files changed, 188 insertions, 4 deletions
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb index 82205d6970b..c569bfe5a2d 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb @@ -54,6 +54,7 @@ <%= javascript_include_tag 'top-search' %> <%= javascript_include_tag 'sortable' %> + <%= javascript_include_tag 'common/inputs' %> <%= javascript_include_tag 'application' %> <%= javascript_include_tag 'dashboard' %> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/measures/search.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/measures/search.html.erb index 85391726a04..b02bf22edc0 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/measures/search.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/measures/search.html.erb @@ -60,6 +60,11 @@ '3': '<%= Api::Utils.period_label(3) -%>' }, favorites: <%= render :partial => 'measures/favourites2' -%>, + workDuration: { + days: '<%= message('work_duration.x_days') -%>', + hours: '<%= message('work_duration.x_hours') -%>', + minutes: '<%= message('work_duration.x_minutes') -%>' + }, phrases: { 'any': '<%= escape_javascript message('any') -%>', diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/quality_gates/index.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/quality_gates/index.html.erb index f8be9355257..ff814fc9ccb 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/quality_gates/index.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/quality_gates/index.html.erb @@ -27,6 +27,12 @@ { key: '3', text: '<%= Api::Utils.period_label(3) -%>' } ], + workDuration: { + days: '<%= message('work_duration.x_days') -%>', + hours: '<%= message('work_duration.x_hours') -%>', + minutes: '<%= message('work_duration.x_minutes') -%>' + }, + phrases: { areYouSure: '<%= message('are_you_sure') -%>', alerts: { diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/quality_gates/templates/_quality_gate_detail_condition_template.hbs.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/quality_gates/templates/_quality_gate_detail_condition_template.hbs.erb index 139f58b3454..0458e7e3571 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/quality_gates/templates/_quality_gate_detail_condition_template.hbs.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/quality_gates/templates/_quality_gate_detail_condition_template.hbs.erb @@ -26,7 +26,7 @@ <td width="15%"> <i class="icon-alert-warn" title="<%= message('alerts.warn_tooltip') -%>"></i> {{#if canEdit}} - <input name="warning" type="text" value="{{warning}}"> + <input name="warning" class="measure-input" data-type="{{metric.type}}" type="text"> {{else}} {{warning}} {{/if}} @@ -34,7 +34,7 @@ <td width="15%"> <i class="icon-alert-error" title="<%= message('alerts.error_tooltip') -%>"></i> {{#if canEdit}} - <input name="error" type="text" value="{{error}}"> + <input name="error" class="measure-input" data-type="{{metric.type}}" type="text"> {{else}} {{error}} {{/if}} diff --git a/sonar-server/src/main/webapp/javascripts/common/inputs.coffee b/sonar-server/src/main/webapp/javascripts/common/inputs.coffee new file mode 100644 index 00000000000..9431dcdc591 --- /dev/null +++ b/sonar-server/src/main/webapp/javascripts/common/inputs.coffee @@ -0,0 +1,71 @@ +$ = jQuery + +$ -> + + transformPattern = (pattern) -> + return pattern.replace /\{0\}/g, '(\\d+)' + + + convertWorkDuration = (value) -> + daysPattern = transformPattern window.SS.workDuration.days + hoursPattern = transformPattern window.SS.workDuration.hours + minutesPattern = transformPattern window.SS.workDuration.minutes + + days = value.match daysPattern + hours = value.match hoursPattern + minutes = value.match minutesPattern + + days = if days then +days[1] else 0 + hours = if hours then +hours[1] else 0 + minutes = if minutes then +minutes[1] else 0 + + if value && value.length > 0 && days == 0 && hours == 0 && minutes == 0 + value + else + (days * 8 + hours) * 60 + minutes + + + restoreWorkDuration = (value) -> + days = Math.floor(value / (8 * 60)) + hours = Math.floor((value - days * 8 * 60) / 60) + minutes = value % 60 + result = [] + result.push window.SS.workDuration.days.replace('{0}', days) if days > 0 + result.push window.SS.workDuration.hours.replace('{0}', hours) if hours > 0 + result.push window.SS.workDuration.minutes.replace('{0}', minutes) if minutes > 0 + result.join ' ' + + + convertValue = (value, input) -> + type = input.data 'type' + + # No convertation if input doesn't have data-type + return value unless type? + + # Do necessary convertion depeneds on input data-type + switch type + when 'WORK_DUR' then convertWorkDuration value + else value + + + restoreValue = (value, input) -> + type = input.data 'type' + + # No convertation if input doesn't have data-type + return value unless type? + + # Do necessary convertion depeneds on input data-type + switch type + when 'WORK_DUR' then restoreWorkDuration value + else value + + + originalVal = $.fn.val + $.fn.val = (value) -> + if arguments.length + originalVal.call @, (restoreValue value, @) + else + convertValue originalVal.call(@), @ + + $.fn.originalVal = originalVal + diff --git a/sonar-server/src/main/webapp/javascripts/common/inputs.js b/sonar-server/src/main/webapp/javascripts/common/inputs.js new file mode 100644 index 00000000000..53b0c9a0413 --- /dev/null +++ b/sonar-server/src/main/webapp/javascripts/common/inputs.js @@ -0,0 +1,83 @@ +// Generated by CoffeeScript 1.6.3 +(function() { + var $; + + $ = jQuery; + + $(function() { + var convertValue, convertWorkDuration, originalVal, restoreValue, restoreWorkDuration, transformPattern; + transformPattern = function(pattern) { + return pattern.replace(/\{0\}/g, '(\\d+)'); + }; + convertWorkDuration = function(value) { + var days, daysPattern, hours, hoursPattern, minutes, minutesPattern; + daysPattern = transformPattern(window.SS.workDuration.days); + hoursPattern = transformPattern(window.SS.workDuration.hours); + minutesPattern = transformPattern(window.SS.workDuration.minutes); + days = value.match(daysPattern); + hours = value.match(hoursPattern); + minutes = value.match(minutesPattern); + days = days ? +days[1] : 0; + hours = hours ? +hours[1] : 0; + minutes = minutes ? +minutes[1] : 0; + if (value && value.length > 0 && days === 0 && hours === 0 && minutes === 0) { + return value; + } else { + return (days * 8 + hours) * 60 + minutes; + } + }; + restoreWorkDuration = function(value) { + var days, hours, minutes, result; + days = Math.floor(value / (8 * 60)); + hours = Math.floor((value - days * 8 * 60) / 60); + minutes = value % 60; + result = []; + if (days > 0) { + result.push(window.SS.workDuration.days.replace('{0}', days)); + } + if (hours > 0) { + result.push(window.SS.workDuration.hours.replace('{0}', hours)); + } + if (minutes > 0) { + result.push(window.SS.workDuration.minutes.replace('{0}', minutes)); + } + return result.join(' '); + }; + convertValue = function(value, input) { + var type; + type = input.data('type'); + if (type == null) { + return value; + } + switch (type) { + case 'WORK_DUR': + return convertWorkDuration(value); + default: + return value; + } + }; + restoreValue = function(value, input) { + var type; + type = input.data('type'); + if (type == null) { + return value; + } + switch (type) { + case 'WORK_DUR': + return restoreWorkDuration(value); + default: + return value; + } + }; + originalVal = $.fn.val; + $.fn.val = function(value) { + if (arguments.length) { + return originalVal.call(this, restoreValue(value, this)); + } else { + return convertValue(originalVal.call(this), this); + } + }; + return $.fn.originalVal = originalVal; + }); + +}).call(this); diff --git a/sonar-server/src/main/webapp/javascripts/navigator/filters/metric-filters.js b/sonar-server/src/main/webapp/javascripts/navigator/filters/metric-filters.js index f86f90299bd..b97c557654f 100644 --- a/sonar-server/src/main/webapp/javascripts/navigator/filters/metric-filters.js +++ b/sonar-server/src/main/webapp/javascripts/navigator/filters/metric-filters.js @@ -17,12 +17,24 @@ define(['navigator/filters/base-filters', 'common/handlebars-extensions'], funct periodText: this.$('[name=period] option:selected').text(), op: this.$('[name=op]').val(), opText: this.$('[name=op] option:selected').text(), - val: this.$('[name=val]').val() + val: this.$('[name=val]').val(), + valText: this.$('[name=val]').originalVal() }; + this.updateDataType(value); this.model.set('value', value); }, + updateDataType: function(value) { + var metric = _.find(window.SS.metrics, function(m) { + return m.metric.name === value.metric; + }); + if (metric) { + this.$('[name=val]').data('type', metric.metric.val_type); + } + }, + + onRender: function() { var value = this.model.get('value') || {}; this.$('[name=metric]').val(value.metric).select2({ @@ -38,6 +50,7 @@ define(['navigator/filters/base-filters', 'common/handlebars-extensions'], funct placeholder: '=', minimumResultsForSearch: 100 }); + this.updateDataType(value); this.$('[name=val]').val(value.val); this.inputChanged(); }, @@ -88,7 +101,7 @@ define(['navigator/filters/base-filters', 'common/handlebars-extensions'], funct renderValue: function() { return this.isDefaultValue() ? window.SS.phrases.notSet : - this.model.get('value').metricText + ' ' + this.model.get('value').opText + ' ' + this.model.get('value').val; + this.model.get('value').metricText + ' ' + this.model.get('value').opText + ' ' + this.model.get('value').valText; }, diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.coffee b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.coffee index f4d5125946a..f60bd4439a1 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.coffee +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.coffee @@ -47,6 +47,8 @@ define [ onRender: -> @ui.periodSelect.val @model.get('period') || '0' @ui.operatorSelect.val @model.get('op') + @ui.warningInput.val @model.get('warning') + @ui.errorInput.val @model.get('error') @ui.periodSelect.select2 allowClear: false diff --git a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.js b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.js index 53c44c0fe63..6e29ecc2db1 100644 --- a/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.js +++ b/sonar-server/src/main/webapp/javascripts/quality-gate/views/quality-gate-detail-condition-view.js @@ -61,6 +61,8 @@ QualityGateDetailConditionView.prototype.onRender = function() { this.ui.periodSelect.val(this.model.get('period') || '0'); this.ui.operatorSelect.val(this.model.get('op')); + this.ui.warningInput.val(this.model.get('warning')); + this.ui.errorInput.val(this.model.get('error')); this.ui.periodSelect.select2({ allowClear: false, minimumResultsForSearch: 999, diff --git a/sonar-server/wro.xml b/sonar-server/wro.xml index 7ab7264464d..3bcadf2a340 100644 --- a/sonar-server/wro.xml +++ b/sonar-server/wro.xml @@ -33,6 +33,7 @@ <js>/javascripts/top-search.js</js> <js>/javascripts/sortable.js</js> + <js>/javascripts/common/inputs.js</js> <js>/javascripts/application.js</js> <js>/javascripts/dashboard.js</js> |