[refs #257] Merge 3.2-master into 257-new_design_for_profiles
This commit is contained in:
commit
73296059eb
3
Gemfile
3
Gemfile
|
@ -43,8 +43,8 @@ gem 'jquery-rails', '~> 2.0.1'
|
|||
group :assets do
|
||||
gem 'sass-rails', '~> 3.2.4'
|
||||
gem 'coffee-rails', '~> 3.2.2'
|
||||
gem 'compass-rails', '~> 1.0.0.rc.3'
|
||||
gem 'uglifier', '~> 1.2.1'
|
||||
gem 'compass', '~> 0.12.rc.1' # :git => 'git://github.com/chriseppstein/compass.git', :branch => 'rails31'
|
||||
gem 'therubyracer', '~> 0.9.10'
|
||||
end
|
||||
|
||||
|
@ -62,7 +62,6 @@ group :development do
|
|||
# deploy
|
||||
gem 'whenever', :require => false
|
||||
gem 'capistrano', :require => false
|
||||
gem 'capistrano-ext', :require => false
|
||||
gem 'cape', :require => false
|
||||
gem 'capistrano_colors', :require => false
|
||||
end
|
||||
|
|
|
@ -76,8 +76,6 @@ GEM
|
|||
net-sftp (>= 2.0.0)
|
||||
net-ssh (>= 2.0.14)
|
||||
net-ssh-gateway (>= 1.1.0)
|
||||
capistrano-ext (1.2.1)
|
||||
capistrano (>= 1.0.0)
|
||||
capistrano_colors (0.5.5)
|
||||
chronic (0.6.7)
|
||||
chunky_png (1.2.5)
|
||||
|
@ -93,6 +91,8 @@ GEM
|
|||
chunky_png (~> 1.2)
|
||||
fssm (>= 0.2.7)
|
||||
sass (~> 3.1)
|
||||
compass-rails (1.0.0.rc.3)
|
||||
compass (~> 0.12.rc.0)
|
||||
creole (0.4.2)
|
||||
daemons (1.1.6)
|
||||
delayed_job (3.0.1)
|
||||
|
@ -111,7 +111,7 @@ GEM
|
|||
execjs (1.3.0)
|
||||
multi_json (~> 1.0)
|
||||
expression_parser (0.9.0)
|
||||
factory_girl (2.6.0)
|
||||
factory_girl (2.6.1)
|
||||
activesupport (>= 2.3.9)
|
||||
factory_girl_rails (1.7.0)
|
||||
factory_girl (~> 2.6.0)
|
||||
|
@ -304,10 +304,9 @@ DEPENDENCIES
|
|||
cancan (~> 1.6.7)
|
||||
cape
|
||||
capistrano
|
||||
capistrano-ext
|
||||
capistrano_colors
|
||||
coffee-rails (~> 3.2.2)
|
||||
compass (~> 0.12.rc.1)
|
||||
compass-rails (~> 1.0.0.rc.3)
|
||||
creole
|
||||
daemons (= 1.1.6)
|
||||
delayed_job_active_record (~> 0.3.2)
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
|
@ -76,7 +76,8 @@ function changeRadioStart(el) {
|
|||
}
|
||||
|
||||
el.next().bind("mousedown", function(e) {
|
||||
changeRadio($(this))
|
||||
changeRadio($(this));
|
||||
$(this).find("input:radio").change();
|
||||
});
|
||||
if($.browser.msie) {
|
||||
el.next().find("input").eq(0).bind("click", function(e) {
|
||||
|
|
|
@ -1,55 +1,23 @@
|
|||
function disError(elem) {
|
||||
$("#hint").fadeOut("fast");
|
||||
if (document.getElementById("user_login").className=="registartion-input-error") {
|
||||
if (this.id=="user_login") {
|
||||
document.getElementById("user_login").className="registartion-input-focus";
|
||||
} else {
|
||||
document.getElementById("user_login").className="registartion-input-no-focus";
|
||||
}
|
||||
}
|
||||
if (document.getElementById("user_password").className=="registartion-input-error") {
|
||||
if (this.id=="user_password") {
|
||||
document.getElementById("user_password").className="registartion-input-focus";
|
||||
} else {
|
||||
document.getElementById("user_password").className="registartion-input-no-focus";
|
||||
}
|
||||
}
|
||||
buttonCheck();
|
||||
}
|
||||
//= require jquery
|
||||
|
||||
function buttonCheck() {
|
||||
var login_default = document.getElementById("login_default").value;
|
||||
var pass_default = document.getElementById("password_default").value;
|
||||
if ((document.getElementById("user_login").value!="")&&(document.getElementById("user_login").value!=login_default)&&
|
||||
(document.getElementById("user_password").value!="")&&(document.getElementById("user_password").value!=pass_default)) {
|
||||
document.getElementById("btnLogin").className = "button";
|
||||
} else {
|
||||
document.getElementById("btnLogin").className = "button disabled";
|
||||
}
|
||||
}
|
||||
$(document).ready(function() {
|
||||
var login_default = $('#login_default').val();
|
||||
var pass_default = $('#password_default').val();
|
||||
|
||||
function changeCheck(el) {
|
||||
var el = el,
|
||||
input = el.getElementsByTagName("input")[0];
|
||||
$('.registartion-input').live('keydown', function() {
|
||||
var id = $(this).attr('id');
|
||||
if(id == 'user_login' || id == 'user_password') { id = 'login_error'}
|
||||
$('.error.'+id).fadeOut('slow');
|
||||
}).live('focus', function() {
|
||||
var id = $(this).attr('id');
|
||||
if(id == 'user_login' && $(this).val() == login_default) { $(this).val('')}
|
||||
else if(id == 'user_password' && $(this).val() == pass_default) { $(this).val('')}
|
||||
$(this).addClass('registartion-input-focus').removeClass('registartion-input-error');
|
||||
}).live('blur', function() {
|
||||
var id = $(this).attr('id');
|
||||
if(id == 'user_login' && $(this).val() == '') { $(this).val(login_default)}
|
||||
else if(id == 'user_password' && $(this).val() == '') { $(this).val(pass_default)}
|
||||
$(this).addClass('registartion-input-no-focus').removeClass('registartion-input-focus');
|
||||
});
|
||||
|
||||
if(input.checked) {
|
||||
el.style.backgroundPosition="0 0";
|
||||
input.checked=false;
|
||||
}
|
||||
else {
|
||||
el.style.backgroundPosition="0 -17px";
|
||||
input.checked=true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function startChangeCheck(el) {
|
||||
var el = el,
|
||||
input = el.getElementsByTagName("input")[0];
|
||||
if(input.checked) { el.style.backgroundPosition="0 -17px"; }
|
||||
return true;
|
||||
}
|
||||
|
||||
function startCheck() {
|
||||
startChangeCheck(document.getElementById("niceCheckbox1"));
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,17 +1,27 @@
|
|||
@import 'compass/utilities/tables';
|
||||
|
||||
table.info {
|
||||
width: 100%;
|
||||
border-spacing: 0;
|
||||
td {padding: 5px;}
|
||||
}
|
||||
|
||||
table.columns2 {
|
||||
@include inner-table-borders;
|
||||
th.first, td.first {width: 30%;}
|
||||
}
|
||||
|
||||
table.columns3 {
|
||||
@include alternating-rows-and-columns(#eee, #ccc, #000);
|
||||
th.first, td.first, th.last, td.last {width: 30%;}
|
||||
}
|
||||
|
||||
@import 'blueprint/interaction';
|
||||
.flash {
|
||||
.notice {
|
||||
@include success;
|
||||
}
|
||||
.warning {
|
||||
@include notice;
|
||||
}
|
||||
.error, .alert {
|
||||
@include error;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -283,6 +283,8 @@ div.comment div.comment-right {
|
|||
float: right;
|
||||
}
|
||||
|
||||
div.comment textarea { resize: none }
|
||||
|
||||
#repo-wrapper div.file div.data .formatted {
|
||||
overflow-x: auto;
|
||||
overflow-y: none;
|
||||
|
@ -299,7 +301,7 @@ table.tablesorter tbody td a .issue_title {
|
|||
#output.formatted {
|
||||
width: auto;
|
||||
font-family: "Consolas","Bitstream Vera Sans Mono","Courier New",Courier,monospace;
|
||||
padding: 10px 5px;
|
||||
padding: 10px 5px 0px;
|
||||
margin-left: 45px;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,326 @@
|
|||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Tahoma, Geneva, Helvetica, sans-serif;
|
||||
color: #565667;
|
||||
background: #1f60a1 image-url("bg.png") repeat-x;
|
||||
min-width: 940px;
|
||||
min-height: 300px;
|
||||
text-align: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
header, section, footer, aside, nav, article, menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
input[type="text"]:focus { outline: none; }
|
||||
|
||||
input[type="password"]:focus { outline: none; }
|
||||
|
||||
input:focus { outline: none; }
|
||||
|
||||
select:focus { outline: none; }
|
||||
|
||||
a img { border: none; }
|
||||
|
||||
.wrap {
|
||||
width: 940px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
min-height: 95%;
|
||||
}
|
||||
|
||||
.both {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
|
||||
/* Header */
|
||||
|
||||
header div.logo {
|
||||
background: image-url("logo.png") no-repeat 50% 100%;
|
||||
height: 89px;
|
||||
width: 233px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
padding-top: 12%;
|
||||
}
|
||||
|
||||
header div.text {
|
||||
color: #FFF;
|
||||
font-size: 28px;
|
||||
width: 800px;
|
||||
text-align: left;
|
||||
margin-left: 90px;
|
||||
margin-top: 50px;
|
||||
font-family: Arial;
|
||||
text-shadow: 0px 1px 1px #000000;
|
||||
filter: dropshadow(color=#000000, offx=0, offy=1);
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
.niceCheck {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
background: image-url("checkbox.png");
|
||||
}
|
||||
.niceCheck input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Content */
|
||||
|
||||
article {
|
||||
width: 257px;
|
||||
height: 227px;
|
||||
background: #1c394c image-url("bg-signup.png") repeat-x;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #38658c;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
margin-top: 75px;
|
||||
-webkit-box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5);
|
||||
-moz-box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5);
|
||||
box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
a.button, input.button {
|
||||
background: #125687;
|
||||
background: image-url("button-green-normal.png");
|
||||
border-radius: 3px;
|
||||
color: #FFF;
|
||||
font-family: Tahoma;
|
||||
font-size: 12px;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-weight: normal;
|
||||
padding: 5px 25px;
|
||||
text-align: center;
|
||||
border: none;
|
||||
height: 25px;
|
||||
width: 106px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
input.button {
|
||||
padding: 3px 27px 8px 27px;
|
||||
height: 25px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
a.button:hover, input.button:hover {
|
||||
background: #1874b6;
|
||||
background: image-url("button-green-hover.png");
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
a.button:active, input.button:active{
|
||||
background: image-url("button-green-press.png");
|
||||
}
|
||||
|
||||
a.button:disabled, a.button.disabled, input.button:disabled, input.button.disabled {
|
||||
background: #125687;
|
||||
background: image-url("button-green-disabled.png");
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
article h1 {
|
||||
color: #FFF;
|
||||
font-size: 18px;
|
||||
font-weight: normal;
|
||||
font-family: Tahoma;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.registartion-input, .registartion-input-focus, .registartion-input-error, .registartion-input-no-focus {
|
||||
height: 24px;
|
||||
width: 217px;
|
||||
border: 1px solid #8199a9;
|
||||
border-radius: 2px;
|
||||
color: #cfcfcf;
|
||||
font-family: Tahoma;
|
||||
font-size: 12px;
|
||||
padding-left: 10px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.registartion-input-focus, .registartion-input-focus-signup {
|
||||
color: #575756;
|
||||
-webkit-box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75);
|
||||
-moz-box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75);
|
||||
box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75);
|
||||
}
|
||||
|
||||
.registartion-input-no-focus, .registartion-input-no-focus-signup {
|
||||
color: #575756;
|
||||
}
|
||||
|
||||
.registartion-input-error, .registartion-input-error-signup {
|
||||
border: 1px solid #bd4d40;
|
||||
outline:1px solid #bd4d40;
|
||||
outline-offset:-2px;
|
||||
}
|
||||
|
||||
div.registration div.remember{
|
||||
color: #FFF;
|
||||
font-size: 12px;
|
||||
float: left;
|
||||
padding-left: 15px;
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
div.registration div.remember div.check {
|
||||
float: left;
|
||||
margin-top: 15px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
div.registration div.remember div.text {
|
||||
float: left;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
div.registration div.in {
|
||||
float: right;
|
||||
padding-right: 15px;
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
div.hr {
|
||||
margin-top: 10px;
|
||||
height: 1px;
|
||||
width: 100%;
|
||||
border-bottom: 1px solid #264862;
|
||||
border-top: 1px solid #264862;
|
||||
}
|
||||
|
||||
article div.other div.left{
|
||||
float: left;
|
||||
font-size: 12px;
|
||||
color: #FFFFFF;
|
||||
margin-top: 6px;
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
article div.other div.right {
|
||||
float: right;
|
||||
margin-right: 15px;
|
||||
margin-top: 13px;
|
||||
}
|
||||
|
||||
div.forgot {
|
||||
width: 257px;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
}
|
||||
div.password {
|
||||
float: right;
|
||||
padding-top: 4px;
|
||||
}
|
||||
|
||||
div.password p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.password a {
|
||||
color: #FFF;
|
||||
font-size: 12px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
div.password a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
nav {
|
||||
width: 96px;
|
||||
height: 47px;
|
||||
background: image-url("registration.png") no-repeat;
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
nav p {
|
||||
font-size: 14px;
|
||||
color: #FFF;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
div.error {
|
||||
width: auto;
|
||||
height: auto;
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
margin-top: -159px;
|
||||
margin-left: 582px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.error div.img {
|
||||
background: image-url("error-arrow.png") 0% 5px no-repeat;
|
||||
width: 19px;
|
||||
height: 35px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
div.error div.msg {
|
||||
background: #ededed;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
width: auto;
|
||||
height: auto;
|
||||
float: left;
|
||||
-webkit-box-shadow: 0px 6px 3px -3px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0px 6px 3px -3px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0px 6px 3px -3px rgba(0, 0, 0, 0.2);
|
||||
padding: 5px 20px 5px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
div.error p{
|
||||
margin:0;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
|
||||
footer {
|
||||
height: 32px;
|
||||
padding-left: 15px;
|
||||
width: 900px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
font-size: 12px;
|
||||
color: #FFF;
|
||||
padding-top: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer ul li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
footer ul li a {
|
||||
font-size: 12px;
|
||||
color: #FFF;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
footer ul li a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
|
@ -1,223 +1,285 @@
|
|||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Tahoma, Geneva, Helvetica, sans-serif;
|
||||
color: #565667;
|
||||
background: #1f60a1 image-url("bg.png") repeat-x;
|
||||
min-width: 940px;
|
||||
min-height: 300px;
|
||||
text-align: center;
|
||||
height: 100%; }
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Tahoma, Geneva, Helvetica, sans-serif;
|
||||
color: #565667;
|
||||
background: #1f60a1 image-url("bg.png") repeat-x;
|
||||
min-width: 940px;
|
||||
min-height: 300px;
|
||||
text-align: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
header, section, footer, aside, nav, article, menu {
|
||||
display: block; }
|
||||
display: block;
|
||||
}
|
||||
|
||||
input {
|
||||
&[type="text"]:focus, &[type="password"]:focus, &:focus {
|
||||
outline: none; } }
|
||||
input[type="text"]:focus { outline: none; }
|
||||
|
||||
select:focus {
|
||||
outline: none; }
|
||||
input[type="password"]:focus { outline: none; }
|
||||
|
||||
a img {
|
||||
border: none; }
|
||||
input:focus { outline: none; }
|
||||
|
||||
select:focus { outline: none; }
|
||||
|
||||
a img { border: none; }
|
||||
|
||||
.wrap {
|
||||
width: 940px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
min-height: 95%; }
|
||||
width: 940px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
min-height: 95%;
|
||||
}
|
||||
|
||||
.both {
|
||||
clear: both; }
|
||||
clear: both;
|
||||
}
|
||||
|
||||
|
||||
/* Header */
|
||||
|
||||
header div {
|
||||
&.logo {
|
||||
background: image-url("logo.png") no-repeat 50% 100%;
|
||||
height: 89px;
|
||||
width: 233px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
padding-top: 12%; }
|
||||
&.text {
|
||||
color: #FFF;
|
||||
font-size: 28px;
|
||||
width: 800px;
|
||||
text-align: left;
|
||||
margin-left: 90px;
|
||||
margin-top: 50px;
|
||||
font-family: Arial;
|
||||
text-shadow: 0px 1px 1px #000000;
|
||||
filter: dropshadow(color = black, offx = 0, offy = 1);
|
||||
padding-left: 0px; } }
|
||||
header div.logo {
|
||||
background: image-url("logo.png") no-repeat 50% 100%;
|
||||
height: 89px;
|
||||
width: 233px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
padding-top: 12%;
|
||||
}
|
||||
|
||||
header div.text {
|
||||
color: #FFF;
|
||||
font-size: 28px;
|
||||
width: 800px;
|
||||
text-align: left;
|
||||
margin-left: 90px;
|
||||
margin-top: 50px;
|
||||
font-family: Arial;
|
||||
text-shadow: 0px 1px 1px #000000;
|
||||
filter: dropshadow(color=#000000, offx=0, offy=1);
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
.niceCheck {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
background: image-url("checkbox.png");
|
||||
input {
|
||||
display: none; } }
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
background: image-url("checkbox.png");
|
||||
}
|
||||
.niceCheck input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Content */
|
||||
|
||||
article {
|
||||
width: 380px;
|
||||
height: 254px;
|
||||
background: #1c394c image-url("bg-signup.png") repeat-x;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #38658c;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
margin-top: 75px;
|
||||
-webkit-box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5);
|
||||
-moz-box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5);
|
||||
box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5); }
|
||||
width: 380px;
|
||||
height: 254px;
|
||||
background: #1c394c image-url("bg-signup.png") repeat-x;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #38658c;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
margin-top: 75px;
|
||||
-webkit-box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5);
|
||||
-moz-box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5);
|
||||
box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
a.button, input.button {
|
||||
background: #125687;
|
||||
background: image-url("button-green-normal.png");
|
||||
border-radius: 3px;
|
||||
color: #FFF;
|
||||
font-family: Tahoma;
|
||||
font-size: 12px;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-weight: normal;
|
||||
padding: 5px 25px;
|
||||
text-align: center;
|
||||
border: none;
|
||||
height: 25px;
|
||||
width: 106px;
|
||||
text-decoration: none; }
|
||||
|
||||
article div {
|
||||
&.left {
|
||||
float: left;
|
||||
font-size: 12px;
|
||||
background: #125687;
|
||||
background: image-url("button-green-normal.png");
|
||||
border-radius: 3px;
|
||||
color: #FFF;
|
||||
margin-left: 15px;
|
||||
margin-top: 16px; }
|
||||
&.right {
|
||||
float: right;
|
||||
margin-right: 15px;
|
||||
padding-bottom: 2px; } }
|
||||
font-family: Tahoma;
|
||||
font-size: 12px;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-weight: normal;
|
||||
padding: 5px 25px;
|
||||
text-align: center;
|
||||
border: none;
|
||||
height: 25px;
|
||||
width: 106px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
article div.left {
|
||||
float: left;
|
||||
font-size: 12px;
|
||||
color: #FFF;
|
||||
margin-left: 15px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
article div.right {
|
||||
float: right;
|
||||
margin-right: 15px;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
|
||||
.first {
|
||||
padding-top: 5px; }
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
input.button {
|
||||
padding: 3px 27px 8px 27px;
|
||||
height: 25px;
|
||||
width: auto; }
|
||||
padding: 3px 27px 8px 27px;
|
||||
height: 25px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
a.button:hover, input.button:hover {
|
||||
background: #1874b6;
|
||||
background: image-url("button-green-hover.png");
|
||||
cursor: pointer; }
|
||||
background: #1874b6;
|
||||
background: image-url("button-green-hover.png");
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
a.button:active, input.button:active {
|
||||
background: image-url("button-green-press.png"); }
|
||||
a.button:active, input.button:active{
|
||||
background: image-url("button-green-press.png");
|
||||
}
|
||||
|
||||
a.button {
|
||||
&:disabled, &.disabled {
|
||||
a.button:disabled, a.button.disabled, input.button:disabled, input.button.disabled{
|
||||
background: #125687;
|
||||
background: image-url("button-green-disabled.png");
|
||||
cursor: default; } }
|
||||
|
||||
input.button {
|
||||
&:disabled, &.disabled {
|
||||
background: #125687;
|
||||
background: image-url("button-green-disabled.png");
|
||||
cursor: default; } }
|
||||
background: image-url("button-green-disabled.png");
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
article h1 {
|
||||
color: #FFF;
|
||||
font-size: 18px;
|
||||
font-weight: normal;
|
||||
font-family: Tahoma;
|
||||
margin-bottom: 5px; }
|
||||
color: #FFF;
|
||||
font-size: 18px;
|
||||
font-weight: normal;
|
||||
font-family: Tahoma;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.registartion-input, .registartion-input-focus, .registartion-input-error, .registartion-input-no-focus {
|
||||
height: 24px;
|
||||
width: 217px;
|
||||
border: 1px solid #8199a9;
|
||||
border-radius: 2px;
|
||||
color: #cfcfcf;
|
||||
font-family: Tahoma;
|
||||
font-size: 12px;
|
||||
padding-left: 10px;
|
||||
margin-top: 10px; }
|
||||
height: 24px;
|
||||
width: 217px;
|
||||
border: 1px solid #8199a9;
|
||||
border-radius: 2px;
|
||||
color: #cfcfcf;
|
||||
font-family: Tahoma;
|
||||
font-size: 12px;
|
||||
padding-left: 10px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.registartion-input-focus, .registartion-input-focus-signup {
|
||||
color: #575756;
|
||||
-webkit-box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75);
|
||||
-moz-box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75);
|
||||
box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75); }
|
||||
color: #575756;
|
||||
-webkit-box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75);
|
||||
-moz-box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75);
|
||||
box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75);
|
||||
}
|
||||
|
||||
.registartion-input-no-focus, .registartion-input-no-focus-signup {
|
||||
color: #575756; }
|
||||
color: #575756;
|
||||
}
|
||||
|
||||
.registartion-input-error, .registartion-input-error-signup {
|
||||
border: 1px solid #bd4d40;
|
||||
outline: 1px solid #bd4d40;
|
||||
outline-offset: -2px; }
|
||||
border: 1px solid #bd4d40;
|
||||
outline:1px solid #bd4d40;
|
||||
outline-offset:-2px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
div.in {
|
||||
float: right;
|
||||
margin-right: 15px;
|
||||
margin-top: 12px; }
|
||||
float: right;
|
||||
margin-right: 15px;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
|
||||
footer {
|
||||
height: 32px;
|
||||
padding-left: 15px;
|
||||
width: 900px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
font-size: 12px;
|
||||
color: #FFF;
|
||||
padding-top: 10px;
|
||||
text-align: center;
|
||||
li {
|
||||
display: inline;
|
||||
a {
|
||||
font-size: 12px;
|
||||
color: #FFF;
|
||||
text-decoration: none;
|
||||
&:hover {
|
||||
text-decoration: underline; } } } } }
|
||||
height: 32px;
|
||||
padding-left: 15px;
|
||||
width: 900px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
font-size: 12px;
|
||||
color: #FFF;
|
||||
padding-top: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer ul li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
footer ul li a {
|
||||
font-size: 12px;
|
||||
color: #FFF;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
footer ul li a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
||||
div.error {
|
||||
background: image-url("error-message.png");
|
||||
width: 237px;
|
||||
height: 35px;
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
margin-top: -159px;
|
||||
margin-left: 582px;
|
||||
//display: none;
|
||||
p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-top: 7px;
|
||||
text-align: center; }
|
||||
&.login {
|
||||
margin-top: -242px;
|
||||
margin-left: 650px; }
|
||||
&.name {
|
||||
margin-top: -202px;
|
||||
margin-left: 650px; }
|
||||
&.email {
|
||||
margin-top: -161px;
|
||||
margin-left: 650px; }
|
||||
&.password {
|
||||
margin-top: -101px;
|
||||
margin-left: 650px; } }
|
||||
width: auto;
|
||||
height: auto;
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
margin-top: -159px;
|
||||
margin-left: 582px;
|
||||
display: none;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
div.error div.img {
|
||||
background: image-url("error-arrow.png") 0% 5px no-repeat;
|
||||
width: 19px;
|
||||
height: 35px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
div.error div.msg {
|
||||
background: #ededed;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
width: auto;
|
||||
height: auto;
|
||||
float: left;
|
||||
-webkit-box-shadow: 0px 6px 3px -3px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0px 6px 3px -3px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0px 6px 3px -3px rgba(0, 0, 0, 0.2);
|
||||
padding: 5px 20px 5px;
|
||||
}
|
||||
|
||||
|
||||
div.error p{
|
||||
margin:0;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div.error.login {
|
||||
margin-top: -242px;
|
||||
margin-left: 650px;
|
||||
}
|
||||
|
||||
div.error.name {
|
||||
margin-top: -202px;
|
||||
margin-left: 650px;
|
||||
}
|
||||
|
||||
div.error.email {
|
||||
margin-top: -161px;
|
||||
margin-left: 650px;
|
||||
}
|
||||
|
||||
div.error.password {
|
||||
margin-top: -101px;
|
||||
margin-left: 650px;
|
||||
}
|
|
@ -1,276 +1,3 @@
|
|||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Tahoma, Geneva, Helvetica, sans-serif;
|
||||
color: #565667;
|
||||
background: #1f60a1 image-url("bg.png") repeat-x;
|
||||
min-width: 940px;
|
||||
min-height: 300px;
|
||||
text-align: center;
|
||||
height: 100%; }
|
||||
@import 'devise/login';
|
||||
|
||||
header, section, footer, aside, nav, article, menu {
|
||||
display: block; }
|
||||
|
||||
input {
|
||||
&[type="text"]:focus, &[type="password"]:focus, &:focus {
|
||||
outline: none; } }
|
||||
|
||||
select:focus {
|
||||
outline: none; }
|
||||
|
||||
a img {
|
||||
border: none; }
|
||||
|
||||
.wrap {
|
||||
width: 940px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
min-height: 95%; }
|
||||
|
||||
.both {
|
||||
clear: both; }
|
||||
|
||||
/* Header */
|
||||
|
||||
header div {
|
||||
&.logo {
|
||||
background: image-url("logo.png") no-repeat 50% 100%;
|
||||
height: 89px;
|
||||
width: 233px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
padding-top: 12%; }
|
||||
&.text {
|
||||
color: #FFF;
|
||||
font-size: 28px;
|
||||
width: 800px;
|
||||
text-align: left;
|
||||
margin-left: 90px;
|
||||
margin-top: 50px;
|
||||
font-family: Arial;
|
||||
text-shadow: 0px 1px 1px #000000;
|
||||
filter: dropshadow(color = black, offx = 0, offy = 1);
|
||||
padding-left: 0px; } }
|
||||
|
||||
.niceCheck {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
background: image-url("checkbox.png");
|
||||
input {
|
||||
display: none; } }
|
||||
|
||||
/* Content */
|
||||
|
||||
article {
|
||||
width: 257px;
|
||||
height: 227px;
|
||||
background: #1c394c image-url("bg-signup.png") repeat-x;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #38658c;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
margin-top: 75px;
|
||||
-webkit-box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5);
|
||||
-moz-box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5);
|
||||
box-shadow: 0px 3px 5px 0px rgba(0, 0, 0, 0.5); }
|
||||
|
||||
a.button {
|
||||
background: #125687;
|
||||
background: image-url("button-green-normal.png");
|
||||
border-radius: 3px;
|
||||
color: #FFF;
|
||||
font-family: Tahoma;
|
||||
font-size: 12px;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-weight: normal;
|
||||
padding: 5px 25px;
|
||||
text-align: center;
|
||||
border: none;
|
||||
height: 25px;
|
||||
width: 106px;
|
||||
text-decoration: none; }
|
||||
|
||||
input.button {
|
||||
background: #125687;
|
||||
background: image-url("button-green-normal.png");
|
||||
border-radius: 3px;
|
||||
color: #FFF;
|
||||
font-family: Tahoma;
|
||||
font-size: 12px;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-weight: normal;
|
||||
padding: 5px 25px;
|
||||
text-align: center;
|
||||
border: none;
|
||||
height: 25px;
|
||||
width: 106px;
|
||||
text-decoration: none;
|
||||
padding: 3px 27px 8px 27px;
|
||||
height: 25px;
|
||||
width: auto; }
|
||||
|
||||
a.button:hover, input.button:hover {
|
||||
background: #1874b6;
|
||||
background: image-url("button-green-hover.png");
|
||||
cursor: pointer; }
|
||||
|
||||
a.button:active, input.button:active {
|
||||
background: image-url("button-green-press.png"); }
|
||||
|
||||
a.button {
|
||||
&:disabled, &.disabled {
|
||||
background: #125687;
|
||||
background: image-url("button-green-disabled.png");
|
||||
cursor: default; } }
|
||||
|
||||
input.button {
|
||||
&:disabled, &.disabled {
|
||||
background: #125687;
|
||||
background: image-url("button-green-disabled.png");
|
||||
cursor: default; } }
|
||||
|
||||
article h1 {
|
||||
color: #FFF;
|
||||
font-size: 18px;
|
||||
font-weight: normal;
|
||||
font-family: Tahoma;
|
||||
margin-bottom: 5px; }
|
||||
|
||||
.registartion-input, .registartion-input-focus, .registartion-input-error, .registartion-input-no-focus {
|
||||
height: 24px;
|
||||
width: 217px;
|
||||
border: 1px solid #8199a9;
|
||||
border-radius: 2px;
|
||||
color: #cfcfcf;
|
||||
font-family: Tahoma;
|
||||
font-size: 12px;
|
||||
padding-left: 10px;
|
||||
margin-top: 10px; }
|
||||
|
||||
.registartion-input-focus, .registartion-input-focus-signup {
|
||||
color: #575756;
|
||||
-webkit-box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75);
|
||||
-moz-box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75);
|
||||
box-shadow: 0px 0px 7px 2px rgba(126, 183, 237, 0.75); }
|
||||
|
||||
.registartion-input-no-focus, .registartion-input-no-focus-signup {
|
||||
color: #575756; }
|
||||
|
||||
.registartion-input-error, .registartion-input-error-signup {
|
||||
border: 1px solid #bd4d40;
|
||||
outline: 1px solid #bd4d40;
|
||||
outline-offset: -2px; }
|
||||
|
||||
div {
|
||||
&.registration div {
|
||||
&.remember {
|
||||
color: #FFF;
|
||||
font-size: 12px;
|
||||
float: left;
|
||||
padding-left: 15px;
|
||||
padding-top: 5px;
|
||||
div {
|
||||
&.check {
|
||||
float: left;
|
||||
margin-top: 15px;
|
||||
margin-right: 4px; }
|
||||
&.text {
|
||||
float: left;
|
||||
margin-top: 15px; } } }
|
||||
&.in {
|
||||
float: right;
|
||||
padding-right: 15px;
|
||||
padding-top: 15px; } }
|
||||
&.hr {
|
||||
margin-top: 10px;
|
||||
height: 1px;
|
||||
width: 100%;
|
||||
border-bottom: 1px solid #264862;
|
||||
border-top: 1px solid #264862; } }
|
||||
|
||||
article div.other div {
|
||||
&.left {
|
||||
float: left;
|
||||
font-size: 12px;
|
||||
color: #FFFFFF;
|
||||
margin-top: 6px;
|
||||
margin-left: 15px; }
|
||||
&.right {
|
||||
float: right;
|
||||
margin-right: 15px;
|
||||
margin-top: 13px; } }
|
||||
|
||||
div {
|
||||
&.forgot {
|
||||
width: 257px;
|
||||
text-align: center;
|
||||
margin: 0 auto; }
|
||||
&.password {
|
||||
float: right;
|
||||
padding-top: 4px;
|
||||
p {
|
||||
margin: 0;
|
||||
padding: 0; }
|
||||
a {
|
||||
color: #FFF;
|
||||
font-size: 12px;
|
||||
text-decoration: none;
|
||||
&:hover {
|
||||
text-decoration: underline; } } } }
|
||||
|
||||
nav {
|
||||
width: 96px;
|
||||
height: 47px;
|
||||
background: image-url("registration.png") no-repeat;
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
a {
|
||||
font-size: 14px;
|
||||
color: #FFF;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-top: 10px;
|
||||
text-decoration: none;} }
|
||||
|
||||
div.error {
|
||||
background: image-url("error-message.png");
|
||||
width: 237px;
|
||||
height: 35px;
|
||||
font-size: 12px;
|
||||
position: absolute;
|
||||
margin-top: -159px;
|
||||
margin-left: 582px;
|
||||
display: none;
|
||||
p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-top: 7px;
|
||||
text-align: center; } }
|
||||
|
||||
/* Footer */
|
||||
|
||||
footer {
|
||||
height: 32px;
|
||||
padding-left: 15px;
|
||||
width: 900px;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
font-size: 12px;
|
||||
color: #FFF;
|
||||
padding-top: 10px;
|
||||
text-align: center;
|
||||
li {
|
||||
display: inline;
|
||||
a {
|
||||
font-size: 12px;
|
||||
color: #FFF;
|
||||
text-decoration: none;
|
||||
&:hover {
|
||||
text-decoration: underline; } } } } }
|
||||
nav a { text-decoration: none;}
|
|
@ -0,0 +1,7 @@
|
|||
class ActivityFeedsController < ApplicationController
|
||||
before_filter :authenticate_user!
|
||||
|
||||
def index
|
||||
@activity_feeds = current_user.activity_feeds.order('created_at DESC')
|
||||
end
|
||||
end
|
|
@ -19,10 +19,10 @@ class CategoriesController < ApplicationController
|
|||
if @platform
|
||||
@categories = Category.select('categories.id, categories.name, categories.ancestry, count(projects.id) projects_count').
|
||||
joins(:projects => :repositories).where('repositories.platform_id = ?', @platform.id).
|
||||
having('count(projects.id) > 0').group('categories.id, categories.name, categories.ancestry, projects_count').default_order
|
||||
having('count(projects.id) > 0').group('categories.id, categories.name, categories.ancestry, projects_count')
|
||||
render 'index2'
|
||||
else
|
||||
@categories = Category.default_order.paginate(:page => params[:page])
|
||||
@categories = Category.paginate(:page => params[:page])
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@ class CommentsController < ApplicationController
|
|||
|
||||
def find_comment
|
||||
@comment = Comment.find(params[:id])
|
||||
if @comment.commentable_type == 'Grit::Commit'
|
||||
if @comment.commit_comment?
|
||||
@comment.project = @project
|
||||
@comment.helper
|
||||
end
|
||||
|
|
|
@ -6,7 +6,7 @@ class Git::BlobsController < Git::BaseController
|
|||
before_filter :set_path_blob
|
||||
|
||||
def show
|
||||
redirect_to project_repo_path(@project) and return unless @blob.present?
|
||||
redirect_to project_path(@project) and return unless @blob.present?
|
||||
if params[:raw]
|
||||
image_url = Rails.root.to_s + "/" + @path
|
||||
|
||||
|
|
|
@ -11,12 +11,7 @@ class GroupsController < ApplicationController
|
|||
autocomplete :group, :uname
|
||||
|
||||
def index
|
||||
puts parent.inspect
|
||||
@groups = if parent? and !parent.nil?
|
||||
parent.groups
|
||||
else
|
||||
Group
|
||||
end.accessible_by(current_ability)
|
||||
@groups = current_user.groups#accessible_by(current_ability)
|
||||
|
||||
@groups = if params[:query]
|
||||
@groups.where(["name LIKE ?", "%#{params[:query]}%"])
|
||||
|
@ -40,18 +35,14 @@ class GroupsController < ApplicationController
|
|||
|
||||
def create
|
||||
@group = Group.new params[:group]
|
||||
@group.owner = if parent? and parent.is_a? User
|
||||
parent
|
||||
else
|
||||
current_user
|
||||
end
|
||||
@group.owner = current_user
|
||||
|
||||
if @group.save
|
||||
flash[:notice] = t('flash.group.saved')
|
||||
redirect_to group_path(@group)
|
||||
else
|
||||
flash[:error] = t('flash.group.save_error')
|
||||
flash[:warning] = @group.errors[:base]
|
||||
flash[:warning] = @group.errors.full_messages.join('. ')
|
||||
render :action => :new
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,15 +3,13 @@ class IssuesController < ApplicationController
|
|||
NON_RESTFUL_ACTION = [:create_label, :update_label, :destroy_label, :search_collaborators]
|
||||
before_filter :authenticate_user!
|
||||
|
||||
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]
|
||||
load_resource :project
|
||||
load_and_authorize_resource :issue, :through => :project, :find_by => :serial_id, :only => [:show, :edit, :update, :destroy, :new, :create]
|
||||
before_filter :load_and_authorize_label, :only => NON_RESTFUL_ACTION
|
||||
|
||||
layout 'application'
|
||||
|
||||
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] || []
|
||||
|
@ -36,17 +34,16 @@ class IssuesController < ApplicationController
|
|||
end
|
||||
|
||||
def new
|
||||
@issue = Issue.new(:project => @project)
|
||||
@issue = @project.issues.new
|
||||
end
|
||||
|
||||
def create
|
||||
@user_id = params[:user_id]
|
||||
@user_uname = params[:user_uname]
|
||||
|
||||
@issue = Issue.new(params[:issue])
|
||||
@issue = @project.issues.new(params[:issue])
|
||||
@issue.creator_id = current_user.id
|
||||
@issue.user_id = @user_id
|
||||
@issue.project_id = @project.id
|
||||
|
||||
if @issue.save
|
||||
@issue.subscribe_creator(current_user.id)
|
||||
|
@ -67,9 +64,7 @@ class IssuesController < ApplicationController
|
|||
status = 200 if @issue.save
|
||||
render action, :status => (status || 500), :layout => false
|
||||
else
|
||||
@issue.title = params[:issue][:title]
|
||||
@issue.body = params[:issue][:body]
|
||||
status = 200 if @issue.save
|
||||
status = 200 if @issue.update_attributes(params[:issue])
|
||||
render :nothing => true, :status => (status || 500), :layout => false
|
||||
end
|
||||
end
|
||||
|
@ -112,7 +107,6 @@ class IssuesController < ApplicationController
|
|||
private
|
||||
|
||||
def load_and_authorize_label
|
||||
@project = Project.find(params[:project_id])
|
||||
@label = Label.find(params[:label_id]) if params[:label_id]
|
||||
authorize! :write, @project
|
||||
end
|
||||
|
|
|
@ -23,56 +23,60 @@ class MembersController < ApplicationController
|
|||
@user = User.find params[:id]
|
||||
render :edit_rights and return
|
||||
end
|
||||
@group = parent
|
||||
end
|
||||
|
||||
def create
|
||||
end
|
||||
|
||||
def update
|
||||
all_user_ids = []
|
||||
Relation::ROLES.each { |r|
|
||||
all_user_ids = all_user_ids | params[r.to_sym].keys if params[r.to_sym]
|
||||
}
|
||||
params['user'].keys.each { |user_id|
|
||||
role = params['user'][user_id]
|
||||
|
||||
# Remove relations
|
||||
users_for_removing = parent.members.select do |u|
|
||||
!all_user_ids.map{|k| k.to_i}.include? u.id and parent.owner != u
|
||||
end
|
||||
users_for_removing.each do |u|
|
||||
Relation.by_object(u).by_target(parent).each {|r| r.destroy}
|
||||
end
|
||||
|
||||
# Create relations
|
||||
Relation::ROLES.each { |r|
|
||||
#users_for_creating = users_for_creating params[:user].keys.map{|p| p.to_i} - @project.collaborators.map(&:id)
|
||||
params[r.to_sym].keys.each { |u|
|
||||
if relation = parent.objects.find_by_object_id_and_object_type(u, 'User')
|
||||
relation.update_attribute(:role, r)
|
||||
else
|
||||
relation = parent.objects.build(:object_id => u, :object_type => 'User', :role => r)
|
||||
puts relation.inspect
|
||||
puts r
|
||||
relation.save!
|
||||
end
|
||||
} if params[r.to_sym]
|
||||
}
|
||||
if relation = parent.objects.find_by_object_id_and_object_type(user_id, 'User')
|
||||
relation.update_attribute(:role, role)
|
||||
else
|
||||
relation = parent.objects.build(:object_id => user_id, :object_type => 'User', :role => role)
|
||||
relation.save!
|
||||
end
|
||||
} if params['user']
|
||||
|
||||
if parent.save
|
||||
flash[:notice] = t("flash.members.successfully_changed")
|
||||
else
|
||||
flash[:error] = t("flash.members.error_in_changing")
|
||||
end
|
||||
redirect_to parent_path
|
||||
|
||||
redirect_to edit_group_members_path(parent)
|
||||
end
|
||||
|
||||
def destroy
|
||||
def remove
|
||||
if params[:id]
|
||||
u = User.find(params[:id])
|
||||
Relation.by_object(u).by_target(parent)[0].destroy
|
||||
|
||||
redirect_to groups_path
|
||||
else
|
||||
all_user_ids = []
|
||||
|
||||
params['user_remove'].keys.each { |user_id|
|
||||
all_user_ids << user_id if params['user_remove'][user_id] == ["1"]
|
||||
} if params['user_remove']
|
||||
|
||||
all_user_ids.each do |user_id|
|
||||
u = User.find(user_id)
|
||||
Relation.by_object(u).by_target(parent).each {|r| r.destroy}
|
||||
end
|
||||
|
||||
redirect_to edit_group_members_path(parent)
|
||||
end
|
||||
end
|
||||
|
||||
def add
|
||||
if params['user_id'] and !params['user_id'].empty?
|
||||
@user = User.find_by_uname(params['user_id'])
|
||||
unless parent.objects.exists? :object_id => @user.id, :object_type => 'User'
|
||||
relation = parent.objects.build(:object_id => @user.id, :object_type => 'User', :role => 'reader')
|
||||
relation = parent.objects.build(:object_id => @user.id, :object_type => 'User', :role => params[:role])
|
||||
if relation.save
|
||||
flash[:notice] = t("flash.members.successfully_added")
|
||||
else
|
||||
|
|
|
@ -52,7 +52,7 @@ class ProjectsController < ApplicationController
|
|||
redirect_to @project
|
||||
else
|
||||
flash[:error] = t('flash.project.save_error')
|
||||
flash[:warning] = @project.errors[:base]
|
||||
flash[:warning] = @project.errors.full_messages.join('. ')
|
||||
render :action => :new
|
||||
end
|
||||
end
|
||||
|
|
|
@ -256,6 +256,7 @@ class WikiController < ApplicationController
|
|||
# @committer.after_commit do |committer, sha1|
|
||||
# here goes callback for notification
|
||||
# end
|
||||
ActivityFeedObserver.instance.after_create(@committer).delay
|
||||
@committer
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
module ActivityFeedsHelper
|
||||
def render_activity_feed(activity_feed)
|
||||
render :partial => activity_feed.partial, :locals => activity_feed.data
|
||||
end
|
||||
end
|
|
@ -0,0 +1,21 @@
|
|||
# -*- encoding : utf-8 -*-
|
||||
module DeviseHelper
|
||||
def getDeviseErrors(*name)
|
||||
res = Array.new(name.count)
|
||||
resource.errors.each do |attr, message|
|
||||
if index = name.index(attr)
|
||||
res[index] = message
|
||||
end
|
||||
end
|
||||
res
|
||||
end
|
||||
|
||||
def showDeviseHintError(name, error, additional_class = '')
|
||||
if error
|
||||
"<div id='hint' class='error #{name.to_s} #{additional_class}' style='display: block;'> \
|
||||
<div class='img'></div> \
|
||||
<div class='msg'> #{error}</div> \
|
||||
</div>".html_safe
|
||||
end
|
||||
end
|
||||
end
|
|
@ -74,18 +74,20 @@ module GitHelper
|
|||
|
||||
# TODO This is very dirty hack. Maybe need to be changed.
|
||||
def branch_selector_options(project)
|
||||
tmp = params
|
||||
tmp = params.dup
|
||||
unless tmp['treeish'].present?
|
||||
tmp.merge!('project_id' => project.id, 'treeish' => project.default_branch).delete('id')
|
||||
end
|
||||
tmp.delete('treeish') if tmp['commit_hash'].present?
|
||||
res = {}
|
||||
current = url_for(tmp).split('?', 2).first
|
||||
tmp['commit_hash'] = truncate(tmp['commit_hash'], :length => 20) if tmp['commit_hash']
|
||||
|
||||
res = project.branches.inject(res) do |h, branch|
|
||||
h[branch.name] = url_for(tmp.merge('treeish' => branch.name)).split('?', 2).first
|
||||
h[truncate(branch.name, :length => 20)] = url_for(tmp.merge('treeish' => branch.name)).split('?', 2).first
|
||||
h
|
||||
end
|
||||
res.merge!(tmp['treeish'] => current)
|
||||
res.merge!(tmp['commit_hash'] || tmp['treeish'] => current)
|
||||
|
||||
options_for_select(res.sort, current).html_safe
|
||||
end
|
||||
|
|
|
@ -13,7 +13,7 @@ class UserMailer < ActionMailer::Base
|
|||
def new_comment_notification(comment, user)
|
||||
@user = user
|
||||
@comment = comment
|
||||
mail(:to => user.email, :subject => I18n.t("notifications.subjects.new_#{comment.commentable.class == Grit::Commit ? 'commit_' : ''}comment_notification")) do |format|
|
||||
mail(:to => user.email, :subject => I18n.t("notifications.subjects.new_#{comment.commit_comment? ? 'commit_' : ''}comment_notification")) do |format|
|
||||
format.html
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
class ActivityFeed < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
|
||||
serialize :data
|
||||
|
||||
def partial
|
||||
'activity_feeds/partials/' + self.kind
|
||||
end
|
||||
end
|
|
@ -0,0 +1,121 @@
|
|||
class ActivityFeedObserver < ActiveRecord::Observer
|
||||
observe :issue, :comment, :user
|
||||
|
||||
def after_create(record)
|
||||
case record.class.to_s
|
||||
when 'User'
|
||||
ActivityFeed.create(
|
||||
:user => record,
|
||||
:kind => 'new_user_notification',
|
||||
:data => {:user_name => record.name, :user_email => record.email}
|
||||
)
|
||||
|
||||
when 'Issue'
|
||||
recipients = record.collect_recipient_ids
|
||||
recipients.each do |recipient_id|
|
||||
recipient = User.find(recipient_id)
|
||||
UserMailer.delay.new_issue_notification(record, recipient) if User.find(recipient).notifier.can_notify && User.find(recipient).notifier.new_issue
|
||||
ActivityFeed.create(
|
||||
:user => recipient,
|
||||
:kind => 'new_issue_notification',
|
||||
:data => {:user_name => recipient.name, :issue_serial_id => record.serial_id, :issue_title => record.title, :project_id => record.project.id, :project_name => record.project.name}
|
||||
)
|
||||
end
|
||||
|
||||
if record.user_id_was != record.user_id
|
||||
UserMailer.delay.issue_assign_notification(record, record.user) if record.user.notifier.issue_assign && record.user.notifier.can_notify
|
||||
ActivityFeed.create(
|
||||
:user => record.user,
|
||||
:kind => 'issue_assign_notification',
|
||||
:data => {:user_name => record.user.name, :issue_serial_id => record.serial_id, :project_id => record.project.id, :issue_title => record.title}
|
||||
)
|
||||
end
|
||||
|
||||
when 'Comment'
|
||||
if record.commentable.class == Issue
|
||||
subscribes = record.commentable.subscribes.finder_hack
|
||||
subscribes.each do |subscribe|
|
||||
if record.user_id != subscribe.user_id
|
||||
UserMailer.delay.new_comment_notification(record, subscribe.user) if record.can_notify_on_new_comment?(subscribe)
|
||||
ActivityFeed.create(
|
||||
:user => subscribe.user,
|
||||
:kind => 'new_comment_notification',
|
||||
:data => {:user_name => subscribe.user.name, :comment_body => record.body, :issue_title => record.commentable.title,
|
||||
:issue_serial_id => record.commentable.serial_id, :project_id => record.commentable.project.id}
|
||||
)
|
||||
end
|
||||
end
|
||||
elsif record.commit_comment?
|
||||
subscribes = Subscribe.comment_subscribes(record).where(:status => true)
|
||||
subscribes.each do |subscribe|
|
||||
next if record.own_comment?(subscribe.user)
|
||||
UserMailer.delay.new_comment_notification(record, subscribe.user) if subscribe.user.notifier.can_notify
|
||||
ActivityFeed.create(
|
||||
:user => subscribe.user,
|
||||
:kind => 'new_comment_commit_notification',
|
||||
:data => {:user_name => subscribe.user.name, :comment_body => record.body, :commit_message => record.commentable.message.encode_to_default,
|
||||
:commit_id => record.commentable.id, :project_id => record.project.id}
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
when 'GitHook'
|
||||
change_type = record.change_type
|
||||
branch_name = record.refname.match(/\/([\w\d]+)$/)[1]
|
||||
#user_name = record.
|
||||
|
||||
#owner = record.owner
|
||||
project = Project.find_by_name(record.repo)
|
||||
|
||||
last_commits = project.git_repository.repo.log(branch_name, nil).first(3).collect do |commit| #:author => 'author'
|
||||
[commit.sha, commit.message]
|
||||
end
|
||||
|
||||
if change_type == 'delete'
|
||||
kind = 'git_delete_branch_notification'
|
||||
options = {:project_id => project.id, :project_name => project.name, :branch_name => branch_name, :change_type => change_type}
|
||||
else
|
||||
kind = 'git_new_push_notification'
|
||||
options = {:project_id => project.id, :project_name => project.name, :last_commits => last_commits, :branch_name => branch_name, :change_type => change_type}
|
||||
end
|
||||
|
||||
project.owner_and_admin_ids.each do |recipient|
|
||||
ActivityFeed.create(
|
||||
:user => User.find(recipient),
|
||||
:kind => kind,
|
||||
:data => options
|
||||
)
|
||||
end
|
||||
|
||||
when 'Gollum::Committer'
|
||||
actor = User.find_by_uname(record.actor.name)
|
||||
project_name = record.wiki.path.match(/\/(\w+)\.wiki\.git$/)[1]
|
||||
project = Project.find_by_name(project_name)
|
||||
commit_sha = record.commit
|
||||
#wiki_name = record.wiki.name
|
||||
|
||||
project.owner_and_admin_ids.each do |recipient|
|
||||
ActivityFeed.create(
|
||||
:user => User.find(recipient),#record.user,
|
||||
:kind => 'wiki_new_commit_notification',
|
||||
:data => {:user_id => actor.id, :user_name => actor.name, :project_id => project.id, :project_name => project_name, :commit_sha => commit_sha}
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def after_update(record)
|
||||
case record.class.to_s
|
||||
when 'Issue'
|
||||
if record.user_id_was != record.user_id
|
||||
UserMailer.delay.issue_assign_notification(record, record.user) if record.user.notifier.issue_assign && record.user.notifier.can_notify
|
||||
ActivityFeed.create(
|
||||
:user => record.user,
|
||||
:kind => 'issue_assign_notification',
|
||||
:data => {:user_name => record.user.name, :issue_serial_id => record.serial_id, :project_id => record.project.id, :issue_title => record.title}
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
|
@ -8,9 +8,10 @@ class Comment < ActiveRecord::Base
|
|||
|
||||
default_scope order('created_at')
|
||||
|
||||
after_create :invoke_helper, :if => "commentable_type == 'Grit::Commit'"
|
||||
# FIXME
|
||||
after_create :subscribe_on_reply, :unless => lambda {|c| c.commit_comment?}
|
||||
after_create :invoke_helper, :if => lambda {|c| c.commit_comment?}
|
||||
after_create :subscribe_users
|
||||
after_create {|c| Subscribe.new_comment_notification(c)}
|
||||
|
||||
def helper
|
||||
class_eval { def commentable; project.git_repository.commit(commentable_id.to_s(16)); end } if commit_comment?
|
||||
|
@ -24,8 +25,16 @@ class Comment < ActiveRecord::Base
|
|||
commentable_type == 'Grit::Commit'
|
||||
end
|
||||
|
||||
def can_notify_on_new_comment?(subscribe)
|
||||
User.find(subscribe.user).notifier.new_comment && User.find(subscribe.user).notifier.can_notify
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def subscribe_on_reply
|
||||
self.commentable.subscribes.create(:user_id => self.user_id) if !self.commentable.subscribes.exists?(:user_id => self.user_id)
|
||||
end
|
||||
|
||||
def invoke_helper
|
||||
self.helper
|
||||
end
|
||||
|
@ -33,7 +42,7 @@ class Comment < ActiveRecord::Base
|
|||
def subscribe_users
|
||||
if self.commentable.class == Issue
|
||||
self.commentable.subscribes.create(:user => self.user) if !self.commentable.subscribes.exists?(:user_id => self.user.id)
|
||||
elsif self.commentable.class == Grit::Commit
|
||||
elsif self.commit_comment?
|
||||
recipients = self.project.relations.by_role('admin').where(:object_type => 'User').map &:object # admins
|
||||
recipients << self.user << User.where(:email => self.commentable.committer.email).first # commentor and committer
|
||||
recipients << self.project.owner if self.project.owner_type == 'User' # project owner
|
||||
|
|
|
@ -13,14 +13,14 @@ class Group < ActiveRecord::Base
|
|||
has_many :own_projects, :as => :owner, :class_name => 'Project', :dependent => :destroy
|
||||
has_many :own_platforms, :as => :owner, :class_name => 'Platform', :dependent => :destroy
|
||||
|
||||
validates :name, :owner, :presence => true
|
||||
validates :owner, :presence => true
|
||||
validates :uname, :presence => true, :uniqueness => {:case_sensitive => false}, :format => { :with => /^[a-z0-9_]+$/ }
|
||||
validate { errors.add(:uname, :taken) if User.where('uname LIKE ?', uname).present? }
|
||||
|
||||
scope :by_owner, lambda { |owner| where(:owner_id => owner.id) }
|
||||
scope :by_admin, lambda { |admin| joins(:relations).where(:'relations.role' => 'admin', :'relations.target_id' => admin.id, :'relations.target_type' => 'User') }
|
||||
|
||||
attr_readonly :uname, :own_projects_count
|
||||
attr_readonly :own_projects_count
|
||||
|
||||
delegate :ssh_key, :email, :to => :owner
|
||||
|
||||
|
@ -33,6 +33,10 @@ class Group < ActiveRecord::Base
|
|||
(by_owner(user) | by_admin(user)).collect { |el| [el.name, el.id] }
|
||||
end
|
||||
|
||||
def name
|
||||
uname
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def add_owner_to_members
|
||||
|
|
|
@ -18,12 +18,9 @@ class Issue < ActiveRecord::Base
|
|||
|
||||
after_create :set_serial_id
|
||||
after_create :subscribe_users
|
||||
after_create :deliver_new_issue_notification
|
||||
after_create :deliver_issue_assign_notification
|
||||
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
|
||||
attr_accessible :labelings_attributes, :title, :body
|
||||
accepts_nested_attributes_for :labelings, :allow_destroy => true
|
||||
|
||||
scope :opened, where(:status => 'open', :closed_by => nil, :closed_at => nil)
|
||||
|
@ -58,6 +55,14 @@ class Issue < ActiveRecord::Base
|
|||
self.status = 'open'
|
||||
end
|
||||
|
||||
def collect_recipient_ids
|
||||
recipients = self.project.relations.by_role('admin').where(:object_type => 'User').map { |rel| rel.read_attribute(:object_id) }
|
||||
recipients = recipients | [self.user_id] if self.user_id
|
||||
recipients = recipients | [self.project.owner_id] if self.project.owner_type == 'User'
|
||||
|
||||
recipients
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def set_serial_id
|
||||
|
@ -65,18 +70,6 @@ class Issue < ActiveRecord::Base
|
|||
self.save!
|
||||
end
|
||||
|
||||
def deliver_new_issue_notification
|
||||
recipients = collect_recipient_ids
|
||||
recipients.each do |recipient_id|
|
||||
recipient = User.find(recipient_id)
|
||||
UserMailer.delay.new_issue_notification(self, recipient) if User.find(recipient).notifier.can_notify && User.find(recipient).notifier.new_issue
|
||||
end
|
||||
end
|
||||
|
||||
def deliver_issue_assign_notification
|
||||
UserMailer.delay.issue_assign_notification(self, self.user) if self.user_id_was != self.user_id && self.user.notifier.issue_assign && self.user.notifier.can_notify
|
||||
end
|
||||
|
||||
def subscribe_users
|
||||
recipients = collect_recipient_ids
|
||||
recipients.each do |recipient_id|
|
||||
|
@ -85,19 +78,6 @@ class Issue < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def collect_recipient_ids
|
||||
recipients = self.project.relations.by_role('admin').where(:object_type => 'User').map { |rel| rel.read_attribute(:object_id) }
|
||||
recipients = recipients | [self.user_id] if self.user_id
|
||||
recipients = recipients | [self.project.owner_id] if self.project.owner_type == 'User'
|
||||
|
||||
# filter by notification settings
|
||||
recipients = recipients.select do |recipient|
|
||||
User.find(recipient).notifier.new_issue && User.find(recipient).notifier.can_notify
|
||||
end
|
||||
|
||||
recipients
|
||||
end
|
||||
|
||||
def subscribe_issue_assigned_user
|
||||
if self.user_id_was != self.user_id
|
||||
self.subscribes.where(:user_id => self.user_id_was).first.destroy unless self.user_id_was.blank?
|
||||
|
|
|
@ -10,7 +10,7 @@ class Product < ActiveRecord::Base
|
|||
|
||||
has_attached_file :tar
|
||||
|
||||
validates_attachment_content_type :tar, :content_type => ["application/gnutar", "application/x-compressed", "application/x-gzip", "application/x-bzip", "application/x-bzip2", "application/x-tar"], :message => I18n.t('layout.invalid_content_type')
|
||||
validates_attachment_content_type :tar, :content_type => ["application/gnutar", "application/x-compressed", "application/x-gzip", "application/x-bzip", "application/x-bzip2", "application/x-tar", "application/octet-stream"], :message => I18n.t('layout.invalid_content_type')
|
||||
validates :name, :presence => true, :uniqueness => {:scope => :platform_id}
|
||||
|
||||
scope :recent, order("name ASC")
|
||||
|
|
|
@ -14,6 +14,7 @@ class ProductBuildList < ActiveRecord::Base
|
|||
attr_accessor :base_url
|
||||
|
||||
after_create :xml_rpc_create
|
||||
after_destroy :xml_delete_iso_container
|
||||
|
||||
def container_path
|
||||
"/downloads/#{product.platform.name}/product/#{id}/"
|
||||
|
@ -34,8 +35,17 @@ class ProductBuildList < ActiveRecord::Base
|
|||
if result == ProductBuilder::SUCCESS
|
||||
return true
|
||||
else
|
||||
# return false
|
||||
raise "Failed to create product_build_list #{id} inside platform #{product.platform.name} tar url #{tar_url} with code #{result}."
|
||||
raise "Failed to create product_build_list #{id} inside platform #{platform.name} tar url #{tar_url} with code #{result}."
|
||||
end
|
||||
end
|
||||
|
||||
def xml_delete_iso_container
|
||||
result = ProductBuilder.delete_iso_container self
|
||||
if result == ProductBuilder::SUCCESS
|
||||
return true
|
||||
else
|
||||
raise "Failed to destroy product_build_list #{id} inside platform #{platform.name} with code #{result}."
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -204,7 +204,13 @@ class Project < ActiveRecord::Base
|
|||
|
||||
def self.process_hook(owner_uname, repo, newrev, oldrev, ref, newrev_type, oldrev_type)
|
||||
rec = GitHook.new(owner_uname, repo, newrev, oldrev, ref, newrev_type, oldrev_type)
|
||||
#ActivityFeedObserver.instance.after_create rec # for example
|
||||
ActivityFeedObserver.instance.after_create rec
|
||||
end
|
||||
|
||||
def owner_and_admin_ids
|
||||
recipients = self.relations.by_role('admin').where(:object_type => 'User').map { |rel| rel.read_attribute(:object_id) }
|
||||
recipients = recipients | [self.owner_id] if self.owner_type == 'User'
|
||||
recipients
|
||||
end
|
||||
|
||||
protected
|
||||
|
|
|
@ -18,27 +18,6 @@ class Subscribe < ActiveRecord::Base
|
|||
Subscribe.where(:subscribeable_id => comment.commentable_id, :subscribeable_type => comment.commentable.class.name, :project_id => comment.project)
|
||||
end
|
||||
|
||||
def self.new_comment_notification(comment)
|
||||
commentable_class = comment.commentable.class
|
||||
Subscribe.new_comment_issue_notification(comment) if commentable_class == Issue
|
||||
Subscribe.new_comment_commit_notification(comment) if commentable_class == Grit::Commit
|
||||
end
|
||||
|
||||
def self.new_comment_issue_notification(comment)
|
||||
comment.commentable.subscribes.finder_hack.each do |subscribe|
|
||||
next if comment.own_comment?(subscribe.user) || !subscribe.user.notifier.can_notify
|
||||
UserMailer.delay.new_comment_notification(comment, subscribe.user) if subscribe.user.notifier.new_comment_reply
|
||||
end
|
||||
end
|
||||
|
||||
def self.new_comment_commit_notification(comment)
|
||||
subscribes = Subscribe.comment_subscribes(comment).where(:status => true)
|
||||
subscribes.each do |subscribe|
|
||||
next if comment.own_comment?(subscribe.user) || !subscribe.user.notifier.can_notify
|
||||
UserMailer.delay.new_comment_notification(comment, subscribe.user)
|
||||
end
|
||||
end
|
||||
|
||||
def self.subscribed_to_commit?(project, user, commit)
|
||||
subscribe = user.subscribes.where(:subscribeable_id => commit.id.hex, :subscribeable_type => commit.class.name, :project_id => project.id).first
|
||||
return subscribe.subscribed? if subscribe # return status if already subscribe present
|
||||
|
@ -48,12 +27,10 @@ class Subscribe < ActiveRecord::Base
|
|||
(user.committer?(commit) && user.notifier.new_comment_commit_owner)
|
||||
end
|
||||
|
||||
|
||||
def self.subscribe_to_commit(options)
|
||||
Subscribe.set_subscribe_to_commit(options, true)
|
||||
end
|
||||
|
||||
|
||||
def self.unsubscribe_from_commit(options)
|
||||
Subscribe.set_subscribe_to_commit(options, false)
|
||||
end
|
||||
|
|
|
@ -11,6 +11,8 @@ class User < ActiveRecord::Base
|
|||
|
||||
has_one :notifier, :class_name => 'Settings::Notifier' #:notifier
|
||||
|
||||
has_many :activity_feeds
|
||||
|
||||
has_many :authentications, :dependent => :destroy
|
||||
has_many :build_lists, :dependent => :destroy
|
||||
has_many :subscribes, :foreign_key => :user_id, :dependent => :destroy
|
||||
|
|
|
@ -30,9 +30,6 @@ class CommentPresenter < ApplicationPresenter
|
|||
def buttons
|
||||
project = options[:project]
|
||||
commentable = options[:commentable]
|
||||
puts "PROJECT = " + project.inspect
|
||||
puts "COMMENTABLE = " + commentable.inspect
|
||||
puts "COMMENT = " + comment.inspect
|
||||
(ep, dp) = if commentable.class == Issue
|
||||
[edit_project_issue_comment_path(project, commentable, comment),
|
||||
project_issue_comment_path(project, commentable, comment)]
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
%a{ :name => "comments" }
|
||||
.block#block-list
|
||||
.content
|
||||
%h2.title
|
||||
= t("layout.activity_feed.header")
|
||||
.inner
|
||||
%ul.list
|
||||
- @activity_feeds.each do |activity_feed|
|
||||
%li
|
||||
.left
|
||||
= link_to activity_feed.user.uname, user_path(activity_feed.user.uname)
|
||||
%br
|
||||
%br
|
||||
= activity_feed.created_at
|
||||
%br
|
||||
%br
|
||||
.item
|
||||
= render_activity_feed(activity_feed)
|
||||
%br
|
||||
%br
|
||||
%br
|
|
@ -0,0 +1,3 @@
|
|||
%p== Branch #{ branch_name } has been deleted
|
||||
|
||||
%p== Into project #{ link_to(project_name, project_path(project_id)) }
|
|
@ -0,0 +1,7 @@
|
|||
%p== Branch #{ branch_name } has been #{ change_type }d
|
||||
%p== Into project #{ link_to(project_name, project_path(project_id)) }
|
||||
|
||||
- last_commits.each do |commit|
|
||||
= link_to commit[0], commit_path(project_id, commit[0])
|
||||
= commit[1]
|
||||
%br
|
|
@ -0,0 +1,3 @@
|
|||
%p== #{ t("notifications.bodies.issue_assign_notification.title", :user_name => user_name) }
|
||||
|
||||
%p= raw t("notifications.bodies.issue_assign_notification.content", :issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id)))
|
|
@ -0,0 +1,5 @@
|
|||
%p== #{ t("notifications.bodies.new_comment_notification.title", :user_name => user_name) }
|
||||
|
||||
%p= raw t("notifications.bodies.new_comment_notification.content", {:issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id))})
|
||||
|
||||
%p "#{ comment_body }"
|
|
@ -0,0 +1,5 @@
|
|||
%p== #{ t("notifications.bodies.new_commit_comment_notification.title", :user_name => user_name) }
|
||||
|
||||
%p= raw t("notifications.bodies.new_comment_notification.commit_content", {:commit_link => link_to(commit_message, commit_path(project_id, commit_id))})
|
||||
|
||||
%p "#{ comment_body }"
|
|
@ -0,0 +1,3 @@
|
|||
%p== #{ t("notifications.bodies.new_issue_notification.title", :user_name => user_name) }
|
||||
|
||||
%p= raw t("notifications.bodies.new_issue_notification.content", :issue_link => link_to(issue_title, project_issue_path(project_id, issue_serial_id)), :project_link => link_to(project_name, project_path(project_id)))
|
|
@ -0,0 +1,5 @@
|
|||
%p== #{ t("notifications.bodies.new_user_notification.title", :user_name => user_name) }
|
||||
|
||||
%p #{ t("notifications.bodies.new_user_notification.content") }
|
||||
|
||||
%p #{ t("notifications.bodies.new_user_notification.email", :user_email => user_email) }
|
|
@ -0,0 +1,2 @@
|
|||
%p== User #{ link_to user_name, user_path(user_id) } has been update wiki #{ link_to "history", compare_versions_project_wiki_index_path(project_id, commit_sha) }
|
||||
%p== Into project #{ link_to(project_name, project_path(project_id)) }
|
|
@ -11,23 +11,19 @@
|
|||
%h1= title t('devise.passwords.edit')
|
||||
%br
|
||||
.content
|
||||
-password_error = nil
|
||||
- if resource.errors.present?
|
||||
- resource.errors.each do |attr, array|
|
||||
-password_error = array if attr == :password
|
||||
- password_error, reset_password_token_error = getDeviseErrors(:password, :reset_password_token)
|
||||
|
||||
= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put, :class => "form" }) do |f|
|
||||
= f.hidden_field :reset_password_token
|
||||
.left.first=t('activerecord.attributes.user.password')
|
||||
.right.first
|
||||
= f.text_field :password, :id => 'pass', :class => "registartion-input #{password_error ? "registartion-input-error" : ''}", :onblur => "if(this.value==''){this.value='';this.className='registartion-input';}else{this.className='registartion-input-no-focus';};", :onfocus => "if(this.value==''){this.value='';this.className='registartion-input-focus';};"
|
||||
= f.text_field :password, :id => 'password', :class => "registartion-input #{password_error ? 'registartion-input-error' : ''}"
|
||||
.both
|
||||
.left=t('activerecord.attributes.user.password_confirm')
|
||||
.right
|
||||
= f.text_field :password_confirmation, :id => 'pass2', :class => "registartion-input #{password_error ? "registartion-input-error" : ''}", :onClick => "this.className='registartion-input-focus';disError(this);", :onblur => "if(this.value==''){this.value='';this.className='registartion-input';}else{this.className='registartion-input-no-focus';};buttonCheck();", :onfocus => "if(this.value==''){this.value='';this.className='registartion-input-focus';};", :onkeydown => "buttonCheck();"
|
||||
= f.text_field :password_confirmation, :id => 'password2', :class => "registartion-input #{password_error ? 'registartion-input-error' : ''}"
|
||||
.both
|
||||
%br
|
||||
=f.submit t("devise.passwords.edit_button"), :class => 'button', :id => 'btnLogin'
|
||||
- if password_error
|
||||
#hint.error.reset{:style => 'display: block;'}
|
||||
%p=password_error
|
||||
=showDeviseHintError(:password, password_error, 'reset')
|
||||
|
||||
|
|
|
@ -3,51 +3,36 @@
|
|||
%header
|
||||
.logo
|
||||
/ Page
|
||||
- uname_error = name_error = email_error = password_error = password_confirm_error = nil
|
||||
- if resource.errors.present? # Trash
|
||||
- resource.errors.each do |attr, array|
|
||||
-uname_error = array if attr == :uname
|
||||
-name_error = array if attr == :name
|
||||
-email_error = array if attr == :email
|
||||
-password_error = array if attr == :password
|
||||
-password_confirm_error = array if attr == :password_confirmation
|
||||
|
||||
- uname_error, name_error, email_error, password_error = getDeviseErrors(:uname, :name, :email, :password)
|
||||
%article
|
||||
= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :class => "form" }) do |f|
|
||||
= hidden_field_tag :invitation_token, @invitation_token
|
||||
.left.first=t('activerecord.attributes.user.uname')
|
||||
.right.first
|
||||
= f.text_field :uname, :id => 'login', :class => "registartion-input #{uname_error ? "registartion-input-error" : ''}", :onblur => "if(this.value==''){this.value='';this.className='registartion-input';}else{this.className='registartion-input-no-focus';};", :onfocus => "if(this.value==''){this.value='';this.className='registartion-input-focus';};"
|
||||
= f.text_field :uname, :id => 'login', :class => "registartion-input #{uname_error ? 'registartion-input-error' : ''}"
|
||||
.both
|
||||
.left=t('activerecord.attributes.user.name')
|
||||
.right
|
||||
= f.text_field :name, :id => 'name', :class => "registartion-input #{name_error ? "registartion-input-error" : ''}", :onblur => "if(this.value==''){this.value='';this.className='registartion-input';}else{this.className='registartion-input-no-focus';};", :onfocus => "if(this.value==''){this.value='';this.className='registartion-input-focus';};"
|
||||
= f.text_field :name, :id => 'name', :class => "registartion-input #{name_error ? 'registartion-input-error' : ''}"
|
||||
.both
|
||||
.left=t('activerecord.attributes.user.email')
|
||||
.right
|
||||
= f.text_field :email, :id => 'email', :readonly => 'readonly', :class => "registartion-input #{email_error ? "registartion-input-error" : ''}", :onblur => "if(this.value==''){this.value='';this.className='registartion-input';}else{this.className='registartion-input-no-focus';};", :onfocus => "if(this.value==''){this.value='';this.className='registartion-input-focus';};"
|
||||
= f.text_field :email, :id => 'email', :readonly => 'readonly', :class => "registartion-input #{email_error ? 'registartion-input-error' : ''}"
|
||||
.both
|
||||
.left=t('activerecord.attributes.user.password')
|
||||
.right
|
||||
= f.text_field :password, :id => 'pass', :class => "registartion-input #{password_error ? "registartion-input-error" : ''}", :onblur => "if(this.value==''){this.value='';this.className='registartion-input';}else{this.className='registartion-input-no-focus';};", :onfocus => "if(this.value==''){this.value='';this.className='registartion-input-focus';};"
|
||||
= f.text_field :password, :id => 'password', :class => "registartion-input #{password_error ? 'registartion-input-error' : ''}"
|
||||
.both
|
||||
.left=t('activerecord.attributes.user.password_confirm')
|
||||
.right
|
||||
= f.text_field :password_confirmation, :id => 'pass2', :class => "registartion-input #{password_confirm_error ? "registartion-input-error" : ''}", :onClick => "this.className='registartion-input-focus';disError(this);", :onblur => "if(this.value==''){this.value='';this.className='registartion-input';}else{this.className='registartion-input-no-focus';};buttonCheck();", :onfocus => "if(this.value==''){this.value='';this.className='registartion-input-focus';};", :onkeydown => "buttonCheck();"
|
||||
= f.text_field :password_confirmation, :id => 'password2', :class => "registartion-input #{password_error ? 'registartion-input-error' : ''}"
|
||||
.both
|
||||
.in
|
||||
=f.submit t("layout.devise.shared_links.sign_up"), :class => 'button', :id => 'btnLogin'
|
||||
.both
|
||||
|
||||
-if uname_error
|
||||
.error.login#hintLogin
|
||||
%p=uname_error
|
||||
-if name_error
|
||||
.error.name#hintName
|
||||
%p=name_error
|
||||
-if email_error
|
||||
.error.email#hintEmail
|
||||
%p=email_error
|
||||
-if password_error
|
||||
.error.password#hintPassword
|
||||
%p=password_error
|
||||
=showDeviseHintError(:login, uname_error)
|
||||
=showDeviseHintError(:name, name_error)
|
||||
=showDeviseHintError(:email, email_error)
|
||||
=showDeviseHintError(:password, password_error)
|
||||
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
=hidden_field_tag :password_default, password
|
||||
= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "form login" }) do |f|
|
||||
%h1= title t("layout.sessions.sign_in_header")
|
||||
= f.text_field :login, :class => "registartion-input #{is_error ? "registartion-input-error" : ''}", :onblur => "if(this.value==''){this.value='#{login}';this.className='registartion-input';} else{this.className='registartion-input-no-focus';};buttonCheck();", :onfocus => "if(this.value=='#{login}'){this.value='';this.className='registartion-input-focus';};", :onkeydown => "buttonCheck();", :type => "text", :value => login
|
||||
= f.text_field :login, :class => "registartion-input #{is_error ? "registartion-input-error" : ''}", :value => login
|
||||
%br/
|
||||
= f.password_field :password, :class => "registartion-input #{is_error ? "registartion-input-error" : ''}", :onblur => "if(this.value==''){this.value='#{password}';this.className='registartion-input';}else{this.className='registartion-input-no-focus';};buttonCheck();", :onfocus => "if(this.value=='#{password}'){this.value='';this.className='registartion-input-focus';};", :onkeydown => "buttonCheck();", :type => "password", :value => password
|
||||
= f.password_field :password, :class => "registartion-input #{is_error ? "registartion-input-error" : ''}", :value => password
|
||||
%br/
|
||||
.registration
|
||||
.remember
|
||||
|
@ -23,12 +23,11 @@
|
|||
%span#niceCheckbox1.niceCheck{:onclick => "changeCheck(this)"}
|
||||
= f.check_box :remember_me
|
||||
.text=t('devise.sessions.remember_me')
|
||||
.in=f.submit t('layout.devise.shared_links.sign_in'), :class => 'button disabled', :id => 'btnLogin'
|
||||
.in=f.submit t('layout.devise.shared_links.sign_in'), :class => 'button', :id => 'btnLogin'
|
||||
%div{:style => "clear: both;"}
|
||||
.hr
|
||||
.both
|
||||
#hint.error{:style => is_error ? 'display: block;' : ''}
|
||||
%p=t('devise.failure.invalid')
|
||||
.forgot
|
||||
.password
|
||||
%p= link_to t("layout.devise.shared_links.forgot_password"), new_password_path(resource_name)
|
||||
=showDeviseHintError(:login_error, is_error ? t('devise.failure.invalid') : false)
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
%pre#code
|
||||
=#{render_blob(@blob)}
|
||||
:preserve
|
||||
#{@blob.data.encode_to_default.html_safe}
|
||||
#{h(@blob.data.encode_to_default).html_safe}
|
||||
.both
|
||||
- when :binary
|
||||
%table.table.blob
|
||||
|
@ -51,6 +51,6 @@
|
|||
<br/>
|
||||
:javascript
|
||||
$(document).ready(function() {
|
||||
CodeMirror.runMode(document.getElementById("code").innerHTML, "#{@blob.mime_type}",
|
||||
document.getElementById("output"));
|
||||
var text = $('#code').innerHTML.replace(/&/gi, '&');
|
||||
CodeMirror.runMode(text, "#{@blob.mime_type}", document.getElementById("output"));
|
||||
});
|
||||
|
|
|
@ -1,13 +1,19 @@
|
|||
.group
|
||||
= f.label :name, t("activerecord.attributes.group.name"), :class => :label
|
||||
= f.text_field :name, :class => 'text_field'
|
||||
.group
|
||||
= f.label :uname, t("activerecord.attributes.group.uname"), :class => :label
|
||||
= f.text_field :uname, :class => 'text_field', :disabled => f.object.try(:persisted?)
|
||||
|
||||
.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"), users_path, :class => "text_button_padding link_button"
|
||||
- act = controller.action_name.to_sym
|
||||
- if [:new, :create].include? act
|
||||
.leftlist
|
||||
= f.label :uname, t("activerecord.attributes.group.uname"), :class => :label
|
||||
.rightlist.nomargin
|
||||
= f.text_field :uname
|
||||
.both
|
||||
%br
|
||||
.leftlist
|
||||
= f.label :description, t("activerecord.attributes.group.description"), :class => :label
|
||||
.rightlist.nomargin
|
||||
= f.text_area :description
|
||||
.both
|
||||
%br
|
||||
.leftlist
|
||||
\
|
||||
.rightlist
|
||||
= submit_tag t("layout.save")
|
||||
.both
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
.block.notice
|
||||
%h3= t("layout.groups.members")
|
||||
.content
|
||||
%p
|
||||
%ul
|
||||
- @group.members.each do |user|
|
||||
%li
|
||||
- if can? :read, user
|
||||
= link_to user.name, user_path(user)
|
||||
- else
|
||||
= user.name
|
||||
- if (@group.owner == user)
|
||||
= '(' + t("layout.owner") + ')'
|
||||
%br
|
||||
= link_to t("layout.groups.edit_members"), edit_group_members_path(@group) if can? :manage_members, @group
|
||||
.admin-preferences
|
||||
- act = action_name.to_sym
|
||||
- contr = controller_name.to_sym
|
||||
|
||||
%aside
|
||||
.admin-preferences
|
||||
%ul
|
||||
- if can? :edit, @project
|
||||
%li{:class => (act == :edit && contr == :groups) ? 'active' : ''}
|
||||
= link_to t("layout.groups.edit"), edit_group_path(@group)
|
||||
- if can? :manage_members, @group
|
||||
%li{:class => (act == :edit && contr == :members) ? 'active' : ''}
|
||||
= link_to t("layout.groups.edit_members"), edit_group_members_path(@group)
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first= link_to t("layout.groups.list"), groups_path
|
||||
%li= link_to t("layout.groups.new"), new_group_path
|
||||
%li.active= link_to t("layout.groups.edit"), edit_group_path
|
||||
.content
|
||||
%h2.title= t("layout.groups.edit_header")
|
||||
.inner
|
||||
= form_for @group, :url => group_path(@group), :html => { :class => :form } do |f|
|
||||
= render :partial => "form", :locals => {:f => f}
|
||||
= form_for @group, :html => { :class => :form, :multipart => true } do |f|
|
||||
= render :partial => "form", :locals => {:f => f}
|
||||
|
||||
.hr
|
||||
.groups-profile
|
||||
= image_tag('code.png')
|
||||
.groups-profile
|
||||
= link_to t("layout.groups.public_profile"), @group
|
||||
.both
|
||||
.hr
|
||||
.leftside
|
||||
= t("layout.groups.delete_warning")
|
||||
.rightside
|
||||
= link_to t("layout.delete"), group_path(@group), :method => :delete, :confirm => t("layout.groups.confirm_delete"), :class => 'button' if can? :destroy, @group
|
||||
.both
|
||||
|
||||
- content_for :sidebar, render('sidebar')
|
||||
|
|
|
@ -1,30 +1,14 @@
|
|||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first.active= link_to t("layout.groups.list"), users_path
|
||||
%li= link_to t("layout.groups.new"), new_group_path
|
||||
.content
|
||||
%h2.title
|
||||
= t("layout.groups.list_header")
|
||||
.inner
|
||||
%table.table
|
||||
%tr
|
||||
%th.first ID
|
||||
%th= t("activerecord.attributes.group.name")
|
||||
%th= t("activerecord.attributes.group.owner")
|
||||
%th.last
|
||||
- @groups.each do |group|
|
||||
%tr{:class => cycle("odd", "even")}
|
||||
%td
|
||||
= group.id
|
||||
%td
|
||||
= link_to group.name, group_path(group)
|
||||
%td
|
||||
= link_to group.owner.name, user_path(group.owner)
|
||||
%td.last
|
||||
= raw [(link_to t("layout.edit"), edit_group_path(group) if can? :update, group),
|
||||
(link_to t("layout.delete"), group_path(group), :method => :delete, :confirm => t("layout.groups.confirm_delete") if can? :destroy, group)].compact.join(' | ')
|
||||
.actions-bar.wat-cf
|
||||
.actions= will_paginate @groups, :param_name => :group_page
|
||||
|
||||
-# content_for :sidebar, render('sidebar')
|
||||
= link_to t("layout.groups.new"), new_group_path, :class => "button"
|
||||
%table#myTable.tablesorter.group-list{:cellpadding => "0", :cellspacing => "0"}
|
||||
%thead
|
||||
%tr
|
||||
%th.th1= t("layout.groups.group")
|
||||
%th.th2= t("layout.groups.description")
|
||||
%th= t("layout.groups.leave_group")
|
||||
%tbody
|
||||
- @groups.each do |group|
|
||||
%tr#Row1
|
||||
%td= link_to group.name, group_path(group)
|
||||
%td.td2= group.description
|
||||
%td.td5
|
||||
= link_to image_tag('x.png'), remove_group_member_path(group, current_user), :method => :delete unless group.owner_id == current_user.id
|
||||
|
|
|
@ -1,12 +1,6 @@
|
|||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first= link_to t("layout.groups.list"), groups_path
|
||||
%li.active= link_to t("layout.groups.new"), new_group_path
|
||||
.content
|
||||
%h2.title= t("layout.groups.new_header")
|
||||
.inner
|
||||
= form_for @group, :url => groups_path, :html => { :class => :form } do |f|
|
||||
= render :partial => "form", :locals => {:f => f}
|
||||
%h3.bpadding10= t("layout.groups.new_header")
|
||||
= form_for @group, :url => groups_path do |f|
|
||||
= render :partial => "form", :locals => {:f => f}
|
||||
|
||||
-# content_for :sidebar, render('sidebar')
|
||||
:javascript
|
||||
$('article .all').addClass('bigpadding');
|
||||
|
|
|
@ -1,78 +1,11 @@
|
|||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first= link_to t("layout.groups.list"), groups_path
|
||||
%li= link_to t("layout.groups.new"), new_group_path
|
||||
%li.active= link_to t("layout.groups.show"), group_path
|
||||
.content
|
||||
.inner
|
||||
%p
|
||||
%b
|
||||
Id
|
||||
\:
|
||||
= @group.id
|
||||
%p
|
||||
%b
|
||||
= t("activerecord.attributes.group.name")
|
||||
\:
|
||||
= @group.name
|
||||
%p
|
||||
%b
|
||||
= t("activerecord.attributes.group.owner")
|
||||
\:
|
||||
= link_to @group.owner.name, user_path(@group.owner)
|
||||
%p
|
||||
%b
|
||||
= t("activerecord.attributes.group.created_at")
|
||||
\:
|
||||
= @group.created_at
|
||||
.wat-cf
|
||||
= link_to image_tag("code.png", :alt => t("layout.edit")) + " " + t("layout.edit"), edit_group_path(@group), :class => "button"
|
||||
= link_to image_tag("x.png", :alt => t("layout.delete")) + " " + t("layout.delete"), group_path(@group), :method => "delete", :class => "button", :confirm => t("layout.groups.confirm_delete")
|
||||
|
||||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first.active= link_to t("layout.platforms.list"), platforms_path
|
||||
%li= link_to t("layout.platforms.new"), new_group_platform_path(@group)
|
||||
.content
|
||||
%h2.title
|
||||
= t("layout.platforms.list_header")
|
||||
.inner
|
||||
= render :partial => 'shared/search_form'
|
||||
= render :partial => 'platforms/list', :object => @platforms
|
||||
.actions-bar.wat-cf
|
||||
.actions
|
||||
= will_paginate @platforms, :param_name => :platform_page
|
||||
|
||||
-#.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first.active= link_to t("layout.repositories.list"), repositories_path
|
||||
%li= link_to t("layout.repositories.new"), new_group_repository_path(@group)
|
||||
.content
|
||||
%h2.title
|
||||
= t("layout.repositories.list_header")
|
||||
.inner
|
||||
= render :partial => 'shared/search_form'
|
||||
= render :partial => 'repositories/list', :object => @repositories
|
||||
.actions-bar.wat-cf
|
||||
.actions
|
||||
= will_paginate @repositories, :param_name => :repository_page
|
||||
|
||||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first.active= link_to t("layout.projects.list"), projects_path
|
||||
%li= link_to t("layout.projects.new"), new_group_project_path(@group)
|
||||
.content
|
||||
%h2.title
|
||||
= t("layout.projects.list_header")
|
||||
.inner
|
||||
= render :partial => 'shared/search_form'
|
||||
= render :partial => 'projects/list', :object => @projects
|
||||
.actions-bar.wat-cf
|
||||
.actions
|
||||
= will_paginate @projects, :param_name => :project_page
|
||||
|
||||
- content_for :sidebar, render('sidebar')
|
||||
.all.verybigpadding
|
||||
%h3= @group.name
|
||||
%h4= t("activerecord.attributes.group.description") + ":"
|
||||
%p= @group.description
|
||||
%h4= t("layout.groups.projects_list") + ":"
|
||||
%p
|
||||
- @group.projects.each do |project|
|
||||
= link_to project.name, project
|
||||
%br
|
||||
%br
|
||||
= link_to t("layout.edit"), edit_group_path(@group), :class => 'button' if can? :edit, @group
|
||||
|
|
|
@ -16,5 +16,5 @@
|
|||
=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)
|
||||
= link_to t("layout.add"), new_project_issue_path(@project), :class => 'button' if can? :new, @project.issues.new
|
||||
=render :partial => 'labels'
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
.flash
|
||||
- flash.each do |type, message|
|
||||
.message{:class => type}
|
||||
%p= message
|
||||
.message{:class => type}= message
|
|
@ -5,10 +5,10 @@
|
|||
= display_meta_tags :site => APP_CONFIG['project_name']
|
||||
- if controller_name == 'sessions' && action_name == 'new'
|
||||
= stylesheet_link_tag "login"
|
||||
= javascript_include_tag "login"
|
||||
- elsif ['registrations', 'passwords'].include?(controller_name) && ['new', 'create', 'edit', 'update'].include?(action_name)
|
||||
= stylesheet_link_tag "reg_session"
|
||||
= csrf_meta_tag
|
||||
= javascript_include_tag "login"
|
||||
|
||||
%body
|
||||
-# render :partial => "layouts/flashes"
|
||||
|
|
|
@ -1,46 +1,45 @@
|
|||
.block
|
||||
.secondary-navigation
|
||||
%ul.wat-cf
|
||||
%li.first= link_to t("layout.members.back_to_group"), parent_path
|
||||
%li.active= link_to t("layout.members.edit"), edit_group_members_path(@group)
|
||||
.content
|
||||
.inner
|
||||
= form_tag group_members_path(parent) do
|
||||
%h2.title= t("layout.users.list_header")
|
||||
%table.table
|
||||
%tr
|
||||
%th.first ID
|
||||
%th= t("activerecord.attributes.user.name")
|
||||
%th= t("activerecord.attributes.user.roles")
|
||||
%th= t("activerecord.attributes.user.uname")
|
||||
- #TODO: Replace this Chelyabinsk add/remove collaborators method by more human method
|
||||
- @users.each do |user|
|
||||
%tr{:class => cycle("odd", "even")}
|
||||
%td
|
||||
= user.id
|
||||
%td
|
||||
= link_to user.name, user_path(user)
|
||||
%td
|
||||
- Relation::ROLES.each do |role|
|
||||
= check_box_tag "#{ role }[#{user.id}]", '1', ((parent.objects.exists? :object_id => user.id, :object_type => 'User', :role => role) ? :checked : nil), {:class => "user_role_chbx"}
|
||||
= label_tag "#{ role }[#{user.id}]", t("layout.members.roles.#{ role }")
|
||||
%td
|
||||
= user.uname
|
||||
.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"), group_path(parent), :class => "text_button_padding link_button"
|
||||
= form_tag group_members_path(@group), :id => 'members_form', :delete_url => remove_group_members_path(@group) do
|
||||
= hidden_field_tag "_method", "post"
|
||||
%table.tablesorter{:cellpadding => "0", :cellspacing => "0"}
|
||||
%thead
|
||||
%tr
|
||||
%th
|
||||
\
|
||||
%th
|
||||
= t("layout.collaborators.members")
|
||||
%th{:colspan => "3"}
|
||||
= t("layout.collaborators.roles")
|
||||
%tbody
|
||||
- @users.each do |user|
|
||||
%tr
|
||||
%td
|
||||
%span#niceCheckbox1.niceCheck-main
|
||||
= check_box_tag "user_remove[#{user.id}][]"
|
||||
%td
|
||||
.img
|
||||
= image_tag(gravatar_url(user.email))
|
||||
.forimg= link_to user.name, user_path(user)
|
||||
- Relation::ROLES.each_with_index do |role, i|
|
||||
%td
|
||||
.radio
|
||||
= radio_button_tag "user[#{user.id}]", role, ((parent.objects.exists? :object_id => user.id, :object_type => 'User', :role => role) ? :checked : nil), :class => 'niceRadio'
|
||||
.forradio= t("layout.collaborators.role_names.#{ role }")
|
||||
= link_to_function t("layout.delete"), "deleteAdminMember();", :class => 'button'
|
||||
.both
|
||||
.hr.top
|
||||
|
||||
= form_tag add_group_members_path(parent) do
|
||||
.group
|
||||
%h2.title= t("layout.members.add_member")
|
||||
= label_tag "", t("layout.members.input_username")
|
||||
= autocomplete_field_tag 'user_id', params[:user_id], autocomplete_user_uname_users_path
|
||||
%br
|
||||
.group.navform.wat-cf
|
||||
%button.button{:type => "submit"}
|
||||
= image_tag("choose.png", :alt => t("layout.add"))
|
||||
= t("layout.add")
|
||||
= form_tag add_group_members_path(parent) do
|
||||
.admin-search
|
||||
= autocomplete_field_tag 'user_id', params[:user_id], autocomplete_user_uname_users_path#, :id_element => '#member_id_field'
|
||||
.admin-role
|
||||
.lineForm
|
||||
= select_tag 'role', options_for_collaborators_roles_select
|
||||
.both
|
||||
%br
|
||||
= submit_tag t("layout.add"), :class => 'button'
|
||||
|
||||
.hr.bottom
|
||||
.both
|
||||
= link_to_function t("layout.save"), "saveAdminMember();", :class => 'button'
|
||||
|
||||
- content_for :sidebar, render('groups/sidebar')
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
= link_to t("layout.edit"), edit_platform_product_path(@platform, product) if can? :update, product
|
||||
|
|
||||
= link_to t("layout.delete"), platform_product_path(@platform, product), :method => :delete, :confirm => t("layout.products.confirm_delete") if can? :destroy, product
|
||||
= (product.can_clone? ? "| #{link_to t("layout.products.clone"), clone_platform_product_path(@platform, product)}" : "").html_safe
|
||||
=# (product.can_clone? ? "| #{link_to t("layout.products.clone"), clone_platform_product_path(@platform, product)}" : "").html_safe
|
||||
.actions-bar.wat-cf
|
||||
.actions
|
||||
- content_for :sidebar, render(:partial => 'sidebar')
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
%td= link_to product_build_list.product.name, [product_build_list.product.platform, product_build_list.product]
|
||||
%td= link_to nil, product_build_list.container_path
|
||||
%td= product_build_list.human_status
|
||||
%td= link_to t("layout.product_build_lists.delete"), platform_product_product_build_list_path(product_build_list.product.platform, product_build_list.product, product_build_list), :method => "delete", :confirm => t("layout.confirm") if can? :delete, product_build_list
|
||||
%td= link_to t("layout.product_build_lists.delete"), platform_product_product_build_list_path(product_build_list.product.platform, product_build_list.product, product_build_list), :method => "delete", :confirm => t("layout.confirm") if can? :destroy, product_build_list
|
||||
%td= product_build_list.notified_at
|
|
@ -31,7 +31,7 @@
|
|||
- if can? :destroy, @product
|
||||
= link_to image_tag("x.png", :alt => t("layout.delete")) + " " + t("layout.delete"), platform_product_path(@platform, @product), :method => "delete", :class => "button", :confirm => t("layout.products.confirm_delete")
|
||||
- if @product.can_clone?
|
||||
= link_to t("layout.products.clone"), clone_platform_product_path(@platform, @product), :class => "button"
|
||||
=# link_to t("layout.products.clone"), clone_platform_product_path(@platform, @product), :class => "button"
|
||||
- if can?(:create, @product => ProductBuildList)
|
||||
= link_to t("layout.products.build"), platform_product_product_build_lists_path(@platform, @product), :class => "button", :method => 'post', :confirm => t("layout.confirm")
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
:class => 'sel80', :id => 'branch_selector'
|
||||
%form{ :action => '', :method => :get, :id => 'branch_changer', :'data-action' => "#{controller_name}"}
|
||||
.fork
|
||||
%p= t('layout.projects.current_branch')+':'
|
||||
%p= t("layout.projects.#{params[:commit_hash].present? ? 'current_commit' : 'current_branch'}")+':'
|
||||
.both
|
||||
|
||||
:javascript
|
||||
|
|
|
@ -15,12 +15,16 @@
|
|||
= f.label :owner_id, t("activerecord.attributes.project.owner"), :class => :label
|
||||
.rightlist
|
||||
= label_tag t("activerecord.attributes.project.who_owns.me")
|
||||
- if Group.can_own_project(User.find(6)).count > 0
|
||||
= radio_button_tag :who_owns, 'me'#, {}.merge( (@who_owns == :me ? {:checked => 'checked'} : {}) )
|
||||
- if Group.can_own_project(current_user).count > 0
|
||||
= radio_button_tag :who_owns, 'me', @who_owns == :me #{}.merge( (@who_owns == :me) ? {:checked => 'checked'} : {} )
|
||||
- puts @who_owns.inspect
|
||||
- puts @who_owns == :group
|
||||
= label_tag t("activerecord.attributes.project.who_owns.group")
|
||||
= radio_button_tag :who_owns, 'group'#, {}.merge( (@who_owns == :group ? {:checked => 'checked'} : {}) )
|
||||
= radio_button_tag :who_owns, 'group', @who_owns == :group #{}.merge( (@who_owns == :group) ? {:checked => 'checked'} : {} )
|
||||
-# TODO: Make our own select_box helper with new design, blackjack and bitches!
|
||||
= select_tag :owner_id, options_for_select( Group.can_own_project(current_user) )
|
||||
- else
|
||||
= hidden_field_tag :who_owns, :me
|
||||
.both
|
||||
-#- if [:new, :create].include? act
|
||||
-# .leftlist
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
= render :partial => 'projects/submenu'
|
||||
|
||||
%h3.bpadding10
|
||||
= t("layout.projects.new_header")
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
- if @comment.commentable.class == Issue
|
||||
- link = link_to @comment.commentable.title, project_issue_url(@comment.commentable.project, @comment.commentable)
|
||||
- object = 'issue'
|
||||
- elsif @comment.commentable.class == Grit::Commit
|
||||
- elsif @comment.commit_comment?
|
||||
- link = link_to @comment.commentable.message, commit_url(@comment.project, @comment.commentable_id)
|
||||
- object = 'commit'
|
||||
%p #{ link_to @comment.user.uname, user_url(@comment.user)} added new comment to #{object} #{link}.
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
- if @comment.commentable.class == Issue
|
||||
- link = link_to @comment.commentable.title, project_issue_url(@comment.commentable.project, @comment.commentable)
|
||||
- object = 'задаче'
|
||||
- elsif @comment.commentable.class == Grit::Commit
|
||||
- elsif @comment.commit_comment?
|
||||
- link = link_to @comment.commentable.message, commit_url(@comment.project, @comment.commentable_id)
|
||||
- object = 'коммиту'
|
||||
%p #{ link_to @comment.user.uname, user_url(@comment.user)} добавил комментарий к #{object} #{link}.
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
%p== Hello, #{@user.name}.
|
||||
|
||||
- #TODO hmm... this need to be refactored.
|
||||
%p Your comment into issue #{ link_to @comment.commentable.title, project_issue_url(@comment.commentable.project, @comment.commentable) } has been answered.
|
||||
|
||||
%p "#{ @comment.body }"
|
||||
|
||||
|
||||
%p== Support team «ROSA Build System»
|
|
@ -6,7 +6,5 @@
|
|||
|
||||
%p
|
||||
==Your email : #{@user.email}
|
||||
%br/
|
||||
==Your password: #{@user.password}
|
||||
|
||||
%p== Support team «ROSA Build System»
|
||||
|
|
|
@ -6,7 +6,5 @@
|
|||
|
||||
%p
|
||||
==Ваш email : #{@user.email}
|
||||
%br/
|
||||
==Ваш пароль: #{@user.password}
|
||||
|
||||
%p== Команда поддержки «ROSA Build System»
|
||||
|
|
|
@ -31,7 +31,7 @@ module Rosa
|
|||
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
||||
|
||||
# Activate observers that should always be running.
|
||||
config.active_record.observers = :event_log_observer
|
||||
config.active_record.observers = :event_log_observer, :activity_feed_observer
|
||||
|
||||
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
||||
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
||||
|
@ -55,8 +55,5 @@ module Rosa
|
|||
|
||||
# Version of your assets, change this if you want to expire all your assets
|
||||
config.assets.version = '1.0'
|
||||
|
||||
# Compass
|
||||
config.sass.load_paths << Compass::Frameworks['compass'].stylesheets_directory if config.respond_to?(:sass)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -71,7 +71,7 @@ after "deploy:setup", "deploy:symlink_pids"
|
|||
# DJ
|
||||
after "deploy:stop", "delayed_job:stop"
|
||||
after "deploy:start", "delayed_job:start"
|
||||
after "deploy:restart", "delayed_job:restart"
|
||||
# after "deploy:restart", "delayed_job:restart"
|
||||
|
||||
after "deploy:restart", "deploy:cleanup"
|
||||
|
||||
|
|
|
@ -9,11 +9,6 @@ en:
|
|||
one: "1 error prohibited this %{resource} from being saved:"
|
||||
other: "%{count} errors prohibited this %{resource} from being saved:"
|
||||
|
||||
activerecord:
|
||||
errors:
|
||||
messages:
|
||||
confirmation: "passwords doesn't match"
|
||||
|
||||
devise:
|
||||
failure:
|
||||
already_authenticated: 'You are already signed in.'
|
||||
|
@ -38,6 +33,7 @@ en:
|
|||
forgot: 'Forgot password'
|
||||
send: 'Send'
|
||||
edit_button: 'Change'
|
||||
new_password: 'New password'
|
||||
confirmations:
|
||||
send_instructions: 'You will receive an email with instructions about how to confirm your account in a few minutes.'
|
||||
send_paranoid_instructions: 'If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.'
|
||||
|
|
|
@ -11,11 +11,6 @@ ru:
|
|||
many: "%{resource}: сохранение не удалось из-за %{count} ошибок"
|
||||
other: "%{resource}: сохранение не удалось из-за %{count} ошибки"
|
||||
|
||||
activerecord:
|
||||
errors:
|
||||
messages:
|
||||
confirmation: "пароли не совпадают"
|
||||
|
||||
devise:
|
||||
failure:
|
||||
already_authenticated: 'Вы уже вошли в систему.'
|
||||
|
@ -40,6 +35,7 @@ ru:
|
|||
forgot: 'Забыли пароль'
|
||||
send: 'Послать'
|
||||
edit_button: 'Изменить'
|
||||
new_password: 'Новый пароль'
|
||||
confirmations:
|
||||
send_instructions: "В течение нескольких минут вы получите e-mail с инструкциями по подтверждению вашей учётной записи."
|
||||
send_paranoid_instructions: 'Если Ваш e-mail существует, то в течение нескольких минут вы получите e-mail с инструкциями по подтверждению вашей учётной записи.'
|
||||
|
|
|
@ -111,126 +111,6 @@ en:
|
|||
edit_header: Edit category
|
||||
confirm_delete: Are you sure to delete this category?
|
||||
|
||||
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:
|
||||
list: List
|
||||
list_header: Repositories
|
||||
new: New repository
|
||||
new_header: New repository
|
||||
show: Repository
|
||||
location: Location
|
||||
projects: Projects
|
||||
new_header: New repository
|
||||
back_to_the_list: ⇐ List of repositories
|
||||
confirm_delete: Are you sure to delete this repository?
|
||||
current_repository_header: Current repository
|
||||
|
||||
personal_repositories:
|
||||
settings_header: Settings
|
||||
change_visibility_from_hidden: Replace the status to "Opened"
|
||||
change_visibility_from_open: Replace the status to "Private"
|
||||
settings: Settings
|
||||
show: My repository
|
||||
private_users: Private repository users
|
||||
|
||||
products:
|
||||
list: List
|
||||
new: New product
|
||||
list_header: Products
|
||||
clone: Clone
|
||||
build: Build
|
||||
new_header: New product
|
||||
edit_header: Product editing
|
||||
confirm_delete: Are you sure to delete this product?
|
||||
|
||||
cron_tab_generator:
|
||||
show: Show cron tab the generator
|
||||
hide: Hide cron tab the generator
|
||||
choose: Choose
|
||||
every_minute: Every minute
|
||||
every_hour: Every hour
|
||||
every_day: Every day
|
||||
every_month: Every month
|
||||
every_weekday: Every weekdays
|
||||
minutes: Minutes
|
||||
hours: Hours
|
||||
days: Days
|
||||
months: Months
|
||||
weekdays: weekdays
|
||||
|
||||
projects:
|
||||
add: Add
|
||||
edit: Edit
|
||||
list: List
|
||||
list_header: Projects
|
||||
edit_header: Edit the project
|
||||
show: Project
|
||||
build: Build
|
||||
new_build: New build %{project_name}
|
||||
confirm_delete: Are you sure to delete this project?
|
||||
new: New project
|
||||
new_header: New project
|
||||
new_header: New project
|
||||
location: Location
|
||||
git_repo_location: Path to git repo
|
||||
current_project_header: Current project
|
||||
current_build_lists: Current builds
|
||||
build_button: Start build
|
||||
add_collaborators: Add collaborators
|
||||
members: Members
|
||||
collaborators: Collaborators
|
||||
groups: Groups
|
||||
edit_collaborators: Edit collaborators
|
||||
issues: Issues
|
||||
wiki: Wiki
|
||||
delete_warning: Attention! Deleted project can not be restored!
|
||||
sections: Sections
|
||||
has_issue_description: Issues adds lightweight issue tracking tightly integrated with your repository. Add issues to milestones, label issues, and close & reference issues from commit messages.
|
||||
has_wiki_description: Wikis are the simplest way to let others contribute content. Any user can create and edit pages to use for documentation, examples, support or anything you wish.
|
||||
|
||||
collaborators:
|
||||
back_to_proj: Back to project
|
||||
edit: Edit list
|
||||
|
@ -248,26 +128,6 @@ en:
|
|||
writer: Writer
|
||||
admin: Admin
|
||||
|
||||
members:
|
||||
back_to_group: Back to group
|
||||
edit: Edit list
|
||||
roles: Roles
|
||||
add_member: Add member
|
||||
input_username: Username
|
||||
|
||||
groups:
|
||||
list: List
|
||||
new: Create
|
||||
edit: Edit
|
||||
members: Members
|
||||
new_header: New group
|
||||
edit_header: Edit
|
||||
list_header: Groups
|
||||
show: Group
|
||||
back_to_the_list: ⇐ List of groups
|
||||
confirm_delete: Are you sure to remove this group?
|
||||
edit_members: Edit members
|
||||
|
||||
git:
|
||||
repositories:
|
||||
empty: "Repository is empty. You need to wait some time if you have forked project or imported package"
|
||||
|
@ -291,10 +151,15 @@ en:
|
|||
saved: Settings saved success
|
||||
save_error: Setting update error
|
||||
|
||||
private_users: "Login: %{login} Password: %{password}"
|
||||
|
||||
subscribe:
|
||||
saved: Subscription on notifications for this task is created
|
||||
saved_error: Subscription create error
|
||||
destroyed: Subscription on notifications for this task is cleaned
|
||||
commit:
|
||||
saved: Subscription on notifications for this commit is created
|
||||
destroyed: Subscription on notifications for this commit is cleaned
|
||||
|
||||
exception_message: Access violation to this page!
|
||||
|
||||
|
@ -309,13 +174,6 @@ en:
|
|||
successfully_added: Member %s successfully added
|
||||
error_in_adding: Member %s adding error
|
||||
|
||||
members:
|
||||
successfully_changed: Members list successfully changed
|
||||
error_in_changing: Members list changing error
|
||||
successfully_added: Member successfully added
|
||||
error_in_adding: Member adding error
|
||||
already_added: User already added
|
||||
|
||||
auto_build_list:
|
||||
success: Automated build success!
|
||||
failed: Automated build failed!
|
||||
|
@ -327,66 +185,6 @@ en:
|
|||
save_error: Category saves error
|
||||
destroyed: Category deleted
|
||||
|
||||
comment:
|
||||
saved: Comment saved
|
||||
save_error: Comment saves error
|
||||
destroyed: Comment deleted
|
||||
|
||||
project:
|
||||
saved: Project saved
|
||||
save_error: Project saves error
|
||||
save_warning_ssh_key: Owner of the project must specify in profile a SSH key
|
||||
destroyed: Project deleted
|
||||
forked: Project forked
|
||||
fork_error: Project fork error
|
||||
|
||||
user:
|
||||
saved: User saved
|
||||
save_error: User data saves error
|
||||
destroyed: User account deleted
|
||||
|
||||
group:
|
||||
saved: Group saved
|
||||
save_error: Group saves error
|
||||
destroyed: Group deleted
|
||||
user_uname_exists: User already exists
|
||||
|
||||
repository:
|
||||
saved: Repository added
|
||||
save_error: Repository adding error
|
||||
destroyed: Repository deleted
|
||||
project_added: Project added on repository
|
||||
project_not_added: Project adding error. In this repository already is a project with such name. First remove the old project
|
||||
project_removed: Project deleted
|
||||
project_not_removed: Project deleting failed
|
||||
|
||||
product:
|
||||
saved: Product saved
|
||||
save_error: Product saves error
|
||||
build_started: Product build started
|
||||
destroyed: Product deleted
|
||||
build_list_delete: Product build list deleted
|
||||
|
||||
platform:
|
||||
saved: Platform saved
|
||||
save_error: Platform saves error
|
||||
freezed: Platform freezed
|
||||
freeze_error: Platform freezing error, try again
|
||||
unfreezed: Platform unfreezed
|
||||
unfreeze_error: Platform unfreezing error, try again
|
||||
destroyed: Platform deleted
|
||||
build_all_success: All project build in progress
|
||||
clone_success: Cloned successfully
|
||||
|
||||
wiki:
|
||||
ref_not_exist: No such version
|
||||
successfully_updated: Page '%{name}' successfully updated
|
||||
duplicate_page: Page '%{name}' already exists
|
||||
page_successfully_removed: Page successfully removed
|
||||
page_not_found: Page '%{name}' not found
|
||||
revert_success: Changes successfully reverted
|
||||
patch_does_not_apply: Patch does not apply
|
||||
|
||||
blob:
|
||||
successfully_updated: File '%{name}' successfully updated
|
||||
updating_error: Error updating file '%{name}'
|
||||
|
@ -409,35 +207,13 @@ en:
|
|||
|
||||
models:
|
||||
category: Category
|
||||
repository: Repository
|
||||
arch: Arch
|
||||
container: Container
|
||||
platform: Platform
|
||||
group: Group
|
||||
event_log: Event log
|
||||
project: Project
|
||||
rpm: RPM
|
||||
user: User
|
||||
private_user: Private user
|
||||
product: Product
|
||||
product_build_list: Product build list
|
||||
download: Statistics
|
||||
auto_build_list: Auto rebuild list
|
||||
settings:
|
||||
saved: Settings saved success
|
||||
save_error: Setting update error
|
||||
|
||||
private_users: "Login: %{login} Password: %{password}"
|
||||
|
||||
subscribe:
|
||||
saved: Subscription on notifications for this task is created
|
||||
saved_error: Subscription create error
|
||||
destroyed: Subscription on notifications for this task is cleaned
|
||||
commit:
|
||||
saved: Subscription on notifications for this commit is created
|
||||
destroyed: Subscription on notifications for this commit is cleaned
|
||||
|
||||
exception_message: Access violation to this page!
|
||||
|
||||
attributes:
|
||||
settings:
|
||||
|
@ -447,6 +223,9 @@ en:
|
|||
new_comment_reply: New reply of comment notifications
|
||||
new_issue: New task notifications
|
||||
issue_assign: New task assignment notifications
|
||||
new_comment_commit_owner: Notify about comments to my commit
|
||||
new_comment_commit_repo_owner: Notify about comments to my repository commits
|
||||
new_comment_commit_commentor: Notify about comments after my commit
|
||||
|
||||
auto_build_list:
|
||||
project_id: Project
|
||||
|
@ -458,10 +237,6 @@ en:
|
|||
arch_id: Architecture
|
||||
arch: Architecture
|
||||
|
||||
comment:
|
||||
body: Content
|
||||
user: Author
|
||||
|
||||
private_user:
|
||||
login: Login
|
||||
password: Password
|
||||
|
@ -470,32 +245,6 @@ en:
|
|||
parent_id: Parent
|
||||
name: Name
|
||||
|
||||
repository:
|
||||
name: Name
|
||||
description: Description
|
||||
platform_id: Platform
|
||||
platform: Platform
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
owner: Owner
|
||||
|
||||
product:
|
||||
name: Name
|
||||
platform_id: Platform
|
||||
build_status: Build status
|
||||
build_path: ISO path
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
ks: Content .ks.template
|
||||
counter: Content .counter
|
||||
build_script: Content build
|
||||
menu: Content .menu.xml
|
||||
tar: Tar.bz2 file
|
||||
is_template: Template
|
||||
system_wide: System
|
||||
cron_tab: Cront tab
|
||||
use_cron: Cron usage
|
||||
|
||||
arch:
|
||||
name: Name
|
||||
created_at: Created
|
||||
|
@ -510,48 +259,6 @@ en:
|
|||
created_at: Created
|
||||
updated_at: Updated
|
||||
|
||||
platform:
|
||||
name: Name
|
||||
description: Description
|
||||
parent_platform_id: Parent platform
|
||||
parent: Parent platform
|
||||
released: Released
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
distrib_type: Source type
|
||||
visibility: Status
|
||||
visibility_types:
|
||||
open: Open
|
||||
hidden: Hidden
|
||||
|
||||
event_log:
|
||||
kind: Event type
|
||||
created_at: Event date and time
|
||||
user: User
|
||||
ip: User IP
|
||||
protocol: Access protocol
|
||||
description: Description
|
||||
|
||||
project:
|
||||
category_id: Category
|
||||
name: Name
|
||||
description: Descripton
|
||||
owner: Owner
|
||||
visibility: Visibility
|
||||
visibility_types:
|
||||
open: Open
|
||||
hidden: Hidden
|
||||
repository_id: Repository
|
||||
repository: Repository
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
has_issues: Tracker on
|
||||
has_wiki: Wiki on
|
||||
srpm: Import code from src.rpm
|
||||
who_owns:
|
||||
me: I
|
||||
group: Group
|
||||
|
||||
rpm:
|
||||
name: Name
|
||||
arch_id: Arch
|
||||
|
@ -561,20 +268,6 @@ en:
|
|||
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
|
||||
|
||||
product_build_list:
|
||||
id: Id
|
||||
product: Product
|
||||
|
@ -588,12 +281,3 @@ en:
|
|||
distro: Source
|
||||
platform: Platform
|
||||
counter: Downloads
|
||||
|
||||
notifications:
|
||||
subjects:
|
||||
new_comment_notification: New comment to your task
|
||||
new_issue_notification: New task added to project
|
||||
new_user_notification: Registered on project «%{ project_name }»
|
||||
issue_assign_notification: New task assigned
|
||||
new_commit_comment_notification: New comment to commit
|
||||
invite_approve_notification: Invitation to ABF
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
en:
|
||||
layout:
|
||||
comments:
|
||||
has_commented: "adds a note"
|
||||
notifications_are: "Notifications for new comments are"
|
||||
comments_header: "Comments"
|
||||
back: 'Back'
|
|
@ -1,7 +0,0 @@
|
|||
ru:
|
||||
layout:
|
||||
comments:
|
||||
has_commented: "оставил комментарий"
|
||||
notifications_are: "Уведомления о последующих комментариях"
|
||||
comments_header: "Комментарии"
|
||||
back: 'Назад'
|
|
@ -1,14 +0,0 @@
|
|||
en:
|
||||
layout:
|
||||
projects:
|
||||
diff_show_header: "%{files} with %{additions} and %{deletions}."
|
||||
about_subheader: "About project"
|
||||
last_commit: "Last commit"
|
||||
|
||||
filename: File
|
||||
age: Modification date
|
||||
message: Message
|
||||
author: Author
|
||||
|
||||
current_branch: Current branch
|
||||
files_in_project: Files in
|
|
@ -1,14 +0,0 @@
|
|||
ru:
|
||||
layout:
|
||||
projects:
|
||||
diff_show_header: "%{files} с %{additions} и %{deletions}."
|
||||
about_subheader: "О проекте"
|
||||
last_commit: "Последний коммит"
|
||||
|
||||
filename: Файл
|
||||
age: Дата модификации
|
||||
message: Сообщение
|
||||
author: Автор
|
||||
|
||||
current_branch: Текущий бранч
|
||||
files_in_project: Файлы в
|
|
@ -0,0 +1,30 @@
|
|||
en:
|
||||
layout:
|
||||
activity_feed:
|
||||
header: Activity Feed
|
||||
|
||||
notifications:
|
||||
subjects:
|
||||
new_comment_notification: New comment to your task
|
||||
new_commit_comment_notification: New comment to commit
|
||||
new_issue_notification: New task added to project
|
||||
new_user_notification: Registered on project «%{ project_name }»
|
||||
issue_assign_notification: New task assigned
|
||||
invite_approve_notification: Invitation to ABF
|
||||
|
||||
bodies:
|
||||
new_comment_notification:
|
||||
title: Hello, %{user_name}.
|
||||
content: To the issue %{issue_link} added a comment.
|
||||
commit_content: To the commit %{commit_link} added a comment.
|
||||
new_issue_notification:
|
||||
title: Hello, %{user_name}.
|
||||
content: To project %{project_link} has been added an issue %{issue_link}
|
||||
new_user_notification:
|
||||
title: Hello, %{user_name}.
|
||||
content: You have been sign up to project «ROSA Build System» and now can sign in.
|
||||
email: ==Your email %{user_email}
|
||||
password: ==Your password %{user_password}
|
||||
issue_assign_notification:
|
||||
title: Hello, %{user_name}.
|
||||
content: You have been assigned to issue %{issue_link}
|
|
@ -0,0 +1,31 @@
|
|||
ru:
|
||||
layout:
|
||||
activity_feed:
|
||||
header: Лента активности
|
||||
|
||||
notifications:
|
||||
subjects:
|
||||
new_comment_notification: Новый комментарий к Вашей задаче
|
||||
new_commit_comment_notification: Новый комментарий к коммиту
|
||||
new_issue_notification: Новая задача добавлена к проекту
|
||||
new_user_notification: Регистрация на проекте «%{ project_name }»
|
||||
issue_assign_notification: Вам назначили задачу
|
||||
invite_approve_notification: Приглашение в ABF
|
||||
|
||||
bodies:
|
||||
new_comment_notification:
|
||||
title: Здравствуйте, %{user_name}.
|
||||
content: К задаче %{issue_link} был добавлен новый комментарий.
|
||||
commit_content: К коммиту %{commit_link} был добавлен новый комментарий.
|
||||
new_issue_notification:
|
||||
title: Здравствуйте, %{user_name}.
|
||||
content: К проекту %{project_link} была добавлена задача %{issue_link}
|
||||
new_user_notification:
|
||||
title: Здравствуйте, %{user_name}.
|
||||
content: Вы зарегистрированы на проекте «ROSA Build System» и теперь можете войти в систему.
|
||||
email: ==Ваш email %{user_email}
|
||||
password: ==Ваш пароль %{user_password}
|
||||
issue_assign_notification:
|
||||
title: Здравствуйте, %{user_name}.
|
||||
content: Вам была назначена задача %{issue_link}
|
||||
invite_approve_notification: Приглашение в ABF
|
|
@ -0,0 +1,22 @@
|
|||
en:
|
||||
layout:
|
||||
comments:
|
||||
confirm_delete: Are you sure to delete the comment?
|
||||
new_header: New comment
|
||||
edit_header: Editing a comment
|
||||
has_commented: "adds a note"
|
||||
notifications_are: "Notifications for new comments are"
|
||||
comments_header: "Comments"
|
||||
back: 'Back'
|
||||
|
||||
flash:
|
||||
comment:
|
||||
saved: Comment saved
|
||||
save_error: Comment saves error
|
||||
destroyed: Comment deleted
|
||||
|
||||
activerecord:
|
||||
attributes:
|
||||
comment:
|
||||
body: Content
|
||||
user: Author
|
|
@ -0,0 +1,22 @@
|
|||
ru:
|
||||
layout:
|
||||
comments:
|
||||
confirm_delete: Вы уверены, что хотите удалить комментарий?
|
||||
new_header: Новый комментарий
|
||||
edit_header: Редактирование комментария
|
||||
has_commented: "оставил комментарий"
|
||||
notifications_are: "Уведомления о последующих комментариях"
|
||||
comments_header: "Комментарии"
|
||||
back: 'Назад'
|
||||
|
||||
flash:
|
||||
comment:
|
||||
saved: Комментарий успешно сохранен
|
||||
save_error: Ошибка сохранения комментария
|
||||
destroyed: Комментарий удален
|
||||
|
||||
activerecord:
|
||||
attributes:
|
||||
comment:
|
||||
body: Содержание
|
||||
user: Автор
|
|
@ -48,3 +48,20 @@ en:
|
|||
versions_list: version list
|
||||
status: the status of the assembly
|
||||
project_build: build package
|
||||
|
||||
layout:
|
||||
event_logs:
|
||||
list: List
|
||||
list_header: Event log
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
event_log: Event log
|
||||
attributes:
|
||||
event_log:
|
||||
kind: Event type
|
||||
created_at: Event date and time
|
||||
user: User
|
||||
ip: User IP
|
||||
protocol: Access protocol
|
||||
description: Description
|
|
@ -48,3 +48,20 @@ ru:
|
|||
versions_list: список версий
|
||||
status: статус сборки
|
||||
project_build: сборка пакета
|
||||
|
||||
layout:
|
||||
event_logs:
|
||||
list: Список
|
||||
list_header: Лог событий
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
event_log: Лог событий
|
||||
attributes:
|
||||
event_log:
|
||||
kind: Тип события
|
||||
created_at: Дата и время события
|
||||
user: Пользователь
|
||||
ip: IP пользователя
|
||||
protocol: Протокол доступа
|
||||
description: Описание события
|
|
@ -0,0 +1,53 @@
|
|||
en:
|
||||
layout:
|
||||
groups:
|
||||
list: List
|
||||
new: Create
|
||||
edit: Edit
|
||||
members: Members
|
||||
new_header: New group
|
||||
edit_header: Edit
|
||||
list_header: Groups
|
||||
show: Group
|
||||
back_to_the_list: ⇐ List of groups
|
||||
confirm_delete: Are you sure to remove this group?
|
||||
edit_members: Edit members
|
||||
group: Group
|
||||
description: Descripton
|
||||
leave_group: Leave group
|
||||
projects_list: Projects list
|
||||
public_profile: Public profile
|
||||
delete_warning: Attention! Deleted group can not be restored!
|
||||
|
||||
members:
|
||||
back_to_group: Back to group
|
||||
edit: Edit list
|
||||
roles: Roles
|
||||
add_member: Add member
|
||||
input_username: Username
|
||||
|
||||
flash:
|
||||
group:
|
||||
saved: Group saved
|
||||
save_error: Group saves error
|
||||
destroyed: Group deleted
|
||||
user_uname_exists: User already exists
|
||||
|
||||
members:
|
||||
successfully_changed: Members list successfully changed
|
||||
error_in_changing: Members list changing error
|
||||
successfully_added: Member successfully added
|
||||
error_in_adding: Member adding error
|
||||
already_added: User already added
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
group: Group
|
||||
attributes:
|
||||
group:
|
||||
name: Name
|
||||
uname: Nickname
|
||||
owner: Owner
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
description: Description
|
|
@ -0,0 +1,53 @@
|
|||
ru:
|
||||
layout:
|
||||
groups:
|
||||
list: Список
|
||||
new: Создать группу
|
||||
edit: Редактировать
|
||||
members: Участники
|
||||
new_header: Новая группа
|
||||
edit_header: Редактировать
|
||||
list_header: Группы
|
||||
show: Группа
|
||||
back_to_the_list: ⇐ К списку групп
|
||||
confirm_delete: Вы уверены, что хотите удалить эту группу?
|
||||
edit_members: Изменить список участников
|
||||
group: Группа
|
||||
description: Описание
|
||||
leave_group: Покинуть группу
|
||||
projects_list: Список проектов
|
||||
public_profile: Публичный профиль
|
||||
delete_warning: Внимание! Удаленная группа восстановлению не подлежит.
|
||||
|
||||
members:
|
||||
back_to_group: Вернуться к группе
|
||||
edit: Редактировать список
|
||||
roles: Роли
|
||||
add_member: Добавить участника
|
||||
input_username: Псевдоним пользователя
|
||||
|
||||
flash:
|
||||
group:
|
||||
saved: Группа успешно сохранена
|
||||
save_error: Не удалось сохранить группу
|
||||
destroyed: Группа успешно удалена
|
||||
user_uname_exists: Пользователь с таким именем уже зарегестрирован
|
||||
|
||||
members:
|
||||
successfully_changed: Список участников успешно изменен
|
||||
error_in_changing: Ошибка изменения списка участников
|
||||
successfully_added: Участник успешно добавлен
|
||||
error_in_adding: Ошибка при добавлении участника
|
||||
already_added: Пользователь уже добавлен
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
group: Группа
|
||||
attributes:
|
||||
group:
|
||||
name: Название
|
||||
uname: Псевдоним
|
||||
owner: Владелец
|
||||
created_at: Создана
|
||||
updated_at: Обновлена
|
||||
description: Описание
|
|
@ -0,0 +1,66 @@
|
|||
en:
|
||||
layout:
|
||||
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
|
||||
|
||||
flash:
|
||||
platform:
|
||||
saved: Platform saved
|
||||
save_error: Platform saves error
|
||||
freezed: Platform freezed
|
||||
freeze_error: Platform freezing error, try again
|
||||
unfreezed: Platform unfreezed
|
||||
unfreeze_error: Platform unfreezing error, try again
|
||||
destroyed: Platform deleted
|
||||
build_all_success: All project build in progress
|
||||
clone_success: Cloned successfully
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
platform: Platform
|
||||
attributes:
|
||||
platform:
|
||||
name: Name
|
||||
description: Description
|
||||
parent_platform_id: Parent platform
|
||||
parent: Parent platform
|
||||
released: Released
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
distrib_type: Source type
|
||||
visibility: Status
|
||||
visibility_types:
|
||||
open: Open
|
||||
hidden: Hidden
|
|
@ -0,0 +1,66 @@
|
|||
ru:
|
||||
layout:
|
||||
platforms:
|
||||
admin_id: Владелец
|
||||
build_all: Собрать все
|
||||
list: Список
|
||||
new: Создать
|
||||
edit: Редактировать
|
||||
new_header: Новая платформа
|
||||
edit_header: Редактировать
|
||||
list_header: Платформы
|
||||
list_header_main: Основные
|
||||
list_header_personal: Персональные
|
||||
list_header_all: Все
|
||||
clone_header: Клонирование платформы
|
||||
show: Платформа
|
||||
projects: Проекты
|
||||
products: Продукты
|
||||
location: Расположение
|
||||
repositories: Репозитории
|
||||
back_to_the_list: ⇐ К списку платформ
|
||||
freeze: Заморозить
|
||||
unfreeze: Разморозить
|
||||
confirm_freeze: Вы уверены, что хотите заморозить эту платформу?
|
||||
confirm_freeze: Вы уверены, что хотите клонировать эту платформу?
|
||||
confirm_unfreeze: Вы уверены, что хотите разморозить эту платформу?
|
||||
released_suffix: (выпущена)
|
||||
confirm_delete: Вы уверены, что хотите удалить эту платформу?
|
||||
current_platform_header: Текущая платформа
|
||||
owner: Владелец
|
||||
visibility: Видимость
|
||||
platform_type: Тип платформы
|
||||
distrib_type: Тип дистрибутива
|
||||
private_users: Данные для доступа
|
||||
confirm_clone: Клонировать?
|
||||
clone: Клонировать
|
||||
|
||||
flash:
|
||||
platform:
|
||||
saved: Платформа успешно добавлена
|
||||
save_error: Не удалось создать платформу
|
||||
freezed: Платформа успешно заморожена
|
||||
freeze_error: Не удалось заморозить платформу, попробуйте еще раз
|
||||
unfreezed: Платформа успешно разморожена
|
||||
unfreeze_error: Не удалось разморозить платформу, попробуйте еще раз
|
||||
destroyed: Платформа успешно удалена
|
||||
build_all_success: Все проекты успешно отправлены на сборку
|
||||
clone_success: Клонирование успешно
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
platform: Платформа
|
||||
attributes:
|
||||
platform:
|
||||
name: Название
|
||||
description: Описание
|
||||
parent_platform_id: Родительская платформа
|
||||
parent: Родительская платформа
|
||||
released: Released
|
||||
created_at: Создана
|
||||
updated_at: Обновлена
|
||||
distrib_type: Тип дистрибутива
|
||||
visibility: Статус
|
||||
visibility_types:
|
||||
open: Открытый
|
||||
hidden: Закрытый
|
|
@ -0,0 +1,55 @@
|
|||
en:
|
||||
layout:
|
||||
products:
|
||||
list: List
|
||||
new: New product
|
||||
list_header: Products
|
||||
clone: Clone
|
||||
build: Build
|
||||
new_header: New product
|
||||
edit_header: Product editing
|
||||
confirm_delete: Are you sure to delete this product?
|
||||
|
||||
cron_tab_generator:
|
||||
show: Show cron tab the generator
|
||||
hide: Hide cron tab the generator
|
||||
choose: Choose
|
||||
every_minute: Every minute
|
||||
every_hour: Every hour
|
||||
every_day: Every day
|
||||
every_month: Every month
|
||||
every_weekday: Every weekdays
|
||||
minutes: Minutes
|
||||
hours: Hours
|
||||
days: Days
|
||||
months: Months
|
||||
weekdays: weekdays
|
||||
|
||||
flash:
|
||||
product:
|
||||
saved: Product saved
|
||||
save_error: Product saves error
|
||||
build_started: Product build started
|
||||
destroyed: Product deleted
|
||||
build_list_delete: Product build list deleted
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
product: Product
|
||||
attributes:
|
||||
product:
|
||||
name: Name
|
||||
platform_id: Platform
|
||||
build_status: Build status
|
||||
build_path: ISO path
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
ks: Content .ks.template
|
||||
counter: Content .counter
|
||||
build_script: Content build
|
||||
menu: Content .menu.xml
|
||||
tar: Tar.bz2 file
|
||||
is_template: Template
|
||||
system_wide: System
|
||||
cron_tab: Cront tab
|
||||
use_cron: Cron usage
|
|
@ -0,0 +1,55 @@
|
|||
ru:
|
||||
layout:
|
||||
products:
|
||||
list: Список
|
||||
new: Новый продукт
|
||||
list_header: Продукты
|
||||
clone: Клонировать
|
||||
build: Собрать
|
||||
new_header: Новый продукт
|
||||
edit_header: Редактирование продукта
|
||||
confirm_delete: Вы уверены, что хотите удалить этот продукт?
|
||||
|
||||
cron_tab_generator:
|
||||
show: Показать cron tab генератор
|
||||
hide: Спрятать cron tab генератор
|
||||
choose: Выберите
|
||||
every_minute: Каждую минуту
|
||||
every_hour: Каждый час
|
||||
every_day: Каждый день
|
||||
every_month: Каждый месяц
|
||||
every_weekday: Каждый день недели
|
||||
minutes: Минуты
|
||||
hours: Часы
|
||||
days: Дни
|
||||
months: Месяцы
|
||||
weekdays: Дни недели
|
||||
|
||||
flash:
|
||||
product:
|
||||
saved: Продукт успешно сохранен
|
||||
save_error: Не удалось сохранить изменения
|
||||
build_started: Запущена сборка продукта
|
||||
destroyed: Продукт удален
|
||||
build_list_delete: Сборочный лист продукта удален
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
product: Продукт
|
||||
attributes:
|
||||
product:
|
||||
name: Название
|
||||
platform_id: Платформа
|
||||
build_status: Статус последней сборки
|
||||
build_path: Путь к iso
|
||||
created_at: Создан
|
||||
updated_at: Обновлен
|
||||
ks: Содержимое .ks.template
|
||||
counter: Содержимое .counter
|
||||
build_script: Содержимое build
|
||||
menu: Содержимое .menu.xml
|
||||
tar: Tar.bz2 файл
|
||||
is_template: Шаблон
|
||||
system_wide: Общесистемный
|
||||
cron_tab: Cront tab
|
||||
use_cron: Использовать крон
|
|
@ -0,0 +1,77 @@
|
|||
en:
|
||||
layout:
|
||||
projects:
|
||||
add: Add
|
||||
edit: Edit
|
||||
list: List
|
||||
list_header: Projects
|
||||
edit_header: Edit the project
|
||||
show: Project
|
||||
build: Build
|
||||
new_build: New build %{project_name}
|
||||
confirm_delete: Are you sure to delete this project?
|
||||
new: New project
|
||||
new_header: New project
|
||||
new_header: New project
|
||||
location: Location
|
||||
git_repo_location: Path to git repo
|
||||
current_project_header: Current project
|
||||
current_build_lists: Current builds
|
||||
build_button: Start build
|
||||
add_collaborators: Add collaborators
|
||||
members: Members
|
||||
collaborators: Collaborators
|
||||
groups: Groups
|
||||
edit_collaborators: Edit collaborators
|
||||
issues: Issues
|
||||
wiki: Wiki
|
||||
delete_warning: Attention! Deleted project can not be restored!
|
||||
sections: Sections
|
||||
has_issue_description: Issues adds lightweight issue tracking tightly integrated with your repository. Add issues to milestones, label issues, and close & reference issues from commit messages.
|
||||
has_wiki_description: Wikis are the simplest way to let others contribute content. Any user can create and edit pages to use for documentation, examples, support or anything you wish.
|
||||
|
||||
diff_show_header: "%{files} with %{additions} and %{deletions}."
|
||||
about_subheader: "About project"
|
||||
last_commit: "Last commit"
|
||||
|
||||
filename: File
|
||||
age: Modification date
|
||||
message: Message
|
||||
author: Author
|
||||
|
||||
current_branch: Current branch
|
||||
current_commit: Current commit
|
||||
files_in_project: Files in
|
||||
|
||||
flash:
|
||||
project:
|
||||
saved: Project saved
|
||||
save_error: Project saves error
|
||||
save_warning_ssh_key: Owner of the project must specify in profile a SSH key
|
||||
destroyed: Project deleted
|
||||
forked: Project forked
|
||||
fork_error: Project fork error
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
project: Project
|
||||
attributes:
|
||||
project:
|
||||
category_id: Category
|
||||
name: Name
|
||||
description: Descripton
|
||||
owner: Owner
|
||||
visibility: Visibility
|
||||
visibility_types:
|
||||
open: Open
|
||||
hidden: Hidden
|
||||
repository_id: Repository
|
||||
repository: Repository
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
has_issues: Tracker on
|
||||
has_wiki: Wiki on
|
||||
srpm: Import code from src.rpm
|
||||
who_owns:
|
||||
me: I
|
||||
group: Group
|
|
@ -0,0 +1,77 @@
|
|||
ru:
|
||||
layout:
|
||||
projects:
|
||||
add: Добавить
|
||||
edit: Редактировать
|
||||
list: Список
|
||||
list_header: Проекты
|
||||
edit_header: Редактировать проект
|
||||
show: Проект
|
||||
build: Собрать
|
||||
new_build: Новая сборка %{project_name}
|
||||
confirm_delete: Вы уверены, что хотите удалить этот проект?
|
||||
new: Новый проект
|
||||
new_header: Новый проект
|
||||
new_header: Новый проект
|
||||
location: Расположение
|
||||
git_repo_location: Путь к git-репозиторию
|
||||
current_project_header: Текущий проект
|
||||
current_build_lists: Текущие сборки
|
||||
build_button: Начать сборку
|
||||
add_collaborators: Добавить коллабораторов
|
||||
members: Участники
|
||||
collaborators: Коллабораторы
|
||||
groups: Группы
|
||||
edit_collaborators: Изменить список участников
|
||||
issues: Задачи
|
||||
wiki: Wiki
|
||||
delete_warning: Внимание! Удаленный проект восстановлению не подлежит.
|
||||
sections: Разделы
|
||||
has_issue_description: Трэкер предоставляет лекговесный менеджер для задач по разработке Вашего проекта.
|
||||
has_wiki_description: Wiki - это самый простой способ предоставить другим вносить свой вклад в развитие Вашего проекта. Каждый пользователь нашего сервиса может использовать Wiki для документирования, примеров, поддержки или всего другого, в чем у Вас появится необходимость.
|
||||
|
||||
diff_show_header: "%{files} с %{additions} и %{deletions}."
|
||||
about_subheader: "О проекте"
|
||||
last_commit: "Последний коммит"
|
||||
|
||||
filename: Файл
|
||||
age: Дата модификации
|
||||
message: Сообщение
|
||||
author: Автор
|
||||
|
||||
current_branch: Текущая ветка
|
||||
current_commit: Текущий коммит
|
||||
files_in_project: Файлы в
|
||||
|
||||
flash:
|
||||
project:
|
||||
saved: Проект успешно сохранен
|
||||
save_error: Не удалось сохранить проект
|
||||
save_warning_ssh_key: Владельцу проекта необходимо указать в профиле свой SSH ключ
|
||||
destroyed: Проект успешно удален
|
||||
forked: Проект успешно форкнут
|
||||
fork_error: Ошибка форка
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
project: Проект
|
||||
attributes:
|
||||
project:
|
||||
category_id: Категория
|
||||
name: Название
|
||||
description: Описание
|
||||
owner: Владелец
|
||||
visibility: Видимость
|
||||
visibilities:
|
||||
open: Публичная
|
||||
hidden: Приватная
|
||||
repository_id: Репозиторий
|
||||
repository: Репозиторий
|
||||
created_at: Создан
|
||||
updated_at: Обновлен
|
||||
has_issues: Включить трэкер
|
||||
has_wiki: Включить Wiki
|
||||
srpm: Импортировать код из src.rpm
|
||||
who_owns:
|
||||
me: Я
|
||||
group: Группа
|
|
@ -0,0 +1,45 @@
|
|||
en:
|
||||
layout:
|
||||
repositories:
|
||||
list: List
|
||||
list_header: Repositories
|
||||
new: New repository
|
||||
new_header: New repository
|
||||
show: Repository
|
||||
location: Location
|
||||
projects: Projects
|
||||
new_header: New repository
|
||||
back_to_the_list: ⇐ List of repositories
|
||||
confirm_delete: Are you sure to delete this repository?
|
||||
current_repository_header: Current repository
|
||||
|
||||
personal_repositories:
|
||||
settings_header: Settings
|
||||
change_visibility_from_hidden: Replace the status to "Opened"
|
||||
change_visibility_from_open: Replace the status to "Private"
|
||||
settings: Settings
|
||||
show: My repository
|
||||
private_users: Private repository users
|
||||
|
||||
flash:
|
||||
repository:
|
||||
saved: Repository added
|
||||
save_error: Repository adding error
|
||||
destroyed: Repository deleted
|
||||
project_added: Project added on repository
|
||||
project_not_added: Project adding error. In this repository already is a project with such name. First remove the old project
|
||||
project_removed: Project deleted
|
||||
project_not_removed: Project deleting failed
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
repository: Repository
|
||||
attributes:
|
||||
repository:
|
||||
name: Name
|
||||
description: Description
|
||||
platform_id: Platform
|
||||
platform: Platform
|
||||
created_at: Created
|
||||
updated_at: Updated
|
||||
owner: Owner
|
|
@ -0,0 +1,45 @@
|
|||
ru:
|
||||
layout:
|
||||
repositories:
|
||||
list: Список
|
||||
list_header: Репозитории
|
||||
new: Новый репозиторий
|
||||
new_header: Новый репозиторий
|
||||
show: Репозиторий
|
||||
location: Расположение
|
||||
projects: Проекты
|
||||
new_header: Новый репозиторий
|
||||
back_to_the_list: ⇐ К списку репозиториев
|
||||
confirm_delete: Вы уверены, что хотите удалить этот репозиторий?
|
||||
current_repository_header: Текущий репозиторий
|
||||
|
||||
personal_repositories:
|
||||
settings_header: Настройки
|
||||
change_visibility_from_hidden: Сменить статус на "Открытый"
|
||||
change_visibility_from_open: Сменить статус на "Приватный"
|
||||
settings: Настройки
|
||||
show: Мой репозиторий
|
||||
private_users: Пользователи приватного репозитория
|
||||
|
||||
flash:
|
||||
repository:
|
||||
saved: Репозиторий успешно добавлен
|
||||
save_error: Не удалось добавить репозиторий
|
||||
destroyed: Репозиторий успешно удален
|
||||
project_added: Проект добавлен к репозиторию
|
||||
project_not_added: Не удалось добавить проект. В этом репозитории уже есть проект с таким именем. Сначала нужно удалить старый проект
|
||||
project_removed: Проект удален из репозитория
|
||||
project_not_removed: Не удалось удалить проект из репозитория
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
repository: Репозиторий
|
||||
attributes:
|
||||
repository:
|
||||
name: Название
|
||||
description: Описание
|
||||
platform_id: Платформа
|
||||
platform: Платформа
|
||||
created_at: Создан
|
||||
updated_at: Обновлен
|
||||
owner: Владелец
|
|
@ -0,0 +1,41 @@
|
|||
en:
|
||||
layout:
|
||||
users:
|
||||
list: List
|
||||
new: Create
|
||||
edit: Edit
|
||||
new_header: New user
|
||||
edit_header: Edit
|
||||
list_header: Users
|
||||
groups: Groups
|
||||
show: User
|
||||
back_to_the_list: ⇐ List of users
|
||||
confirm_delete: Are you sure to remove this user?
|
||||
own_projects: My projects
|
||||
part_projects: Participate projects
|
||||
filter_header: Filter
|
||||
|
||||
flash:
|
||||
user:
|
||||
saved: User saved
|
||||
save_error: User data saves error
|
||||
destroyed: User account deleted
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
user: User
|
||||
attributes:
|
||||
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
|
||||
password: Password
|
||||
password_confirm: Confirmation
|
|
@ -0,0 +1,41 @@
|
|||
ru:
|
||||
layout:
|
||||
users:
|
||||
list: Список
|
||||
new: Создать
|
||||
edit: Редактировать
|
||||
new_header: Новый пользователь
|
||||
edit_header: Редактировать
|
||||
list_header: Пользователи
|
||||
groups: Группы
|
||||
show: Пользователь
|
||||
back_to_the_list: ⇐ К списку пользователей
|
||||
confirm_delete: Вы уверены, что хотите удалить этого пользователя?
|
||||
own_projects: Мои проекты
|
||||
part_projects: Участвую в проектах
|
||||
filter_header: Фильтр
|
||||
|
||||
flash:
|
||||
user:
|
||||
saved: Пользователь успешно сохранен
|
||||
save_error: Не удалось сохранить данные о пользователе
|
||||
destroyed: Учетная запись успешно удалена
|
||||
|
||||
activerecord:
|
||||
models:
|
||||
user: Пользователь
|
||||
attributes:
|
||||
user:
|
||||
name: Имя
|
||||
login: Псевдоним или Email
|
||||
email: Email
|
||||
uname: Никнейм
|
||||
ssh_key: SSH ключ
|
||||
current_password: Текущий пароль
|
||||
role: Роль
|
||||
created_at: Создан
|
||||
updated_at: Обновлен
|
||||
role: Роль в системе
|
||||
language: Язык
|
||||
password: Пароль
|
||||
password_confirm: Повторите пароль
|
|
@ -23,6 +23,7 @@ ru:
|
|||
show: Просмотр
|
||||
cancel: Отмена
|
||||
create: Создать
|
||||
update: Обновить
|
||||
delete: Удалить
|
||||
save: Сохранить
|
||||
search: Искать
|
||||
|
@ -37,7 +38,6 @@ ru:
|
|||
false_: Нет
|
||||
publish: Опубликовать
|
||||
add: Добавить
|
||||
update: Обновить
|
||||
upload: Загрузить
|
||||
not_access: Нет доступа!
|
||||
owner: Владелец
|
||||
|
@ -111,126 +111,6 @@ ru:
|
|||
edit_header: Редактировать категорию
|
||||
confirm_delete: Вы уверены, что хотите удалить эту категорию?
|
||||
|
||||
comments:
|
||||
confirm_delete: Вы уверены, что хотите удалить комментарий?
|
||||
new_header: Новый комментарий
|
||||
edit_header: Редактирование комментария
|
||||
|
||||
platforms:
|
||||
admin_id: Владелец
|
||||
build_all: Собрать все
|
||||
list: Список
|
||||
new: Создать
|
||||
edit: Редактировать
|
||||
new_header: Новая платформа
|
||||
edit_header: Редактировать
|
||||
list_header: Платформы
|
||||
list_header_main: Основные
|
||||
list_header_personal: Персональные
|
||||
list_header_all: Все
|
||||
clone_header: Клонирование платформы
|
||||
show: Платформа
|
||||
projects: Проекты
|
||||
products: Продукты
|
||||
location: Расположение
|
||||
repositories: Репозитории
|
||||
back_to_the_list: ⇐ К списку платформ
|
||||
freeze: Заморозить
|
||||
unfreeze: Разморозить
|
||||
confirm_freeze: Вы уверены, что хотите заморозить эту платформу?
|
||||
confirm_freeze: Вы уверены, что хотите клонировать эту платформу?
|
||||
confirm_unfreeze: Вы уверены, что хотите разморозить эту платформу?
|
||||
released_suffix: (выпущена)
|
||||
confirm_delete: Вы уверены, что хотите удалить эту платформу?
|
||||
current_platform_header: Текущая платформа
|
||||
owner: Владелец
|
||||
visibility: Видимость
|
||||
platform_type: Тип платформы
|
||||
distrib_type: Тип дистрибутива
|
||||
private_users: Данные для доступа
|
||||
confirm_clone: Клонировать?
|
||||
clone: Клонировать
|
||||
|
||||
event_logs:
|
||||
list: Список
|
||||
list_header: Лог событий
|
||||
|
||||
repositories:
|
||||
list: Список
|
||||
list_header: Репозитории
|
||||
new: Новый репозиторий
|
||||
new_header: Новый репозиторий
|
||||
show: Репозиторий
|
||||
location: Расположение
|
||||
projects: Проекты
|
||||
new_header: Новый репозиторий
|
||||
back_to_the_list: ⇐ К списку репозиториев
|
||||
confirm_delete: Вы уверены, что хотите удалить этот репозиторий?
|
||||
current_repository_header: Текущий репозиторий
|
||||
|
||||
personal_repositories:
|
||||
settings_header: Настройки
|
||||
change_visibility_from_hidden: Сменить статус на "Открытый"
|
||||
change_visibility_from_open: Сменить статус на "Приватный"
|
||||
settings: Настройки
|
||||
show: Мой репозиторий
|
||||
private_users: Пользователи приватного репозитория
|
||||
|
||||
products:
|
||||
list: Список
|
||||
new: Новый продукт
|
||||
list_header: Продукты
|
||||
clone: Клонировать
|
||||
build: Собрать
|
||||
new_header: Новый продукт
|
||||
edit_header: Редактирование продукта
|
||||
confirm_delete: Вы уверены, что хотите удалить этот продукт?
|
||||
|
||||
cron_tab_generator:
|
||||
show: Показать cron tab генератор
|
||||
hide: Спрятать cron tab генератор
|
||||
choose: Выберите
|
||||
every_minute: Каждую минуту
|
||||
every_hour: Каждый час
|
||||
every_day: Каждый день
|
||||
every_month: Каждый месяц
|
||||
every_weekday: Каждый день недели
|
||||
minutes: Минуты
|
||||
hours: Часы
|
||||
days: Дни
|
||||
months: Месяцы
|
||||
weekdays: Дни недели
|
||||
|
||||
projects:
|
||||
add: Добавить
|
||||
edit: Редактировать
|
||||
list: Список
|
||||
list_header: Проекты
|
||||
edit_header: Редактировать проект
|
||||
show: Проект
|
||||
build: Собрать
|
||||
new_build: Новая сборка %{project_name}
|
||||
confirm_delete: Вы уверены, что хотите удалить этот проект?
|
||||
new: Новый проект
|
||||
new_header: Новый проект
|
||||
new_header: Новый проект
|
||||
location: Расположение
|
||||
git_repo_location: Путь к git-репозиторию
|
||||
current_project_header: Текущий проект
|
||||
current_build_lists: Текущие сборки
|
||||
build_button: Начать сборку
|
||||
add_collaborators: Добавить коллабораторов
|
||||
members: Участники
|
||||
collaborators: Коллабораторы
|
||||
groups: Группы
|
||||
edit_collaborators: Изменить список участников
|
||||
issues: Задачи
|
||||
wiki: Wiki
|
||||
delete_warning: Внимание! Удаленный проект восстановлению не подлежит.
|
||||
sections: Разделы
|
||||
has_issue_description: Трэкер предоставляет лекговесный менеджер для задач по разработке Вашего проекта.
|
||||
has_wiki_description: Wiki - это самый простой способ предоставить другим вносить свой вклад в развитие Вашего проекта. Каждый пользователь нашего сервиса может использовать Wiki для документирования, примеров, поддержки или всего другого, в чем у Вас появится необходимость.
|
||||
|
||||
collaborators:
|
||||
back_to_proj: Вернуться к проекту
|
||||
edit: Редактировать список
|
||||
|
@ -248,26 +128,6 @@ ru:
|
|||
writer: Писатель
|
||||
admin: Админ
|
||||
|
||||
members:
|
||||
back_to_group: Вернуться к группе
|
||||
edit: Редактировать список
|
||||
roles: Роли
|
||||
add_member: Добавить участника
|
||||
input_username: Псевдоним пользователя
|
||||
|
||||
groups:
|
||||
list: Список
|
||||
new: Создать
|
||||
edit: Редактировать
|
||||
members: Участники
|
||||
new_header: Новая группа
|
||||
edit_header: Редактировать
|
||||
list_header: Группы
|
||||
show: Группа
|
||||
back_to_the_list: ⇐ К списку групп
|
||||
confirm_delete: Вы уверены, что хотите удалить эту группу?
|
||||
edit_members: Изменить список участников
|
||||
|
||||
git:
|
||||
repositories:
|
||||
empty: "Репозиторий пуст. Если вы клонировали(Fork) проект или импортировали пакет, данные скоро появятся"
|
||||
|
@ -314,13 +174,6 @@ ru:
|
|||
successfully_added: Участник %s успешно добавлен
|
||||
error_in_adding: Ошибка при добавлении участника %s
|
||||
|
||||
members:
|
||||
successfully_changed: Список участников успешно изменен
|
||||
error_in_changing: Ошибка изменения списка участников
|
||||
successfully_added: Участник успешно добавлен
|
||||
error_in_adding: Ошибка при добавлении участника
|
||||
already_added: Пользователь уже добавлен
|
||||
|
||||
auto_build_list:
|
||||
success: Сборка проекта автоматизорована!
|
||||
failed: Не удалось автоматизировать сборку!
|
||||
|
@ -332,66 +185,6 @@ ru:
|
|||
save_error: Не удалось сохранить категорию
|
||||
destroyed: Категория успешно удалена
|
||||
|
||||
comment:
|
||||
saved: Комментарий успешно сохранен
|
||||
save_error: Ошибка сохранения комментария
|
||||
destroyed: Комментарий удален
|
||||
|
||||
project:
|
||||
saved: Проект успешно сохранен
|
||||
save_error: Не удалось сохранить проект
|
||||
save_warning_ssh_key: Владельцу проекта необходимо указать в профиле свой SSH ключ
|
||||
destroyed: Проект успешно удален
|
||||
forked: Проект успешно форкнут
|
||||
fork_error: Ошибка форка
|
||||
|
||||
user:
|
||||
saved: Пользователь успешно сохранен
|
||||
save_error: Не удалось сохранить данные о пользователе
|
||||
destroyed: Учетная запись успешно удалена
|
||||
|
||||
group:
|
||||
saved: Группа успешно сохранена
|
||||
save_error: Не удалось сохранить группу
|
||||
destroyed: Группа успешно удалена
|
||||
user_uname_exists: Пользователь с таким именем уже зарегестрирован
|
||||
|
||||
repository:
|
||||
saved: Репозиторий успешно добавлен
|
||||
save_error: Не удалось добавить репозиторий
|
||||
destroyed: Репозиторий успешно удален
|
||||
project_added: Проект добавлен к репозиторию
|
||||
project_not_added: Не удалось добавить проект. В этом репозитории уже есть проект с таким именем. Сначала нужно удалить старый проект
|
||||
project_removed: Проект удален из репозитория
|
||||
project_not_removed: Не удалось удалить проект из репозитория
|
||||
|
||||
product:
|
||||
saved: Продукт успешно сохранен
|
||||
save_error: Не удалось сохранить изменения
|
||||
build_started: Запущена сборка продукта
|
||||
destroyed: Продукт удален
|
||||
build_list_delete: Сборочный лист продукта удален
|
||||
|
||||
platform:
|
||||
saved: Платформа успешно добавлена
|
||||
save_error: Не удалось создать платформу
|
||||
freezed: Платформа успешно заморожена
|
||||
freeze_error: Не удалось заморозить платформу, попробуйте еще раз
|
||||
unfreezed: Платформа успешно разморожена
|
||||
unfreeze_error: Не удалось разморозить платформу, попробуйте еще раз
|
||||
destroyed: Платформа успешно удалена
|
||||
build_all_success: Все проекты успешно отправлены на сборку
|
||||
clone_success: Клонирование успешно
|
||||
|
||||
wiki:
|
||||
ref_not_exist: Версия не существует
|
||||
successfully_updated: Страница '%{name}' успешно обновлена
|
||||
duplicate_page: Страница '%{name}' уже существует
|
||||
page_successfully_removed: Страница успешно удалена
|
||||
page_not_found: Страница '%{name}' не найдена.
|
||||
revert_success: Изменения успешно откачены
|
||||
patch_does_not_apply: Не удалось откатить изменения
|
||||
|
||||
blob:
|
||||
successfully_updated: Файл '%{name}' успешно обновлен
|
||||
updating_error: Ошибка обновления файла '%{name}'
|
||||
|
@ -414,22 +207,13 @@ ru:
|
|||
|
||||
models:
|
||||
category: Категория
|
||||
repository: Репозиторий
|
||||
arch: Arch
|
||||
container: Container
|
||||
platform: Платформа
|
||||
group: Группа
|
||||
event_log: Лог событий
|
||||
project: Проект
|
||||
rpm: RPM
|
||||
user: Пользователь
|
||||
private_user: Приватный пользователь
|
||||
product: Продукт
|
||||
product_build_list: Сборочный лист продукта
|
||||
download: Статистика
|
||||
auto_build_list: Автоматическая пересборка пакетов
|
||||
settings:
|
||||
notifier: Настройки оповещений
|
||||
|
||||
attributes:
|
||||
settings:
|
||||
|
@ -453,10 +237,6 @@ ru:
|
|||
arch_id: Архитектура
|
||||
arch: Архитектура
|
||||
|
||||
comment:
|
||||
body: Содержание
|
||||
user: Автор
|
||||
|
||||
private_user:
|
||||
login: Логин
|
||||
password: Пароль
|
||||
|
@ -465,32 +245,6 @@ ru:
|
|||
parent_id: Родитель
|
||||
name: Название
|
||||
|
||||
repository:
|
||||
name: Название
|
||||
description: Описание
|
||||
platform_id: Платформа
|
||||
platform: Платформа
|
||||
created_at: Создан
|
||||
updated_at: Обновлен
|
||||
owner: Владелец
|
||||
|
||||
product:
|
||||
name: Название
|
||||
platform_id: Платформа
|
||||
build_status: Статус последней сборки
|
||||
build_path: Путь к iso
|
||||
created_at: Создан
|
||||
updated_at: Обновлен
|
||||
ks: Содержимое .ks.template
|
||||
counter: Содержимое .counter
|
||||
build_script: Содержимое build
|
||||
menu: Содержимое .menu.xml
|
||||
tar: Tar.bz2 файл
|
||||
is_template: Шаблон
|
||||
system_wide: Общесистемный
|
||||
cron_tab: Cront tab
|
||||
use_cron: Использовать крон
|
||||
|
||||
arch:
|
||||
name: Название
|
||||
created_at: Создана
|
||||
|
@ -505,48 +259,6 @@ ru:
|
|||
created_at: Создан
|
||||
updated_at: Обновлен
|
||||
|
||||
platform:
|
||||
name: Название
|
||||
description: Описание
|
||||
parent_platform_id: Родительская платформа
|
||||
parent: Родительская платформа
|
||||
released: Released
|
||||
created_at: Создана
|
||||
updated_at: Обновлена
|
||||
distrib_type: Тип дистрибутива
|
||||
visibility: Статус
|
||||
visibility_types:
|
||||
open: Открытый
|
||||
hidden: Закрытый
|
||||
|
||||
event_log:
|
||||
kind: Тип события
|
||||
created_at: Дата и время события
|
||||
user: Пользователь
|
||||
ip: IP пользователя
|
||||
protocol: Протокол доступа
|
||||
description: Описание события
|
||||
|
||||
project:
|
||||
category_id: Категория
|
||||
name: Название
|
||||
description: Описание
|
||||
owner: Владелец
|
||||
visibility: Видимость
|
||||
visibilities:
|
||||
open: Публичная
|
||||
hidden: Приватная
|
||||
repository_id: Репозиторий
|
||||
repository: Репозиторий
|
||||
created_at: Создан
|
||||
updated_at: Обновлен
|
||||
has_issues: Включить трэкер
|
||||
has_wiki: Включить Wiki
|
||||
srpm: Импортировать код из src.rpm
|
||||
who_owns:
|
||||
me: Я
|
||||
group: Группа
|
||||
|
||||
rpm:
|
||||
name: Название
|
||||
arch_id: Arch
|
||||
|
@ -556,20 +268,6 @@ ru:
|
|||
created_at: Создан
|
||||
updated_at: Обновлен
|
||||
|
||||
role:
|
||||
name: Название
|
||||
on: Ведомый
|
||||
to: Ведущий
|
||||
use_default: По умолчанию
|
||||
use_default_for_owner: По умолчанию для владельца
|
||||
|
||||
group:
|
||||
name: Название
|
||||
uname: Псевдоним
|
||||
owner: Владелец
|
||||
created_at: Создана
|
||||
updated_at: Обновлена
|
||||
|
||||
product_build_list:
|
||||
id: Id
|
||||
product: Продукт
|
||||
|
@ -583,12 +281,3 @@ ru:
|
|||
distro: Дистрибутив
|
||||
platform: Архитектура
|
||||
counter: Закачки
|
||||
|
||||
notifications:
|
||||
subjects:
|
||||
new_comment_notification: Новый комментарий к Вашей задаче
|
||||
new_issue_notification: Новая задача добавлена к проекту
|
||||
new_user_notification: Регистрация на проекте «%{ project_name }»
|
||||
issue_assign_notification: Вам назначили задачу
|
||||
new_commit_comment_notification: Новый комментарий к коммиту
|
||||
invite_approve_notification: Приглашение в ABF
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue