[refs #195] Merge 3.2-master into 195-new_design_for_projects
This commit is contained in:
commit
bc75b318ce
|
@ -1,52 +1,34 @@
|
|||
$(document).ready(function() {
|
||||
var dropbox = $("#droplist");
|
||||
|
||||
var droplist = function() {
|
||||
$user_menu.slideToggle("slow");
|
||||
}
|
||||
function loadMessages() {
|
||||
$("#messages-new").fadeOut("slow");
|
||||
$("#new-messages").delay(700).fadeIn("slow");
|
||||
}
|
||||
|
||||
function loadMessages() {
|
||||
$("#messages-new").fadeOut("slow");
|
||||
$("#new-messages").delay(700).fadeIn("slow");
|
||||
}
|
||||
function loadOldMessages() {
|
||||
$("#old-messages").fadeIn("slow");
|
||||
}
|
||||
function loadOldMessages() {
|
||||
$("#old-messages").fadeIn("slow");
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
$user_menu = $('#droplist');
|
||||
$user_menu.die('click');
|
||||
|
||||
$('div.information > div.user').live('click', function() {
|
||||
if ($user_menu.is(":hidden")) {
|
||||
droplist();
|
||||
}
|
||||
});
|
||||
|
||||
$('div.information > div.profile > a').live('click', function(e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$('.data-expander').live('click', function(e) {
|
||||
var $button = $(e.target);
|
||||
var id = "#content-" + $button.attr('id');
|
||||
var $slider = $(id);
|
||||
$slider.slideToggle("slow", function(){
|
||||
$button.toggleClass('expanded collapsed');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$(document).click(function(e) {
|
||||
if (!$user_menu.is(":hidden") && ($(e.target).parent().attr('id') != $user_menu.attr('id'))) {
|
||||
droplist();
|
||||
$(document).click(function() {
|
||||
var dl = dropbox.css("height");
|
||||
var dl2 = dropbox.css("display");
|
||||
if ((dl2 == "block")&&(dl == "91px")) {
|
||||
dropbox.slideUp("slow");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function showActivity(elem) {
|
||||
$("#activity-bottom"+elem).slideToggle("slow");
|
||||
var img = $("#expand" + elem).attr("src");
|
||||
if (img == "/assets/expand-gray.png") {
|
||||
$("#expand" + elem).attr("src","/assets/expand-gray2.png");
|
||||
} else {
|
||||
$("#expand" + elem).attr("src","/assets/expand-gray.png");
|
||||
}
|
||||
}
|
||||
function showActivity(elem) {
|
||||
$("#activity-bottom"+elem).slideToggle("slow");
|
||||
var img = document.getElementById("expand" + elem).className;
|
||||
if (img == "expand-gray-down") {
|
||||
document.getElementById("expand" + elem).className = "expand-gray-up";
|
||||
} else {
|
||||
document.getElementById("expand" + elem).className = "expand-gray-down";
|
||||
}
|
||||
}
|
||||
|
||||
$('div.information > div.user').live('click', function() {
|
||||
dropbox.slideToggle("slow");
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
function addPeople(num) {
|
||||
$("#people"+num).fadeOut(0);
|
||||
$("#people-sections"+num).fadeIn("slow");
|
||||
$("#people-sections-list"+num).fadeIn("slow");
|
||||
if ($("#people-span").css("display") != "none") {
|
||||
$("#people-span").fadeOut(0);
|
||||
}
|
||||
}
|
||||
|
||||
function remPeople(num) {
|
||||
$("#people"+num).fadeIn("slow");
|
||||
$("#people-sections"+num).fadeOut(0);
|
||||
$("#people-sections-list"+num).fadeOut(0);
|
||||
if (($("#people-sections-list1").css("display") == "none") && ($("#people-sections-list2").css("display") == "none") && ($("#people-sections-list3").css("display") == "none") && ($("#people-sections-list4").css("display") == "none")) {
|
||||
$("#people-span").fadeIn("slow");
|
||||
}
|
||||
}
|
||||
|
||||
function addFlag(num) {
|
||||
$("#flag"+num).fadeOut(0);
|
||||
$("#flag-list"+num).fadeIn("slow");
|
||||
$("#flag-list-sections"+num).fadeIn("slow");
|
||||
if ($("#flag-span").css("display") != "none") {
|
||||
$("#flag-span").fadeOut(0);
|
||||
}
|
||||
}
|
||||
|
||||
function remFlag(num) {
|
||||
$("#flag"+num).fadeIn("slow");
|
||||
$("#flag-list"+num).fadeOut(0);
|
||||
$("#flag-list-sections"+num).fadeOut(0);
|
||||
if (($("#flag-list-sections1").css("display") == "none") && ($("#flag-list-sections2").css("display") == "none") && ($("#flag-list-sections3").css("display") == "none") && ($("#flag-list-sections4").css("display") == "none")) {
|
||||
$("#flag-span").fadeIn("slow");
|
||||
}
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
function switchThis() {
|
||||
var doc = document.getElementById("switcher");
|
||||
if (doc.className == "switcher") {
|
||||
doc.className = "switcher-off";
|
||||
$("#open-comment").fadeOut(0);
|
||||
$("#closed-comment").fadeIn("slow");
|
||||
} else {
|
||||
doc.className = "switcher";
|
||||
$("#closed-comment").fadeOut(0);
|
||||
$("#open-comment").fadeIn("slow");
|
||||
}
|
||||
}
|
||||
|
||||
function preload() {
|
||||
if (document.images) {
|
||||
var imgsrc = preload.arguments;
|
||||
arr=new Array(imgsrc.length);
|
||||
|
||||
for (var j=0; j<imgsrc.length; j++) {
|
||||
arr[j] = new Image;
|
||||
arr[j].src = imgsrc[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function manage(elem) {
|
||||
if (elem == "people") {
|
||||
var doc = document.getElementById("people-manage");
|
||||
if (doc.className == "view") {
|
||||
doc.className = "non-view";
|
||||
$("#people-manage").fadeOut(0);
|
||||
$("#people-manage-list").fadeIn("slow");
|
||||
}
|
||||
else {
|
||||
$("#people-manage-list").fadeOut(0);
|
||||
$("#people-manage").fadeIn("slow");
|
||||
doc.className = "view";
|
||||
}
|
||||
}
|
||||
if (elem == "labels") {
|
||||
var doc = document.getElementById("labels-manage");
|
||||
if (doc.className == "view") {
|
||||
doc.className = "non-view";
|
||||
$("#labels-manage").fadeOut(0);
|
||||
$("#labels-manage-list").fadeIn("slow");
|
||||
}
|
||||
else {
|
||||
$("#labels-manage-list").fadeOut(0);
|
||||
$("#labels-manage").fadeIn("slow");
|
||||
doc.className = "view";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,138 +1,237 @@
|
|||
$(document).ready(function() {
|
||||
$("#closed-switcher").click(function() {
|
||||
if ($("#blue-switch-select").css("margin-left") != "130px") {
|
||||
$("#blue-switch-select").animate({"margin-left": "+=130px"}, "fast");
|
||||
$("#table1").fadeOut(0);
|
||||
$("#table2").fadeIn("slow");
|
||||
}
|
||||
else {
|
||||
$("#blue-switch-select").animate({"margin-left": "-=130px"}, "fast");
|
||||
$("#table2").fadeOut(0);
|
||||
$("#table1").fadeIn("slow");
|
||||
}
|
||||
|
||||
$("#closed-switcher").live('click', function() {
|
||||
if ($("#blue-switch-select").css("margin-left") != "130px") {
|
||||
$("#blue-switch-select").animate({"margin-left": "+=130px"}, "fast");
|
||||
$("#table1").fadeOut(0);
|
||||
$("#table2").fadeIn("slow");
|
||||
$('#issues_status').val('closed');
|
||||
}
|
||||
else {
|
||||
$("#blue-switch-select").animate({"margin-left": "-=130px"}, "fast");
|
||||
$("#table2").fadeOut(0);
|
||||
$("#table1").fadeIn("slow");
|
||||
$('#issues_status').val('open');
|
||||
}
|
||||
return send_index_tracker_request('GET');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
//$("#myTable").tablesorter({
|
||||
// headers: {
|
||||
// 1: {
|
||||
// sorter: false
|
||||
// }
|
||||
// }
|
||||
//});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
//$("#myTable2").tablesorter({
|
||||
// headers: {
|
||||
// 1: {
|
||||
// sorter: false
|
||||
// }
|
||||
// }
|
||||
//});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
$("#manage-labels").click(function() {
|
||||
$("#labels-stock").fadeOut(0);
|
||||
$("#labels-edit").fadeIn("slow");
|
||||
$("#manage-labels").live('click', function () {
|
||||
var toggled = $(this).data('toggled');
|
||||
$(this).data('toggled', !toggled);
|
||||
if (!toggled) {
|
||||
$("#labels-stock").fadeOut(0);
|
||||
$("#labels-edit").fadeIn("slow");
|
||||
}
|
||||
else {
|
||||
$("#labels-edit").fadeOut(0);
|
||||
$("#labels-stock").fadeIn("slow");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
$("div.delete").click(function() {
|
||||
var div = "#label-"+this.id;
|
||||
$(div).fadeOut("slow");
|
||||
$("div.div-tracker-labels").live('click', function() {
|
||||
var flag = this.id;
|
||||
flag = flag.replace("label-","flag-");
|
||||
var bg = $("#"+flag).css("background-color");
|
||||
var checkbox = $(this).find(':checkbox');
|
||||
if ($(this).css("background-color") != bg) {
|
||||
$(this).css("background-color",bg);
|
||||
$(this).css("color","#FFFFFF");
|
||||
checkbox.attr('checked', 'checked');
|
||||
} else {
|
||||
$(this).css("background-color","rgb(247, 247, 247)");
|
||||
$(this).css("color","#565657");
|
||||
checkbox.removeAttr('checked');
|
||||
}
|
||||
return send_index_tracker_request('GET');
|
||||
});
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
$("div.div-tracker-lables").click(function() {
|
||||
var flag = this.id;
|
||||
flag = flag.replace("label-","flag-");
|
||||
var bg = $("#"+flag).css("background-color");
|
||||
if ($(this).css("background-color") != bg) {
|
||||
$(this).css("background-color",bg);
|
||||
$(this).css("color","#FFFFFF");
|
||||
var labels = document.getElementsByName("label");
|
||||
var rows = document.getElementsByName("row");
|
||||
var arrayLabels;
|
||||
var rowState = 0;
|
||||
for (var r in rows) {
|
||||
for (var l in labels) {
|
||||
var ro = document.getElementById(rows[r].id);
|
||||
var cls = ro.className;
|
||||
var clsLabel = labels[l].id.split("label-")[1];
|
||||
if (($("#"+labels[l].id).css("background-color") != "rgb(247, 247, 247)")&&($("#"+labels[l].id).css("background-color") != "transparent")) {
|
||||
if (cls.indexOf(clsLabel) != -1) {
|
||||
rowState = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (rowState == 1) {
|
||||
showRow(rows[r].id);
|
||||
rowState = 0;
|
||||
}
|
||||
else {
|
||||
hideRow(rows[r].id);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$(this).css("background-color","rgb(247, 247, 247)");
|
||||
$(this).css("color","#565657");
|
||||
var labels = document.getElementsByName("label");
|
||||
var rows = document.getElementsByName("row");
|
||||
var rowState = 0;
|
||||
var labelState = 0;
|
||||
for (var l in labels) {
|
||||
if (($("#"+labels[l].id).css("background-color") != "rgb(247, 247, 247)")&&($("#"+labels[l].id).css("background-color") != "transparent")) {
|
||||
labelState = 1;
|
||||
}
|
||||
}
|
||||
if (labelState == 1) {
|
||||
for (var r in rows) {
|
||||
for (var l in labels) {
|
||||
var ro = document.getElementById(rows[r].id);
|
||||
var cls = ro.className;
|
||||
var clsLabel = labels[l].id.split("label-")[1];
|
||||
if (($("#"+labels[l].id).css("background-color") != "rgb(247, 247, 247)")&&($("#"+labels[l].id).css("background-color") != "transparent")) {
|
||||
if (cls.indexOf(clsLabel) != -1) {
|
||||
rowState = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (rowState == 1) {
|
||||
showRow(rows[r].id);
|
||||
rowState = 0;
|
||||
}
|
||||
else {
|
||||
hideRow(rows[r].id);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (var r in rows) {
|
||||
showRow(rows[r].id);
|
||||
}
|
||||
}
|
||||
}
|
||||
$("#myradio1").live('change', function(event) {
|
||||
return send_index_tracker_request('GET');
|
||||
});
|
||||
|
||||
$('#search_issue').live('submit', function() {
|
||||
return send_index_tracker_request('GET', $(this).attr("action"), $(this).serialize());
|
||||
});
|
||||
|
||||
$('#add_label').live('click', function() {
|
||||
return send_index_tracker_request('POST', $(this).attr("href"), $('#new_label').serialize());
|
||||
});
|
||||
|
||||
$('.righter #update_label').live('click', function() {
|
||||
return send_index_tracker_request('POST', $(this).attr("href"), $(this).parents('#update_label').serialize());
|
||||
});
|
||||
|
||||
$('.colors .choose').live('click', function() {
|
||||
var parent = $(this).parents('.colors');
|
||||
parent.find('.choose.selected').removeClass('selected');
|
||||
$(this).addClass('selected');
|
||||
parent.siblings('.lefter').find('#label_color').val($(this).attr('value'));
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.custom_color').live('click', function() {
|
||||
$(this).siblings('#label_color').toggle();
|
||||
return false;
|
||||
});
|
||||
|
||||
$('article a.edit_label').live('click', function() {
|
||||
$(this).parents('.label.edit').siblings('.label.edit').find('.edit_label_form').hide();
|
||||
$(this).parents('.label.edit').find('.edit_label_form').toggle();
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.delete_label').live('click', function() {
|
||||
return send_index_tracker_request('POST', $(this).attr('href'));
|
||||
});
|
||||
|
||||
function send_index_tracker_request(type_request, url, data) {
|
||||
data = data || '';
|
||||
var filter_form = $('#filter_issues');
|
||||
url = url || filter_form.attr("action");
|
||||
var label_form = $('#filter_labels');
|
||||
var status = 'status=' + $('#issues_status').attr('value');
|
||||
$.ajax({
|
||||
type: type_request,
|
||||
url: url,
|
||||
data: filter_form.serialize() + '&' + label_form.serialize() + '&' + status + '&' + data,
|
||||
success: function(data){
|
||||
$('article').html(data);
|
||||
$(".niceRadio").each(function() { changeRadioStart(jQuery(this)) });
|
||||
},
|
||||
error: function(data){
|
||||
alert('error') // TODO remove
|
||||
}
|
||||
});
|
||||
return false;
|
||||
};
|
||||
|
||||
$('#search_user, #search_labels').live('submit', function() {
|
||||
var id = $(this).attr('id');
|
||||
if(id.indexOf('user') != -1) { // FIXME
|
||||
var which = 'users';
|
||||
}
|
||||
else if (id.indexOf('labels') != -1) {
|
||||
var which = 'labels';
|
||||
}
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: $(this).attr("action"),
|
||||
data: $(this).serialize(),
|
||||
success: function(data){
|
||||
var tmp = $('#create_issue_'+ which +'_list');
|
||||
$('#create_issue_'+ which +'_list').html(data);
|
||||
},
|
||||
error: function(data){
|
||||
alert('error') // TODO remove
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
function remExecutor(form) {
|
||||
var el = form.find('.people.selected.remove_executor');
|
||||
var id = el.attr('id');
|
||||
$('#'+id+'.add_executor.people.selected').removeClass('select');
|
||||
el.remove();
|
||||
}
|
||||
|
||||
$('.add_executor.people.selected').live('click', function() {
|
||||
var form = $('.form.issue');
|
||||
form.find('#people-span').fadeOut(0);
|
||||
remExecutor(form);
|
||||
form.find('#issue_executor').html($(this).clone().removeClass('add_executor').addClass('remove_executor'));
|
||||
$(this).addClass('select');
|
||||
});
|
||||
|
||||
$('.remove_executor.people.selected').live('click', function() {
|
||||
var form = $('.form.issue');
|
||||
form.find('#people-span').fadeIn(0);
|
||||
remExecutor(form);
|
||||
});
|
||||
|
||||
function remLabel(form, id) {
|
||||
var el = form.find('.label.remove_label'+'#'+id);
|
||||
var label = $('#'+id+'.remove_label.label.selected');
|
||||
label.find('.flag').fadeIn(0);
|
||||
label.find('.labeltext.selected').removeClass('selected').attr('style', '');
|
||||
label.fadeIn('slow');
|
||||
el.fadeOut('slow').remove();
|
||||
}
|
||||
|
||||
$('.add_label.label').live('click', function() {
|
||||
$(this).addClass('selected').removeClass('add_label').addClass('remove_label');
|
||||
$(this).find('.labeltext').addClass('selected');
|
||||
var style = $(this).find('.flag').attr('style');
|
||||
$(this).find('.flag').fadeOut(0);
|
||||
$(this).find('.labeltext.selected').attr('style', style);
|
||||
var form = $('.form.issue');
|
||||
form.find('#flag-span').fadeOut(0);
|
||||
form.find('#issue_labels').append($(this).clone());
|
||||
});
|
||||
|
||||
$('.remove_label.label.selected').live('click', function() {
|
||||
var form = $('.form.issue');
|
||||
if(form.find('.remove_label.label.selected').length == 1) {
|
||||
form.find('#flag-span').fadeIn(0);
|
||||
}
|
||||
var str = '.label.remove_label'+'#'+$(this).attr('id');
|
||||
form.find(str).remove();
|
||||
var label = $(str);
|
||||
label.removeClass('selected').addClass('add_label').removeClass('remove_label');
|
||||
label.find('.labeltext.selected').attr('style', '').removeClass('selected');
|
||||
label.find('.flag').fadeIn(0);
|
||||
|
||||
});
|
||||
|
||||
$('.issue_status.switch_issue_status').live('click', function () {
|
||||
var button = $(this);
|
||||
var status = (button.hasClass('switcher')) ? 'closed' : 'open';
|
||||
var form = $('#update_issue_status');
|
||||
form.find('#issue_status').attr('value', status);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: form.attr("action"),
|
||||
data: form.serialize(),
|
||||
success: function(data){
|
||||
if (status == "open") { button.addClass('switcher').removeClass("switcher-off"); }
|
||||
else { button.removeClass('switcher').addClass("switcher-off"); }
|
||||
$('#closed_issue_text').html(data);
|
||||
},
|
||||
error: function(data){
|
||||
alert('error') // TODO remove
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#edit_issue_content').live('click', function() {
|
||||
$('.edit_form.issue').fadeIn('fast');
|
||||
$(this).fadeOut('fast');
|
||||
});
|
||||
|
||||
$('#cancel_edit_issue_content').live('click', function() {
|
||||
$('.edit_form.issue').fadeOut('fast');
|
||||
$('#edit_issue_content').fadeIn('fast');
|
||||
});
|
||||
|
||||
$('.edit_form.issue').live('submit', function() {
|
||||
var form = $(this);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: form.attr("action"),
|
||||
data: form.serialize(),
|
||||
success: function(data){
|
||||
form.fadeOut('slow');
|
||||
$('#edit_issue_content').fadeIn('slow');
|
||||
$('h3.issue_title').html(form.find('#issue_title').attr('value'));
|
||||
$('.fulltext.view.issue_body').html(form.find('#issue_body').attr('value'));
|
||||
},
|
||||
error: function(data){
|
||||
alert('error') // TODO remove
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
function showRow(elem) {
|
||||
if ($("#"+elem).css("display") == "none") {
|
||||
$("#"+elem).fadeIn("slow");
|
||||
} else {
|
||||
//$("#"+elem).fadeOut(0);
|
||||
}
|
||||
}
|
||||
|
||||
function hideRow(elem) {
|
||||
if ($("#"+elem).css("display") != "none") {
|
||||
$("#"+elem).fadeOut("fast");
|
||||
} else {
|
||||
//$("#"+elem).fadeOut(0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
/* tables */
|
||||
table.tablesorter {
|
||||
font-family:arial;
|
||||
margin:10px 0pt 15px;
|
||||
font-size: 12px;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
border: 1px solid #DDD;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
table.tablesorter thead th{
|
||||
padding-left: 5px;
|
||||
}
|
||||
|
||||
table.tablesorter thead tr th, table.tablesorter tfoot tr th {
|
||||
font-size: 12px;
|
||||
margin: 0px;
|
||||
}
|
||||
table.tablesorter thead tr .header {
|
||||
background-image: url("bg.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center left;
|
||||
cursor: pointer;
|
||||
}
|
||||
table.tablesorter tbody td {
|
||||
color: #3D3D3D;
|
||||
padding: 5px;
|
||||
margin: 0px;
|
||||
background-color: #FFF;
|
||||
vertical-align: top;
|
||||
|
||||
}
|
||||
table.tablesorter tbody tr.odd td {
|
||||
background-color:#F0F0F6;
|
||||
}
|
||||
table.tablesorter thead tr .headerSortUp {
|
||||
background-image: url("asc.png");
|
||||
}
|
||||
table.tablesorter thead tr .headerSortDown {
|
||||
background-image: url("desc.png");
|
||||
}
|
||||
table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSortUp {
|
||||
|
||||
}
|
||||
|
||||
table.tablesorter thead tr {
|
||||
height: 38px;
|
||||
background: #ededed;
|
||||
-webkit-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2);
|
||||
-moz-box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2);
|
||||
box-shadow: 0px 3px 3px -1px rgba(18, 86, 135, 0.2);
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
}
|
||||
|
||||
table.tablesorter thead tr th{
|
||||
border-bottom: 1px solid #FFF;
|
||||
}
|
||||
|
||||
table.tablesorter tr {
|
||||
position: relative;
|
||||
z-index: 70;
|
||||
}
|
||||
|
||||
table.tablesorter tbody tr td {
|
||||
border-bottom: 1px solid #DDD;
|
||||
}
|
||||
|
||||
table.tablesorter thead th {
|
||||
color: #575756;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
table.tablesorter tbody td {
|
||||
color: #58595b;
|
||||
padding-top: 8px;
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
table.tablesorter .th1 {
|
||||
width: 180px;
|
||||
/*padding-left: 17px;*/
|
||||
}
|
||||
|
||||
table.tablesorter .th2 {
|
||||
width: 390px;
|
||||
}
|
||||
|
||||
table.tablesorter .th3 {
|
||||
width: 110px;
|
||||
/*padding-left: 17px;*/
|
||||
}
|
||||
|
||||
table.tablesorter .td2 {
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
table.tablesorter .th4 {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
table.tablesorter .td5 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
table.tablesorter .td5 img{
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.table-sort-left {
|
||||
float: left;
|
||||
width: 25px;
|
||||
}
|
||||
|
||||
.table-sort-right {
|
||||
float: left;
|
||||
}
|
|
@ -1,4 +1,12 @@
|
|||
// PUT custom styles here ONLY
|
||||
|
||||
a#manage-labels {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
article a.edit_label {
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
header div.information div.user {
|
||||
float: left;
|
||||
margin-left: 5px;
|
||||
|
@ -36,7 +44,7 @@ article div.messages div.activity {
|
|||
}
|
||||
|
||||
article div.activity .top div.image {
|
||||
position: absolute;
|
||||
//position: absolute; // TODO broken issue page
|
||||
float: left;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
|
@ -129,137 +137,6 @@ article div.date-block div.date {
|
|||
height: 52px;
|
||||
}
|
||||
|
||||
article div#repo-wrapper div.hr {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
article table.commit_stats {
|
||||
line-height: 1.4em;
|
||||
margin-top: 12px;
|
||||
width: 100%;
|
||||
border-spacing: 0;
|
||||
border-top: 1px solid #DDDDDD;
|
||||
margin: 10px 0;
|
||||
padding: 0;
|
||||
font-size: 90%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
article table.commit_stats td {
|
||||
border-bottom: 1px solid #DDDDDD;
|
||||
padding: 0.4em 5px;
|
||||
}
|
||||
|
||||
article table.commit_stats .diffstat {
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
padding-right: 0;
|
||||
width: 1%;
|
||||
}
|
||||
|
||||
article div.file div.diff_data {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
article div.file table {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
#repo-wrapper table.diff td.line_numbers {
|
||||
-moz-user-select: none;
|
||||
font-size: 12px;
|
||||
padding: 0 0.5em;
|
||||
background-color: #ECECEC;
|
||||
border-right: 1px solid #DDDDDD;
|
||||
color: #999999;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#repo-wrapper table.diff td.line_numbers,
|
||||
#repo-wrapper table.diff td.header,
|
||||
#repo-wrapper table.diff td.code {
|
||||
font-family: 'Bitstream Vera Sans Mono','Courier',monospace;
|
||||
}
|
||||
|
||||
#repo-wrapper table.diff td.header {
|
||||
background-color: #ECECEC;
|
||||
color: #999999;
|
||||
width: 100%;
|
||||
line-height: 1.4em;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
#repo-wrapper table.diff td.code, #repo-wrapper table.diff td.header {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
#repo-wrapper table.diff pre {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#repo-wrapper table.diff .diff-content {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#repo-wrapper table.diff tr td.code.del {
|
||||
background-color: #FFDDDD;
|
||||
}
|
||||
|
||||
#repo-wrapper table.diff tr td.code.del .idiff {
|
||||
background-color: #F2ACAD;
|
||||
}
|
||||
|
||||
#repo-wrapper table.diff tr td.code.ins {
|
||||
background-color: #DDFFDD;
|
||||
}
|
||||
|
||||
#repo-wrapper table.diff tr td.code.ins .idiff {
|
||||
background-color: #BAFBAD;
|
||||
}
|
||||
|
||||
#repo-wrapper div.comment {
|
||||
background: none repeat scroll 0 0 #DCECFA;
|
||||
border: 1px solid #B3CCE0;
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 15px;
|
||||
padding: 6px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#repo-wrapper div.view {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#repo-wrapper div.comment div.wrapper {
|
||||
border: 1px solid #DEDEDE;
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
color: #575756;
|
||||
background: #FFFFFF;
|
||||
font-size: 12px;
|
||||
height: 110px;
|
||||
margin: 10px 0;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
#repo-wrapper div.comment div.wrapper textarea {
|
||||
border: none;
|
||||
color: #575756;
|
||||
font-family: Tahoma,Geneva,Helvetica,sans-serif;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
#repo-wrapper div.comment div.comment-left {
|
||||
float: left;
|
||||
font-size: 12px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
#repo-wrapper div.comment div.comment-right {
|
||||
float: right;
|
||||
.date_select {
|
||||
select {margin:3px 0px; padding:0px;}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -19,18 +19,11 @@ class BuildListsController < ApplicationController
|
|||
params[:filter].each do |k,v|
|
||||
new_params[:filter][k] = v unless v.empty?
|
||||
end
|
||||
|
||||
redirect_to build_lists_path(new_params)
|
||||
else
|
||||
filter_params = params[:filter] || {}
|
||||
if @project
|
||||
@action_url = project_build_lists_path(@project)
|
||||
else
|
||||
@action_url = build_lists_path
|
||||
end
|
||||
|
||||
@filter = BuildList::Filter.new(@project, filter_params)
|
||||
@build_lists = @filter.find.accessible_by(current_ability).recent.paginate :page => params[:page]
|
||||
@action_url = @project ? project_build_lists_path(@project) : build_lists_path
|
||||
@filter = BuildList::Filter.new(@project, current_user, params[:filter] || {})
|
||||
@build_lists = @filter.find.recent.paginate :page => params[:page]
|
||||
|
||||
@build_server_status = begin
|
||||
BuildServer.get_status
|
||||
|
|
|
@ -1,23 +1,38 @@
|
|||
# -*- encoding : utf-8 -*-
|
||||
class IssuesController < ApplicationController
|
||||
NON_RESTFUL_ACTION = [:create_label, :update_label, :destroy_label, :search_collaborators]
|
||||
before_filter :authenticate_user!
|
||||
before_filter :find_project
|
||||
before_filter :find_issue_by_serial_id, :only => [:show, :edit, :update, :destroy]
|
||||
|
||||
load_and_authorize_resource :project
|
||||
load_and_authorize_resource :issue, :through => :project, :find_by => :serial_id
|
||||
load_and_authorize_resource :project, :except => NON_RESTFUL_ACTION
|
||||
load_and_authorize_resource :issue, :through => :project, :find_by => :serial_id, :only => [:show, :edit, :update, :destroy]
|
||||
before_filter :load_and_authorize_label, :only => NON_RESTFUL_ACTION
|
||||
|
||||
autocomplete :user, :uname
|
||||
layout 'application'
|
||||
|
||||
def index
|
||||
def index(status = 200)
|
||||
logger.debug "!!!!!!!!!!!!!!!!!!"
|
||||
logger.debug "request format is #{request.format}"
|
||||
@is_assigned_to_me = params[:filter] == 'to_me'
|
||||
@status = params[:status] == 'closed' ? 'closed' : 'open'
|
||||
@labels = params[:labels] || []
|
||||
@issues = @project.issues
|
||||
case params[:status]
|
||||
when 'open'
|
||||
@issues = @issues.where(:status => 'open')
|
||||
when 'closed'
|
||||
@issues = @issues.where(:status => 'closed')
|
||||
@issues = @issues.where(:user_id => current_user.id) if @is_assigned_to_me
|
||||
@issues = @issues.joins(:labels).where(:labels => {:name => @labels}) unless @labels == []
|
||||
|
||||
if params[:search_issue]
|
||||
@issues = @issues.where('issues.title ILIKE ?', "%#{params[:search_issue].mb_chars.downcase}%")
|
||||
end
|
||||
@opened_issues = @issues.opened.count
|
||||
@closed_issues = @issues.closed.count
|
||||
@issues = @issues.where(:status => @status)
|
||||
|
||||
|
||||
@issues = @issues.includes(:creator, :user).order('serial_id desc').uniq.paginate :per_page => 10, :page => params[:page]
|
||||
if status == 200
|
||||
render 'index', :layout => request.format == '*/*' ? 'issues' : 'application' # maybe FIXME '*/*'?
|
||||
else
|
||||
render :status => status, :nothing => true
|
||||
end
|
||||
@issues = @issues.paginate :per_page => 10, :page => params[:page]
|
||||
end
|
||||
|
||||
def new
|
||||
|
@ -29,6 +44,7 @@ class IssuesController < ApplicationController
|
|||
@user_uname = params[:user_uname]
|
||||
|
||||
@issue = Issue.new(params[:issue])
|
||||
@issue.creator_id = current_user.id
|
||||
@issue.user_id = @user_id
|
||||
@issue.project_id = @project.id
|
||||
|
||||
|
@ -43,21 +59,18 @@ class IssuesController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
@user_id = @issue.user_id
|
||||
@user_uname = @issue.assign_uname
|
||||
end
|
||||
|
||||
def update
|
||||
@user_id = params[:user_id].blank? ? @issue.user_id : params[:user_id]
|
||||
@user_uname = params[:user_uname].blank? ? @issue.assign_uname : params[:user_uname]
|
||||
|
||||
if @issue.update_attributes( params[:issue].merge({:user_id => @user_id}) )
|
||||
flash[:notice] = I18n.t("flash.issue.saved")
|
||||
redirect_to [@project, @issue]
|
||||
if status = params[:issue][:status]
|
||||
action = 'issues/_status'
|
||||
@issue.set_close(current_user) if status == 'closed'
|
||||
@issue.set_open if status == 'open'
|
||||
status = 200 if @issue.save
|
||||
render action, :status => (status || 500), :layout => false
|
||||
else
|
||||
flash[:error] = I18n.t("flash.issue.save_error")
|
||||
render :action => :new
|
||||
@issue.title = params[:issue][:title]
|
||||
@issue.body = params[:issue][:body]
|
||||
status = 200 if @issue.save
|
||||
render :nothing => true, :status => (status || 500), :layout => false
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -68,13 +81,39 @@ class IssuesController < ApplicationController
|
|||
redirect_to root_path
|
||||
end
|
||||
|
||||
def create_label
|
||||
status = @project.labels.create(:name => params[:name], :color => params[:color]) ? 200 : 500
|
||||
index(status)
|
||||
end
|
||||
|
||||
def update_label
|
||||
status = @label.update_attributes( :name => params[:name], :color => params[:color]) ? 200 : 500
|
||||
index(status)
|
||||
end
|
||||
|
||||
def destroy_label
|
||||
status = (@label && @label_destroy) ? 200 : 500
|
||||
index(status)
|
||||
end
|
||||
|
||||
def search_collaborators
|
||||
search = "%#{params[:search_user]}%"
|
||||
users = User.joins(:groups => :projects).where(:projects => {:id => @project.id}).where("users.uname ILIKE ?", search)
|
||||
users2 = @project.collaborators.where("users.uname ILIKE ?", search)
|
||||
@users = (users + users2).uniq.sort {|x,y| x.uname <=> y.uname}.first(10)
|
||||
render 'issues/_search_collaborators', :layout => false
|
||||
end
|
||||
|
||||
def search_labels
|
||||
@labels = @project.labels.where("labels.name ILIKE ?", "%#{params[:search_labels]}%").order('labels.name').limit(10)
|
||||
render 'issues/_search_labels', :layout => false
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_project
|
||||
def load_and_authorize_label
|
||||
@project = Project.find(params[:project_id])
|
||||
end
|
||||
|
||||
def find_issue_by_serial_id
|
||||
@issue = @project.issues.find_by_serial_id!(params[:id])
|
||||
@label = Label.find(params[:label_id]) if params[:label_id]
|
||||
authorize! :write, @project
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,4 +9,15 @@ module ApplicationHelper
|
|||
|
||||
return title
|
||||
end
|
||||
|
||||
def layout_class
|
||||
case
|
||||
when params[:controller] == 'issues' && params[:action] == 'new'
|
||||
'nopadding'
|
||||
when params[:controller] == 'build_lists'
|
||||
'slim'
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
# -*- encoding : utf-8 -*-
|
||||
module IssuesHelper
|
||||
def tracker_search_field(name, txt)
|
||||
str = "<input name='#{name}' id='#{name}' type='text' value='#{txt}'"
|
||||
str << "onblur=\"if(this.value==''){this.value='#{txt}';this.className='gray';}\""
|
||||
str << "onclick=\"if(this.value=='#{txt}'){this.value='';this.className='black';}\" class=\"gray\">"
|
||||
str.html_safe
|
||||
end
|
||||
end
|
||||
|
|
|
@ -55,12 +55,14 @@ class Ability
|
|||
#can :create, AutoBuildList
|
||||
#can [:index, :destroy], AutoBuildList, :project_id => user.own_project_ids
|
||||
|
||||
can [:read, :owned], BuildList, :user_id => user.id
|
||||
can :read, BuildList, :project => {:visibility => 'open'}
|
||||
can :read, BuildList, :project => {:owner_type => 'User', :owner_id => user.id}
|
||||
can :read, BuildList, :project => {:owner_type => 'Group', :owner_id => user.group_ids}
|
||||
can [:read, :related], BuildList, :project => {:owner_type => 'User', :owner_id => user.id}
|
||||
can [:read, :related], BuildList, :project => {:owner_type => 'Group', :owner_id => user.group_ids}
|
||||
can(:read, BuildList, read_relations_for('build_lists', 'projects')) {|build_list| can? :read, build_list.project}
|
||||
can(:create, BuildList) {|build_list| can? :write, build_list.project}
|
||||
can(:publish, BuildList) {|build_list| build_list.can_publish? && can?(:write, build_list.project)}
|
||||
can(:cancel, BuildList) {|build_list| build_list.can_cancel? && can?(:write, build_list.project)}
|
||||
|
||||
can :read, Platform, :visibility => 'open'
|
||||
can :read, Platform, :owner_type => 'User', :owner_id => user.id
|
||||
|
|
|
@ -35,8 +35,9 @@ class BuildList < ActiveRecord::Base
|
|||
BuildServer::PLATFORM_PENDING,
|
||||
BuildServer::PROJECT_NOT_FOUND,
|
||||
BuildServer::PROJECT_VERSION_NOT_FOUND,
|
||||
BuildServer::BINARY_TEST_FAILED,
|
||||
BuildServer::DEPENDENCY_TEST_FAILED ]
|
||||
# BuildServer::BINARY_TEST_FAILED,
|
||||
# BuildServer::DEPENDENCY_TEST_FAILED
|
||||
]
|
||||
|
||||
HUMAN_STATUSES = { WAITING_FOR_RESPONSE => :waiting_for_response,
|
||||
BUILD_CANCELED => :build_canceled,
|
||||
|
@ -51,8 +52,8 @@ class BuildList < ActiveRecord::Base
|
|||
BuildServer::PLATFORM_PENDING => :platform_pending,
|
||||
BuildServer::PROJECT_NOT_FOUND => :project_not_found,
|
||||
BuildServer::PROJECT_VERSION_NOT_FOUND => :project_version_not_found,
|
||||
BuildServer::DEPENDENCY_TEST_FAILED => :dependency_test_failed,
|
||||
BuildServer::BINARY_TEST_FAILED => :binary_test_failed
|
||||
# BuildServer::DEPENDENCY_TEST_FAILED => :dependency_test_failed,
|
||||
# BuildServer::BINARY_TEST_FAILED => :binary_test_failed
|
||||
}
|
||||
|
||||
scope :recent, order("#{table_name}.updated_at DESC")
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
# -*- encoding : utf-8 -*-
|
||||
class BuildList::Filter
|
||||
def initialize(project, options = {})
|
||||
def initialize(project, user, options = {})
|
||||
@project = project
|
||||
@user = user
|
||||
set_options(options)
|
||||
end
|
||||
|
||||
|
@ -11,6 +12,7 @@ class BuildList::Filter
|
|||
if @options[:bs_id]
|
||||
build_lists = build_lists.where(:bs_id => @options[:bs_id])
|
||||
else
|
||||
build_lists = build_lists.accessible_by(::Ability.new(@user), @options[:ownership].to_sym) if @options[:ownership]
|
||||
build_lists = build_lists.for_status(@options[:status]) if @options[:status]
|
||||
build_lists = build_lists.scoped_to_arch(@options[:arch_id]) if @options[:arch_id]
|
||||
build_lists = build_lists.scoped_to_project_version(@options[:project_version]) if @options[:project_version]
|
||||
|
@ -25,7 +27,7 @@ class BuildList::Filter
|
|||
end
|
||||
end
|
||||
|
||||
build_lists.recent
|
||||
build_lists
|
||||
end
|
||||
|
||||
def respond_to?(name)
|
||||
|
@ -41,6 +43,7 @@ class BuildList::Filter
|
|||
|
||||
def set_options(options)
|
||||
@options = HashWithIndifferentAccess.new(options.reverse_merge({
|
||||
:ownership => nil,
|
||||
:status => nil,
|
||||
:created_at_start => nil,
|
||||
:created_at_end => nil,
|
||||
|
@ -53,6 +56,7 @@ class BuildList::Filter
|
|||
:project_name => nil
|
||||
}))
|
||||
|
||||
@options[:ownership] = @options[:ownership].presence || 'index'
|
||||
@options[:status] = @options[:status].present? ? @options[:status].to_i : nil
|
||||
@options[:created_at_start] = build_date_from_params(:created_at_start, @options)
|
||||
@options[:created_at_end] = build_date_from_params(:created_at_end, @options)
|
||||
|
|
|
@ -4,9 +4,13 @@ class Issue < ActiveRecord::Base
|
|||
|
||||
belongs_to :project
|
||||
belongs_to :user
|
||||
belongs_to :creator, :class_name => 'User', :foreign_key => 'creator_id'
|
||||
belongs_to :closer, :class_name => 'User', :foreign_key => 'closed_by'
|
||||
|
||||
has_many :comments, :as => :commentable, :dependent => :destroy #, :finder_sql => proc { "comments.commentable_id = '#{self.id}' AND comments.commentable_type = '#{self.class.name}'"}
|
||||
has_many :subscribes, :as => :subscribeable, :dependent => :destroy #, :finder_sql => proc { "subscribes.subscribeable_id = '#{self.id}' AND subscribes.subscribeable_type = '#{self.class.name}'"}
|
||||
has_many :labels, :through => :labelings
|
||||
has_many :labelings
|
||||
|
||||
validates :title, :body, :project_id, :presence => true
|
||||
|
||||
|
@ -19,6 +23,12 @@ class Issue < ActiveRecord::Base
|
|||
after_update :deliver_issue_assign_notification
|
||||
after_update :subscribe_issue_assigned_user
|
||||
|
||||
attr_accessible :labelings_attributes, :title, :body, :project, :project_id, :closed_at, :closed_by
|
||||
accepts_nested_attributes_for :labelings, :allow_destroy => true
|
||||
|
||||
scope :opened, where(:status => 'open', :closed_by => nil, :closed_at => nil)
|
||||
scope :closed, where(:status => 'closed').where("closed_by is not null and closed_at is not null")
|
||||
|
||||
def assign_uname
|
||||
user.uname if user
|
||||
end
|
||||
|
@ -33,6 +43,21 @@ class Issue < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def closed?
|
||||
closed_by && closed_at && status == 'closed'
|
||||
end
|
||||
|
||||
def set_close(closed_by)
|
||||
self.closed_at = Time.now
|
||||
self.closer = closed_by
|
||||
self.status = 'closed'
|
||||
end
|
||||
|
||||
def set_open
|
||||
self.closed_at = self.closed_by = nil
|
||||
self.status = 'open'
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def set_serial_id
|
||||
|
@ -81,4 +106,5 @@ class Issue < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
class Label < ActiveRecord::Base
|
||||
has_many :labelings, :dependent => :destroy
|
||||
has_many :issues, :through => :labelings
|
||||
belongs_to :project
|
||||
|
||||
validates :name, :uniqueness => { :scope => :project_id}
|
||||
validates :name, :color, :presence => true
|
||||
validates :color, :format => { :with => /\A([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})\z/, :message => I18n.t('layout.issues.invalid_labels')}
|
||||
end
|
|
@ -0,0 +1,5 @@
|
|||
class Labeling < ActiveRecord::Base
|
||||
belongs_to :issue
|
||||
belongs_to :label
|
||||
|
||||
end
|
|
@ -17,6 +17,7 @@ class Project < ActiveRecord::Base
|
|||
has_many :relations, :as => :target, :dependent => :destroy
|
||||
has_many :collaborators, :through => :relations, :source => :object, :source_type => 'User'
|
||||
has_many :groups, :through => :relations, :source => :object, :source_type => 'Group'
|
||||
has_many :labels
|
||||
|
||||
validates :name, :uniqueness => {:scope => [:owner_id, :owner_type], :case_sensitive => false}, :presence => true, :format => {:with => /^[a-zA-Z0-9_\-\+\.]+$/}
|
||||
validates :owner, :presence => true
|
||||
|
|
|
@ -93,6 +93,10 @@ class User < ActiveRecord::Base
|
|||
email.downcase == commit.committer.email.downcase
|
||||
end
|
||||
|
||||
def avatar(size)
|
||||
"https://secure.gravatar.com/avatar/#{Digest::MD5.hexdigest(email.downcase)}?s=#{size}&r=pg"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_settings_notifier
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
%tr{:id => "row#{build_list_counter}"}
|
||||
%td= link_to (build_list.bs_id.present? ? build_list.bs_id : t("layout.build_lists.bs_id_not_set")), build_list
|
||||
%td= build_list.human_status
|
||||
%td= link_to build_list.project_version, "#"
|
||||
%td= link_to build_list.project.name, build_list.project
|
||||
%td= build_list.arch.name
|
||||
%td= link_to build_list.user.fullname, build_list.user
|
||||
%td= link_to image_tag('x.png', :class => 'delete-row', :id => "delete-row#{build_list_counter}"), cancel_build_list_path(build_list), :method => :put, :confirm => t('layout.confirm') if can?(:cancel, build_list)
|
||||
%td= build_list.notified_at
|
|
@ -1,25 +0,0 @@
|
|||
%table.table
|
||||
%tr
|
||||
%th.first= t("activerecord.attributes.build_list.bs_id")
|
||||
%th= t("activerecord.attributes.build_list.status")
|
||||
%th= t("activerecord.attributes.build_list.project_version")
|
||||
%th= t("activerecord.attributes.build_list.project")
|
||||
%th= t("activerecord.attributes.build_list.arch")
|
||||
%th= t("activerecord.attributes.build_list.user")
|
||||
- unless @project
|
||||
%th= t("layout.build_lists.cancel_button_header")
|
||||
%th.last= t("activerecord.attributes.build_list.notified_at")
|
||||
|
||||
- build_lists.each do |build_list|
|
||||
%tr{:class => cycle("odd", "even")}
|
||||
%td= link_to (build_list.bs_id.present? ? build_list.bs_id : t("layout.build_lists.bs_id_not_set")), build_list
|
||||
%td= build_list.human_status
|
||||
%td= link_to build_list.project_version, "#"
|
||||
%td= link_to build_list.project.name, project_path(build_list.project)
|
||||
%td= build_list.arch.name
|
||||
%td= build_list.user.try(:fullname)
|
||||
- unless @project
|
||||
%td= link_to t("layout.build_lists.cancel_button"), cancel_build_list_path(build_list), :method => "put", :confirm => t("layout.confirm") if build_list.can_cancel?
|
||||
%td.last= build_list.notified_at
|
||||
|
||||
= will_paginate build_lists
|
|
@ -1,50 +0,0 @@
|
|||
%h2.title= t("layout.build_lists.filter_header")
|
||||
|
||||
= form_for :filter, :url => @action_url, :html => { :method => :post, :class => :form } do |f|
|
||||
.columns.wat-cf
|
||||
.column.left
|
||||
.group
|
||||
= f.label :status, t("activerecord.attributes.build_list.status"), :class => :label
|
||||
= f.select :status, BuildList::STATUSES.collect{|status| [BuildList.human_status(status), status]}, :include_blank => true, :selected => @filter.status
|
||||
.group
|
||||
= f.label :arch_id, t("activerecord.attributes.build_list.arch"), :class => :label
|
||||
= f.select :arch_id, Arch.recent.collect{|arch| [arch.name, arch.id]}, :include_blank => true, :selected => @filter.arch_id
|
||||
.column.right
|
||||
- if @project
|
||||
.group
|
||||
= f.label :project_version, t("activerecord.attributes.build_list.project_version"), :class => :label
|
||||
= f.select :project_version, @project.versions, :include_blank => true, :selected => @filter.project_version
|
||||
.group
|
||||
= f.label :is_circle, t("activerecord.attributes.build_list.is_circle"), :class => :label
|
||||
= f.select :is_circle, [[t("layout.yes_"), 1], [t("layout.no_"), 0]], :include_blank => true, :selected => @filter.is_circle.present? ? (@filter.is_circle ? "1" : "0") : nil
|
||||
|
||||
.columns.wat-cf
|
||||
.column.left
|
||||
.group
|
||||
= f.label :created_at_start, t("layout.build_lists.created_at_start"), :class => :label
|
||||
= f.date_select(:created_at_start, :include_blank => true, :selected => @filter.created_at_start)
|
||||
.group
|
||||
= f.label :notified_at_start, t("layout.build_lists.notified_at_start"), :class => :label
|
||||
= f.date_select(:notified_at_start, :include_blank => true, :selected => @filter.notified_at_start)
|
||||
.column.right
|
||||
.group
|
||||
= f.label :created_at_end, t("layout.build_lists.created_at_end"), :class => :label
|
||||
= f.date_select(:created_at_end, :include_blank => true, :selected => @filter.created_at_end)
|
||||
.group
|
||||
= f.label :notified_at_end, t("layout.build_lists.notified_at_end"), :class => :label
|
||||
= f.date_select(:notified_at_end, :include_blank => true, :selected => @filter.notified_at_end)
|
||||
|
||||
.columns.wat-cf
|
||||
.column.left
|
||||
.group
|
||||
= f.label :project_name, t("layout.build_lists.project_name_search"), :class => :label
|
||||
= f.text_field :project_name, :class => :text_field
|
||||
.column.right
|
||||
.group
|
||||
= f.label :bs_id, t("layout.build_lists.bs_id_search"), :class => :label
|
||||
= f.text_field :bs_id, :class => :text_field
|
||||
|
||||
.group.navform.wat-cf
|
||||
%button.button{ :type => "submit" }
|
||||
= image_tag("choose.png", :alt => "Save")
|
||||
= t("layout.search")
|
|
@ -1,10 +1,53 @@
|
|||
.block.notice
|
||||
%h3= t("layout.repositories.current_repository_header")
|
||||
.content
|
||||
- project.repositories.each do |repository|
|
||||
%p= link_to "#{repository.name} (#{repository.platform.name})", platform_repository_path(repository.platform, repository)
|
||||
- content_for :sidebar do
|
||||
.bordered.nopadding
|
||||
%h3= t('layout.build_lists.build_server_status.header')
|
||||
.table
|
||||
.lefter= t('layout.build_lists.build_server_status.client_count')
|
||||
.righter= @build_server_status['client_count']
|
||||
.both
|
||||
.table
|
||||
.lefter= t('layout.build_lists.build_server_status.count_new_task')
|
||||
.righter= @build_server_status['count_new_task']
|
||||
.both
|
||||
.table
|
||||
.lefter= t('layout.build_lists.build_server_status.count_build_task')
|
||||
.righter= @build_server_status['count_build_task']
|
||||
.both
|
||||
|
||||
.block.notice
|
||||
%h3= t("layout.projects.current_project_header")
|
||||
.content
|
||||
%p= link_to project.name, project
|
||||
= form_for :filter, :url => @action_url, :html => { :method => :post, :class => :form } do |f|
|
||||
.bordered.nopadding
|
||||
%h3= t("layout.build_lists.ownership.header")
|
||||
.table
|
||||
.lefter= f.radio_button :ownership, 'owned', :class => 'niceRadio', :id => 'myradio1'
|
||||
.lefter= t("layout.build_lists.ownership.owned")
|
||||
.both
|
||||
.table
|
||||
.lefter= f.radio_button :ownership, 'related', :class => 'niceRadio', :id => 'myradio2'
|
||||
.lefter= t("layout.build_lists.ownership.related")
|
||||
.both
|
||||
.table
|
||||
.lefter= f.radio_button :ownership, 'index', :class => 'niceRadio', :id => 'myradio3'
|
||||
.lefter= t("layout.build_lists.ownership.index")
|
||||
.both
|
||||
.block
|
||||
%h3.small= t("activerecord.attributes.build_list.status")
|
||||
.lineForm.aside= f.select :status, BuildList::STATUSES.collect{|status| [BuildList.human_status(status), status]}, {:include_blank => true, :selected => @filter.status}, {:class => 'sel80 aside', :id => 'status', :tabindex => 2}
|
||||
%h3.small= t("activerecord.attributes.build_list.is_circle")
|
||||
.lineForm.aside= f.select :is_circle, [[t("layout.yes_"), 1], [t("layout.no_"), 0]], {:include_blank => true, :selected => @filter.is_circle.present? ? (@filter.is_circle ? "1" : "0") : nil}, {:class => 'sel80 aside', :id => 'recurrent', :tabindex => 2}
|
||||
%h3.small= t("activerecord.attributes.build_list.arch")
|
||||
.lineForm.aside= f.select :arch_id, Arch.recent.collect{|arch| [arch.name, arch.id]}, {:include_blank => true, :selected => @filter.arch_id}, {:class => 'sel80 aside', :id => 'architecture', :tabindex => 2}
|
||||
%h3.small= t("layout.build_lists.created_at_start")
|
||||
.date_select= f.date_select(:created_at_start, :include_blank => true, :selected => @filter.created_at_start)
|
||||
%h3.small= t("layout.build_lists.created_at_end")
|
||||
.date_select= f.date_select(:created_at_end, :include_blank => true, :selected => @filter.created_at_end)
|
||||
%h3.small= t("layout.build_lists.notified_at_start")
|
||||
.date_select= f.date_select(:notified_at_start, :include_blank => true, :selected => @filter.notified_at_start)
|
||||
%h3.small= t("layout.build_lists.notified_at_end")
|
||||
.date_select= f.date_select(:notified_at_end, :include_blank => true, :selected => @filter.notified_at_end)
|
||||
%h3.small= t("layout.build_lists.project_name_search")
|
||||
= f.text_field :project_name
|
||||
%h3.small= t("layout.build_lists.bs_id_search")
|
||||
= f.text_field :bs_id
|
||||
%br
|
||||
%br
|
||||
= f.submit t("layout.search")
|
|
@ -0,0 +1,6 @@
|
|||
- content_for :sub_menu do
|
||||
.left
|
||||
%nav
|
||||
%ul
|
||||
%li= link_to t('layout.projects.list_header'), build_lists_path, :class => current_page?(:controller => 'build_lists') ? 'active' : nil
|
||||
%li= link_to t('layout.products.list_header'), '#'
|
|
@ -1,28 +1,19 @@
|
|||
.block
|
||||
- if @project
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first= link_to t("layout.build_lists.current"), project_path(@project) + "#build_lists"
|
||||
%li.active= link_to t("layout.build_lists.all"), project_build_lists_path(@project)
|
||||
/ #myTable
|
||||
%table.tablesorter{:cellpadding => "0", :cellspacing => "0"}
|
||||
%thead
|
||||
%tr
|
||||
%th.lpadding16= t("activerecord.attributes.build_list.bs_id")
|
||||
%th.lpadding16= t("activerecord.attributes.build_list.status")
|
||||
%th.lpadding16= t("activerecord.attributes.build_list.project_version")
|
||||
%th.lpadding16= t("activerecord.attributes.build_list.project")
|
||||
%th.lpadding16= t("activerecord.attributes.build_list.arch")
|
||||
%th.lpadding16= t("activerecord.attributes.build_list.user")
|
||||
%th= t("layout.build_lists.action")
|
||||
%th.lpadding16= t("activerecord.attributes.build_list.notified_at")
|
||||
%tbody= render @build_lists
|
||||
.both
|
||||
|
||||
.content
|
||||
- unless @project
|
||||
.inner
|
||||
%h2= t('layout.build_lists.build_server_status.header')
|
||||
.field
|
||||
%span= t('layout.build_lists.build_server_status.client_count') + ":"
|
||||
%span= @build_server_status['client_count']
|
||||
.field
|
||||
%span= t('layout.build_lists.build_server_status.count_new_task') + ":"
|
||||
%span= @build_server_status['count_new_task']
|
||||
.field
|
||||
%span= t('layout.build_lists.build_server_status.count_build_task') + ":"
|
||||
%span= @build_server_status['count_build_task']
|
||||
|
||||
.inner
|
||||
= render :partial => "build_lists/filter", :action_url => @action_url
|
||||
= will_paginate @build_lists
|
||||
|
||||
.inner
|
||||
= render :partial => "build_lists/build_lists", :object => @build_lists
|
||||
|
||||
- content_for :sidebar, render('sidebar', :project => @project) if @project
|
||||
= render 'build_lists/sub_menu'
|
||||
= render 'build_lists/sidebar'
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
-current_color ||= '0054a6'
|
||||
.colors
|
||||
- ['0054a6', '00a651', 'ed1c24', 'e65c00', '9e005d', '464646', '8c6239'].each do |color|
|
||||
.color{:style => "background: ##{color};"}
|
||||
#choose1.choose{:value => color, :class => current_color == color ? 'selected' : ''}
|
||||
.both
|
|
@ -0,0 +1,39 @@
|
|||
-content_for :sidebar do
|
||||
- if @issue.persisted?
|
||||
.bordered.nopadding
|
||||
%h3=t('activerecord.attributes.issue.status')
|
||||
#switcher.issue_status{:class => "#{@issue.closed? ? 'switcher-off' : 'switcher'} #{can?(:write, @issue.project) ? "switch_issue_status" : ''}"}
|
||||
.swleft=t('layout.issues.status.open')
|
||||
.swright=t('layout.issues.status.closed')
|
||||
- if can? :write, @issue.project
|
||||
=form_tag [@project, @issue], :id => 'update_issue_status', :method => :put do
|
||||
=hidden_field_tag "issue_status", @issue.closed? ? 'closed' : 'open', :name => "issue[status]"
|
||||
|
||||
.bordered.nopadding
|
||||
%h3=t('layout.issues.executor')
|
||||
- if @issue.persisted? && @issue.user
|
||||
.bordered.nopadding
|
||||
.people.nopointer
|
||||
.avatar=image_tag(@issue.user.avatar(25), :alt => 'avatar')
|
||||
.name="#{@issue.user.uname} (#{@issue.user.name})"
|
||||
=hidden_field_tag "user-0", @issue.user.id, :name => 'user_id'
|
||||
.both
|
||||
- else
|
||||
=form_tag search_collaborators_project_issues_path(@project), :id => 'search_user', :method => :get do
|
||||
=tracker_search_field(:search_user, t('layout.issues.search_user'))
|
||||
#create_issue_users_list
|
||||
=render 'issues/search_collaborators'
|
||||
|
||||
.block
|
||||
%h3=t('layout.issues.labels')
|
||||
- if @issue.new_record?
|
||||
=form_tag search_labels_project_issues_path(@project), :id => 'search_labels', :method => :get do
|
||||
=tracker_search_field(:search_labels, t('layout.issues.search_labels'))
|
||||
#create_issue_labels_list
|
||||
=render 'issues/search_labels'
|
||||
- else
|
||||
- (@issue.labels || []).each_with_index do |label|
|
||||
.label.selected.nopointer
|
||||
.labeltext.selected{:style => "background: ##{label.color};"}
|
||||
=label.name
|
||||
.both
|
|
@ -1,24 +1,19 @@
|
|||
.group
|
||||
= f.label :title, :class => :label
|
||||
= f.text_field :title, :class => 'text_field'
|
||||
|
||||
.group
|
||||
= f.label :body, :class => :label
|
||||
= f.text_area :body, :class => 'text_field', :cols => 80
|
||||
|
||||
- unless @issue.new_record?
|
||||
.group
|
||||
= f.label :status, :class => :label
|
||||
= f.select :status, Issue::STATUSES, :class => 'text_field'
|
||||
|
||||
.group
|
||||
= label_tag "", t("activerecord.attributes.issue.user_id"), :class => :label
|
||||
= autocomplete_field_tag 'user_id', @user_uname, autocomplete_user_uname_platforms_path, :id_element => '#user_id_field'
|
||||
= hidden_field_tag 'user_id', @user_id, :id => 'user_id_field'
|
||||
|
||||
.group.navform.wat-cf
|
||||
%button.button{:type => "submit"}
|
||||
= image_tag("choose.png", :alt => t("layout.save"))
|
||||
= t("layout.save")
|
||||
%span.text_button_padding= t("layout.or")
|
||||
= link_to t("layout.cancel"), project_path(@project), :class => "text_button_padding link_button"
|
||||
.leftlist= t('activerecord.attributes.issue.title') + ':'
|
||||
.rightlist= f.text_field :title
|
||||
.leftlist= t('activerecord.attributes.issue.body') + ':'
|
||||
.rightlist= f.text_area :body
|
||||
.both
|
||||
.leftlist= t('activerecord.attributes.issue.user') + ':'
|
||||
.rightlist
|
||||
%span#people-span.small-text= t('layout.issues.choose_user_on_left')
|
||||
#issue_executor
|
||||
.both
|
||||
.leftlist= t('layout.issues.labels')
|
||||
.rightlist
|
||||
%span#flag-span.small-text= t('layout.issues.choose_labels_on_left')
|
||||
#issue_labels
|
||||
.both
|
||||
.leftlist
|
||||
.rightlist
|
||||
%input{:type => "submit", :value => t(@issue.new_record? ? 'layout.create' : 'layout.update')}
|
||||
.both
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
-content_for :sidebar do
|
||||
=form_tag project_issues_path(@project), :id => 'filter_issues', :method => :get do
|
||||
.bordered.nopadding
|
||||
%h3=t("layout.issues.accessory")
|
||||
%table
|
||||
%tr
|
||||
%td.width18=radio_button_tag :myradio, 'all', !@is_assigned_to_me, {:id => 'myradio1', :class => 'niceRadio', :name => 'filter'}
|
||||
%td.width135=t("layout.issues.all")
|
||||
%td.width30.right=@project.issues.count
|
||||
%tr
|
||||
%td=radio_button_tag :myradio, 'to_me', @is_assigned_to_me, {:id => 'myradio1', :class => 'niceRadio', :name => 'filter'}
|
||||
%td=t("layout.issues.to_me")
|
||||
%td.width30.right=@project.issues.where(:user_id => current_user).count
|
||||
=form_tag project_issues_path(@project), :id => 'search_issue', :method => :get do
|
||||
.bordered.bpadding20
|
||||
=tracker_search_field(:search_issue, t('layout.issues.search'))
|
||||
.bordered.nopadding
|
||||
%h3.bmargin10=t('layout.issues.new')
|
||||
= link_to t("layout.add"), new_project_issue_path(@project), :class => 'button' if can? :new, Issue.new(:project_id => @project.id)
|
||||
=render :partial => 'labels'
|
|
@ -0,0 +1,25 @@
|
|||
%tr#row1{:name => "row", :class => issue.labels.map(&:name).compact}
|
||||
%td.td0
|
||||
%span{:style => "display: none;"}=issue.serial_id
|
||||
%td.td1=issue.serial_id
|
||||
%td
|
||||
%div=issue.title
|
||||
.smalltext
|
||||
=issue.created_at.to_s(:long)
|
||||
=t("layout.issues.by") if issue.creator
|
||||
=link_to(issue.creator.uname, user_path(issue.creator)) if issue.creator
|
||||
.label.selected.tracker
|
||||
-issue.labels.each do |label|
|
||||
.labeltext.selected{:style => "background: ##{label.color};"}=label.name
|
||||
.both
|
||||
%td.td3
|
||||
%a{:href => project_issue_path(@project.id, issue.serial_id)}
|
||||
.code='#'
|
||||
.avatar
|
||||
=link_to image_tag(issue.user.avatar(22), :alt => 'avatar'), user_path(issue.user) if issue.user
|
||||
%a{:href => "#{project_issue_path @project, issue}#block-list"}
|
||||
.answers
|
||||
.pic
|
||||
%img{:alt => '', :src => "/assets/answers.png"}
|
||||
.count=issue.comments.count
|
||||
.both
|
|
@ -0,0 +1,46 @@
|
|||
.block
|
||||
%h3=t('layout.issues.labels')
|
||||
#labels-stock
|
||||
=form_tag project_issues_path(@project), :id => 'filter_labels', :method => :get do
|
||||
- @project.labels.each_with_index do |label, index|
|
||||
.div-tracker-labels{:id => "label-#{label.name}", :style => @labels.include?(label.name) ? "background-color:##{label.color};color:'#FFF'" : ''}
|
||||
.div-label-left
|
||||
.label
|
||||
.flag{:id => "flag-#{label.name}", :style => "background-color: ##{label.color};"}
|
||||
.labeltext=label.name
|
||||
=check_box_tag 'labels[]', label.name, @labels.include?(label.name), :style => 'display:none'
|
||||
.both
|
||||
.div-label-right=Labeling.joins(:label).where(:labels => {:name => label.name, :project_id => @project.id}).count
|
||||
.both
|
||||
.both
|
||||
- if can? :write, @project
|
||||
%a#manage-labels.button.tmargin10{:href => "#labels-stock"}=t('layout.issues.label_manage')
|
||||
#labels-edit{:style => "display: none;"}
|
||||
- @project.labels.each_with_index do |label, index|
|
||||
.label.edit{:id => "label-#{index}"}
|
||||
.labeltext.edit{:style => "background: ##{label.color};"}
|
||||
.text=link_to(label.name, project_issues_update_label_path(@project, label.id), :class => 'edit_label')
|
||||
.delete{:id => "delete#{index}"}
|
||||
%a{:href => project_issues_delete_label_path(@project, label.id), :class => 'delete_label'}
|
||||
%img{:alt => "x", :src => "/assets/x-label.png"}
|
||||
.both
|
||||
.edit_label_form{:style => 'display:none'}
|
||||
=form_tag project_issues_update_label_path(@project, label.id), :id => 'update_label', :method => :post do
|
||||
%input.gray{:name => 'name', :type => "text", :value => label.name}
|
||||
=render :partial => 'issues/colors_chooser', :locals => {:current_color => label.color}
|
||||
.lefter
|
||||
%a{:href => "#custom_color-#{label.name}", :id => "custom_color-#{label.name}", :class => 'custom_color'}=t('layout.issues.label_custom_color')
|
||||
=text_field_tag :color, label.color, :id => 'label_color', :class => 'gray', :style => 'display:none', :maxlength => 6
|
||||
.righter
|
||||
=link_to t('layout.update'), project_issues_update_label_path(@project, label.id), :id => 'update_label', :class => 'button'
|
||||
.both
|
||||
|
||||
=form_tag create_label_project_issues_path(@project), :id => 'new_label', :method => :post do
|
||||
=tracker_search_field(:name, t('layout.issues.new_label'))
|
||||
=render :partial => 'issues/colors_chooser'
|
||||
.lefter
|
||||
%a{:href => "#custom_color", :id => 'custom_color', :class => 'custom_color'}=t('layout.issues.label_custom_color')
|
||||
=text_field_tag :color, '0054a6', :id => 'label_color', :class => 'gray', :style => 'display:none', :maxlength => 6
|
||||
.righter
|
||||
=link_to t('layout.add'), create_label_project_issues_path(@project), :id => 'add_label', :class => 'button'
|
||||
.both
|
|
@ -1,18 +0,0 @@
|
|||
%table.table
|
||||
%tr
|
||||
%th.first= t("activerecord.attributes.issue.title")
|
||||
%th.first= t("activerecord.attributes.issue.user")
|
||||
%th.first= t("activerecord.attributes.issue.status")
|
||||
%th.last
|
||||
- @issues.each do |issue|
|
||||
%tr{:class => cycle("odd", "even")}
|
||||
%td
|
||||
= link_to issue.title, [@project, issue]
|
||||
%td
|
||||
= link_to issue.user.uname, user_path(issue.user) if issue.user
|
||||
%td
|
||||
= issue.status
|
||||
%td.last
|
||||
= link_to t("layout.show"), [@project, issue]
|
||||
|
|
||||
= link_to t("layout.delete"), project_issue_path(@project, issue), :method => :delete, :confirm => t("layout.issues.confirm_delete") if can? :destroy, issue
|
|
@ -0,0 +1,6 @@
|
|||
- (@users || []).each_with_index do |user, index|
|
||||
.people.selected{:id => "user-#{index}", :class => 'add_executor'}
|
||||
.avatar=image_tag(user.avatar(25), :alt => 'avatar')
|
||||
.name="#{user.uname} (#{user.name})"
|
||||
=hidden_field_tag "user-#{index}", user.id, :name => 'user_id'
|
||||
.both
|
|
@ -0,0 +1,6 @@
|
|||
- (@labels || []).each_with_index do |label, index|
|
||||
.add_label.label{:id => "flag#{index}"}
|
||||
.flag{:style => "background: ##{label.color};"}
|
||||
.labeltext=label.name
|
||||
=hidden_field_tag "label-#{index}", label.id, :name => "issue[labelings_attributes][#{index}][label_id]"
|
||||
.both
|
|
@ -0,0 +1,9 @@
|
|||
#closed_issue_text
|
||||
- if @issue.status == 'closed' && @issue.closed_at && @issue.closed_by
|
||||
#closed-comment.comment-closed{:style => 'display: block;'}
|
||||
.state=t('layout.issues.status.closed')
|
||||
.text
|
||||
.avatar=image_tag(@issue.closer.avatar(25), :alt => 'avatar')
|
||||
.name="#{@issue.closer.uname} (#{@issue.closer.name}) #{t('layout.issues.at')} #{@issue.closed_at.to_s(:long)}"
|
||||
.both
|
||||
%br/
|
|
@ -1,11 +0,0 @@
|
|||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first= link_to t("layout.issues.list"), project_issues_path(@project)
|
||||
%li= link_to t("layout.issues.new"), new_project_issue_path(@project)
|
||||
.content
|
||||
%h2.title
|
||||
= t("layout.issues.edit_header")
|
||||
.inner
|
||||
= form_for @issue, :url => project_issue_path(@project, @issue), :html => { :class => :form } do |f|
|
||||
= render :partial => "form", :locals => {:f => f}
|
|
@ -1,22 +1,21 @@
|
|||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first.active= link_to t("layout.issues.list"), project_issues_path(@project)
|
||||
%li= link_to t("layout.issues.new"), new_project_issue_path(@project) if can? :new, Issue.new(:project_id => @project.id)
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li{:class => "first " + (params[:status].blank? ? "active" : "")}
|
||||
= link_to t("layout.issues.statuses.any"), project_issues_path(@project)
|
||||
%li{:class => "first " + (params[:status] == 'open' ? "active" : "")}
|
||||
= link_to t("layout.issues.statuses.open"), project_issues_path(@project, :status => 'open')
|
||||
%li{:class => "first " + (params[:status] == 'closed' ? "active" : "")}
|
||||
= link_to t("layout.issues.statuses.closed"), project_issues_path(@project, :status => 'closed')
|
||||
.content
|
||||
%h2.title
|
||||
= t("layout.issues.list_header")
|
||||
.inner
|
||||
= render :partial => 'shared/search_form'
|
||||
= render :partial => 'issues/list'
|
||||
.actions-bar.wat-cf
|
||||
.actions
|
||||
= will_paginate @issues#, :param_name => :issue_page
|
||||
-render :partial => 'projects/submenu'
|
||||
-render :partial => 'issues/index_sidebar'
|
||||
|
||||
#closed-switcher.blue-switcher
|
||||
=hidden_field_tag :issues_status, @status, :id => 'issues_status'
|
||||
.open
|
||||
="#{t('layout.issues.statuses.open')} (#{@opened_issues})"
|
||||
#closed-tasks.closed
|
||||
="#{t('layout.issues.statuses.closed')} (#{@closed_issues})"
|
||||
#blue-switch-select.selected{:style => "margin-left: #{@status == 'open' ? '0' : '130'}px;"}
|
||||
.both
|
||||
.both
|
||||
#table1
|
||||
%table#myTable.tablesorter.tracker{:cellpadding => "0", :cellspacing => "0"}
|
||||
%thead
|
||||
%tr
|
||||
%th.th1{:colspan => "2"}=t('layout.issues.number')
|
||||
%th{:colspan => "2"}=t('layout.issues.description')
|
||||
%tbody
|
||||
= render :partial => 'issues/issue', :collection => @issues
|
||||
= will_paginate @issues
|
|
@ -1,11 +1,6 @@
|
|||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first= link_to "#{t("layout.issues.list")}", project_issues_path(@project)
|
||||
%li.active= link_to "#{t("layout.issues.new")}", new_project_issue_path(@project)
|
||||
.content
|
||||
%h2.title
|
||||
= t("layout.issues.new_header")
|
||||
.inner
|
||||
= form_for :issue, :url => project_issues_path(@project), :html => { :class => :form } do |f|
|
||||
= render :partial => "form", :locals => {:f => f}
|
||||
-render :partial => 'projects/submenu'
|
||||
-render :partial => 'issues/create_sidebar'
|
||||
|
||||
%h3.bpadding10= t("layout.issues.create_header")
|
||||
= form_for :issue, :url => project_issues_path(@project), :html => { :class => 'form issue' } do |f|
|
||||
= render :partial => "form", :locals => {:f => f}
|
||||
|
|
|
@ -1,32 +1,31 @@
|
|||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first= link_to t("layout.issues.list"), project_issues_path(@project)
|
||||
%li= link_to t("layout.issues.edit"), edit_project_issue_path(@project, @issue) if can? :edit, @issue
|
||||
.content
|
||||
.inner
|
||||
%p
|
||||
%b
|
||||
= t("activerecord.attributes.issue.title")
|
||||
\:
|
||||
= @issue.title
|
||||
%p
|
||||
%b
|
||||
= t("activerecord.attributes.issue.body")
|
||||
\:
|
||||
= @issue.body
|
||||
%p
|
||||
%b
|
||||
= t('activerecord.attributes.issue.status')
|
||||
\:
|
||||
= @issue.status
|
||||
%p
|
||||
%b
|
||||
= t('layout.issues.subscribe')
|
||||
\:
|
||||
- if @issue.subscribes.exists? :user_id => current_user.id
|
||||
= link_to t('layout.issues.unsubscribe_btn'), project_issue_subscribe_path(@project, @issue, current_user.id), :method => :delete
|
||||
- else
|
||||
= link_to t('layout.issues.subscribe_btn'), project_issue_subscribes_path(@project, @issue), :method => :post
|
||||
-render :partial => 'projects/submenu'
|
||||
-render :partial => 'issues/create_sidebar'
|
||||
-content_for :right_nopadding do
|
||||
dummy
|
||||
%h3.issue_title=@issue.title
|
||||
.activity
|
||||
.top
|
||||
.image
|
||||
=image_tag(@issue.creator.avatar(42), :alt => 'avatar') if @issue.creator
|
||||
.text
|
||||
%span.name=link_to(@issue.creator.uname, user_path(@issue.creator)) if @issue.creator
|
||||
%br/
|
||||
%span.date=@issue.created_at.to_s(:long)
|
||||
%br/
|
||||
.both
|
||||
.fulltext.view.issue_body=@issue.body
|
||||
.both
|
||||
%br
|
||||
- if can? :write, @issue.project
|
||||
=link_to t('layout.edit'), '#', :id => 'edit_issue_content', :class => 'button'
|
||||
=form_for :issue, :url => [@project, @issue], :method => :put, :html => { :class => 'edit_form issue', :style => 'display:none;' } do |f|
|
||||
.leftlist= t('activerecord.attributes.issue.title') + ':'
|
||||
.rightlist= f.text_field :title
|
||||
.leftlist= t('activerecord.attributes.issue.body') + ':'
|
||||
.rightlist= f.text_area :body
|
||||
.both
|
||||
=f.submit t('layout.update'), :id => 'update_issue_content'
|
||||
=link_to t('layout.issues.cancel_button'), '#', :id => 'cancel_edit_issue_content', :class => 'button'
|
||||
.hr
|
||||
|
||||
= render :partial => "comments/list", :locals => {:list => @issue.comments.order(:created_at), :project => @project, :commentable => @issue}
|
||||
=render :partial => 'issues/status'
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
%article
|
||||
- if content_for?(:sidebar)
|
||||
%aside= yield :sidebar
|
||||
.right= yield
|
||||
.right{:class => layout_class}= yield
|
||||
- else
|
||||
.all= yield
|
||||
.both
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
- if content_for?(:sidebar)
|
||||
%aside= yield :sidebar
|
||||
.right= yield
|
||||
.both
|
|
@ -50,7 +50,7 @@ Rosa::Application.configure do
|
|||
config.active_support.deprecation = :notify
|
||||
|
||||
# Force SSL
|
||||
config.force_ssl = true
|
||||
# config.force_ssl = true
|
||||
|
||||
# Compress JavaScripts and CSS
|
||||
config.assets.compress = true
|
||||
|
|
|
@ -0,0 +1,107 @@
|
|||
en:
|
||||
activerecord:
|
||||
models:
|
||||
build_list: Build list
|
||||
build_list_item: Build list item
|
||||
attributes:
|
||||
build_list:
|
||||
bs_id: Id
|
||||
name: Name
|
||||
container_path: Container path
|
||||
status: Status
|
||||
project_id: Project
|
||||
project: Project
|
||||
arch_id: Architecture
|
||||
arch: Architecture
|
||||
is_circle: Recurrent
|
||||
notified_at: Notified at
|
||||
additional_repos: Additional repository
|
||||
include_repos: Includes repository
|
||||
updated_at: Updated
|
||||
created_at: Created
|
||||
pl: Packet list repository
|
||||
pl_id: Packet list repository
|
||||
bpl: Platform
|
||||
bpl_id: Platform
|
||||
update_type: Update type
|
||||
build_requires: Dependable build requires
|
||||
auto_publish: Automated publising
|
||||
project_version: Version
|
||||
user: User
|
||||
|
||||
build_list/item:
|
||||
name: Name
|
||||
level: Level
|
||||
status: Status
|
||||
version: Version
|
||||
build_list: Build list
|
||||
|
||||
layout:
|
||||
build_lists:
|
||||
filter_header: Filter
|
||||
current: Curent
|
||||
created_at_start: "Build start from:"
|
||||
created_at_end: "Build start to:"
|
||||
notified_at_start: "Last update time by BS from:"
|
||||
notified_at_end: " Last update time by BS to:"
|
||||
bs_id_search: 'Id search'
|
||||
project_name_search: Project name search
|
||||
bs_id_not_set: Id isn’t set
|
||||
items_header: Build items
|
||||
no_items_data: No data
|
||||
show: Show
|
||||
cancel_success: 'Build canceled'
|
||||
cancel_fail: 'Errors on build cancelling!'
|
||||
publish_success: 'Build on publish queue'
|
||||
publish_fail: 'Errors on publish queue!'
|
||||
container_published: 'Container in a repository'
|
||||
action: Action
|
||||
|
||||
ownership:
|
||||
header: Build list ownership
|
||||
owned: My
|
||||
related: Related
|
||||
index: All
|
||||
|
||||
build_server_status:
|
||||
header: Build server status
|
||||
client_count: Clients count
|
||||
count_new_task: New task count
|
||||
count_build_task: Build task count
|
||||
|
||||
items:
|
||||
statuses:
|
||||
build_started: Build started
|
||||
build_error: Build error
|
||||
dependencies_error: Dependences not found
|
||||
success: Build complete
|
||||
unknown: Build waiting
|
||||
git_error: Git error
|
||||
|
||||
statuses:
|
||||
build_error: Build error
|
||||
build_published: Build published
|
||||
build_publish: Build publishing
|
||||
failed_publish: Publishing error
|
||||
dependencies_fail: Dependences not found
|
||||
waiting_for_response: Waiting for response
|
||||
build_pending: Build pending
|
||||
dependency_test_failed: Dependency test failed
|
||||
binary_test_failed: Binary test failed
|
||||
build_canceled: Build canceled
|
||||
success: Build complete
|
||||
build_started: Build started
|
||||
platform_not_found: Platform not found
|
||||
platform_pending: Platforn pending
|
||||
project_not_found: Project not found
|
||||
project_version_not_found: Project version not found
|
||||
|
||||
flash:
|
||||
build_list:
|
||||
saved: Project version '%{project_version}' build list, platform '%{bpl}', architecture '%{arch}' creation success
|
||||
save_error: Project version '%{project_version}' build list, platform '%{bpl}', architecture '%{arch}' creation error
|
||||
no_project_version_selected: Select any version of project
|
||||
no_project_version_found: Project version '%{project_version}' not found
|
||||
no_arch_or_platform_selected: At least one of architecture of platform must selected
|
||||
wrong_platform: For the main repository its mail platform can be chosen only!
|
||||
can_not_published: Build publishing with status "Build" available only
|
|
@ -0,0 +1,107 @@
|
|||
ru:
|
||||
activerecord:
|
||||
models:
|
||||
build_list: Сборочный лист
|
||||
build_list_item: Элемент сборочного листа
|
||||
attributes:
|
||||
build_list:
|
||||
bs_id: Id
|
||||
name: Название
|
||||
container_path: Путь до контейнера
|
||||
status: Статус
|
||||
project_id: Проект
|
||||
project: Проект
|
||||
arch_id: Архитектура
|
||||
arch: Архитектура
|
||||
is_circle: Циклическая сборка
|
||||
notified_at: Информация получена
|
||||
additional_repos: Дополнительные репозитории
|
||||
include_repos: Подключаемые репозитории
|
||||
updated_at: Обновлен
|
||||
created_at: Создан
|
||||
pl: Репозиторий для сохранения пакетов
|
||||
pl_id: Репозиторий для сохранения пакетов
|
||||
bpl: Платформа
|
||||
bpl_id: Платформа
|
||||
update_type: Критичность обновления
|
||||
build_requires: Пересборка с зависимостями
|
||||
auto_publish: Автоматическая публикация
|
||||
project_version: Версия
|
||||
user: Пользователь
|
||||
|
||||
build_list/item:
|
||||
name: Название
|
||||
level: Уровень
|
||||
status: Статус
|
||||
version: Версия
|
||||
build_list: Сборочный лист
|
||||
|
||||
layout:
|
||||
build_lists:
|
||||
filter_header: Фильтр
|
||||
current: Текущие
|
||||
created_at_start: "Время постановки на сборку с:"
|
||||
created_at_end: "Время постановки на сборку по:"
|
||||
notified_at_start: "Время последнего обновления от BS с:"
|
||||
notified_at_end: "Время последнего обновления от BS по:"
|
||||
bs_id_search: 'Поиск по Id'
|
||||
project_name_search: Поиск по названию проекта
|
||||
bs_id_not_set: Id еще не присвоен
|
||||
items_header: Элементы сборки
|
||||
no_items_data: Данных нет
|
||||
show: Просмотр
|
||||
cancel_success: 'Сборка отменена.'
|
||||
cancel_fail: 'При отмене сборки произошла ошибка!'
|
||||
publish_success: 'Сборка поставлена в очередь на публикацию.'
|
||||
publish_fail: 'При публикации сборки произошла ошибка!'
|
||||
container_published: 'Контейнер размещен в репозитории'
|
||||
action: Действие
|
||||
|
||||
ownership:
|
||||
header: Принадлежность заданий
|
||||
owned: Мне
|
||||
related: Связанные со мной
|
||||
index: Все
|
||||
|
||||
build_server_status:
|
||||
header: Статус сборочного сервера
|
||||
client_count: Число клиентов
|
||||
count_new_task: Число заданий в очереди
|
||||
count_build_task: Число выполняемых заданий
|
||||
|
||||
items:
|
||||
statuses:
|
||||
build_started: собирается
|
||||
build_error: ошибка сборки
|
||||
dependencies_error: зависимости не найдены
|
||||
success: собран
|
||||
unknown: ожидает сборки
|
||||
git_error: проблема с гит
|
||||
|
||||
statuses:
|
||||
build_error: ошибка сборки
|
||||
build_published: опубликован
|
||||
build_publish: публикуется
|
||||
failed_publish: ошибка публикации
|
||||
dependencies_fail: зависимости не найдены
|
||||
waiting_for_response: ожидает ответа
|
||||
build_pending: ожидает сборку
|
||||
dependency_test_failed: тестирование зависимостей не пройдено
|
||||
binary_test_failed: тестирование бинарной совместимости не пройдено
|
||||
build_canceled: сборка отменена
|
||||
success: собран
|
||||
build_started: собирается
|
||||
platform_not_found: платформа не найдена
|
||||
platform_pending: платформа в процессе создания
|
||||
project_not_found: проект не найден
|
||||
project_version_not_found: версия не найдена
|
||||
|
||||
flash:
|
||||
build_list:
|
||||
saved: Билд лист для версии '%{project_version}', платформы '%{bpl}' и архитектуры '%{arch}' создан успешно
|
||||
save_error: Не удалось сохранить билд лист для версии '%{project_version}', платформы '%{bpl}' и архитектуры '%{arch}'
|
||||
no_project_version_selected: Выберите какую-нибудь версию
|
||||
no_project_version_found: Выбранная версия '%{project_version}' не найдена
|
||||
no_arch_or_platform_selected: Выберите хотя бы одну ахритектуру и платформу
|
||||
wrong_platform: Для основного репозитория (main) может быть выбран только его же основная платформа!
|
||||
can_not_published: Опубликовать сборку можно только со статусом "Собран"
|
|
@ -23,6 +23,7 @@ en:
|
|||
show: View
|
||||
cancel: Cancel
|
||||
create: Create
|
||||
update: Update
|
||||
delete: Erase
|
||||
save: Save
|
||||
search: Search
|
||||
|
@ -108,23 +109,6 @@ en:
|
|||
edit_header: Edit category
|
||||
confirm_delete: Are you sure to delete this category?
|
||||
|
||||
issues:
|
||||
list: List
|
||||
edit: Edit
|
||||
comments_header: Comments
|
||||
new: New task
|
||||
list_header: List
|
||||
confirm_delete: Are you sure to delete this task?
|
||||
edit_header: Task edit
|
||||
new_header: New task
|
||||
statuses:
|
||||
open: Opened
|
||||
closed: Closed
|
||||
any: Any
|
||||
subscribe: Subscribe
|
||||
subscribe_btn: Subscribe
|
||||
unsubscribe_btn: Unsubscribe
|
||||
|
||||
comments:
|
||||
confirm_delete: Are you sure to delete the comment?
|
||||
new_header: New comment
|
||||
|
@ -298,139 +282,6 @@ en:
|
|||
filter_header: Filter
|
||||
|
||||
git:
|
||||
upload: Upload
|
||||
not_access: Access denied!
|
||||
owner: Owner
|
||||
confirm: Sure?
|
||||
back: Back
|
||||
settings:
|
||||
label: Settings
|
||||
notifier: Notifier setting
|
||||
notifiers:
|
||||
edit_header: Notifier setting
|
||||
processing: working ...
|
||||
invalid_content_type: incorrect type
|
||||
|
||||
devise:
|
||||
shared_links:
|
||||
sign_in: Sign in
|
||||
sign_up: Sign up
|
||||
forgot_password: Forgot your password?
|
||||
confirm_again: Do not receive the confirmation link?
|
||||
unlock: Do not receive unlock instructions?
|
||||
sign_in_through: Sign in by %{provider}
|
||||
|
||||
downloads:
|
||||
title: Downloads statistic
|
||||
message: Automatically updated every 5 minutes
|
||||
refresh_btn: Refresh
|
||||
|
||||
auto_build_lists:
|
||||
header: Automated build projects
|
||||
message: All projects build under user repository and architecture i586
|
||||
project: Project
|
||||
action: Action
|
||||
automate_btn: Automate
|
||||
cancel_btn: Cancel
|
||||
not_automated: Not automated
|
||||
already_automated: Automated
|
||||
|
||||
weekdays:
|
||||
Monday: Monday
|
||||
Tuesday: Tuesday
|
||||
Wednesday: Wednesday
|
||||
Thursday: Thursday
|
||||
Friday: Friday
|
||||
Saturday: Saturday
|
||||
Sunday: Sunday
|
||||
|
||||
sessions:
|
||||
sign_in_header: Sign in
|
||||
|
||||
private_users:
|
||||
list: List
|
||||
new: New pair
|
||||
list_header: Pair login/password
|
||||
confirm_delete: Are you sure to delete this pair login/password?
|
||||
confirm_regenerate: Are you sure to regenerate this pair login/password?
|
||||
regenerate_btn: Regenerate
|
||||
warning_message: Warning - Old data set as invalid when new data obtaining
|
||||
|
||||
categories:
|
||||
list: List
|
||||
new: Create
|
||||
edit: Edit
|
||||
platforms: By platform
|
||||
list_header: Catalogue
|
||||
new_header: New category
|
||||
edit_header: Edit category
|
||||
confirm_delete: Are you sure to delete this category?
|
||||
|
||||
issues:
|
||||
list: List
|
||||
edit: Edit
|
||||
comments_header: Comments
|
||||
new: New task
|
||||
list_header: List
|
||||
confirm_delete: Are you sure to delete this task?
|
||||
edit_header: Task edit
|
||||
new_header: New task
|
||||
statuses:
|
||||
open: Opened
|
||||
closed: Closed
|
||||
any: Any
|
||||
subscribe: Subscribe
|
||||
subscribe_btn: Subscribe
|
||||
unsubscribe_btn: Unsubscribe
|
||||
|
||||
commits:
|
||||
subscribe_btn: Subscribe to commit
|
||||
unsubscribe_btn: Unsubscribe from commit
|
||||
|
||||
comments:
|
||||
confirm_delete: Are you sure to delete the comment?
|
||||
new_header: New comment
|
||||
edit_header: Editing a comment
|
||||
|
||||
platforms:
|
||||
admin_id: Owner
|
||||
build_all: Build all
|
||||
list: List
|
||||
new: Create
|
||||
edit: Edit
|
||||
new_header: New platform
|
||||
edit_header: Edit
|
||||
list_header: Platforms
|
||||
list_header_main: General
|
||||
list_header_personal: Personal
|
||||
list_header_all: All
|
||||
clone_header: Platform clone
|
||||
show: Platform
|
||||
projects: Projects
|
||||
products: Products
|
||||
location: Location
|
||||
repositories: Repositories
|
||||
back_to_the_list: ⇐To platform list
|
||||
freeze: Freeze
|
||||
unfreeze: Unfeeze
|
||||
confirm_freeze: Are you sure to freeze this platform?
|
||||
confirm_freeze: Are you sure to clone this platform?
|
||||
confirm_unfreeze: Are you sure to defrost this platform?
|
||||
released_suffix: (released)
|
||||
confirm_delete: Are you sure to delete this platform?
|
||||
current_platform_header: Current platform
|
||||
owner: Owner
|
||||
visibility: Visibility
|
||||
platform_type: Platform type
|
||||
distrib_type: Distribution kit type
|
||||
private_users: Access data
|
||||
confirm_clone: To clone?
|
||||
clone: To clone
|
||||
|
||||
event_logs:
|
||||
list: List
|
||||
list_header: Event log
|
||||
|
||||
repositories:
|
||||
empty: "Repository is empty. You need to wait some time if you have forked project or imported package"
|
||||
source: Source
|
||||
|
@ -448,60 +299,6 @@ en:
|
|||
'1': 'build error'
|
||||
'2': 'build in progress'
|
||||
|
||||
build_lists:
|
||||
filter_header: Filter
|
||||
current: Curent
|
||||
created_at_start: "Build start from:"
|
||||
created_at_end: "Build start to:"
|
||||
notified_at_start: "Last update time by BS from:"
|
||||
notified_at_end: " Last update time by BS to:"
|
||||
bs_id_search: 'Id search'
|
||||
project_name_search: Project name search
|
||||
bs_id_not_set: Id isn’t set
|
||||
items_header: Build items
|
||||
no_items_data: No data
|
||||
show: Show
|
||||
cancel_button_header: Action
|
||||
cancel_button: Cancel
|
||||
cancel_success: 'Build canceled'
|
||||
cancel_fail: 'Errors on build cancelling!'
|
||||
publish_success: 'Build on publish queue'
|
||||
publish_fail: 'Errors on publish queue!'
|
||||
container_published: 'Container in a repository'
|
||||
|
||||
build_server_status:
|
||||
header: Build server status
|
||||
client_count: Clients count
|
||||
count_new_task: New task count
|
||||
count_build_task: Build task count
|
||||
|
||||
items:
|
||||
statuses:
|
||||
build_started: Build started
|
||||
build_error: Build error
|
||||
dependencies_error: Dependences not found
|
||||
success: Build complete
|
||||
unknown: Build waiting
|
||||
git_error: Git error
|
||||
|
||||
statuses:
|
||||
build_error: Build error
|
||||
build_published: Build published
|
||||
build_publish: Build publishing
|
||||
failed_publish: Publishing error
|
||||
dependencies_fail: Dependences not found
|
||||
waiting_for_response: Waiting for response
|
||||
build_pending: Build pending
|
||||
dependency_test_failed: Dependency test failed
|
||||
binary_test_failed: Binary test failed
|
||||
build_canceled: Build canceled
|
||||
success: Build complete
|
||||
build_started: Build started
|
||||
platform_not_found: Platform not found
|
||||
platform_pending: Platforn pending
|
||||
project_not_found: Project not found
|
||||
project_version_not_found: Project version not found
|
||||
|
||||
flash:
|
||||
settings:
|
||||
saved: Settings saved success
|
||||
|
@ -548,11 +345,6 @@ en:
|
|||
save_error: Comment saves error
|
||||
destroyed: Comment deleted
|
||||
|
||||
issue:
|
||||
saved: Task saved
|
||||
save_error: Task saves error
|
||||
destroyed: Task deleted
|
||||
|
||||
project:
|
||||
saved: Project saved
|
||||
save_error: Project saves error
|
||||
|
@ -599,15 +391,6 @@ en:
|
|||
build_all_success: All project build in progress
|
||||
clone_success: Cloned successfully
|
||||
|
||||
build_list:
|
||||
saved: Project version '%{project_version}' build list, platform '%{bpl}', architecture '%{arch}' creation success
|
||||
save_error: Project version '%{project_version}' build list, platform '%{bpl}', architecture '%{arch}' creation error
|
||||
no_project_version_selected: Select any version of project
|
||||
no_project_version_found: Project version '%{project_version}' not found
|
||||
no_arch_or_platform_selected: At least one of architecture of platform must selected
|
||||
wrong_platform: For the main repository its mail platform can be chosen only!
|
||||
can_not_published: Build publishing with status "Build" available only
|
||||
|
||||
wiki:
|
||||
ref_not_exist: No such version
|
||||
successfully_updated: Page '%{name}' successfully updated
|
||||
|
@ -627,7 +410,6 @@ en:
|
|||
remember_me: Remember
|
||||
name: Name
|
||||
parent_platform_id: Parent platform
|
||||
build_list: Build list
|
||||
|
||||
activerecord:
|
||||
|
||||
|
@ -652,8 +434,6 @@ en:
|
|||
private_user: Private user
|
||||
product: Product
|
||||
product_build_list: Product build list
|
||||
build_list: Build list
|
||||
build_list_item: Build list item
|
||||
download: Statistics
|
||||
auto_build_list: Auto rebuild list
|
||||
settings:
|
||||
|
@ -695,14 +475,6 @@ en:
|
|||
body: Content
|
||||
user: Author
|
||||
|
||||
issue:
|
||||
title: Title
|
||||
body: Content
|
||||
user: Assigned
|
||||
user_id: Assigned
|
||||
project: Project
|
||||
status: Status
|
||||
|
||||
private_user:
|
||||
login: Login
|
||||
password: Password
|
||||
|
@ -836,38 +608,6 @@ en:
|
|||
status: Status
|
||||
notified_at: Notified at
|
||||
|
||||
build_list:
|
||||
bs_id: Id
|
||||
name: Name
|
||||
container_path: Container path
|
||||
status: Status
|
||||
project_id: Project
|
||||
project: Project
|
||||
arch_id: Architecture
|
||||
arch: Architecture
|
||||
is_circle: Recurrent
|
||||
notified_at: Notified at
|
||||
additional_repos: Additional repository
|
||||
include_repos: Includes repository
|
||||
updated_at: Updated
|
||||
created_at: Created
|
||||
pl: Packet list repository
|
||||
pl_id: Packet list repository
|
||||
bpl: Platform
|
||||
bpl_id: Platform
|
||||
update_type: Update type
|
||||
build_requires: Dependable build requires
|
||||
auto_publish: Automated publising
|
||||
project_version: Version
|
||||
user: User
|
||||
|
||||
build_list/item:
|
||||
name: Name
|
||||
level: Level
|
||||
status: Status
|
||||
version: Version
|
||||
build_list: Build list
|
||||
|
||||
download:
|
||||
name: Name
|
||||
version: Version
|
||||
|
@ -883,97 +623,3 @@ en:
|
|||
issue_assign_notification: New task assigned
|
||||
new_commit_comment_notification: New comment to commit
|
||||
invite_approve_notification: Invitation to ABF
|
||||
|
||||
project:
|
||||
category_id: Category
|
||||
name: Name
|
||||
description: Descripton
|
||||
owner: Owner
|
||||
visibility: Visibility
|
||||
repository_id: Repository
|
||||
repository: Repository
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
has_issues: Tracker on
|
||||
srpm: Import code from src.rpm
|
||||
|
||||
rpm:
|
||||
name: Name
|
||||
arch_id: Arch
|
||||
arch: Arch
|
||||
project_id: Project
|
||||
project: Project
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
|
||||
role:
|
||||
name: Name
|
||||
on: Slave
|
||||
to: Master
|
||||
use_default: By default
|
||||
use_default_for_owner: Default by owner
|
||||
|
||||
group:
|
||||
name: Name
|
||||
uname: Nickname
|
||||
owner: Owner
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
|
||||
user:
|
||||
name: User
|
||||
login: Nickname or Email
|
||||
email: Email
|
||||
uname: Nickname
|
||||
ssh_key: SSH key
|
||||
current_password: Current password
|
||||
role: Role
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
role: System role
|
||||
language: Language
|
||||
|
||||
product_build_list:
|
||||
id: Id
|
||||
product: Product
|
||||
status: Status
|
||||
notified_at: Notified at
|
||||
|
||||
build_list:
|
||||
bs_id: Id
|
||||
name: Name
|
||||
container_path: Container path
|
||||
status: Status
|
||||
project_id: Project
|
||||
project: Project
|
||||
arch_id: Architecture
|
||||
arch: Architecture
|
||||
is_circle: Recurrent
|
||||
notified_at: Notified at
|
||||
additional_repos: Additional repository
|
||||
include_repos: Includes repository
|
||||
updated_at: Updated
|
||||
created_at: Created
|
||||
pl: Packet list repository
|
||||
pl_id: Packet list repository
|
||||
bpl: Platform
|
||||
bpl_id: Platform
|
||||
update_type: Update type
|
||||
build_requires: Dependable build requires
|
||||
auto_publish: Automated publising
|
||||
project_version: Version
|
||||
user: User
|
||||
|
||||
build_list/item:
|
||||
name: Name
|
||||
level: Level
|
||||
status: Status
|
||||
version: Version
|
||||
build_list: Build list
|
||||
|
||||
download:
|
||||
name: Name
|
||||
version: Version
|
||||
distro: Source
|
||||
platform: Platform
|
||||
counter: Downloads
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
en:
|
||||
activerecord:
|
||||
attributes:
|
||||
issue:
|
||||
title: Name
|
||||
body: Description
|
||||
user: Assigned
|
||||
user_id: Assigned
|
||||
project: Project
|
||||
status: Status
|
||||
|
||||
layout:
|
||||
issues:
|
||||
accessory: Accessory issues
|
||||
list: List
|
||||
all: All
|
||||
to_me: Assigned to me
|
||||
edit: Edit
|
||||
search: Search issue...
|
||||
comments_header: Comments
|
||||
new: New issue
|
||||
list_header: List
|
||||
confirm_delete: Are you sure to delete this task?
|
||||
edit_header: Task edit
|
||||
create_header: Create task
|
||||
statuses:
|
||||
open: Opened
|
||||
closed: Closed
|
||||
any: Any
|
||||
status:
|
||||
open: Открыто
|
||||
closed: Closed
|
||||
subscribe: Subscribe
|
||||
subscribe_btn: Subscribe
|
||||
unsubscribe_btn: Unsubscribe
|
||||
number: Number
|
||||
description: Description
|
||||
by: by
|
||||
labels: Labels
|
||||
invalid_labels: Invalid hex color code
|
||||
new_label: New label name
|
||||
update_label: Update label
|
||||
label_custom_color: Custom color
|
||||
label_manage: Manage
|
||||
executor: Executor
|
||||
search_user: Search user...
|
||||
search_labels: Search labels...
|
||||
choose_user_on_left: Choose executor on the left
|
||||
choose_labels_on_left: Choose labels on the left
|
||||
at: at
|
||||
cancel_button: Cancel
|
||||
|
||||
flash:
|
||||
issue:
|
||||
saved: Task saved
|
||||
save_error: Task saves error
|
||||
destroyed: Task deleted
|
|
@ -0,0 +1,57 @@
|
|||
ru:
|
||||
activerecord:
|
||||
attributes:
|
||||
issue:
|
||||
title: Название
|
||||
body: Описание
|
||||
user: Назначена
|
||||
user_id: Назначена
|
||||
project: Проект
|
||||
status: Статус
|
||||
|
||||
layout:
|
||||
issues:
|
||||
accessory: Принадлежность заданий
|
||||
list: Список
|
||||
all: Все
|
||||
to_me: Назначенные мне
|
||||
edit: Редактировать
|
||||
search: Найти задачу...
|
||||
comments_header: Комментарии
|
||||
new: Добавить задачу
|
||||
list_header: Список
|
||||
confirm_delete: Вы уверены, что хотите удалить эту задачу?
|
||||
edit_header: Редактирование задачи
|
||||
create_header: Создать задачу
|
||||
statuses:
|
||||
open: Открытые
|
||||
closed: Закрытые
|
||||
any: Все
|
||||
status:
|
||||
open: Открыто
|
||||
closed: Закрыто
|
||||
subscribe: Подписка на уведомления
|
||||
subscribe_btn: Подписаться
|
||||
unsubscribe_btn: Отписаться
|
||||
number: Номер
|
||||
description: Описание
|
||||
by: ' '
|
||||
labels: Метки
|
||||
invalid_labels: Неверный hex код
|
||||
new_label: Название новой метки
|
||||
update_label: Обновить метку
|
||||
label_custom_color: Свой цвет
|
||||
label_manage: Управление
|
||||
executor: Исполнитель
|
||||
search_user: Найти пользователя...
|
||||
search_labels: Найти метки...
|
||||
choose_user_on_left: выберите исполнителя слева
|
||||
choose_labels_on_left: выберите метки слева
|
||||
at: в
|
||||
cancel_button: Отменить
|
||||
|
||||
flash:
|
||||
issue:
|
||||
saved: Задача успешно сохранена
|
||||
save_error: Не удалось сохранить задачу
|
||||
destroyed: Задача успешно удалена
|
|
@ -37,6 +37,7 @@ ru:
|
|||
false_: Нет
|
||||
publish: Опубликовать
|
||||
add: Добавить
|
||||
update: Обновить
|
||||
upload: Загрузить
|
||||
not_access: Нет доступа!
|
||||
owner: Владелец
|
||||
|
@ -108,23 +109,6 @@ ru:
|
|||
edit_header: Редактировать категорию
|
||||
confirm_delete: Вы уверены, что хотите удалить эту категорию?
|
||||
|
||||
issues:
|
||||
list: Список
|
||||
edit: Редактировать
|
||||
comments_header: Комментарии
|
||||
new: Новая задача
|
||||
list_header: Список
|
||||
confirm_delete: Вы уверены, что хотите удалить эту задачу?
|
||||
edit_header: Редактирование задачи
|
||||
new_header: Новая задача
|
||||
statuses:
|
||||
open: Открытые
|
||||
closed: Закрытые
|
||||
any: Все
|
||||
subscribe: Подписка на уведомления
|
||||
subscribe_btn: Подписаться
|
||||
unsubscribe_btn: Отписаться
|
||||
|
||||
comments:
|
||||
confirm_delete: Вы уверены, что хотите удалить комментарий?
|
||||
new_header: Новый комментарий
|
||||
|
@ -315,60 +299,6 @@ ru:
|
|||
'1': 'ошибка сборки'
|
||||
'2': 'собирается'
|
||||
|
||||
build_lists:
|
||||
filter_header: Фильтр
|
||||
current: Текущие
|
||||
created_at_start: "Время постановки на сборку с:"
|
||||
created_at_end: "Время постановки на сборку по:"
|
||||
notified_at_start: "Время последнего обновления от BS с:"
|
||||
notified_at_end: "Время последнего обновления от BS по:"
|
||||
bs_id_search: 'Поиск по Id'
|
||||
project_name_search: Поиск по названию проекта
|
||||
bs_id_not_set: Id еще не присвоен
|
||||
items_header: Элементы сборки
|
||||
no_items_data: Данных нет
|
||||
show: Просмотр
|
||||
cancel_button_header: Действие
|
||||
cancel_button: Отмена
|
||||
cancel_success: 'Сборка отменена.'
|
||||
cancel_fail: 'При отмене сборки произошла ошибка!'
|
||||
publish_success: 'Сборка поставлена в очередь на публикацию.'
|
||||
publish_fail: 'При публикации сборки произошла ошибка!'
|
||||
container_published: 'Контейнер размещен в репозитории'
|
||||
|
||||
build_server_status:
|
||||
header: Статус сборочного сервера
|
||||
client_count: Число клиентов
|
||||
count_new_task: Число заданий в очереди
|
||||
count_build_task: Число выполняемых заданий
|
||||
|
||||
items:
|
||||
statuses:
|
||||
build_started: собирается
|
||||
build_error: ошибка сборки
|
||||
dependencies_error: зависимости не найдены
|
||||
success: собран
|
||||
unknown: ожидает сборки
|
||||
git_error: проблема с гит
|
||||
|
||||
statuses:
|
||||
build_error: ошибка сборки
|
||||
build_published: опубликован
|
||||
build_publish: публикуется
|
||||
failed_publish: ошибка публикации
|
||||
dependencies_fail: зависимости не найдены
|
||||
waiting_for_response: ожидает ответа
|
||||
build_pending: ожидает сборку
|
||||
dependency_test_failed: тестирование зависимостей не пройдено
|
||||
binary_test_failed: тестирование бинарной совместимости не пройдено
|
||||
build_canceled: сборка отменена
|
||||
success: собран
|
||||
build_started: собирается
|
||||
platform_not_found: платформа не найдена
|
||||
platform_pending: платформа в процессе создания
|
||||
project_not_found: проект не найден
|
||||
project_version_not_found: версия не найдена
|
||||
|
||||
flash:
|
||||
settings:
|
||||
saved: Настройки успешно сохранены
|
||||
|
@ -420,11 +350,6 @@ ru:
|
|||
save_error: Ошибка сохранения комментария
|
||||
destroyed: Комментарий удален
|
||||
|
||||
issue:
|
||||
saved: Задача успешно сохранена
|
||||
save_error: Не удалось сохранить задачу
|
||||
destroyed: Задача успешно удалена
|
||||
|
||||
project:
|
||||
saved: Проект успешно сохранен
|
||||
save_error: Не удалось сохранить проект
|
||||
|
@ -471,15 +396,6 @@ ru:
|
|||
build_all_success: Все проекты успешно отправлены на сборку
|
||||
clone_success: Клонирование успешно
|
||||
|
||||
build_list:
|
||||
saved: Билд лист для версии '%{project_version}', платформы '%{bpl}' и архитектуры '%{arch}' создан успешно
|
||||
save_error: Не удалось сохранить билд лист для версии '%{project_version}', платформы '%{bpl}' и архитектуры '%{arch}'
|
||||
no_project_version_selected: Выберите какую-нибудь версию
|
||||
no_project_version_found: Выбранная версия '%{project_version}' не найдена
|
||||
no_arch_or_platform_selected: Выберите хотя бы одну ахритектуру и платформу
|
||||
wrong_platform: Для основного репозитория (main) может быть выбран только его же основная платформа!
|
||||
can_not_published: Опубликовать сборку можно только со статусом "Собран"
|
||||
|
||||
wiki:
|
||||
ref_not_exist: Версия не существует
|
||||
successfully_updated: Страница '%{name}' успешно обновлена
|
||||
|
@ -499,7 +415,6 @@ ru:
|
|||
remember_me: Запомнить
|
||||
name: Название
|
||||
parent_platform_id: Родительская платформа
|
||||
build_list: Сборочный лист
|
||||
|
||||
activerecord:
|
||||
|
||||
|
@ -524,8 +439,6 @@ ru:
|
|||
private_user: Приватный пользователь
|
||||
product: Продукт
|
||||
product_build_list: Сборочный лист продукта
|
||||
build_list: Сборочный лист
|
||||
build_list_item: Элемент сборочного листа
|
||||
download: Статистика
|
||||
auto_build_list: Автоматическая пересборка пакетов
|
||||
settings:
|
||||
|
@ -557,14 +470,6 @@ ru:
|
|||
body: Содержание
|
||||
user: Автор
|
||||
|
||||
issue:
|
||||
title: Заголовок
|
||||
body: Содержание
|
||||
user: Назначена
|
||||
user_id: Назначена
|
||||
project: Проект
|
||||
status: Статус
|
||||
|
||||
private_user:
|
||||
login: Логин
|
||||
password: Пароль
|
||||
|
@ -698,38 +603,6 @@ ru:
|
|||
status: Статус
|
||||
notified_at: Информация получена
|
||||
|
||||
build_list:
|
||||
bs_id: Id
|
||||
name: Название
|
||||
container_path: Путь до контейнера
|
||||
status: Статус
|
||||
project_id: Проект
|
||||
project: Проект
|
||||
arch_id: Архитектура
|
||||
arch: Архитектура
|
||||
is_circle: Циклическая сборка
|
||||
notified_at: Информация получена
|
||||
additional_repos: Дополнительные репозитории
|
||||
include_repos: Подключаемые репозитории
|
||||
updated_at: Обновлен
|
||||
created_at: Создан
|
||||
pl: Репозиторий для сохранения пакетов
|
||||
pl_id: Репозиторий для сохранения пакетов
|
||||
bpl: Платформа
|
||||
bpl_id: Платформа
|
||||
update_type: Критичность обновления
|
||||
build_requires: Пересборка с зависимостями
|
||||
auto_publish: Автоматическая публикация
|
||||
project_version: Версия
|
||||
user: Пользователь
|
||||
|
||||
build_list/item:
|
||||
name: Название
|
||||
level: Уровень
|
||||
status: Статус
|
||||
version: Версия
|
||||
build_list: Сборочный лист
|
||||
|
||||
download:
|
||||
name: Название
|
||||
version: Версия
|
||||
|
|
|
@ -117,10 +117,18 @@ Rosa::Application.routes.draw do
|
|||
match 'compare/*versions' => 'wiki#compare', :as => :compare_versions, :via => :get
|
||||
end
|
||||
end
|
||||
resources :issues do
|
||||
resources :issues, :except => :edit do
|
||||
resources :comments, :only => [:edit, :create, :update, :destroy]
|
||||
resources :subscribes, :only => [:create, :destroy]
|
||||
collection do
|
||||
post :create_label
|
||||
get :search_collaborators
|
||||
get :search_labels
|
||||
end
|
||||
end
|
||||
post "labels/:label_id" => "issues#destroy_label", :as => :issues_delete_label
|
||||
post "labels/:label_id/update" => "issues#update_label", :as => :issues_update_label
|
||||
|
||||
resource :repo, :controller => "git/repositories", :only => [:show]
|
||||
resources :build_lists, :only => [:index, :new, :create]
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class AddCreatorToIssue < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :issues, :creator_id, :integer
|
||||
end
|
||||
end
|
|
@ -0,0 +1,21 @@
|
|||
class CreateLabels < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :labels do |t|
|
||||
t.string :name, :null => false
|
||||
t.string :color, :null => false
|
||||
t.references :project
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
|
||||
create_table :labelings do |t|
|
||||
t.references :label, :null => false
|
||||
t.references :issue
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
|
||||
add_index :labelings, :issue_id
|
||||
add_index :labels, :project_id
|
||||
end
|
||||
end
|
|
@ -0,0 +1,5 @@
|
|||
class AddClosedAtToIssue < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :issues, :closed_at, :datetime
|
||||
end
|
||||
end
|
|
@ -0,0 +1,6 @@
|
|||
class AddClosedByToIssue < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :issues, :closed_by, :integer
|
||||
|
||||
end
|
||||
end
|
28
db/schema.rb
28
db/schema.rb
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20120224122738) do
|
||||
ActiveRecord::Schema.define(:version => 20120228100121) do
|
||||
|
||||
create_table "arches", :force => true do |t|
|
||||
t.string "name", :null => false
|
||||
|
@ -166,10 +166,32 @@ ActiveRecord::Schema.define(:version => 20120224122738) do
|
|||
t.string "status", :default => "open"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "creator_id"
|
||||
t.datetime "closed_at"
|
||||
t.integer "closed_by"
|
||||
end
|
||||
|
||||
add_index "issues", ["project_id", "serial_id"], :name => "index_issues_on_project_id_and_serial_id", :unique => true
|
||||
|
||||
create_table "labelings", :force => true do |t|
|
||||
t.integer "label_id", :null => false
|
||||
t.integer "issue_id"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
end
|
||||
|
||||
add_index "labelings", ["issue_id"], :name => "index_labelings_on_issue_id"
|
||||
|
||||
create_table "labels", :force => true do |t|
|
||||
t.string "name", :null => false
|
||||
t.string "color", :null => false
|
||||
t.integer "project_id"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
end
|
||||
|
||||
add_index "labels", ["project_id"], :name => "index_labels_on_project_id"
|
||||
|
||||
create_table "platforms", :force => true do |t|
|
||||
t.string "description"
|
||||
t.string "name"
|
||||
|
@ -254,13 +276,13 @@ ActiveRecord::Schema.define(:version => 20120224122738) do
|
|||
t.text "description"
|
||||
t.string "ancestry"
|
||||
t.boolean "has_issues", :default => true
|
||||
t.boolean "has_wiki", :default => false
|
||||
t.string "srpm_file_name"
|
||||
t.string "srpm_content_type"
|
||||
t.integer "srpm_file_size"
|
||||
t.datetime "srpm_updated_at"
|
||||
t.string "default_branch", :default => "master"
|
||||
t.boolean "is_rpm", :default => true
|
||||
t.boolean "has_wiki", :default => false
|
||||
end
|
||||
|
||||
add_index "projects", ["category_id"], :name => "index_projects_on_category_id"
|
||||
|
@ -338,7 +360,6 @@ ActiveRecord::Schema.define(:version => 20120224122738) do
|
|||
t.string "email", :default => "", :null => false
|
||||
t.string "encrypted_password", :limit => 128, :default => "", :null => false
|
||||
t.string "reset_password_token"
|
||||
t.datetime "reset_password_sent_at"
|
||||
t.datetime "remember_created_at"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
|
@ -346,6 +367,7 @@ ActiveRecord::Schema.define(:version => 20120224122738) do
|
|||
t.string "uname"
|
||||
t.string "role"
|
||||
t.string "language", :default => "en"
|
||||
t.datetime "reset_password_sent_at"
|
||||
t.integer "own_projects_count", :default => 0, :null => false
|
||||
end
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ module Preregistration
|
|||
resource.email = req.email if resource.respond_to? :email
|
||||
@invitation_token = req.token
|
||||
|
||||
respond_with_navigational(resource){ render_with_scope :new }
|
||||
respond_with_navigational(resource){ render :new }
|
||||
else
|
||||
redirect_to new_register_request_path
|
||||
end
|
||||
|
@ -46,7 +46,7 @@ module Preregistration
|
|||
end
|
||||
else
|
||||
clean_up_passwords(resource)
|
||||
respond_with_navigational(resource) { render_with_scope :new }
|
||||
respond_with_navigational(resource) { render :new }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Label do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
Loading…
Reference in New Issue