Merge branch 'feature-fixes'
This commit is contained in:
commit
00744c269b
|
@ -94,8 +94,11 @@ Type=simple
|
|||
ExecStart=/your/path/bin/console php-censor:worker
|
||||
Restart=always
|
||||
|
||||
User=php-censor #Could be changed
|
||||
Group=php-censor #Could be changed
|
||||
#Could be changed
|
||||
User=php-censor
|
||||
|
||||
#Could be changed
|
||||
Group=php-censor
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
var PHPCensor = {
|
||||
intervals: {},
|
||||
|
||||
|
@ -12,10 +11,10 @@ var PHPCensor = {
|
|||
if (typeof PROJECT_ID != 'undefined') {
|
||||
PHPCensor.intervals.getProjectBuilds = setInterval(PHPCensor.getProjectBuilds, 10000);
|
||||
}
|
||||
|
||||
|
||||
if (typeof DASHBOARD != 'undefined') {
|
||||
PHPCensor.intervals.getDashboard = setInterval(PHPCensor.getDashboard, 10000);
|
||||
PHPCensor.intervals.getTimeline = setInterval(PHPCensor.getTimeline, 10000);
|
||||
PHPCensor.intervals.getTimeline = setInterval(PHPCensor.getTimeline, 10000);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -49,7 +48,7 @@ var PHPCensor = {
|
|||
},
|
||||
|
||||
getDashboard: function () {
|
||||
$('.project-box').each(function(index) {
|
||||
$('.project-box').each(function (index) {
|
||||
var projectId = this.id.substring(12);
|
||||
|
||||
$.ajax({
|
||||
|
@ -165,10 +164,10 @@ if (!Function.prototype.bind) {
|
|||
function confirmDelete(url, reloadAfter) {
|
||||
|
||||
var dialog = new PHPCensorConfirmDialog({
|
||||
title: Lang.get('confirm_title'),
|
||||
message: Lang.get('confirm_message'),
|
||||
title: Lang.get('confirm_title'),
|
||||
message: Lang.get('confirm_message'),
|
||||
confirmBtnCaption: Lang.get('confirm_ok'),
|
||||
cancelBtnCaption: Lang.get('confirm_cancel'),
|
||||
cancelBtnCaption: Lang.get('confirm_cancel'),
|
||||
/*
|
||||
confirm-btn click handler
|
||||
*/
|
||||
|
@ -296,7 +295,9 @@ var PHPCensorConfirmDialog = Class.extend({
|
|||
/*
|
||||
Bind the close event of the dialog to the set of onClose* methods
|
||||
*/
|
||||
this.$dialog.on('hidden.bs.modal', function () {this.onClose()}.bind(this));
|
||||
this.$dialog.on('hidden.bs.modal', function () {
|
||||
this.onClose()
|
||||
}.bind(this));
|
||||
this.$dialog.on('hidden.bs.modal', function () {
|
||||
if (this.confirmed) {
|
||||
this.onCloseConfirmed();
|
||||
|
@ -336,17 +337,20 @@ var PHPCensorConfirmDialog = Class.extend({
|
|||
/**
|
||||
* Called only when confirmed dialog was closed
|
||||
*/
|
||||
onCloseConfirmed: function () {},
|
||||
onCloseConfirmed: function () {
|
||||
},
|
||||
|
||||
/**
|
||||
* Called only when canceled dialog was closed
|
||||
*/
|
||||
onCloseCanceled: function () {},
|
||||
onCloseCanceled: function () {
|
||||
},
|
||||
|
||||
/**
|
||||
* Called always when the dialog was closed
|
||||
*/
|
||||
onClose: function () {},
|
||||
onClose: function () {
|
||||
},
|
||||
|
||||
showStatusMessage: function (message, closeTimeout) {
|
||||
this.$confirmBtn.hide();
|
||||
|
@ -371,13 +375,11 @@ var PHPCensorConfirmDialog = Class.extend({
|
|||
/**
|
||||
* Used to initialise the project form:
|
||||
*/
|
||||
function setupProjectForm()
|
||||
{
|
||||
function setupProjectForm() {
|
||||
$('.github-container').hide();
|
||||
|
||||
$('#element-reference').change(function()
|
||||
{
|
||||
var el = $(this);
|
||||
$('#element-reference').change(function () {
|
||||
var el = $(this);
|
||||
var val = el.val();
|
||||
var type = $('#element-type').val();
|
||||
var acceptable = {
|
||||
|
@ -394,16 +396,16 @@ function setupProjectForm()
|
|||
|
||||
};
|
||||
|
||||
if( acceptable[type] !== undefined ) {
|
||||
for(var i in acceptable[type]) {
|
||||
if(val.match(acceptable[type][i])) {
|
||||
if (acceptable[type] !== undefined) {
|
||||
for (var i in acceptable[type]) {
|
||||
if (val.match(acceptable[type][i])) {
|
||||
el.val(val.replace(acceptable[type][i], '$1'));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('#element-type').change(function() {
|
||||
$('#element-type').change(function () {
|
||||
if ($(this).val() == 'github') {
|
||||
$('#loading').show();
|
||||
|
||||
|
@ -432,10 +434,10 @@ function setupProjectForm()
|
|||
$('#element-reference').trigger('change');
|
||||
});
|
||||
|
||||
$('#element-github').change(function() {
|
||||
$('#element-github').change(function () {
|
||||
var val = $('#element-github').val();
|
||||
|
||||
if(val != 'choose') {
|
||||
if (val != 'choose') {
|
||||
$('#element-type').val('github');
|
||||
$('#element-reference').val(val);
|
||||
|
||||
|
@ -457,7 +459,8 @@ function setupProjectForm()
|
|||
|
||||
var Lang = {
|
||||
get: function () {
|
||||
var args = Array.prototype.slice.call(arguments);;
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
;
|
||||
var string = args.shift();
|
||||
|
||||
if (STRINGS[string]) {
|
||||
|
|
|
@ -1,44 +1,48 @@
|
|||
var codeceptionPlugin = ActiveBuild.UiPlugin.extend({
|
||||
id: 'build-codeception-errors',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('codeception'),
|
||||
lastData: null,
|
||||
lastMeta: null,
|
||||
id: 'build-codeception-errors',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('codeception'),
|
||||
lastData: null,
|
||||
lastMeta: null,
|
||||
displayOnUpdate: false,
|
||||
rendered: false,
|
||||
rendered: false,
|
||||
|
||||
register: function() {
|
||||
var self = this;
|
||||
var query_data = ActiveBuild.registerQuery('codeception-data', -1, {key: 'codeception-data'});
|
||||
register: function () {
|
||||
var self = this;
|
||||
var query_data = ActiveBuild.registerQuery('codeception-data', -1, {key: 'codeception-data'});
|
||||
var query_meta_data = ActiveBuild.registerQuery('codeception-meta', -1, {key: 'codeception-meta'});
|
||||
|
||||
$(window).on('codeception-data', function(data) {
|
||||
$(window).on('codeception-data', function (data) {
|
||||
self.onUpdateData(data);
|
||||
});
|
||||
|
||||
$(window).on('codeception-meta', function(data) {
|
||||
$(window).on('codeception-meta', function (data) {
|
||||
self.onUpdateMeta(data);
|
||||
});
|
||||
|
||||
$(window).on('build-updated', function() {
|
||||
$(window).on('build-updated', function () {
|
||||
if (!self.rendered) {
|
||||
self.displayOnUpdate = true;
|
||||
|
||||
query_data();
|
||||
query_meta_data();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
render: function () {
|
||||
return $('<table class="table table-hover" id="codeception-data">' +
|
||||
'<thead>' +
|
||||
'<tr><th>'+Lang.get('codeception_suite')+'</th>' +
|
||||
'<th>'+Lang.get('codeception_feature')+'</th>' +
|
||||
'<th>'+Lang.get('codeception_time')+'</th></tr>' +
|
||||
'<tr><th>' + Lang.get('status') + '</th>' +
|
||||
'<th>' + Lang.get('codeception_suite') + '</th>' +
|
||||
'<th>' + Lang.get('codeception_feature') + '</th>' +
|
||||
'<th>' + Lang.get('file') + '</th>' +
|
||||
'<th>' + Lang.get('message') + '</th>' +
|
||||
'<th>' + Lang.get('codeception_time') + '</th></tr>' +
|
||||
'</thead><tbody></tbody><tfoot></tfoot></table>');
|
||||
},
|
||||
|
||||
onUpdateData: function(e) {
|
||||
onUpdateData: function (e) {
|
||||
if (!e.queryData) {
|
||||
$('#build-codeception-errors').hide();
|
||||
return;
|
||||
|
@ -49,6 +53,7 @@ var codeceptionPlugin = ActiveBuild.UiPlugin.extend({
|
|||
|
||||
var tests = this.lastData[0].meta_value;
|
||||
var tbody = $('#codeception-data tbody');
|
||||
|
||||
tbody.empty();
|
||||
|
||||
if (tests.length == 0) {
|
||||
|
@ -57,35 +62,22 @@ var codeceptionPlugin = ActiveBuild.UiPlugin.extend({
|
|||
}
|
||||
|
||||
for (var i in tests) {
|
||||
|
||||
var rows = $('<tr data-toggle="collapse" data-target="#collapse'+i+'">' +
|
||||
'<td><strong>'+tests[i].suite+'</strong</td>' +
|
||||
'<td>'+tests[i].feature+'</td>' +
|
||||
'<td>'+tests[i].time+'</td>'+
|
||||
'</tr>' +
|
||||
'<tr id="collapse'+i+'" class="collapse" >' +
|
||||
'<td></td><td colspan="2">' +
|
||||
'<small><strong>'+Lang.get('name')+':</strong> '+tests[i].name+'</small><br />' +
|
||||
'<small><strong>'+Lang.get('file')+':</strong> '+tests[i].file+'</small><br />' +
|
||||
(tests[i].message
|
||||
? '<small><strong>'+Lang.get('message')+':</strong> '+tests[i].message+'</small>'
|
||||
: '') +
|
||||
'</td>' +
|
||||
var rows = $('<tr>' +
|
||||
'<td>' + (tests[i].pass ? '<span class="label label-success">' + Lang.get('success') + '</span>' : '<span class="label label-danger">' + Lang.get('failed') + '</span>') + '</td>' +
|
||||
'<td>' + tests[i].suite + '</td>' +
|
||||
'<td>' + tests[i].feature + '</td>' +
|
||||
'<td>' + tests[i].file + '</td>' +
|
||||
'<td>' + ((tests[i].message) ? tests[i].message : '') + '</td>' +
|
||||
'<td>' + tests[i].time + '</td>' +
|
||||
'</tr>');
|
||||
|
||||
if (!tests[i].pass) {
|
||||
rows.first().addClass('danger');
|
||||
} else {
|
||||
rows.first().addClass('success');
|
||||
}
|
||||
|
||||
tbody.append(rows);
|
||||
}
|
||||
|
||||
$('#build-codeception-errors').show();
|
||||
},
|
||||
|
||||
onUpdateMeta: function(e) {
|
||||
onUpdateMeta: function (e) {
|
||||
if (!e.queryData) {
|
||||
return;
|
||||
}
|
||||
|
@ -95,8 +87,9 @@ var codeceptionPlugin = ActiveBuild.UiPlugin.extend({
|
|||
|
||||
this.lastMeta = e.queryData;
|
||||
|
||||
var data = this.lastMeta[0].meta_value;
|
||||
var data = this.lastMeta[0].meta_value;
|
||||
var tfoot = $('#codeception-data tfoot');
|
||||
|
||||
tfoot.empty();
|
||||
|
||||
var row = $('<tr>' +
|
||||
|
|
|
@ -1,30 +1,31 @@
|
|||
var locPlugin = ActiveBuild.UiPlugin.extend({
|
||||
id: 'build-lines-chart',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('lines_of_code'),
|
||||
lastData: null,
|
||||
id: 'build-lines-chart',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('lines_of_code'),
|
||||
lastData: null,
|
||||
displayOnUpdate: false,
|
||||
rendered: false,
|
||||
chartData: null,
|
||||
rendered: false,
|
||||
chartData: null,
|
||||
|
||||
register: function() {
|
||||
var self = this;
|
||||
register: function () {
|
||||
var self = this;
|
||||
var query = ActiveBuild.registerQuery('phploc-lines', -1, {num_builds: 10, key: 'phploc'})
|
||||
|
||||
$(window).on('phploc-lines', function(data) {
|
||||
$(window).on('phploc-lines', function (data) {
|
||||
self.onUpdate(data);
|
||||
});
|
||||
|
||||
$(window).on('build-updated', function(data) {
|
||||
$(window).on('build-updated', function (data) {
|
||||
if (data.queryData && data.queryData.status > 1 && !self.rendered) {
|
||||
query();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var self = this;
|
||||
render: function () {
|
||||
var self = this;
|
||||
var container = $('<div id="phploc-lines" style="width: 100%; height: 300px"></div>');
|
||||
|
||||
container.append('<canvas id="phploc-lines-chart" style="width: 100%; height: 300px"></canvas>');
|
||||
|
||||
$(document).on('shown.bs.tab', function () {
|
||||
|
@ -35,42 +36,42 @@ var locPlugin = ActiveBuild.UiPlugin.extend({
|
|||
return container;
|
||||
},
|
||||
|
||||
onUpdate: function(e) {
|
||||
onUpdate: function (e) {
|
||||
this.lastData = e.queryData;
|
||||
this.displayChart();
|
||||
},
|
||||
|
||||
displayChart: function() {
|
||||
var self = this;
|
||||
var builds = this.lastData;
|
||||
displayChart: function () {
|
||||
var self = this;
|
||||
var builds = this.lastData;
|
||||
self.rendered = true;
|
||||
|
||||
self.chartData = {
|
||||
labels: [],
|
||||
labels: [],
|
||||
datasets: [
|
||||
{
|
||||
label: Lang.get('lines'),
|
||||
strokeColor: "rgba(60,141,188,1)",
|
||||
pointColor: "rgba(60,141,188,1)",
|
||||
data: []
|
||||
label: Lang.get('lines'),
|
||||
strokeColor: "#555299",
|
||||
pointColor: "#555299",
|
||||
data: []
|
||||
},
|
||||
{
|
||||
label: Lang.get('logical_lines'),
|
||||
strokeColor: "rgba(245,105,84,1)",
|
||||
pointColor: "rgba(245,105,84,1)",
|
||||
data: []
|
||||
label: Lang.get('logical_lines'),
|
||||
strokeColor: "#00A65A",
|
||||
pointColor: "#00A65A",
|
||||
data: []
|
||||
},
|
||||
{
|
||||
label: Lang.get('comment_lines'),
|
||||
strokeColor: "rgba(0,166,90,1)",
|
||||
pointColor: "rgba(0,166,90,1)",
|
||||
data: []
|
||||
label: Lang.get('comment_lines'),
|
||||
strokeColor: "#8AA4AF",
|
||||
pointColor: "#8AA4AF",
|
||||
data: []
|
||||
},
|
||||
{
|
||||
label: Lang.get('noncomment_lines'),
|
||||
strokeColor: "rgba(0,192,239,1)",
|
||||
pointColor: "rgba(0,192,239,1)",
|
||||
data: []
|
||||
label: Lang.get('noncomment_lines'),
|
||||
strokeColor: "#00A7D0",
|
||||
pointColor: "#00A7D0",
|
||||
data: []
|
||||
}
|
||||
]
|
||||
};
|
||||
|
@ -98,7 +99,7 @@ var locPlugin = ActiveBuild.UiPlugin.extend({
|
|||
Chart.defaults.global.responsive = true;
|
||||
|
||||
phpLocChart.Line(self.chartData, {
|
||||
datasetFill: false,
|
||||
datasetFill: false,
|
||||
multiTooltipTemplate: "<%=datasetLabel%>: <%= value %>"
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,40 +1,43 @@
|
|||
var phpspecPlugin = ActiveBuild.UiPlugin.extend({
|
||||
id: 'build-phpspec-errors',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('phpspec'),
|
||||
lastData: null,
|
||||
id: 'build-phpspec-errors',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('phpspec'),
|
||||
lastData: null,
|
||||
displayOnUpdate: false,
|
||||
rendered: false,
|
||||
rendered: false,
|
||||
|
||||
register: function() {
|
||||
var self = this;
|
||||
register: function () {
|
||||
var self = this;
|
||||
var query = ActiveBuild.registerQuery('phpspec', -1, {key: 'phpspec'})
|
||||
|
||||
$(window).on('phpspec', function(data) {
|
||||
$(window).on('phpspec', function (data) {
|
||||
self.onUpdate(data);
|
||||
});
|
||||
|
||||
$(window).on('build-updated', function() {
|
||||
$(window).on('build-updated', function () {
|
||||
if (!self.rendered) {
|
||||
self.displayOnUpdate = true;
|
||||
|
||||
query();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
render: function () {
|
||||
|
||||
return $('<table class="table table-striped" id="phpspec-data">' +
|
||||
return $('<table class="table table-hover" id="phpspec-data">' +
|
||||
'<thead>' +
|
||||
'<tr>' +
|
||||
' <th>'+Lang.get('suite')+'</th>' +
|
||||
' <th>'+Lang.get('test')+'</th>' +
|
||||
' <th>'+Lang.get('result')+'</th>' +
|
||||
' <th>' + Lang.get('status') + '</th>' +
|
||||
' <th>' + Lang.get('suite') + '</th>' +
|
||||
' <th>' + Lang.get('test') + '</th>' +
|
||||
' <th>' + Lang.get('test_message') + '</th>' +
|
||||
' <th>' + Lang.get('codeception_time') + '</th>' +
|
||||
'</tr>' +
|
||||
'</thead><tbody></tbody></table>');
|
||||
},
|
||||
|
||||
onUpdate: function(e) {
|
||||
onUpdate: function (e) {
|
||||
if (!e.queryData) {
|
||||
$('#build-phpspec-errors').hide();
|
||||
return;
|
||||
|
@ -45,6 +48,7 @@ var phpspecPlugin = ActiveBuild.UiPlugin.extend({
|
|||
|
||||
var tests = this.lastData[0].meta_value;
|
||||
var tbody = $('#phpspec-data tbody');
|
||||
|
||||
tbody.empty();
|
||||
|
||||
for (var i in tests.suites) {
|
||||
|
@ -55,22 +59,18 @@ var phpspecPlugin = ActiveBuild.UiPlugin.extend({
|
|||
|
||||
var row = $(
|
||||
'<tr>' +
|
||||
'<td>' + ((test_case.status == 'passed') ? '<span class="label label-success">' + Lang.get('success') + '</span>' : '<span class="label label-danger">' + Lang.get('failed') + '</span>') + '</td>' +
|
||||
'<td>' + test_suite.name + '</td>' +
|
||||
'<td title="' + Lang.get('took_n_seconds', test_case['time']) + '">' + test_case.name + '</td>' +
|
||||
'<td>' + (test_case.message ? test_case.message : Lang.get('ok')) + '</td>' +
|
||||
'<td>' + test_case.name + '</td>' +
|
||||
'<td>' + (test_case.message ? test_case.message : '') + '</td>' +
|
||||
'<td>' + test_case['time'] + '</td>' +
|
||||
'</tr>'
|
||||
);
|
||||
|
||||
if (test_case.status != 'passed') {
|
||||
row.addClass('danger');
|
||||
} else {
|
||||
row.addClass('success');
|
||||
}
|
||||
|
||||
tbody.append(row);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// show plugin once preparation of grid is done
|
||||
$('#build-phpspec-errors').show();
|
||||
}
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
var phptalPlugin = ActiveBuild.UiPlugin.extend({
|
||||
id: 'build-phptal',
|
||||
css: 'col-xs-12',
|
||||
title: 'PHPTAL Lint',
|
||||
id: 'build-phptal',
|
||||
css: 'col-xs-12',
|
||||
title: 'PHPTAL Lint',
|
||||
lastData: null,
|
||||
rendered: false,
|
||||
|
||||
register: function() {
|
||||
var self = this;
|
||||
register: function () {
|
||||
var self = this;
|
||||
var query = ActiveBuild.registerQuery('phptallint-data', -1, {key: 'phptallint-data'})
|
||||
|
||||
$(window).on('phptallint-data', function(data) {
|
||||
$(window).on('phptallint-data', function (data) {
|
||||
self.onUpdate(data);
|
||||
});
|
||||
|
||||
$(window).on('build-updated', function() {
|
||||
$(window).on('build-updated', function () {
|
||||
if (!self.rendered) {
|
||||
query();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
render: function () {
|
||||
return $('<table class="table table-hover" id="phptal-data">' +
|
||||
'<thead>' +
|
||||
'<tr>' +
|
||||
|
@ -31,7 +31,7 @@ var phptalPlugin = ActiveBuild.UiPlugin.extend({
|
|||
'</thead><tbody></tbody></table>');
|
||||
},
|
||||
|
||||
onUpdate: function(e) {
|
||||
onUpdate: function (e) {
|
||||
if (!e.queryData) {
|
||||
$('#build-phptal').hide();
|
||||
return;
|
||||
|
@ -41,7 +41,8 @@ var phptalPlugin = ActiveBuild.UiPlugin.extend({
|
|||
this.lastData = e.queryData;
|
||||
|
||||
var errors = this.lastData[0].meta_value;
|
||||
var tbody = $('#phptal-data tbody');
|
||||
var tbody = $('#phptal-data tbody');
|
||||
|
||||
tbody.empty();
|
||||
|
||||
if (errors.length == 0) {
|
||||
|
@ -54,15 +55,15 @@ var phptalPlugin = ActiveBuild.UiPlugin.extend({
|
|||
|
||||
if (ActiveBuild.fileLinkTemplate) {
|
||||
var fileLink = ActiveBuild.fileLinkTemplate.replace('{FILE}', file);
|
||||
fileLink = fileLink.replace('{LINE}', errors[i].line);
|
||||
fileLink = fileLink.replace('{LINE}', errors[i].line);
|
||||
|
||||
file = '<a target="_blank" href="'+fileLink+'">' + file + '</a>';
|
||||
file = '<a target="_blank" href="' + fileLink + '">' + file + '</a>';
|
||||
}
|
||||
|
||||
var row = $('<tr>' +
|
||||
'<td>'+file+'</td>' +
|
||||
'<td>'+errors[i].line+'</td>' +
|
||||
'<td>'+errors[i].message+'</td></tr>');
|
||||
'<td>' + file + '</td>' +
|
||||
'<td>' + errors[i].line + '</td>' +
|
||||
'<td>' + errors[i].message + '</td></tr>');
|
||||
|
||||
if (errors[i].type == 'error') {
|
||||
row.addClass('danger');
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
var phpunitPlugin = ActiveBuild.UiPlugin.extend({
|
||||
id: 'build-phpunit-errors',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('phpunit'),
|
||||
lastData: null,
|
||||
id: 'build-phpunit-errors',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('phpunit'),
|
||||
lastData: null,
|
||||
displayOnUpdate: false,
|
||||
rendered: false,
|
||||
statusMap: {
|
||||
success : 'ok',
|
||||
failed: 'remove',
|
||||
error: 'warning-sign',
|
||||
todo: 'info-sign',
|
||||
rendered: false,
|
||||
statusMap: {
|
||||
success: 'ok',
|
||||
failed: 'remove',
|
||||
error: 'warning-sign',
|
||||
todo: 'info-sign',
|
||||
skipped: 'exclamation-sign'
|
||||
},
|
||||
|
||||
register: function() {
|
||||
register: function () {
|
||||
var self = this;
|
||||
var query = ActiveBuild.registerQuery('phpunit-data', -1, {key: 'phpunit-data'})
|
||||
|
||||
$(window).on('phpunit-data', function(data) {
|
||||
$(window).on('phpunit-data', function (data) {
|
||||
self.onUpdate(data);
|
||||
});
|
||||
|
||||
$(window).on('build-updated', function() {
|
||||
$(window).on('build-updated', function () {
|
||||
if (!self.rendered) {
|
||||
self.displayOnUpdate = true;
|
||||
query();
|
||||
|
@ -29,19 +29,18 @@ var phpunitPlugin = ActiveBuild.UiPlugin.extend({
|
|||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
|
||||
render: function () {
|
||||
return $('<table class="table table-hover" id="phpunit-data">' +
|
||||
'<thead>' +
|
||||
'<tr>' +
|
||||
'<th>'+Lang.get('status')+'</th>' +
|
||||
'<th>'+Lang.get('test_message')+'</th>' +
|
||||
'<th>'+Lang.get('trace')+'</th>' +
|
||||
'<th>' + Lang.get('status') + '</th>' +
|
||||
'<th>' + Lang.get('test_message') + '</th>' +
|
||||
'<th>' + Lang.get('trace') + '</th>' +
|
||||
'</tr>' +
|
||||
'</thead><tbody></tbody></table>');
|
||||
},
|
||||
|
||||
onUpdate: function(e) {
|
||||
onUpdate: function (e) {
|
||||
if (!e.queryData) {
|
||||
$('#build-phpunit-errors').hide();
|
||||
return;
|
||||
|
@ -53,27 +52,29 @@ var phpunitPlugin = ActiveBuild.UiPlugin.extend({
|
|||
var tests = this.lastData[0].meta_value;
|
||||
var thead = $('#phpunit-data thead tr');
|
||||
var tbody = $('#phpunit-data tbody');
|
||||
thead.empty().append('<th>'+Lang.get('status')+'</th><th>'+Lang.get('test_message')+'</th><th>'+Lang.get('trace')+'</th>');
|
||||
|
||||
thead.empty().append('<th>' + Lang.get('status') + '</th><th>' + Lang.get('test_message') + '</th><th>' + Lang.get('trace') + '</th>');
|
||||
tbody.empty();
|
||||
|
||||
if (tests.length == 0) {
|
||||
$('#build-phpunit-errors').hide();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var counts = { success: 0, failed: 0, error: 0, skipped: 0, todo: 0 }, total = 0;
|
||||
var counts = {success: 0, failed: 0, error: 0, skipped: 0, todo: 0}, total = 0;
|
||||
|
||||
for (var i in tests) {
|
||||
var severity = tests[i].severity || (tests[i].pass ? 'success' : 'failed'),
|
||||
label = ('success' == severity) ? 'success' : (
|
||||
label = ('success' == severity) ? 'success' : (
|
||||
('error' == severity) ? 'danger' : 'warning'
|
||||
);
|
||||
|
||||
|
||||
if ('fail' === severity) {
|
||||
severity = 'failed';
|
||||
}
|
||||
|
||||
var status = $('<td><span class="label label-' + label + '">'+Lang.get(severity)+'</span></td>'),
|
||||
var status = $('<td><span class="label label-' + label + '">' + Lang.get(severity) + '</span></td>'),
|
||||
content = $('<td></td>'),
|
||||
trace = $('<td></td>'),
|
||||
message = $('<div class="visible-line-breaks"></div>').appendTo(content),
|
||||
|
@ -104,44 +105,44 @@ var phpunitPlugin = ActiveBuild.UiPlugin.extend({
|
|||
$('#build-phpunit-errors').show();
|
||||
},
|
||||
|
||||
repr: function(data)
|
||||
{
|
||||
switch(typeof(data)) {
|
||||
repr: function (data) {
|
||||
switch (typeof(data)) {
|
||||
case 'boolean':
|
||||
return '<span class="boolean">' + (data ? 'true' : 'false') + '</span>';
|
||||
case 'string':
|
||||
return '<span class="string">"' + data + '"</span>';
|
||||
case 'undefined': case null:
|
||||
case 'undefined':
|
||||
case null:
|
||||
return '<span class="null">null</span>';
|
||||
case 'object':
|
||||
var rows = [];
|
||||
if(data instanceof Array) {
|
||||
for(var i in data) {
|
||||
if (data instanceof Array) {
|
||||
for (var i in data) {
|
||||
rows.push('<tr><td colspan="3">' + this.repr(data[i]) + ',</td></tr>');
|
||||
}
|
||||
} else {
|
||||
for(var key in data) {
|
||||
for (var key in data) {
|
||||
rows.push(
|
||||
'<tr>' +
|
||||
'<td>' + this.repr(key) + '</td>' +
|
||||
'<td>=></td>' +
|
||||
'<td>' + this.repr(data[key]) + ',</td>' +
|
||||
'<td>' + this.repr(key) + '</td>' +
|
||||
'<td>=></td>' +
|
||||
'<td>' + this.repr(data[key]) + ',</td>' +
|
||||
'</tr>');
|
||||
}
|
||||
}
|
||||
return '<table>' +
|
||||
'<tr><th colspan="3">array(</th></tr>' +
|
||||
rows.join('') +
|
||||
'<tr><th colspan="3">)</th></tr>' +
|
||||
'<tr><th colspan="3">array(</th></tr>' +
|
||||
rows.join('') +
|
||||
'<tr><th colspan="3">)</th></tr>' +
|
||||
'</table>';
|
||||
}
|
||||
return '???';
|
||||
},
|
||||
|
||||
buildTrace: function(trace){
|
||||
buildTrace: function (trace) {
|
||||
var list = '<ol reversed>';
|
||||
|
||||
trace.forEach(function(line){
|
||||
trace.forEach(function (line) {
|
||||
list += '<li>' + line + '</li>';
|
||||
});
|
||||
list += '</ol>';
|
||||
|
|
|
@ -1,36 +1,48 @@
|
|||
var SummaryPlugin = ActiveBuild.UiPlugin.extend({
|
||||
id: 'build-summary',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('build-summary'),
|
||||
statusLabels: [Lang.get('pending'), Lang.get('running'), Lang.get('success'), Lang.get('failed'), Lang.get('failed_allowed')],
|
||||
statusClasses: ['info', 'warning', 'success', 'danger', 'danger'],
|
||||
id: 'build-summary',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('build-summary'),
|
||||
statusLabels: [
|
||||
Lang.get('pending'),
|
||||
Lang.get('running'),
|
||||
Lang.get('success'),
|
||||
Lang.get('failed'),
|
||||
Lang.get('failed_allowed')
|
||||
],
|
||||
statusClasses: [
|
||||
'info',
|
||||
'warning',
|
||||
'success',
|
||||
'danger',
|
||||
'danger'
|
||||
],
|
||||
|
||||
register: function() {
|
||||
var self = this;
|
||||
register: function () {
|
||||
var self = this;
|
||||
var query = ActiveBuild.registerQuery('plugin-summary', 5, {key: 'plugin-summary'})
|
||||
|
||||
$(window).on('plugin-summary', function(data) {
|
||||
$(window).on('plugin-summary', function (data) {
|
||||
self.onUpdate(data);
|
||||
});
|
||||
|
||||
$(window).on('build-updated', function() {
|
||||
$(window).on('build-updated', function () {
|
||||
query();
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
render: function () {
|
||||
return $(
|
||||
'<table class="table table-hover" id="plugin-summary">' +
|
||||
'<thead><tr>' +
|
||||
'<th>'+Lang.get('stage')+'</th>' +
|
||||
'<th>'+Lang.get('plugin')+'</th>' +
|
||||
'<th>'+Lang.get('status')+'</th>' +
|
||||
'<th class="text-right">' + Lang.get('duration') + ' (' + Lang.get('seconds') + ')</th>' +
|
||||
'<th>' + Lang.get('stage') + '</th>' +
|
||||
'<th>' + Lang.get('plugin') + '</th>' +
|
||||
'<th>' + Lang.get('status') + '</th>' +
|
||||
'<th class="text-right">' + Lang.get('duration') + ' (' + Lang.get('seconds') + ')</th>' +
|
||||
'</tr></thead><tbody></tbody></table>'
|
||||
);
|
||||
},
|
||||
|
||||
onUpdate: function(e) {
|
||||
onUpdate: function (e) {
|
||||
if (!e.queryData) {
|
||||
$('#build-summary').hide();
|
||||
return;
|
||||
|
@ -38,20 +50,21 @@ var SummaryPlugin = ActiveBuild.UiPlugin.extend({
|
|||
|
||||
var tbody = $('#plugin-summary tbody'),
|
||||
summary = e.queryData[0].meta_value;
|
||||
|
||||
tbody.empty();
|
||||
|
||||
for(var stage in summary) {
|
||||
for(var plugin in summary[stage]) {
|
||||
for (var stage in summary) {
|
||||
for (var plugin in summary[stage]) {
|
||||
var data = summary[stage][plugin],
|
||||
duration = data.started ? ((data.ended || Math.floor(Date.now()/1000)) - data.started) : '-';
|
||||
duration = data.started ? ((data.ended || Math.floor(Date.now() / 1000)) - data.started) : '-';
|
||||
tbody.append(
|
||||
'<tr>' +
|
||||
'<td>' + Lang.get('stage_' + stage) + '</td>' +
|
||||
'<td>' + Lang.get(plugin) + '</td>' +
|
||||
'<td><span class="label label-' + this.statusClasses[data.status] + '">' +
|
||||
this.statusLabels[data.status] +
|
||||
'</span></td>' +
|
||||
'<td class="text-right">' + duration + '</td>' +
|
||||
'<td>' + Lang.get('stage_' + stage) + '</td>' +
|
||||
'<td>' + Lang.get(plugin) + '</td>' +
|
||||
'<td><span class="label label-' + this.statusClasses[data.status] + '">' +
|
||||
this.statusLabels[data.status] +
|
||||
'</span></td>' +
|
||||
'<td class="text-right">' + duration + '</td>' +
|
||||
'</tr>'
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,49 +1,50 @@
|
|||
var warningsPlugin = ActiveBuild.UiPlugin.extend({
|
||||
id: 'build-warnings-chart',
|
||||
css: 'col-xs-12',
|
||||
id: 'build-warnings-chart',
|
||||
css: 'col-xs-12',
|
||||
title: Lang.get('quality_trend'),
|
||||
keys: {
|
||||
'codeception-errors': Lang.get('codeception_errors'),
|
||||
'phplint-errors': Lang.get('phplint_errors'),
|
||||
'phpunit-errors': Lang.get('phpunit_errors'),
|
||||
'phptallint-errors': Lang.get('phptal_errors'),
|
||||
'phptallint-warnings': Lang.get('phptal_warnings'),
|
||||
'phpmd-warnings': Lang.get('phpmd_warnings'),
|
||||
keys: {
|
||||
'codeception-errors': Lang.get('codeception_errors'),
|
||||
'phplint-errors': Lang.get('phplint_errors'),
|
||||
'phpunit-errors': Lang.get('phpunit_errors'),
|
||||
'phptallint-errors': Lang.get('phptal_errors'),
|
||||
'phptallint-warnings': Lang.get('phptal_warnings'),
|
||||
'phpmd-warnings': Lang.get('phpmd_warnings'),
|
||||
'phpdoccheck-warnings': Lang.get('phpdoccheck_warnings'),
|
||||
'phpcpd-warnings': Lang.get('phpcpd_warnings'),
|
||||
'phpcs-warnings': Lang.get('phpcs_warnings'),
|
||||
'phpcs-errors': Lang.get('phpcs_errors')
|
||||
'phpcpd-warnings': Lang.get('phpcpd_warnings'),
|
||||
'phpcs-warnings': Lang.get('phpcs_warnings'),
|
||||
'phpcs-errors': Lang.get('phpcs_errors')
|
||||
},
|
||||
data: {},
|
||||
data: {},
|
||||
displayOnUpdate: false,
|
||||
rendered: false,
|
||||
chartData: null,
|
||||
rendered: false,
|
||||
chartData: null,
|
||||
|
||||
register: function() {
|
||||
register: function () {
|
||||
var self = this;
|
||||
|
||||
var queries = [];
|
||||
for (var key in self.keys) {
|
||||
queries.push(ActiveBuild.registerQuery(key, -1, {num_builds: 10, key: key}));
|
||||
queries.push(ActiveBuild.registerQuery(key, -1, {num_builds: 10, key: key}));
|
||||
}
|
||||
|
||||
$(window).on('codeception-errors phptallint-warnings phptallint-errors phplint-errors phpunit-errors phpmd-warnings phpdoccheck-warnings phpcpd-warnings phpcs-warnings phpcs-errors', function(data) {
|
||||
$(window).on('codeception-errors phptallint-warnings phptallint-errors phplint-errors phpunit-errors phpmd-warnings phpdoccheck-warnings phpcpd-warnings phpcs-warnings phpcs-errors', function (data) {
|
||||
self.onUpdate(data);
|
||||
});
|
||||
|
||||
$(window).on('build-updated', function(data) {
|
||||
$(window).on('build-updated', function (data) {
|
||||
if (!self.rendered && data.queryData && data.queryData.status > 1) {
|
||||
self.displayOnUpdate = true;
|
||||
for (var query in queries) {
|
||||
queries[query]();
|
||||
queries[query]();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var self = this;
|
||||
render: function () {
|
||||
var self = this;
|
||||
var container = $('<div id="build-warnings" style="width: 100%; height: 300px"></div>');
|
||||
|
||||
container.append('<canvas id="build-warnings-linechart" style="width: 100%; height: 300px"></canvas>');
|
||||
|
||||
$(document).on('shown.bs.tab', function () {
|
||||
|
@ -54,8 +55,8 @@ var warningsPlugin = ActiveBuild.UiPlugin.extend({
|
|||
return container;
|
||||
},
|
||||
|
||||
onUpdate: function(e) {
|
||||
var self = this;
|
||||
onUpdate: function (e) {
|
||||
var self = this;
|
||||
var builds = e.queryData;
|
||||
|
||||
if (!builds || !builds.length) {
|
||||
|
@ -79,14 +80,25 @@ var warningsPlugin = ActiveBuild.UiPlugin.extend({
|
|||
}
|
||||
},
|
||||
|
||||
displayChart: function() {
|
||||
var self = this;
|
||||
displayChart: function () {
|
||||
var self = this;
|
||||
self.rendered = true;
|
||||
|
||||
var colors = ['#4D4D4D', '#5DA5DA', '#FAA43A', '#60BD68', '#F17CB0', '#B2912F', '#B276B2', '#DECF3F', '#F15854', '#4D4D4D'];
|
||||
var colors = [
|
||||
'#FF0084',
|
||||
'#D33724',
|
||||
'#FF851B',
|
||||
'#F7BE64',
|
||||
'#B5BBC8',
|
||||
'#555299',
|
||||
'#7EDEDE',
|
||||
'#00A7D0',
|
||||
'#B5BBC8',
|
||||
'#001F3F'
|
||||
];
|
||||
|
||||
self.chartData = {
|
||||
labels: [],
|
||||
labels: [],
|
||||
datasets: []
|
||||
};
|
||||
|
||||
|
@ -94,10 +106,10 @@ var warningsPlugin = ActiveBuild.UiPlugin.extend({
|
|||
var color = colors.shift();
|
||||
|
||||
self.chartData.datasets.push({
|
||||
label: self.keys[key],
|
||||
label: self.keys[key],
|
||||
strokeColor: color,
|
||||
pointColor: color,
|
||||
data: []
|
||||
pointColor: color,
|
||||
data: []
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -121,7 +133,7 @@ var warningsPlugin = ActiveBuild.UiPlugin.extend({
|
|||
if ($('#information').hasClass('active') && self.chartData) {
|
||||
$('#build-warnings-chart').show();
|
||||
|
||||
var ctx = $("#build-warnings-linechart").get(0).getContext("2d");
|
||||
var ctx = $("#build-warnings-linechart").get(0).getContext("2d");
|
||||
var buildWarningsChart = new Chart(ctx);
|
||||
|
||||
Chart.defaults.global.responsive = true;
|
||||
|
|
|
@ -6,7 +6,7 @@ var Build = Class.extend({
|
|||
queries: {},
|
||||
updateInterval: null,
|
||||
|
||||
init: function(build) {
|
||||
init: function (build) {
|
||||
var self = this;
|
||||
self.buildId = build;
|
||||
},
|
||||
|
@ -18,7 +18,7 @@ var Build = Class.extend({
|
|||
|
||||
self.registerQuery('build-updated', 5);
|
||||
|
||||
$(window).on('build-updated', function(data) {
|
||||
$(window).on('build-updated', function (data) {
|
||||
|
||||
self.buildData = data.queryData;
|
||||
|
||||
|
@ -68,12 +68,12 @@ var Build = Class.extend({
|
|||
});
|
||||
},
|
||||
|
||||
registerQuery: function(name, seconds, query) {
|
||||
registerQuery: function (name, seconds, query) {
|
||||
var self = this;
|
||||
var uri = 'build/ajax-meta/' + self.buildId;
|
||||
var query = query || {};
|
||||
|
||||
var cb = function() {
|
||||
var cb = function () {
|
||||
var fullUri = window.APP_URL + uri;
|
||||
|
||||
if (name == 'build-updated') {
|
||||
|
@ -84,7 +84,7 @@ var Build = Class.extend({
|
|||
dataType: "json",
|
||||
url: fullUri,
|
||||
data: query,
|
||||
success: function(data) {
|
||||
success: function (data) {
|
||||
$(window).trigger({type: name, queryData: data});
|
||||
},
|
||||
error: handleFailedAjax
|
||||
|
@ -102,7 +102,7 @@ var Build = Class.extend({
|
|||
clearInterval(this.queries[name]);
|
||||
},
|
||||
|
||||
registerPlugin: function(plugin) {
|
||||
registerPlugin: function (plugin) {
|
||||
this.plugins[plugin.id] = plugin;
|
||||
plugin.register();
|
||||
},
|
||||
|
@ -110,14 +110,14 @@ var Build = Class.extend({
|
|||
storePluginOrder: function () {
|
||||
var renderOrder = [];
|
||||
|
||||
$('.ui-plugin > div').each(function() {
|
||||
$('.ui-plugin > div').each(function () {
|
||||
renderOrder.push($(this).attr('id'));
|
||||
});
|
||||
|
||||
localStorage.setItem('app-plugin-order', JSON.stringify(renderOrder));
|
||||
},
|
||||
|
||||
renderPlugins: function() {
|
||||
renderPlugins: function () {
|
||||
var self = this;
|
||||
var rendered = [];
|
||||
var renderOrder = localStorage.getItem('app-plugin-order');
|
||||
|
@ -149,7 +149,7 @@ var Build = Class.extend({
|
|||
$(window).trigger({type: 'build-updated', queryData: self.buildData});
|
||||
},
|
||||
|
||||
renderPlugin: function(plugin) {
|
||||
renderPlugin: function (plugin) {
|
||||
var output = plugin.render();
|
||||
|
||||
output = $('<div class="box-body"></div>').append(output);
|
||||
|
@ -160,9 +160,9 @@ var Build = Class.extend({
|
|||
|
||||
if (plugin.title) {
|
||||
content.prepend(
|
||||
'<div class="box-header"><h3 class="box-title">'+plugin.title+'</h3>'+
|
||||
'<div class="box-tools pull-right">'+
|
||||
'<button type="button" class="btn btn-box-tool" data-widget="collapse" data-toggle="tooltip" title="Collapse">'+
|
||||
'<div class="box-header"><h3 class="box-title">' + plugin.title + '</h3>' +
|
||||
'<div class="box-tools pull-right">' +
|
||||
'<button type="button" class="btn btn-box-tool" data-widget="collapse" data-toggle="tooltip" title="Collapse">' +
|
||||
'<i class="fa fa-minus"></i></button></div></div>'
|
||||
);
|
||||
}
|
||||
|
@ -177,13 +177,13 @@ var Build = Class.extend({
|
|||
css: 'col-xs-12',
|
||||
box: false,
|
||||
|
||||
init: function(){
|
||||
init: function () {
|
||||
},
|
||||
|
||||
register: function() {
|
||||
register: function () {
|
||||
var self = this;
|
||||
|
||||
$(window).on('build-updated', function(data) {
|
||||
$(window).on('build-updated', function (data) {
|
||||
self.onUpdate(data);
|
||||
});
|
||||
},
|
||||
|
|
|
@ -3,14 +3,15 @@
|
|||
* MIT Licensed.
|
||||
*/
|
||||
// Inspired by base2 and Prototype
|
||||
(function(){
|
||||
var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
|
||||
(function () {
|
||||
var initializing = false, fnTest = /xyz/.test(function () {xyz;}) ? /\b_super\b/ : /.*/;
|
||||
|
||||
// The base Class implementation (does nothing)
|
||||
this.Class = function(){};
|
||||
this.Class = function () {
|
||||
};
|
||||
|
||||
// Create a new Class that inherits from this class
|
||||
Class.extend = function(prop) {
|
||||
Class.extend = function (prop) {
|
||||
var _super = this.prototype;
|
||||
|
||||
// Instantiate a base class (but only create the instance,
|
||||
|
@ -23,9 +24,9 @@
|
|||
for (var name in prop) {
|
||||
// Check if we're overwriting an existing function
|
||||
prototype[name] = typeof prop[name] == "function" &&
|
||||
typeof _super[name] == "function" && fnTest.test(prop[name]) ?
|
||||
(function(name, fn){
|
||||
return function() {
|
||||
typeof _super[name] == "function" && fnTest.test(prop[name]) ?
|
||||
(function (name, fn) {
|
||||
return function () {
|
||||
var tmp = this._super;
|
||||
|
||||
// Add a new ._super() method that is the same method
|
||||
|
@ -46,7 +47,7 @@
|
|||
// The dummy class constructor
|
||||
function Class() {
|
||||
// All construction is actually done in the init method
|
||||
if ( !initializing && this.init )
|
||||
if (!initializing && this.init)
|
||||
this.init.apply(this, arguments);
|
||||
}
|
||||
|
||||
|
@ -61,4 +62,4 @@
|
|||
|
||||
return Class;
|
||||
};
|
||||
})();
|
||||
})();
|
||||
|
|
|
@ -158,7 +158,7 @@ class BuildStatusController extends Controller
|
|||
}
|
||||
}
|
||||
|
||||
$cacheDir = RUNTIME_DIR . '/status_cache/';
|
||||
$cacheDir = RUNTIME_DIR . 'status_cache/';
|
||||
$cacheFile = $cacheDir . md5($imageUrl) . '.svg';
|
||||
if (!is_file($cacheFile)) {
|
||||
$image = file_get_contents($imageUrl);
|
||||
|
|
|
@ -312,7 +312,7 @@ PHP Censor',
|
|||
'seconds' => 'сек.',
|
||||
'plugin' => 'Плагин',
|
||||
'stage_setup' => 'Установка',
|
||||
'stage_test' => 'тестирование',
|
||||
'stage_test' => 'Тестирование',
|
||||
'stage_complete' => 'Завершение',
|
||||
'stage_success' => 'Успешное завершение',
|
||||
'stage_failure' => 'Провал',
|
||||
|
|
Loading…
Reference in a new issue