Commit 12782adf authored by gitlabhq's avatar gitlabhq

Merge branch 'master' of dev.gitlabhq.com:gitlabhq

parents 6b9f221a d63f04ab
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
//= require jquery.ui.selectmenu //= require jquery.ui.selectmenu
//= require jquery.tagify //= require jquery.tagify
//= require jquery.cookie //= require jquery.cookie
//= require modernizr
//= require chosen
//= require raphael //= require raphael
//= require branch-graph //= require branch-graph
//= require_tree . //= require_tree .
...@@ -22,9 +24,9 @@ $(function(){ ...@@ -22,9 +24,9 @@ $(function(){
$('select#branch').selectmenu({style:'popup', width:200}); $('select#branch').selectmenu({style:'popup', width:200});
$('select#tag').selectmenu({style:'popup', width:200}); $('select#tag').selectmenu({style:'popup', width:200});
$(".account-box").mouseenter(showMenu); $(".account-box").mouseenter(showMenu);
$(".account-box").mouseleave(resetMenu); $(".account-box").mouseleave(resetMenu);
}); });
function updatePage(data){ function updatePage(data){
...@@ -32,9 +34,9 @@ function updatePage(data){ ...@@ -32,9 +34,9 @@ function updatePage(data){
} }
function showMenu() { function showMenu() {
$(this).toggleClass('hover'); $(this).toggleClass('hover');
} }
function resetMenu() { function resetMenu() {
$(this).removeClass("hover"); $(this).removeClass("hover");
} }
...@@ -8,25 +8,23 @@ $(document).ready(function(){ ...@@ -8,25 +8,23 @@ $(document).ready(function(){
}); });
}); });
var CommitsList = {
var CommitsList = {
ref:null, ref:null,
limit:0, limit:0,
offset:0, offset:0,
init: init:
function(ref, limit) { function(ref, limit) {
this.ref=ref; this.ref=ref;
this.limit=limit; this.limit=limit;
this.offset=limit; this.offset=limit;
this.initLoadMore(); this.initLoadMore();
$('.loading').show(); $('.loading').show();
}, },
getOld: getOld:
function() { function() {
$('.loading').show(); $('.loading').show();
$.ajax({ $.ajax({
type: "GET", type: "GET",
...@@ -39,14 +37,14 @@ getOld: ...@@ -39,14 +37,14 @@ getOld:
append: append:
function(count, html) { function(count, html) {
$("#commits_list").append(html); $("#commits_list").append(html);
if(count > 0) { if(count > 0) {
this.offset += count; this.offset += count;
this.initLoadMore(); this.initLoadMore();
} }
}, },
initLoadMore: initLoadMore:
function() { function() {
$(window).bind('scroll', function(){ $(window).bind('scroll', function(){
if($(window).scrollTop() == $(document).height() - $(window).height()){ if($(window).scrollTop() == $(document).height() - $(window).height()){
$(window).unbind('scroll'); $(window).unbind('scroll');
......
var NoteList = { var NoteList = {
first_id: 0, first_id: 0,
last_id: 0, last_id: 0,
resource_name: null, resource_name: null,
init: init:
function(resource_name, first_id, last_id) { function(resource_name, first_id, last_id) {
this.resource_name = resource_name; this.resource_name = resource_name;
this.first_id = first_id; this.first_id = first_id;
this.last_id = last_id; this.last_id = last_id;
this.initRefresh(); this.initRefresh();
this.initLoadMore(); this.initLoadMore();
}, },
getOld: getOld:
function() { function() {
$('.loading').show(); $('.loading').show();
$.ajax({ $.ajax({
type: "GET", type: "GET",
...@@ -31,7 +31,7 @@ append: ...@@ -31,7 +31,7 @@ append:
this.initLoadMore(); this.initLoadMore();
}, },
replace: replace:
function(fid, lid, html) { function(fid, lid, html) {
this.first_id = fid; this.first_id = fid;
this.last_id = lid; this.last_id = lid;
...@@ -39,17 +39,16 @@ replace: ...@@ -39,17 +39,16 @@ replace:
this.initLoadMore(); this.initLoadMore();
}, },
prepend: prepend:
function(id, html) { function(id, html) {
if(id != this.last_id) { if(id != this.last_id) {
this.last_id = id; this.last_id = id;
$("#notes-list").prepend(html); $("#notes-list").prepend(html);
} }
}, },
getNew: getNew:
function() { function() {
// refersh notes list // refersh notes list
$.ajax({ $.ajax({
type: "GET", type: "GET",
...@@ -59,7 +58,7 @@ getNew: ...@@ -59,7 +58,7 @@ getNew:
}, },
refresh: refresh:
function() { function() {
// refersh notes list // refersh notes list
$.ajax({ $.ajax({
type: "GET", type: "GET",
...@@ -68,8 +67,6 @@ refresh: ...@@ -68,8 +67,6 @@ refresh:
dataType: "script"}); dataType: "script"});
}, },
initRefresh: initRefresh:
function() { function() {
// init timer // init timer
...@@ -78,7 +75,7 @@ initRefresh: ...@@ -78,7 +75,7 @@ initRefresh:
}, },
initLoadMore: initLoadMore:
function() { function() {
$(window).bind('scroll', function(){ $(window).bind('scroll', function(){
if($(window).scrollTop() == $(document).height() - $(window).height()){ if($(window).scrollTop() == $(document).height() - $(window).height()){
$(window).unbind('scroll'); $(window).unbind('scroll');
......
...@@ -48,7 +48,6 @@ function taggifyForm(){ ...@@ -48,7 +48,6 @@ function taggifyForm(){
source: '/tags.json' source: '/tags.json'
}); });
$('form').submit( function() { $('form').submit( function() {
var tag_field = $('#tag_field') var tag_field = $('#tag_field')
tag_field.val( tag_field.tagify('serialize') ); tag_field.val( tag_field.tagify('serialize') );
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
*= require jquery-ui/jquery-ui *= require jquery-ui/jquery-ui
*= require jquery-ui/jquery.ui.selectmenu *= require jquery-ui/jquery.ui.selectmenu
*= require jquery-ui/jquery.tagify *= require jquery-ui/jquery.tagify
*= require chosen
*= require_self *= require_self
*= require_tree . *= require_tree .
*/ */
...@@ -15,10 +16,10 @@ ...@@ -15,10 +16,10 @@
.cgreen { color:#44aa22; } .cgreen { color:#44aa22; }
/** COMMON STYLES **/ /** COMMON STYLES **/
.left { .left {
float:left; float:left;
} }
.right { .right {
float:right; float:right;
} }
.width-50p{ .width-50p{
...@@ -33,7 +34,7 @@ ...@@ -33,7 +34,7 @@
.width-65p{ .width-65p{
width:65%; width:65%;
} }
.append-bottom-10 { .append-bottom-10 {
margin-bottom:10px; margin-bottom:10px;
} }
.prepend-top-10 { .prepend-top-10 {
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
.issues_filter { .issues_filter {
margin-top:10px; margin-top:10px;
.left { .left {
margin-right:15px; margin-right:15px;
} }
} }
...@@ -38,11 +38,10 @@ ...@@ -38,11 +38,10 @@
/** ISSUES LIST **/ /** ISSUES LIST **/
.issue .action-links { .issue .action-links {
display:none; display:none;
a { a {
margin-left:10px; margin-left:10px;
} }
} }
.issue:hover .action-links { display:block; } .issue:hover .action-links { display:block; }
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
} }
} }
/* Note textare */ /* Note textare */
#note_note { #note_note {
height:100px; height:100px;
......
...@@ -99,15 +99,15 @@ a { ...@@ -99,15 +99,15 @@ a {
} }
} }
td.code { td.code {
width: 100%; width: 100%;
.highlight { .highlight {
margin-left: 55px; margin-left: 55px;
overflow:auto; overflow:auto;
overflow-y:hidden; overflow-y:hidden;
} }
} }
.highlight pre { .highlight pre {
white-space: pre; white-space: pre;
word-wrap:normal; word-wrap:normal;
} }
...@@ -115,12 +115,11 @@ td.code { ...@@ -115,12 +115,11 @@ td.code {
.highlighttable tr:hover { .highlighttable tr:hover {
background:white; background:white;
} }
table.highlighttable pre{ table.highlighttable pre{
line-height:16px !important; line-height:16px !important;
font-size:12px !important; font-size:12px !important;
} }
table.highlighttable .linenodiv pre { table.highlighttable .linenodiv pre {
text-align: right; text-align: right;
padding-right: 4px; padding-right: 4px;
...@@ -235,7 +234,6 @@ input.ssh_project_url { ...@@ -235,7 +234,6 @@ input.ssh_project_url {
} }
} }
#user_projects_limit{ #user_projects_limit{
width: 60px; width: 60px;
} }
...@@ -244,7 +242,7 @@ input.ssh_project_url { ...@@ -244,7 +242,7 @@ input.ssh_project_url {
cursor: move; cursor: move;
} }
.project-refs-form { .project-refs-form {
span { span {
background: none !important; background: none !important;
position:static !important; position:static !important;
...@@ -258,18 +256,18 @@ input.ssh_project_url { ...@@ -258,18 +256,18 @@ input.ssh_project_url {
} }
.filter .left { margin-right:15px; } .filter .left { margin-right:15px; }
body.project-page table .commit { body.project-page table .commit {
a.tree-commit-link { a.tree-commit-link {
color:gray; color:gray;
&:hover { &:hover {
text-decoration:underline; text-decoration:underline;
} }
} }
} }
/** NEW PROJECT **/ /** NEW PROJECT **/
.new-project-hodler { .new-project-hodler {
.icon span { background-position: -31px -70px; } .icon span { background-position: -31px -70px; }
td { border-bottom: 1px solid #DEE2E3; } td { border-bottom: 1px solid #DEE2E3; }
} }
...@@ -277,8 +275,8 @@ body.project-page table .commit { ...@@ -277,8 +275,8 @@ body.project-page table .commit {
/** Feed entry **/ /** Feed entry **/
.commit, .commit,
.snippet, .snippet,
.message { .message {
.title { .title {
color:#666; color:#666;
a { color:#666 !important; } a { color:#666 !important; }
p { margin-top:0px; } p { margin-top:0px; }
...@@ -295,21 +293,21 @@ body.project-page table .commit { ...@@ -295,21 +293,21 @@ body.project-page table .commit {
font-size:1.5em; font-size:1.5em;
height:auto; height:auto;
font-weight:bold; font-weight:bold;
.ui-selectmenu-status { .ui-selectmenu-status {
padding:3px 10px; padding:3px 10px;
} }
} }
/** Snippets **/ /** Snippets **/
.new_snippet textarea, .new_snippet textarea,
.edit_snippet textarea { .edit_snippet textarea {
height:300px; height:300px;
padding: 8px; padding: 8px;
width: 95%; width: 95%;
} }
.snippet .action-links { .snippet .action-links {
display:none; display:none;
a { a {
margin-left:10px; margin-left:10px;
} }
} }
...@@ -348,11 +346,11 @@ body.project-page table .commit { ...@@ -348,11 +346,11 @@ body.project-page table .commit {
background: #2c5c66; background: #2c5c66;
color:white; color:white;
} }
&.issue { &.issue {
background: #D12F19; background: #D12F19;
color:white; color:white;
} }
&.commit { &.commit {
background: #44aacc; background: #44aacc;
color:white; color:white;
} }
......
...@@ -60,7 +60,6 @@ input:invalid, textarea:invalid { background-color: #f0dddd; } ...@@ -60,7 +60,6 @@ input:invalid, textarea:invalid { background-color: #f0dddd; }
table { border-collapse: collapse; border-spacing: 0; } table { border-collapse: collapse; border-spacing: 0; }
td { vertical-align: top; } td { vertical-align: top; }
/* ==|== primary styles ===================================================== /* ==|== primary styles =====================================================
Author: Ricardo Rauch Author: Ricardo Rauch
========================================================================== */ ========================================================================== */
...@@ -89,13 +88,13 @@ input[type="text"]:focus, input[type="password"]:focus { outline: none; } ...@@ -89,13 +88,13 @@ input[type="text"]:focus, input[type="password"]:focus { outline: none; }
input.text{border: 1px solid #ccc; border-radius: 4px; display: block; padding: 10px} input.text{border: 1px solid #ccc; border-radius: 4px; display: block; padding: 10px}
.form-row{ .form-row{
padding: 0px 0px 10px 0px; padding: 0px 0px 10px 0px;
} }
.form-row label{ .form-row label{
font-weight:bold; font-weight:bold;
display: inline-block; display: inline-block;
padding: 0px 0px 5px 0px; padding: 0px 0px 5px 0px;
} }
/* eo Forms */ /* eo Forms */
...@@ -103,23 +102,23 @@ input.text{border: 1px solid #ccc; border-radius: 4px; display: block; padding: ...@@ -103,23 +102,23 @@ input.text{border: 1px solid #ccc; border-radius: 4px; display: block; padding:
/* Tables */ /* Tables */
table {width:100%; border: 1px solid #DEE2E3; margin-bottom: 20px} table {width:100%; border: 1px solid #DEE2E3; margin-bottom: 20px}
table thead{ table thead{
-webkit-border-top-left-radius: 5px; -webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px;
-moz-border-radius-topleft: 5px; -moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px; -moz-border-radius-topright: 5px;
border-top-left-radius: 5px; border-top-left-radius: 5px;
border-top-right-radius: 5px; border-top-right-radius: 5px;
} }
table thead th{ table thead th{
background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8)); background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8));
background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8); background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8);
background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8); background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8);
background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8); background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8);
margin: 0; margin: 0;
font-weight: normal; font-weight: normal;
font-weight: bold; font-weight: bold;
text-align: left; text-align: left;
color: #97A0A5; color: #97A0A5;
} }
td, th{ padding: .9em 1em; vertical-align: middle; } td, th{ padding: .9em 1em; vertical-align: middle; }
...@@ -127,37 +126,36 @@ table thead .image{width:100px} ...@@ -127,37 +126,36 @@ table thead .image{width:100px}
table tr:hover, .listed_items tr.odd:hover{background-color:#FFFFCF} table tr:hover, .listed_items tr.odd:hover{background-color:#FFFFCF}
/* eo Tables */ /* eo Tables */
/* Buttons */ /* Buttons */
.grey-button{ .grey-button{
border-radius: 5px; border-radius: 5px;
font-size: 12px; font-size: 12px;
font-weight: bold; font-weight: bold;
padding: 6px 20px; padding: 6px 20px;
border: 1px solid #999; border: 1px solid #999;
color: #666; color: #666;
display: inline-block; display: inline-block;
box-shadow: 0 1px 2px rgba(0,0,0,.3); box-shadow: 0 1px 2px rgba(0,0,0,.3);
background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #f7f7f7), to(#d5d5d5)); background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #f7f7f7), to(#d5d5d5));
background-image: -webkit-linear-gradient(#f7f7f7 7.6%, #d5d5d5); background-image: -webkit-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
background-image: -moz-linear-gradient(#f7f7f7 7.6%, #d5d5d5); background-image: -moz-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
background-image: -o-linear-gradient(#f7f7f7 7.6%, #d5d5d5); background-image: -o-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
} }
a.button, input.button { a.button, input.button {
font-weight: bold; font-weight: bold;
padding: 10px 20px; padding: 10px 20px;
text-align: center; text-align: center;
display: inline-block; display: inline-block;
border-radius: 5px; border-radius: 5px;
color: #578E91; color: #578E91;
font-size: 12px; font-size: 12px;
text-transform: uppercase; text-transform: uppercase;
border: 1px solid #8CE2E6; border: 1px solid #8CE2E6;
background-image: -webkit-gradient(linear, 0 0, 0 34, color-stop(0.794, #dbf5f6), to(#c5eef0)); background-image: -webkit-gradient(linear, 0 0, 0 34, color-stop(0.794, #dbf5f6), to(#c5eef0));
background-image: -webkit-linear-gradient(#dbf5f6 79.4%, #c5eef0); background-image: -webkit-linear-gradient(#dbf5f6 79.4%, #c5eef0);
background-image: -moz-linear-gradient(#dbf5f6 79.4%, #c5eef0); background-image: -moz-linear-gradient(#dbf5f6 79.4%, #c5eef0);
background-image: -o-linear-gradient(#dbf5f6 79.4%, #c5eef0); background-image: -o-linear-gradient(#dbf5f6 79.4%, #c5eef0);
} }
input.button{margin-bottom: 1.5em} input.button{margin-bottom: 1.5em}
...@@ -167,21 +165,21 @@ input.button{margin-bottom: 1.5em} ...@@ -167,21 +165,21 @@ input.button{margin-bottom: 1.5em}
.button.green {margin-right: 0; } .button.green {margin-right: 0; }
.button.yellow{ .button.yellow{
color: #908054; color: #908054;
border-color: #DDCDA1; border-color: #DDCDA1;
background-image: -webkit-gradient(linear, 0 0, 0 34, color-stop(0.794, #FFEFC3), to(#F3E3B7)); background-image: -webkit-gradient(linear, 0 0, 0 34, color-stop(0.794, #FFEFC3), to(#F3E3B7));
background-image: -webkit-linear-gradient(#FFEFC3 79.4%, #F3E3B7); background-image: -webkit-linear-gradient(#FFEFC3 79.4%, #F3E3B7);
background-image: -moz-linear-gradient(#FFEFC3 79.4%, #F3E3B7); background-image: -moz-linear-gradient(#FFEFC3 79.4%, #F3E3B7);
background-image: -o-linear-gradient(#FFEFC3 79.4%, #F3E3B7); background-image: -o-linear-gradient(#FFEFC3 79.4%, #F3E3B7);
} }
.button.blue{ .button.blue{
color: #417E97; color: #417E97;
border-color: #b2cdec; border-color: #b2cdec;
background-image: -webkit-gradient(linear, 0 0, 0 34, color-stop(0.794, #dbe8f6), to(#c7daf1)); background-image: -webkit-gradient(linear, 0 0, 0 34, color-stop(0.794, #dbe8f6), to(#c7daf1));
background-image: -webkit-linear-gradient(#dbe8f6 79.4%, #c7daf1); background-image: -webkit-linear-gradient(#dbe8f6 79.4%, #c7daf1);
background-image: -moz-linear-gradient(#dbe8f6 79.4%, #c7daf1); background-image: -moz-linear-gradient(#dbe8f6 79.4%, #c7daf1);
background-image: -o-linear-gradient(#dbe8f6 79.4%, #c7daf1); background-image: -o-linear-gradient(#dbe8f6 79.4%, #c7daf1);
} }
.button-small{ text-shadow: none; padding: 4px 10px; } .button-small{ text-shadow: none; padding: 4px 10px; }
...@@ -192,50 +190,49 @@ input.button{margin-bottom: 1.5em} ...@@ -192,50 +190,49 @@ input.button{margin-bottom: 1.5em}
/* UI Box */ /* UI Box */
.ui-box{border: 1px solid #DEDFE1; float: left; border-radius: 5px} .ui-box{border: 1px solid #DEDFE1; float: left; border-radius: 5px}
.ui-box h3{ .ui-box h3{
background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8)); background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8));
background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8); background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8);
background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8); background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8);
background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8); background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8);
margin: 0; margin: 0;
padding: 1em; padding: 1em;
font-size: 12px; font-size: 12px;
font-weight: normal; font-weight: normal;
font-weight: bold; font-weight: bold;
font-size: 16px; font-size: 16px;
border-bottom: 1px solid #DEDFE1; border-bottom: 1px solid #DEDFE1;
-webkit-border-top-left-radius: 5px; -webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px;
-moz-border-radius-topleft: 5px; -moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px; -moz-border-radius-topright: 5px;
border-top-left-radius: 5px; border-top-left-radius: 5px;
border-top-right-radius: 5px; border-top-right-radius: 5px;
} }
.ui-box.ui-box-small h3{ .ui-box.ui-box-small h3{
padding: 8px 10px; padding: 8px 10px;
font-size: 12px; font-size: 12px;
} }
.ui-box .data{padding: .5em 1em} .ui-box .data{padding: .5em 1em}
.ui-box .buttons{background-color: #f7f8f9; padding: 1em; .ui-box .buttons{background-color: #f7f8f9; padding: 1em;
-webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px;
-moz-border-radius-bottomright: 5px; -moz-border-radius-bottomright: 5px;
-moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomleft: 5px;
border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;
} }
.ui-box .buttons .button{padding: 8px 9px; font-size: 11px} .ui-box .buttons .button{padding: 8px 9px; font-size: 11px}
.ui-box.hover:hover{box-shadow: 0 0 10px rgba(0,0,0,.1); border: 1px solid #ccc; .ui-box.hover:hover{box-shadow: 0 0 10px rgba(0,0,0,.1); border: 1px solid #ccc;
-webkit-transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715); -webkit-transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715);
-moz-transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715); -moz-transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715);
-o-transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715); -o-transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715);
transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715); transition: all 200ms cubic-bezier(0.470, 0.000, 0.745, 0.715);
} }
/* eo UI Box */ /* eo UI Box */
...@@ -244,62 +241,61 @@ input.button{margin-bottom: 1.5em} ...@@ -244,62 +241,61 @@ input.button{margin-bottom: 1.5em}
body.login-page{background-color: #f1f1f1; padding-top: 10%} body.login-page{background-color: #f1f1f1; padding-top: 10%}
.login-box{ .login-box{
width: 304px; width: 304px;
position: relative; position: relative;
border-radius: 5px; border-radius: 5px;
margin: auto; margin: auto;
padding: 20px; padding: 20px;
background: white; background: white;
box-shadow: rgba(0, 0, 0, 0.07) 0 1px 0,white 0 2px 0,rgba(0, 0, 0, 0.07) 0 3px 0,white 0 4px 0, rgba(0, 0, 0, 0.07) 0 5px 0; box-shadow: rgba(0, 0, 0, 0.07) 0 1px 0,white 0 2px 0,rgba(0, 0, 0, 0.07) 0 3px 0,white 0 4px 0, rgba(0, 0, 0, 0.07) 0 5px 0;
} }
.login-box .login-logo{ .login-box .login-logo{
margin: 10px 0 30px 0; margin: 10px 0 30px 0;
display: block; display: block;
} }
.login-box input.text{background-color: #f1f1f1; font-size: 16px; border-radius: 0; padding: 14px 10px; width: 280px} .login-box input.text{background-color: #f1f1f1; font-size: 16px; border-radius: 0; padding: 14px 10px; width: 280px}
.login-box input.text.top{ .login-box input.text.top{
-webkit-border-top-left-radius: 5px; -webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px;
-moz-border-radius-topleft: 5px; -moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px; -moz-border-radius-topright: 5px;
border-top-left-radius: 5px; border-top-left-radius: 5px;
border-top-right-radius: 5px; border-top-right-radius: 5px;
} }
.login-box input.text.bottom{ .login-box input.text.bottom{
-webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px;
-moz-border-radius-bottomright: 5px; -moz-border-radius-bottomright: 5px;
-moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomleft: 5px;
border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;
border-top: 0; border-top: 0;
margin-bottom: 20px; margin-bottom: 20px;
} }
.login-box a.forgot{float: right; padding-top: 6px} .login-box a.forgot{float: right; padding-top: 6px}
/* Icons */ /* Icons */
.directory, .file{ .directory, .file{
display: inline-block; display: inline-block;
margin-right: 10px; margin-right: 10px;
width: 14px; width: 14px;
} }
.directory{ .directory{
background: url('images.png') no-repeat -73px -26px; background: url('images.png') no-repeat -73px -26px;
height: 11px; height: 11px;
margin-bottom: -1px; margin-bottom: -1px;
} }
.file{ .file{
background: url('images.png') no-repeat -114px -24px; background: url('images.png') no-repeat -114px -24px;
height: 16px; height: 16px;
margin-bottom: -3px; margin-bottom: -3px;
} }
/* eo Icons*/ /* eo Icons*/
...@@ -315,7 +311,7 @@ body.login-page{background-color: #f1f1f1; padding-top: 10%} ...@@ -315,7 +311,7 @@ body.login-page{background-color: #f1f1f1; padding-top: 10%}
textarea textarea
{ {
border: 1px solid #FFBBBB; border: 1px solid #FFBBBB;
background: #fff4f6; background: #fff4f6;
} }
} }
/* eo Errors */ /* eo Errors */
...@@ -324,91 +320,84 @@ body.login-page{background-color: #f1f1f1; padding-top: 10%} ...@@ -324,91 +320,84 @@ body.login-page{background-color: #f1f1f1; padding-top: 10%}
#container{background-color: white; overflow: hidden; } #container{background-color: white; overflow: hidden; }
body.collapsed #container{margin: auto; width: 980px; border: 1px solid rgba(0,0,0,.22); border-top: 0; box-shadow: 0 0 0px 4px rgba(0,0,0,.04)} body.collapsed #container{margin: auto; width: 980px; border: 1px solid rgba(0,0,0,.22); border-top: 0; box-shadow: 0 0 0px 4px rgba(0,0,0,.04)}
/* Header */ /* Header */
header{background: #474D57 url('bg-header.png') repeat-x bottom; z-index: 10000; height: 44px; padding: 10px 2% 6px 2%; position: relative} header{background: #474D57 url('bg-header.png') repeat-x bottom; z-index: 10000; height: 44px; padding: 10px 2% 6px 2%; position: relative}
header a{color: white; text-shadow: 0 -1px 0 black} header a{color: white; text-shadow: 0 -1px 0 black}
header a:hover{color: #f1f1f1} header a:hover{color: #f1f1f1}
header h1{ header h1{
width: 65px; width: 65px;
} }
header h1.logo{margin: 0; padding: 0} header h1.logo{margin: 0; padding: 0}
header h1.logo a{ header h1.logo a{
background: url('images.png') no-repeat -3px -7px; background: url('images.png') no-repeat -3px -7px;
width: 65px; width: 65px;
height: 26px; height: 26px;
margin: 5px 0; margin: 5px 0;
padding: 0; padding: 0;
display: block; display: block;
float: left; float: left;
text-indent: -1000em; text-indent: -1000em;
} }
header nav{border-radius: 4px; box-shadow: 0 1px 2px black; width: 294px; margin: auto; header nav{border-radius: 4px; box-shadow: 0 1px 2px black; width: 294px; margin: auto;
background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #595d63), to(#31363e)); background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #595d63), to(#31363e));
background-image: -webkit-linear-gradient(#595d63 6.6%, #31363e); background-image: -webkit-linear-gradient(#595d63 6.6%, #31363e);
background-image: -moz-linear-gradient(#595d63 6.6%, #31363e); background-image: -moz-linear-gradient(#595d63 6.6%, #31363e);
background-image: -o-linear-gradient(#595d63 6.6%, #31363e); background-image: -o-linear-gradient(#595d63 6.6%, #31363e);
margin-top: 2px; margin-top: 2px;
height:30px height:30px
} }
header nav a{padding: 8px 12px 8px 34px; display: inline-block; color: #D6DADF; border-right: 1px solid #31363E; position: relative; box-shadow: 1px 0 0 rgba(255,255,255,.1); margin: 0} header nav a{padding: 8px 12px 8px 34px; display: inline-block; color: #D6DADF; border-right: 1px solid #31363E; position: relative; box-shadow: 1px 0 0 rgba(255,255,255,.1); margin: 0}
header nav a span{width: 20px; height: 20px; display: inline-block; background: red; position: absolute; left: 8px; top: 6px;} header nav a span{width: 20px; height: 20px; display: inline-block; background: red; position: absolute; left: 8px; top: 6px;}
header nav a:last-child {border: 0; box-shadow: none} header nav a:last-child {border: 0; box-shadow: none}
header nav a:hover, header nav a.current{ header nav a:hover, header nav a.current{
background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #595d63), to(#2c2f35)); background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #595d63), to(#2c2f35));
background-image: -webkit-linear-gradient(#595d63 6.6%, #2c2f35); background-image: -webkit-linear-gradient(#595d63 6.6%, #2c2f35);
background-image: -moz-linear-gradient(#595d63 6.6%, #202227); background-image: -moz-linear-gradient(#595d63 6.6%, #202227);
background-image: -o-linear-gradient(#595d63 6.6%, #202227); background-image: -o-linear-gradient(#595d63 6.6%, #202227);
} }
header nav a:active{ header nav a:active{
box-shadow: 0 1px 4px rgba(0,0,0,.8) inset; box-shadow: 0 1px 4px rgba(0,0,0,.8) inset;
} }
header nav a.dashboard { header nav a.dashboard {
-webkit-border-top-left-radius: 4px; -webkit-border-top-left-radius: 4px;
-webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-left-radius: 4px;
-moz-border-radius-topleft: 4px; -moz-border-radius-topleft: 4px;
-moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomleft: 4px;
border-top-left-radius: 4px; border-top-left-radius: 4px;
border-bottom-left-radius: 4px; border-bottom-left-radius: 4px;
} }
header nav a.admin{ header nav a.admin{
-webkit-border-top-right-radius: 4px; -webkit-border-top-right-radius: 4px;
-webkit-border-bottom-right-radius: 4px; -webkit-border-bottom-right-radius: 4px;
-moz-border-radius-topright: 4px; -moz-border-radius-topright: 4px;
-moz-border-radius-bottomright: 4px; -moz-border-radius-bottomright: 4px;
border-top-right-radius: 4px; border-top-right-radius: 4px;
border-bottom-right-radius: 4px; border-bottom-right-radius: 4px;
} }
header .search{ display: inline-block; float: right; margin-right: 46px} header .search{ display: inline-block; float: right; margin-right: 46px}
header nav a span{width: 20px; height: 20px; display: inline-block; background: red; position: absolute; left: 8px; top: 6px;} header nav a span{width: 20px; height: 20px; display: inline-block; background: red; position: absolute; left: 8px; top: 6px;}
header nav a.dashboard span{background: url('images.png') no-repeat -161px 0;} header nav a.dashboard span{background: url('images.png') no-repeat -161px 0;}
header nav a.admin span{background: url('images.png') no-repeat -184px 0;} header nav a.admin span{background: url('images.png') no-repeat -184px 0;}
header nav a.project span{background: url('images.png') no-repeat -209px -1px; top: 7px} header nav a.project span{background: url('images.png') no-repeat -209px -1px; top: 7px}
header .login-top{float: right; width: 180px; header .login-top{float: right; width: 180px;
background-image: -webkit-gradient(linear, 0 0, 0 62, color-stop(0.032, #464c56), to(#363c45)); background-image: -webkit-gradient(linear, 0 0, 0 62, color-stop(0.032, #464c56), to(#363c45));
background-image: -webkit-linear-gradient(#464c56 3.2%, #363c45); background-image: -webkit-linear-gradient(#464c56 3.2%, #363c45);
background-image: -moz-linear-gradient(#464c56 3.2%, #363c45); background-image: -moz-linear-gradient(#464c56 3.2%, #363c45);
background-image: -o-linear-gradient(#464c56 3.2%, #363c45); background-image: -o-linear-gradient(#464c56 3.2%, #363c45);
padding: 0 10px; padding: 0 10px;
height: 44px; height: 44px;
} }
header .login-top a{display: block;} header .login-top a{display: block;}
header .login-top a.pic{float: left; margin-right: 10px; header .login-top a.pic{float: left; margin-right: 10px;
img{ height: 36px; width: 36px; border: 1px solid black} img{ height: 36px; width: 36px; border: 1px solid black}
} }
header .login-top a.username{margin-bottom: 5px} header .login-top a.username{margin-bottom: 5px}
header .login-top a.logout{color: #ccc} header .login-top a.logout{color: #ccc}
...@@ -419,12 +408,11 @@ header{margin-bottom: 0; clear: both; } ...@@ -419,12 +408,11 @@ header{margin-bottom: 0; clear: both; }
.page-title a.grey-button{float: right;} .page-title a.grey-button{float: right;}
.right{float: right;} .right{float: right;}
/* Account box */ /* Account box */
header .account-box{position: absolute; right: 0; top: 8px; z-index: 10000; width: 128px; font-size: 11px; float: right; display: block; cursor: pointer;} header .account-box{position: absolute; right: 0; top: 8px; z-index: 10000; width: 128px; font-size: 11px; float: right; display: block; cursor: pointer;}
header .account-box img{ border-radius: 4px; right: 20px; position: absolute; width: 38px; height: 38px; display: block; box-shadow: 0 1px 2px black} header .account-box img{ border-radius: 4px; right: 20px; position: absolute; width: 38px; height: 38px; display: block; box-shadow: 0 1px 2px black}
header .account-box img:after{ header .account-box img:after{
content: " "; content: " ";
display: block; display: block;
position: absolute; position: absolute;
top: 0; top: 0;
...@@ -432,7 +420,7 @@ header .account-box img:after{ ...@@ -432,7 +420,7 @@ header .account-box img:after{
left: 0; left: 0;
bottom: 0; bottom: 0;
float: right; float: right;
border-radius: 5px; border-radius: 5px;
border: 1px solid rgba(255, 255, 255, .1); border: 1px solid rgba(255, 255, 255, .1);
border-bottom: 0; border-bottom: 0;
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255, 255, 255, .15)), to(rgba(0, 0, 0, .25))), -webkit-gradient(linear, left top, right bottom, color-stop(0, rgba(255, 255, 255, 0)), color-stop(0.5, rgba(255, 255, 255, .1)), color-stop(0.501, rgba(255, 255, 255, 0)), color-stop(1, rgba(255, 255, 255, 0))); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255, 255, 255, .15)), to(rgba(0, 0, 0, .25))), -webkit-gradient(linear, left top, right bottom, color-stop(0, rgba(255, 255, 255, 0)), color-stop(0.5, rgba(255, 255, 255, .1)), color-stop(0.501, rgba(255, 255, 255, 0)), color-stop(1, rgba(255, 255, 255, 0)));
...@@ -462,7 +450,6 @@ header .account-links:before { ...@@ -462,7 +450,6 @@ header .account-links:before {
z-index:10; z-index:10;
} }
/* Inspired by http://maxvoltar.com/temp/nowplaying/ */ /* Inspired by http://maxvoltar.com/temp/nowplaying/ */
header .account-links{background: white; display: none; z-index: 100000; border-radius: 5px; width: 100px; position: absolute; right: 20px; top: 46px; margin-top: 0; float: right; box-shadow: 0 1px 1px rgba(0,0,0,.2); } header .account-links{background: white; display: none; z-index: 100000; border-radius: 5px; width: 100px; position: absolute; right: 20px; top: 46px; margin-top: 0; float: right; box-shadow: 0 1px 1px rgba(0,0,0,.2); }
header .account-links a{color: #666; padding: 6px 10px; display: block; text-shadow: none; border-bottom: 1px solid #eee} header .account-links a{color: #666; padding: 6px 10px; display: block; text-shadow: none; border-bottom: 1px solid #eee}
...@@ -470,28 +457,28 @@ header .account-links a:hover{ ...@@ -470,28 +457,28 @@ header .account-links a:hover{
background: #3aacec; background: #3aacec;
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#39acec), to(#279ada), color-stop(.05, #4cbefe)); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#39acec), to(#279ada), color-stop(.05, #4cbefe));
background: -moz-linear-gradient(top, #39acec, #4cbefe 5%, #279ada); background: -moz-linear-gradient(top, #39acec, #4cbefe 5%, #279ada);
background: linear-gradient(top, #39acec, #4cbefe 5%, #279ada); background: linear-gradient(top, #39acec, #4cbefe 5%, #279ada);
color: #fff; color: #fff;
text-shadow: #1488c8 0 -1px 0; text-shadow: #1488c8 0 -1px 0;
} }
.account-box.hover .arrow-up{top: 41px; right: 6px; position: absolute} .account-box.hover .arrow-up{top: 41px; right: 6px; position: absolute}
header .account-links a:first-child{ header .account-links a:first-child{
-webkit-border-top-left-radius: 5px; -webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px;
-moz-border-radius-topleft: 5px; -moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px; -moz-border-radius-topright: 5px;
border-top-left-radius: 5px; border-top-left-radius: 5px;
border-top-right-radius: 5px; border-top-right-radius: 5px;
} }
header .account-links a:last-child{ header .account-links a:last-child{
-webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px;
-moz-border-radius-bottomright: 5px; -moz-border-radius-bottomright: 5px;
-moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomleft: 5px;
border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;
border-bottom: 0; border-bottom: 0;
} }
#no_ssh_key_defined { #no_ssh_key_defined {
...@@ -509,13 +496,10 @@ input.search-input:focus{ background-color: white; width: 216px;} ...@@ -509,13 +496,10 @@ input.search-input:focus{ background-color: white; width: 216px;}
input.search-input::-webkit-input-placeholder {color: #666} input.search-input::-webkit-input-placeholder {color: #666}
/* eo Header */ /* eo Header */
h2.icon{position: relative; padding-left: 40px; float: left; } h2.icon{position: relative; padding-left: 40px; float: left; }
/*h2 a{font-weight: normal;}*/ /*h2 a{font-weight: normal;}*/
h2.icon span{background: #E3E5EA url('images.png'); height: 32px; width: 32px; left: 0; top: -5px; border-radius: 4px; display: inline-block; position: absolute} h2.icon span{background: #E3E5EA url('images.png'); height: 32px; width: 32px; left: 0; top: -5px; border-radius: 4px; display: inline-block; position: absolute}
/* Dashboard Page */ /* Dashboard Page */
html, body { height: 100%; } html, body { height: 100%; }
...@@ -545,25 +529,22 @@ body.dashboard-page .news-feed .project-updates a.project-update span.update-aut ...@@ -545,25 +529,22 @@ body.dashboard-page .news-feed .project-updates a.project-update span.update-aut
body.dashboard-page .news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;} body.dashboard-page .news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;}
/* eo Dashboard Page */ /* eo Dashboard Page */
.grey-button.right{margin-top: 20px} .grey-button.right{margin-top: 20px}
/* Project Page */ /* Project Page */
body.project-page h2.icon .project-name, body.project-page h2.icon d{border: 1px solid #eee; padding: 5px 30px 5px 10px; border-radius: 5px; position: relative;} body.project-page h2.icon .project-name, body.project-page h2.icon d{border: 1px solid #eee; padding: 5px 30px 5px 10px; border-radius: 5px; position: relative;}
body.project-page h2.icon .project-name i.arrow{float: right; body.project-page h2.icon .project-name i.arrow{float: right;
position: absolute; position: absolute;
right: 10px; right: 10px;
top: 13px; top: 13px;
display: block; display: block;
background: url('images.png') no-repeat -97px -29px; background: url('images.png') no-repeat -97px -29px;
width: 4px; width: 4px;
height: 5px; height: 5px;
} }
body.project-page h2.icon span{ background-position: -78px -68px; }
body.project-page h2.icon span{ background-position: -78px -68px; }
body.project-page .project-container{ position: relative; float: left; width: 100%; height: 100%; } body.project-page .project-container{ position: relative; float: left; width: 100%; height: 100%; }
body.project-page .page-title{margin-bottom: 0} body.project-page .page-title{margin-bottom: 0}
body.project-page .project-sidebar {width: 220px; left: 0; top: 0; height: 100%; bottom: 0; position: absolute; background-color: #f7f7f7; float: left; display: inline-block; background: #f7f7f7; padding: 20px 0 20px 2%; margin: 0; } body.project-page .project-sidebar {width: 220px; left: 0; top: 0; height: 100%; bottom: 0; position: absolute; background-color: #f7f7f7; float: left; display: inline-block; background: #f7f7f7; padding: 20px 0 20px 2%; margin: 0; }
...@@ -575,18 +556,17 @@ body.projects-page input.text.git-url {margin:10px 0 0 } ...@@ -575,18 +556,17 @@ body.projects-page input.text.git-url {margin:10px 0 0 }
.projects_selector:hover > .project-box{ -moz-box-shadow:0px 0px 10px rgba(0, 0, 0, .1); -webkit-box-shadow:0px 0px 10px rgba(0, 0, 0, .1); box-shadow:0px 0px 10px rgba(0, 0, 0, .1); } .projects_selector:hover > .project-box{ -moz-box-shadow:0px 0px 10px rgba(0, 0, 0, .1); -webkit-box-shadow:0px 0px 10px rgba(0, 0, 0, .1); box-shadow:0px 0px 10px rgba(0, 0, 0, .1); }
body.project-page .project-sidebar aside{width: 219px} body.project-page .project-sidebar aside{width: 219px}
body.project-page .project-sidebar aside a{display: block; position: relative; background: white; padding: 15px 10px; border-bottom: 1px solid #eee} body.project-page .project-sidebar aside a{display: block; position: relative; background: white; padding: 15px 10px; border-bottom: 1px solid #eee}
body.project-page .project-sidebar aside a:first-child{ body.project-page .project-sidebar aside a:first-child{
-webkit-border-top-left-radius: 5px; -webkit-border-top-left-radius: 5px;
-moz-border-radius-topleft: 5px; -moz-border-radius-topleft: 5px;
border-top-left-radius: 5px; border-top-left-radius: 5px;
} }
.project-page .project-sidebar aside a:last-child{ .project-page .project-sidebar aside a:last-child{
-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px;
-moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomleft: 5px;
border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;
} }
body.project-page .project-sidebar aside a:hover{background-color: #eee;} body.project-page .project-sidebar aside a:hover{background-color: #eee;}
body.project-page .project-sidebar aside a span.number{float: right; border-radius: 5px; text-shadow: none; background: rgba(0,0,0,.12); text-align: center; padding: 5px 8px; position: absolute; top: 10px; right: 10px} body.project-page .project-sidebar aside a span.number{float: right; border-radius: 5px; text-shadow: none; background: rgba(0,0,0,.12); text-align: center; padding: 5px 8px; position: absolute; top: 10px; right: 10px}
...@@ -595,7 +575,7 @@ body.project-page .project-content{ padding: 20px; display: block; margin-left: ...@@ -595,7 +575,7 @@ body.project-page .project-content{ padding: 20px; display: block; margin-left:
body.project-page .project-content h2{ margin-top: 6px} body.project-page .project-content h2{ margin-top: 6px}
body.project-page .project-content .button.right{margin-left: 20px} body.project-page .project-content .button.right{margin-left: 20px}
body.project-page table .commit a{color: #{$blue_link}} body.project-page table .commit a{color: #{$blue_link}}
body.project-page table th, body.project-page table td{ border-bottom: 1px solid #DEE2E3;} body.project-page table th, body.project-page table td{ border-bottom: 1px solid #DEE2E3;}
body.project-page .fixed{position: fixed; } body.project-page .fixed{position: fixed; }
/* New project Page */ /* New project Page */
...@@ -606,32 +586,31 @@ body.project-page .fixed{position: fixed; } ...@@ -606,32 +586,31 @@ body.project-page .fixed{position: fixed; }
/* Commit Page */ /* Commit Page */
body.project-page.commits-page .commit-info{float: right;} body.project-page.commits-page .commit-info{float: right;}
body.project-page.commits-page .commit-info data{ body.project-page.commits-page .commit-info data{
padding: 4px 10px; padding: 4px 10px;
font-size: 11px; font-size: 11px;
} }
body.project-page.commits-page .commit-info data.commit-button{ body.project-page.commits-page .commit-info data.commit-button{
background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.192, #fff), to(#f4f4f4)); background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.192, #fff), to(#f4f4f4));
background-image: -webkit-linear-gradient(#fff 19.2%, #f4f4f4); background-image: -webkit-linear-gradient(#fff 19.2%, #f4f4f4);
background-image: -moz-linear-gradient(#fff 19.2%, #f4f4f4); background-image: -moz-linear-gradient(#fff 19.2%, #f4f4f4);
background-image: -o-linear-gradient(#fff 19.2%, #f4f4f4); background-image: -o-linear-gradient(#fff 19.2%, #f4f4f4);
box-shadow: 0 -1px 0 white inset; box-shadow: 0 -1px 0 white inset;
display: block; display: block;
border: 1px solid #eee; border: 1px solid #eee;
border-radius: 5px; border-radius: 5px;
margin-bottom: 2px; margin-bottom: 2px;
position: relative; position: relative;
padding-right: 20px; padding-right: 20px;
} }
body.project-page.commits-page .commit-button i{ body.project-page.commits-page .commit-button i{
background: url('images.png') no-repeat -138px -27px; background: url('images.png') no-repeat -138px -27px;
width: 6px; width: 6px;
height: 9px; height: 9px;
float: right; float: right;
position: absolute; position: absolute;
top: 6px; top: 6px;
right: 5px; right: 5px;
} }
body.project-page.commits-page .commits-date {display: block; width: 100%; margin-bottom: 20px} body.project-page.commits-page .commits-date {display: block; width: 100%; margin-bottom: 20px}
body.project-page.commits-page .commits-date .data {padding: 0} body.project-page.commits-page .commits-date .data {padding: 0}
...@@ -648,9 +627,6 @@ body.project-page.commits-page .commits-date a.commit span.commit-author strong{ ...@@ -648,9 +627,6 @@ body.project-page.commits-page .commits-date a.commit span.commit-author strong{
/* eo Project Page */ /* eo Project Page */
/* Projects Page */ /* Projects Page */
body.projects-page h2.icon span{background-position: -31px -70px;} body.projects-page h2.icon span{background-position: -31px -70px;}
body.projects-page .project-box.ui-box .data .repository {margin-bottom: 20px} body.projects-page .project-box.ui-box .data .repository {margin-bottom: 20px}
...@@ -659,7 +635,6 @@ body.projects-page .project-box{width: 100%; margin-bottom: 3em} ...@@ -659,7 +635,6 @@ body.projects-page .project-box{width: 100%; margin-bottom: 3em}
body.projects-page .browse-code{margin-right: 10px} body.projects-page .browse-code{margin-right: 10px}
/* eo Projects Page */ /* eo Projects Page */
/* ==|== non-semantic helper classes ======================================== */ /* ==|== non-semantic helper classes ======================================== */
.ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; } .ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; }
.ir br { display: none; } .ir br { display: none; }
...@@ -671,28 +646,24 @@ body.projects-page .browse-code{margin-right: 10px} ...@@ -671,28 +646,24 @@ body.projects-page .browse-code{margin-right: 10px}
.clearfix:after { clear: both; } .clearfix:after { clear: both; }
.clearfix { zoom: 1; } .clearfix { zoom: 1; }
/* ==|== media queries ====================================================== */ /* ==|== media queries ====================================================== */
@media only screen and (min-width: 480px) { @media only screen and (min-width: 480px) {
} }
@media only screen and (min-width: 768px) { @media only screen and (min-width: 768px) {
} }
/* ==|== print styles ======================================================= */ /* ==|== print styles ======================================================= */
@media print { @media print {
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; }
a, a:visited { text-decoration: underline; } a, a:visited { text-decoration: underline; }
a[href]:after { content: " (" attr(href) ")"; } a[href]:after { content: " (" attr(href) ")"; }
abbr[title]:after { content: " (" attr(title) ")"; } abbr[title]:after { content: " (" attr(title) ")"; }
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
thead { display: table-header-group; } thead { display: table-header-group; }
tr, img { page-break-inside: avoid; } tr, img { page-break-inside: avoid; }
......
.tags-list { .tags-list {
padding : 0px 10px 10px 10px; padding : 0px 10px 10px 10px;
} }
.tags-list a { .tags-list a {
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
font-size: 14px; font-size: 14px;
} }
.small-tags a{ .small-tags a{
font-size: 9px; font-size: 9px;
...@@ -26,10 +25,9 @@ ...@@ -26,10 +25,9 @@
background-color: #72bbdf; background-color: #72bbdf;
color: #FFF; color: #FFF;
text-shadow: none; text-shadow: none;
font-weight: bold; font-weight: bold;
} }
.medium-tags a{ .medium-tags a{
font-size: 12px; font-size: 12px;
...@@ -40,5 +38,5 @@ ...@@ -40,5 +38,5 @@
background-color: #72bbdf; background-color: #72bbdf;
color: #FFF; color: #FFF;
text-shadow: none; text-shadow: none;
font-weight: bold; font-weight: bold;
} }
\ No newline at end of file
...@@ -79,8 +79,8 @@ class ApplicationController < ActionController::Base ...@@ -79,8 +79,8 @@ class ApplicationController < ActionController::Base
elsif params[:last_id] elsif params[:last_id]
@notes = @notes.where("id > ?", params[:last_id]) @notes = @notes.where("id > ?", params[:last_id])
elsif params[:first_id] elsif params[:first_id]
@notes = @notes.where("id < ?", params[:first_id]) @notes = @notes.where("id < ?", params[:first_id])
else else
nil nil
end end
end end
......
...@@ -10,10 +10,9 @@ class CommitsController < ApplicationController ...@@ -10,10 +10,9 @@ class CommitsController < ApplicationController
before_filter :require_non_empty_project before_filter :require_non_empty_project
before_filter :load_refs, :only => :index # load @branch, @tag & @ref before_filter :load_refs, :only => :index # load @branch, @tag & @ref
def index def index
@repo = project.repo @repo = project.repo
limit, offset = (params[:limit] || 20), (params[:offset] || 0) limit, offset = (params[:limit] || 20), (params[:offset] || 0)
@commits = if params[:path] @commits = if params[:path]
@repo.log(@ref, params[:path], :max_count => limit, :skip => offset) @repo.log(@ref, params[:path], :max_count => limit, :skip => offset)
...@@ -24,6 +23,7 @@ class CommitsController < ApplicationController ...@@ -24,6 +23,7 @@ class CommitsController < ApplicationController
respond_to do |format| respond_to do |format|
format.html # index.html.erb format.html # index.html.erb
format.js format.js
format.atom { render :layout => false }
end end
end end
...@@ -32,7 +32,7 @@ class CommitsController < ApplicationController ...@@ -32,7 +32,7 @@ class CommitsController < ApplicationController
@notes = project.commit_notes(@commit).fresh.limit(20) @notes = project.commit_notes(@commit).fresh.limit(20)
@note = @project.build_commit_note(@commit) @note = @project.build_commit_note(@commit)
respond_to do |format| respond_to do |format|
format.html format.html
format.js { respond_with_notes } format.js { respond_with_notes }
end end
......
...@@ -24,6 +24,7 @@ class IssuesController < ApplicationController ...@@ -24,6 +24,7 @@ class IssuesController < ApplicationController
respond_to do |format| respond_to do |format|
format.html # index.html.erb format.html # index.html.erb
format.js format.js
format.atom { render :layout => false }
end end
end end
...@@ -40,7 +41,7 @@ class IssuesController < ApplicationController ...@@ -40,7 +41,7 @@ class IssuesController < ApplicationController
@notes = @issue.notes.inc_author.order("created_at DESC").limit(20) @notes = @issue.notes.inc_author.order("created_at DESC").limit(20)
@note = @project.notes.new(:noteable => @issue) @note = @project.notes.new(:noteable => @issue)
respond_to do |format| respond_to do |format|
format.html format.html
format.js { respond_with_notes } format.js { respond_with_notes }
end end
...@@ -97,7 +98,7 @@ class IssuesController < ApplicationController ...@@ -97,7 +98,7 @@ class IssuesController < ApplicationController
else @project.issues.opened else @project.issues.opened
end end
@issues = @issues.where("title LIKE ? OR content LIKE ?", "%#{terms}%", "%#{terms}%") unless terms.blank? @issues = @issues.where("title LIKE ?", "%#{terms}%") unless terms.blank?
render :partial => 'issues' render :partial => 'issues'
end end
......
...@@ -79,7 +79,7 @@ class ProjectsController < ApplicationController ...@@ -79,7 +79,7 @@ class ProjectsController < ApplicationController
@notes = @project.common_notes.order("created_at DESC") @notes = @project.common_notes.order("created_at DESC")
@notes = @notes.fresh.limit(20) @notes = @notes.fresh.limit(20)
respond_to do |format| respond_to do |format|
format.html format.html
format.js { respond_with_notes } format.js { respond_with_notes }
end end
...@@ -168,7 +168,7 @@ class ProjectsController < ApplicationController ...@@ -168,7 +168,7 @@ class ProjectsController < ApplicationController
def add_refs(commit, ref_cache) def add_refs(commit, ref_cache)
if ref_cache.empty? if ref_cache.empty?
@repo.refs.each do |ref| @repo.refs.each do |ref|
ref_cache[ref.commit.id] ||= [] ref_cache[ref.commit.id] ||= []
ref_cache[ref.commit.id] << ref ref_cache[ref.commit.id] << ref
end end
......
class TagsController < ApplicationController class TagsController < ApplicationController
def index def index
@tags = Project.tag_counts.order('count DESC') @tags = Project.tag_counts.order('count DESC')
@tags = @tags.where('name like ?', "%#{params[:term]}%") unless params[:term].blank? @tags = @tags.where('name like ?', "%#{params[:term]}%") unless params[:term].blank?
respond_to do |format| respond_to do |format|
format.html format.html
format.json { render json: @tags.limit(8).map {|t| t.name}} format.json { render json: @tags.limit(8).map {|t| t.name}}
end end
end end
end end
...@@ -11,7 +11,7 @@ module ApplicationHelper ...@@ -11,7 +11,7 @@ module ApplicationHelper
end end
def body_class(default_class = nil) def body_class(default_class = nil)
main = content_for(:body_class).blank? ? main = content_for(:body_class).blank? ?
default_class : default_class :
content_for(:body_class) content_for(:body_class)
...@@ -42,7 +42,7 @@ module ApplicationHelper ...@@ -42,7 +42,7 @@ module ApplicationHelper
else else
"Never" "Never"
end end
rescue rescue
"Never" "Never"
end end
......
...@@ -4,7 +4,7 @@ module DashboardHelper ...@@ -4,7 +4,7 @@ module DashboardHelper
when "Issue" then project_issue_path(project, project.issues.find(object.id)) when "Issue" then project_issue_path(project, project.issues.find(object.id))
when "Grit::Commit" then project_commit_path(project, project.repo.commits(object.id).first) when "Grit::Commit" then project_commit_path(project, project.repo.commits(object.id).first)
when "Note" when "Note"
then then
note = object note = object
case note.noteable_type case note.noteable_type
when "Issue" then project_issue_path(project, note.noteable_id) when "Issue" then project_issue_path(project, note.noteable_id)
...@@ -12,9 +12,9 @@ module DashboardHelper ...@@ -12,9 +12,9 @@ module DashboardHelper
when "Commit" then project_commit_path(project, :id => note.noteable_id) when "Commit" then project_commit_path(project, :id => note.noteable_id)
else wall_project_path(project) else wall_project_path(project)
end end
else wall_project_path(project) else wall_project_path(project)
end end
rescue rescue
"#" "#"
end end
......
...@@ -11,8 +11,8 @@ class Issue < ActiveRecord::Base ...@@ -11,8 +11,8 @@ class Issue < ActiveRecord::Base
validates_presence_of :author_id validates_presence_of :author_id
delegate :name, delegate :name,
:email, :email,
:to => :author, :to => :author,
:prefix => true :prefix => true
validates :title, validates :title,
......
...@@ -8,8 +8,8 @@ class Note < ActiveRecord::Base ...@@ -8,8 +8,8 @@ class Note < ActiveRecord::Base
:class_name => "User" :class_name => "User"
delegate :name, delegate :name,
:email, :email,
:to => :author, :to => :author,
:prefix => true :prefix => true
attr_protected :author, :author_id attr_protected :author, :author_id
......
...@@ -129,9 +129,9 @@ class Project < ActiveRecord::Base ...@@ -129,9 +129,9 @@ class Project < ActiveRecord::Base
private_flag private_flag
end end
def last_activity def last_activity
updates(1).first updates(1).first
rescue rescue
nil nil
end end
...@@ -140,7 +140,7 @@ class Project < ActiveRecord::Base ...@@ -140,7 +140,7 @@ class Project < ActiveRecord::Base
end end
def updates(n = 3) def updates(n = 3)
[ [
fresh_commits(n), fresh_commits(n),
fresh_issues(n), fresh_issues(n),
fresh_notes(n) fresh_notes(n)
......
...@@ -9,7 +9,7 @@ class Repository ...@@ -9,7 +9,7 @@ class Repository
@project = project @project = project
end end
def path def path
@path ||= project.path @path ||= project.path
end end
......
class User < ActiveRecord::Base class User < ActiveRecord::Base
# Include default devise modules. Others available are: # Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, devise :database_authenticatable, :token_authenticatable,
:recoverable, :rememberable, :trackable, :validatable :recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model # Setup accessible (or protected) attributes for your model
...@@ -25,6 +25,8 @@ class User < ActiveRecord::Base ...@@ -25,6 +25,8 @@ class User < ActiveRecord::Base
:foreign_key => :assignee_id, :foreign_key => :assignee_id,
:dependent => :destroy :dependent => :destroy
before_create :ensure_authentication_token
alias_attribute :private_token, :authentication_token
scope :not_in_project, lambda { |project| where("id not in (:ids)", :ids => project.users.map(&:id) ) } scope :not_in_project, lambda { |project| where("id not in (:ids)", :ids => project.users.map(&:id) ) }
def identifier def identifier
......
= form_for [:admin, @admin_project] do |f| = form_for [:admin, @admin_project] do |f|
-if @admin_project.errors.any? -if @admin_project.errors.any?
#error_explanation #error_explanation
%h2= "#{pluralize(@admin_project.errors.count, "error")} prohibited this admin_project from being saved:" %h2= "#{pluralize(@admin_project.errors.count, "error")} prohibited this admin_project from being saved:"
%ul %ul
- @admin_project.errors.full_messages.each do |msg| - @admin_project.errors.full_messages.each do |msg|
%li= msg %li= msg
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
%br %br
= f.text_field :path = f.text_field :path
.form-row .form-row
= f.label :tag_list = f.label :tag_list
%br %br
...@@ -36,4 +35,4 @@ ...@@ -36,4 +35,4 @@
:javascript :javascript
$(function(){ $(function(){
taggifyForm(); taggifyForm();
}) })
xml.instruct!
xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do
xml.title "Recent commits to #{@project.name}:#{@ref}"
xml.link :href => project_commits_url(@project, :atom, :ref => @ref), :rel => "self", :type => "application/atom+xml"
xml.link :href => project_commits_url(@project), :rel => "alternate", :type => "text/html"
xml.id project_commits_url(@project)
xml.updated @commits.first.committed_date.strftime("%Y-%m-%dT%H:%M:%SZ") if @commits.any?
@commits.each do |commit|
xml.entry do
xml.id project_commit_url(@project, :id => commit.id)
xml.link :href => project_commit_url(@project, :id => commit.id)
xml.title truncate(commit.safe_message, :length => 80)
xml.updated commit.committed_date.strftime("%Y-%m-%dT%H:%M:%SZ")
xml.media :thumbnail, :width => "40", :height => "40", :url => gravatar_icon(commit.author_email)
xml.author do |author|
xml.name commit.author_name
xml.email commit.author_email
end
xml.summary commit.safe_message
end
end
end
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
%h2.icon %h2.icon
%span %span
%d %d
= link_to project_commits_path(@project) do = link_to project_commits_path(@project) do
= @project.name = @project.name
- if params[:path] - if params[:path]
\/ \/
...@@ -20,8 +20,6 @@ ...@@ -20,8 +20,6 @@
.loading{ :style => "display:none;"} .loading{ :style => "display:none;"}
%center= image_tag "ajax-loader.gif" %center= image_tag "ajax-loader.gif"
:javascript :javascript
$(function(){ $(function(){
CommitsList.init("#{@ref}", 20); CommitsList.init("#{@ref}", 20);
......
...@@ -27,13 +27,13 @@ ...@@ -27,13 +27,13 @@
%a.project-update{:href => dashboard_feed_path(project, update)} %a.project-update{:href => dashboard_feed_path(project, update)}
= image_tag gravatar_icon(update.author_email), :class => "left", :width => 40 = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
%span.update-title %span.update-title
- if update.kind_of?(Grit::Commit) - if update.kind_of?(Grit::Commit)
%span.right.tag.commit= update.head.name %span.right.tag.commit= update.head.name
= dashboard_feed_title(update) = dashboard_feed_title(update)
%span.update-author %span.update-author
%strong= update.author_name %strong= update.author_name
authored authored
= time_ago_in_words(update.created_at) = time_ago_in_words(update.created_at)
ago ago
/ #news-feed / #news-feed
/ #dashboard-content / #dashboard-content
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
- if can? current_user, :write_issue, issue - if can? current_user, :write_issue, issue
- if issue.closed - if issue.closed
= link_to 'Reopen', project_issue_path(@project, issue, :issue => {:closed => false }, :status_only => true), :method => :put, :class => "cgray", :remote => true = link_to 'Reopen', project_issue_path(@project, issue, :issue => {:closed => false }, :status_only => true), :method => :put, :class => "cgray", :remote => true
- else - else
= link_to 'Resolve', project_issue_path(@project, issue, :issue => {:closed => true }, :status_only => true), :method => :put, :class => "cgray", :remote => true = link_to 'Resolve', project_issue_path(@project, issue, :issue => {:closed => true }, :status_only => true), :method => :put, :class => "cgray", :remote => true
- if can? current_user, :write_issue, issue - if can? current_user, :write_issue, issue
= link_to 'Edit', edit_project_issue_path(@project, issue), :class => "cgray edit-issue-link", :remote => true = link_to 'Edit', edit_project_issue_path(@project, issue), :class => "cgray edit-issue-link", :remote => true
......
xml.instruct!
xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do
xml.title "#{@project.name} issues"
xml.link :href => project_issues_url(@project, :atom), :rel => "self", :type => "application/atom+xml"
xml.link :href => project_issues_url(@project), :rel => "alternate", :type => "text/html"
xml.id project_issues_url(@project)
xml.updated @issues.first.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") if @issues.any?
@issues.each do |issue|
xml.entry do
xml.id project_issue_url(@project, issue)
xml.link :href => project_issue_url(@project, issue)
xml.title truncate(issue.title, :length => 80)
xml.updated issue.created_at.strftime("%Y-%m-%dT%H:%M:%SZ")
xml.media :thumbnail, :width => "40", :height => "40", :url => gravatar_icon(issue.author_email)
xml.author do |author|
xml.name issue.author_name
xml.email issue.author_email
end
xml.summary issue.title
end
end
end
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
var href = $('.issue_search').parent().attr('action'); var href = $('.issue_search').parent().attr('action');
var last_terms = ''; var last_terms = '';
var setIssueFilter = function(form, value){ var setIssueFilter = function(form, value){
$.cookie('issue_filter', value, { expires: 140 }); $.cookie('issue_filter', value, { expires: 140 });
form.submit(); form.submit();
......
...@@ -22,12 +22,12 @@ ...@@ -22,12 +22,12 @@
%td %td
= image_tag gravatar_icon(@issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;" = image_tag gravatar_icon(@issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;"
= @issue.assignee.name = @issue.assignee.name
%tr %tr
%td Tags %td Tags
%td %td
- if @issue.critical - if @issue.critical
%span.tag.high critical %span.tag.high critical
- else - else
%span.tag.normal normal %span.tag.normal normal
- if @issue.today? - if @issue.today?
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
- else - else
= check_box_tag "closed", 1, @issue.closed, :disabled => true = check_box_tag "closed", 1, @issue.closed, :disabled => true
- if can?(current_user, :write_issue, @issue) - if can?(current_user, :write_issue, @issue)
.clear .clear
%br %br
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<div class="account-links"> <div class="account-links">
<%= link_to profile_path, :class => "username" do %> <%= link_to profile_path, :class => "username" do %>
<%#= current_user.name %> <%#= current_user.name %>
My profile My profile
<% end %> <% end %>
<%= link_to 'Logout', destroy_user_session_path, :class => "logout", :method => :delete %> <%= link_to 'Logout', destroy_user_session_path, :class => "logout", :method => :delete %>
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
%aside %aside
= link_to "Profile", profile_path, :class => current_page?(:controller => "profile", :action => :show) ? "current" : nil = link_to "Profile", profile_path, :class => current_page?(:controller => "profile", :action => :show) ? "current" : nil
= link_to "Password", profile_password_path, :class => current_page?(:controller => "profile", :action => :password) ? "current" : nil = link_to "Password", profile_password_path, :class => current_page?(:controller => "profile", :action => :password) ? "current" : nil
= link_to keys_path, :class => controller.controller_name == "keys" ? "current" : nil do = link_to keys_path, :class => controller.controller_name == "keys" ? "current" : nil do
Keys Keys
- unless current_user.keys.empty? - unless current_user.keys.empty?
%span{ :class => "number" }= current_user.keys.count %span{ :class => "number" }= current_user.keys.count
......
...@@ -5,6 +5,10 @@ ...@@ -5,6 +5,10 @@
GitLab #{" - #{@project.name}" if @project && !@project.new_record?} GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
= stylesheet_link_tag "application" = stylesheet_link_tag "application"
= javascript_include_tag "application" = javascript_include_tag "application"
- if current_page?(tree_project_path(@project)) || current_page?(project_commits_path(@project))
= auto_discovery_link_tag(:atom, project_commits_url(@project, :atom, :ref => @ref, :private_token => current_user.private_token), :title => "Recent commits to #{@project.name}:#{@ref}")
- if request.path == project_issues_path(@project)
= auto_discovery_link_tag(:atom, project_issues_url(@project, :atom, :private_token => current_user.private_token), :title => "#{@project.name} issues")
= csrf_meta_tags = csrf_meta_tags
= javascript_tag do = javascript_tag do
REQ_URI = "#{request.env["REQUEST_URI"]}"; REQ_URI = "#{request.env["REQUEST_URI"]}";
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
%br %br
%br %br
= f.text_area :note, :size => 255 = f.text_area :note, :size => 255
%div.attach_holder %div.attach_holder
%br %br
= f.label :attachment = f.label :attachment
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
:plain :plain
NoteList.replace(#{@notes.last.id}, #{@notes.first.id}, "#{escape_javascript(render(:partial => 'notes/notes_list'))}"); NoteList.replace(#{@notes.last.id}, #{@notes.first.id}, "#{escape_javascript(render(:partial => 'notes/notes_list'))}");
- elsif params[:last_id] - elsif params[:last_id]
:plain :plain
NoteList.prepend(#{@notes.first.id}, "#{escape_javascript(render(:partial => 'notes/notes_list'))}"); NoteList.prepend(#{@notes.first.id}, "#{escape_javascript(render(:partial => 'notes/notes_list'))}");
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
ago ago
- if(note.author_id == current_user.id) || can?(current_user, :admin_note, @project) - if(note.author_id == current_user.id) || can?(current_user, :admin_note, @project)
= link_to "Remove", [@project, note], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "cred delete-note right" = link_to "Remove", [@project, note], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "cred delete-note right"
%div.note-title %div.note-title
= markdown(note.note) = markdown(note.note)
- if note.attachment.url - if note.attachment.url
......
...@@ -10,9 +10,7 @@ ...@@ -10,9 +10,7 @@
%td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"}
%td{:align => "left", :style => "padding: 20px 0 0;"} %td{:align => "left", :style => "padding: 20px 0 0;"}
%h2{:style => "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} %h2{:style => "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
= link_to project_issue_url(@project, @issue) do = link_to project_issue_url(@project, @issue), :title => @issue.title do
= "Issue ##{@issue.id.to_s}" = "Issue ##{@issue.id.to_s}"
= truncate(@issue.title, :length => 45) = truncate(@issue.title, :length => 45)
%br %br
%cite{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "}
= @issue.content
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
%span.update-author %span.update-author
%strong= update.author_name %strong= update.author_name
authored authored
= time_ago_in_words(update.created_at) = time_ago_in_words(update.created_at)
ago ago
.right .right
- klass = update.class.to_s.split("::").last.downcase - klass = update.class.to_s.split("::").last.downcase
%span.tag{ :class => klass }= klass %span.tag{ :class => klass }= klass
- if update.kind_of?(Grit::Commit) - if update.kind_of?(Grit::Commit)
%span.tag.commit= update.head.name %span.tag.commit= update.head.name
= form_for(@project, :remote => true) do |f| = form_for(@project, :remote => true) do |f|
%div.form_content %div.form_content
- unless @project.new_record? - unless @project.new_record?
%h2.icon %h2.icon
%span %span
= @project.name = @project.name
- if @project.errors.any? - if @project.errors.any?
...@@ -56,4 +56,4 @@ ...@@ -56,4 +56,4 @@
:javascript :javascript
$(function(){ $(function(){
taggifyForm(); taggifyForm();
}) })
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
= project.name = project.name
.small-tags= tag_list project .small-tags= tag_list project
%td= truncate project.url_to_repo %td= truncate project.url_to_repo
%td= project.code %td= project.code
%td= check_box_tag "read", 1, project.readers.include?(current_user), :disabled => :disabled %td= check_box_tag "read", 1, project.readers.include?(current_user), :disabled => :disabled
......
= form_tag destination, :method => :get, :class => "project-refs-form" do = form_tag destination, :method => :get, :class => "project-refs-form" do
= select_tag "ref", grouped_options_refs, :onchange => "this.form.submit();", :class => "project-refs-select" = select_tag "ref", grouped_options_refs, :onchange => "this.form.submit();", :class => "project-refs-select"
:javascript :javascript
$(function(){ $(function(){
$('.project-refs-select').chosen(); $('.project-refs-select').chosen();
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
- projects.each_with_index do |project, i| - projects.each_with_index do |project, i|
%div.grid_1.projects_selector %div.grid_1.projects_selector
%div{ :class => "project-box ui-box ui-box-big" } %div{ :class => "project-box ui-box ui-box-big" }
= link_to project_path(project) do = link_to project_path(project) do
%h3= truncate(project.name, :length => 20) %h3= truncate(project.name, :length => 20)
.data .data
%p.title.repository.git_url_wrapper %p.title.repository.git_url_wrapper
......
-#%a.right.button{:href => "#"} Download -#%a.right.button{:href => "#"} Download
-#-if can? current_user, :admin_project, @project -#-if can? current_user, :admin_project, @project
%a.right.button.blue{:href => "#"} EDIT %a.right.button.blue{:href => "#"} EDIT
...@@ -6,7 +5,7 @@ ...@@ -6,7 +5,7 @@
%h2.icon %h2.icon
%span %span
%d %d
= link_to tree_project_path(@project, :path => nil, :commit_id => @commit.try(:id)), :remote => true do = link_to tree_project_path(@project, :path => nil, :commit_id => @commit.try(:id)), :remote => true do
= @project.name = @project.name
- if params[:path] - if params[:path]
- part_path = "" - part_path = ""
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
.grid_4 .grid_4
- if current_user.can_create_project? - if current_user.can_create_project?
%a.grey-button.right{:href => new_project_path} Create new project %a.grey-button.right{:href => new_project_path} Create new project
%h2.icon %h2.icon
%span %span
Projects Projects
......
- content_for(:body_class, "new-project-page") - content_for(:body_class, "new-project-page")
- content_for(:page_title) do - content_for(:page_title) do
.new-project-hodler .new-project-hodler
.container .container
%h2.icon %h2.icon
%span %span
New Project New Project
%div.clear %div.clear
= render 'form' = render 'form'
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
%table.round-borders#snippets-table %table.round-borders#snippets-table
%thead %thead
%th %th
= render @snippets.fresh = render @snippets.fresh
:javascript :javascript
$('.delete-snippet').live('ajax:success', function() { $('.delete-snippet').live('ajax:success', function() {
......
- content_for(:body_class, "projects-page") - content_for(:body_class, "projects-page")
- content_for(:page_title) do - content_for(:page_title) do
.grid_4 .grid_4
%h2 %h2
Tags Tags
.tags-list .tags-list
- @tags.all.each do |tag| - @tags.all.each do |tag|
= link_to "#{tag.name}(#{tag.count})", tag_path(name) = link_to "#{tag.name}(#{tag.count})", tag_path(name)
...@@ -158,11 +158,11 @@ Devise.setup do |config| ...@@ -158,11 +158,11 @@ Devise.setup do |config|
# ==> Configuration for :token_authenticatable # ==> Configuration for :token_authenticatable
# Defines name of the authentication token params key # Defines name of the authentication token params key
# config.token_authentication_key = :auth_token config.token_authentication_key = :private_token
# If true, authentication through token does not store user in session and needs # If true, authentication through token does not store user in session and needs
# to be supplied on each request. Useful if you are using the token as API token. # to be supplied on each request. Useful if you are using the token as API token.
# config.stateless_token = false config.stateless_token = true
# ==> Scopes configuration # ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for # Turn scoped views on. Before rendering "sessions/new", it will first check for
......
...@@ -3,7 +3,6 @@ Gitlab::Application.routes.draw do ...@@ -3,7 +3,6 @@ Gitlab::Application.routes.draw do
get 'tags'=> 'tags#index' get 'tags'=> 'tags#index'
get 'tags/:tag' => 'projects#index' get 'tags/:tag' => 'projects#index'
namespace :admin do namespace :admin do
resources :users resources :users
resources :projects resources :projects
...@@ -53,10 +52,8 @@ Gitlab::Application.routes.draw do ...@@ -53,10 +52,8 @@ Gitlab::Application.routes.draw do
resources :team_members resources :team_members
resources :issues do resources :issues do
collection do collection do
post :sort post :sort
end get :search
collection do
get :search
end end
end end
resources :notes, :only => [:create, :destroy] resources :notes, :only => [:create, :destroy]
......
...@@ -15,16 +15,16 @@ class IssueContenToNote < ActiveRecord::Migration ...@@ -15,16 +15,16 @@ class IssueContenToNote < ActiveRecord::Migration
if note.save if note.save
issue.update_attributes(:content => nil) issue.update_attributes(:content => nil)
print "." print "."
else else
print "F" print "F"
end end
end end
total = Issue.where("content is not null").count total = Issue.where("content is not null").count
if total > 0 if total > 0
puts "content of #{total} issues were not migrated" puts "content of #{total} issues were not migrated"
else else
puts "Done" puts "Done"
end end
end end
......
class RemoveContentFromIssues < ActiveRecord::Migration
def up
remove_column :issues, :content
end
def down
add_column :issues, :content, :text
end
end
class AddAuthenticationTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :authentication_token, :string
end
end
...@@ -11,11 +11,10 @@ ...@@ -11,11 +11,10 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20111101222453) do ActiveRecord::Schema.define(:version => 20111115063954) do
create_table "issues", :force => true do |t| create_table "issues", :force => true do |t|
t.string "title" t.string "title"
t.text "content"
t.integer "assignee_id" t.integer "assignee_id"
t.integer "author_id" t.integer "author_id"
t.integer "project_id" t.integer "project_id"
...@@ -104,6 +103,7 @@ ActiveRecord::Schema.define(:version => 20111101222453) do ...@@ -104,6 +103,7 @@ ActiveRecord::Schema.define(:version => 20111101222453) do
t.string "skype", :default => "", :null => false t.string "skype", :default => "", :null => false
t.string "linkedin", :default => "", :null => false t.string "linkedin", :default => "", :null => false
t.string "twitter", :default => "", :null => false t.string "twitter", :default => "", :null => false
t.string "authentication_token"
end end
add_index "users", ["email"], :name => "index_users_on_email", :unique => true add_index "users", ["email"], :name => "index_users_on_email", :unique => true
......
...@@ -39,7 +39,7 @@ function branchGraph(holder) { ...@@ -39,7 +39,7 @@ function branchGraph(holder) {
var cuday = 0, cumonth = ""; var cuday = 0, cumonth = "";
r.rect(0, 0, days.length * 20 + 20, 20).attr({fill: "#474D57"}); r.rect(0, 0, days.length * 20 + 20, 20).attr({fill: "#474D57"});
r.rect(0, 20, days.length * 20 + 20, 20).attr({fill: "#f7f7f7"}); r.rect(0, 20, days.length * 20 + 20, 20).attr({fill: "#f7f7f7"});
for (mm = 0; mm < days.length; mm++) { for (mm = 0; mm < days.length; mm++) {
if(days[mm] != null){ if(days[mm] != null){
if(cuday != days[mm][0]){ if(cuday != days[mm][0]){
...@@ -50,7 +50,7 @@ function branchGraph(holder) { ...@@ -50,7 +50,7 @@ function branchGraph(holder) {
r.text(10 + mm * 20, 10, days[mm][1]).attr({font: "12px Fontin-Sans, Arial", fill: "#444"}); r.text(10 + mm * 20, 10, days[mm][1]).attr({font: "12px Fontin-Sans, Arial", fill: "#444"});
cumonth = days[mm][1] cumonth = days[mm][1]
} }
} }
} }
for (i = 0; i < ii; i++) { for (i = 0; i < ii; i++) {
...@@ -65,7 +65,7 @@ function branchGraph(holder) { ...@@ -65,7 +65,7 @@ function branchGraph(holder) {
} }
var t = r.text(x+5, y+5, shortrefs).attr({font: "12px Fontin-Sans, Arial", fill: "#666", var t = r.text(x+5, y+5, shortrefs).attr({font: "12px Fontin-Sans, Arial", fill: "#666",
title: longrefs, cursor: "pointer", rotation: "90"}); title: longrefs, cursor: "pointer", rotation: "90"});
var textbox = t.getBBox(); var textbox = t.getBBox();
t.translate(textbox.height/-4,textbox.width/2); t.translate(textbox.height/-4,textbox.width/2);
} }
...@@ -77,7 +77,7 @@ function branchGraph(holder) { ...@@ -77,7 +77,7 @@ function branchGraph(holder) {
if (c.space == commits[i].space) { if (c.space == commits[i].space) {
r.path("M" + (x - 5) + "," + (y + .0001) + "L" + (15 + 20 * c.time) + "," + (y + .0001)) r.path("M" + (x - 5) + "," + (y + .0001) + "L" + (15 + 20 * c.time) + "," + (y + .0001))
.attr({stroke: colors[c.space], "stroke-width": 2}); .attr({stroke: colors[c.space], "stroke-width": 2});
} else if (c.space < commits[i].space) { } else if (c.space < commits[i].space) {
r.path(["M", x - 5, y + .0001, "l-5-2,0,4,5,-2C",x-5,y,x -17, y+2, x -20, y-10,"L", cx,y-10,cx , cy]) r.path(["M", x - 5, y + .0001, "l-5-2,0,4,5,-2C",x-5,y,x -17, y+2, x -20, y-10,"L", cx,y-10,cx , cy])
.attr({stroke: colors[commits[i].space], "stroke-width": 2}); .attr({stroke: colors[commits[i].space], "stroke-width": 2});
......
...@@ -12,20 +12,20 @@ class GraphCommit ...@@ -12,20 +12,20 @@ class GraphCommit
@_commit.send(m, *args, &block) @_commit.send(m, *args, &block)
end end
# Method is adding time and space on the # Method is adding time and space on the
# list of commits. As well as returns date list # list of commits. As well as returns date list
# corelated with time set on commits. # corelated with time set on commits.
# #
# @param [Array<GraphCommit>] comits to index # @param [Array<GraphCommit>] comits to index
# #
# @return [Array<TimeDate>] list of commit dates corelated with time on commits # @return [Array<TimeDate>] list of commit dates corelated with time on commits
def self.index_commits(commits) def self.index_commits(commits)
days, heads = [], [] days, heads = [], []
map = {} map = {}
commits.reverse.each_with_index do |c,i| commits.reverse.each_with_index do |c,i|
c.time = i c.time = i
days[i] = c.committed_date days[i] = c.committed_date
map[c.id] = c map[c.id] = c
heads += c.refs unless c.refs.nil? heads += c.refs unless c.refs.nil?
end end
...@@ -35,7 +35,7 @@ class GraphCommit ...@@ -35,7 +35,7 @@ class GraphCommit
heads.sort! do |a,b| heads.sort! do |a,b|
if a.name == "master" if a.name == "master"
-1 -1
elsif b.name == "master" elsif b.name == "master"
1 1
else else
b.commit.committed_date <=> a.commit.committed_date b.commit.committed_date <=> a.commit.committed_date
...@@ -45,7 +45,7 @@ class GraphCommit ...@@ -45,7 +45,7 @@ class GraphCommit
j = 0 j = 0
heads.each do |h| heads.each do |h|
if map.include? h.commit.id then if map.include? h.commit.id then
j = mark_chain(j+=1, map[h.commit.id], map) j = mark_chain(j+=1, map[h.commit.id], map)
end end
end end
days days
...@@ -55,15 +55,15 @@ class GraphCommit ...@@ -55,15 +55,15 @@ class GraphCommit
# #
# @param [Fixnum] space (row on the graph) to be set # @param [Fixnum] space (row on the graph) to be set
# @param [GraphCommit] the commit object. # @param [GraphCommit] the commit object.
# @param [Hash<String,GraphCommit>] map of commits # @param [Hash<String,GraphCommit>] map of commits
# #
# @return [Fixnum] max space used. # @return [Fixnum] max space used.
def self.mark_chain(mark, commit, map) def self.mark_chain(mark, commit, map)
commit.space = mark if commit.space == 0 commit.space = mark if commit.space == 0
m1 = mark - 1 m1 = mark - 1
marks = commit.parents.collect do |p| marks = commit.parents.collect do |p|
if map.include? p.id and map[p.id].space == 0 then if map.include? p.id and map[p.id].space == 0 then
mark_chain(m1 += 1, map[p.id],map) mark_chain(m1 += 1, map[p.id],map)
else else
m1 + 1 m1 + 1
end end
...@@ -71,5 +71,5 @@ class GraphCommit ...@@ -71,5 +71,5 @@ class GraphCommit
marks << mark marks << mark
marks.compact.max marks.compact.max
end end
end end
...@@ -62,10 +62,10 @@ describe Project do ...@@ -62,10 +62,10 @@ describe Project do
end end
end end
describe "updates" do describe "updates" do
let(:project) { Factory :project } let(:project) { Factory :project }
before do before do
@issue = Factory :issue, @issue = Factory :issue,
:project => project, :project => project,
:author => Factory(:user), :author => Factory(:user),
...@@ -86,10 +86,10 @@ describe Project do ...@@ -86,10 +86,10 @@ describe Project do
end end
end end
describe "last_activity" do describe "last_activity" do
let(:project) { Factory :project } let(:project) { Factory :project }
before do before do
@note = Factory :note, @note = Factory :note,
:project => project, :project => project,
:author => Factory(:user) :author => Factory(:user)
...@@ -99,7 +99,7 @@ describe Project do ...@@ -99,7 +99,7 @@ describe Project do
it { project.last_activity_date.to_s.should == @note.created_at.to_s } it { project.last_activity_date.to_s.should == @note.created_at.to_s }
end end
describe "fresh commits" do describe "fresh commits" do
let(:project) { Factory :project } let(:project) { Factory :project }
it { project.fresh_commits(3).count.should == 3 } it { project.fresh_commits(3).count.should == 3 }
......
...@@ -19,15 +19,20 @@ describe User do ...@@ -19,15 +19,20 @@ describe User do
user.identifier.should == "test_mail.com" user.identifier.should == "test_mail.com"
end end
it "should have authentication token" do
user = Factory(:user)
user.authentication_token.should_not == ""
end
describe "dependent" do describe "dependent" do
before do before do
@user = Factory :user @user = Factory :user
@note = Factory :note, @note = Factory :note,
:author => @user, :author => @user,
:project => Factory(:project) :project => Factory(:project)
end end
it "should destroy all notes with user" do it "should destroy all notes with user" do
Note.find_by_id(@note.id).should_not be_nil Note.find_by_id(@note.id).should_not be_nil
@user.destroy @user.destroy
Note.find_by_id(@note.id).should be_nil Note.find_by_id(@note.id).should be_nil
......
...@@ -25,6 +25,25 @@ describe "Commits" do ...@@ -25,6 +25,25 @@ describe "Commits" do
page.should have_content(commit.author) page.should have_content(commit.author)
page.should have_content(commit.message) page.should have_content(commit.message)
end end
it "should render atom feed" do
visit project_commits_path(project, :atom)
page.response_headers['Content-Type'].should have_content("application/atom+xml")
page.body.should have_selector("title", :text => "Recent commits to #{project.name}")
page.body.should have_selector("author email", :text => commit.author_email)
page.body.should have_selector("entry summary", :text => commit.message)
end
it "should render atom feed via private token" do
logout
visit project_commits_path(project, :atom, :private_token => @user.private_token)
page.response_headers['Content-Type'].should have_content("application/atom+xml")
page.body.should have_selector("title", :text => "Recent commits to #{project.name}")
page.body.should have_selector("author email", :text => commit.author_email)
page.body.should have_selector("entry summary", :text => commit.message)
end
end end
describe "GET /commits/:id" do describe "GET /commits/:id" do
......
...@@ -15,13 +15,13 @@ describe "Dashboard" do ...@@ -15,13 +15,13 @@ describe "Dashboard" do
end end
it "should have projects panel" do it "should have projects panel" do
within ".project-list" do within ".project-list" do
page.should have_content(@project.name) page.should have_content(@project.name)
end end
end end
it "should have news feed" do it "should have news feed" do
within "#news-feed" do within "#news-feed" do
page.should have_content("master") page.should have_content("master")
page.should have_content(@project.commit.author.name) page.should have_content(@project.commit.author.name)
page.should have_content(@project.commit.safe_message) page.should have_content(@project.commit.safe_message)
......
...@@ -27,6 +27,25 @@ describe "Issues" do ...@@ -27,6 +27,25 @@ describe "Issues" do
it { should have_content(@issue.project.name) } it { should have_content(@issue.project.name) }
it { should have_content(@issue.assignee.name) } it { should have_content(@issue.assignee.name) }
it "should render atom feed" do
visit project_issues_path(project, :atom)
page.response_headers['Content-Type'].should have_content("application/atom+xml")
page.body.should have_selector("title", :text => "#{project.name} issues")
page.body.should have_selector("author email", :text => @issue.author_email)
page.body.should have_selector("entry summary", :text => @issue.title)
end
it "should render atom feed via private token" do
logout
visit project_issues_path(project, :atom, :private_token => @user.private_token)
page.response_headers['Content-Type'].should have_content("application/atom+xml")
page.body.should have_selector("title", :text => "#{project.name} issues")
page.body.should have_selector("author email", :text => @issue.author_email)
page.body.should have_selector("entry summary", :text => @issue.title)
end
describe "Destroy" do describe "Destroy" do
before do before do
# admin access to remove issue # admin access to remove issue
...@@ -81,13 +100,13 @@ describe "Issues" do ...@@ -81,13 +100,13 @@ describe "Issues" do
end end
describe "fill in" do describe "fill in" do
describe 'assign to me' do describe 'assign to me' do
before do before do
fill_in "issue_title", :with => "bug 345" fill_in "issue_title", :with => "bug 345"
click_link "Select user" click_link "Select user"
within "#issue_assignee_id-menu" do within "#issue_assignee_id-menu" do
click_link @user.name click_link @user.name
end end
end end
it { expect { click_button "Save" }.to change {Issue.count}.by(1) } it { expect { click_button "Save" }.to change {Issue.count}.by(1) }
...@@ -107,13 +126,13 @@ describe "Issues" do ...@@ -107,13 +126,13 @@ describe "Issues" do
end end
end end
describe 'assign to other' do describe 'assign to other' do
before do before do
fill_in "issue_title", :with => "bug 345" fill_in "issue_title", :with => "bug 345"
click_link "Select user" click_link "Select user"
within "#issue_assignee_id-menu" do within "#issue_assignee_id-menu" do
click_link @user2.name click_link @user2.name
end end
end end
it { expect { click_button "Save" }.to change {Issue.count}.by(1) } it { expect { click_button "Save" }.to change {Issue.count}.by(1) }
...@@ -145,7 +164,7 @@ describe "Issues" do ...@@ -145,7 +164,7 @@ describe "Issues" do
end end
end end
describe "Show issue" do describe "Show issue" do
before do before do
@issue = Factory :issue, @issue = Factory :issue,
:author => @user, :author => @user,
...@@ -205,7 +224,7 @@ describe "Issues" do ...@@ -205,7 +224,7 @@ describe "Issues" do
@issue.save @issue.save
end end
end end
it "should be able to search on different statuses" do it "should be able to search on different statuses" do
@issue = Issue.first @issue = Issue.first
@issue.closed = true @issue.closed = true
...@@ -214,13 +233,13 @@ describe "Issues" do ...@@ -214,13 +233,13 @@ describe "Issues" do
visit project_issues_path(project) visit project_issues_path(project)
choose 'closed_issues' choose 'closed_issues'
fill_in 'issue_search', :with => 'foobar' fill_in 'issue_search', :with => 'foobar'
page.should have_content 'foobar' page.should have_content 'foobar'
page.should_not have_content 'foobar2' page.should_not have_content 'foobar2'
page.should_not have_content 'gitlab' page.should_not have_content 'gitlab'
end end
it "should search for term and return the correct results" do it "should search for term and return the correct results" do
visit project_issues_path(project) visit project_issues_path(project)
fill_in 'issue_search', :with => 'foobar' fill_in 'issue_search', :with => 'foobar'
......
...@@ -73,7 +73,7 @@ describe "Projects" do ...@@ -73,7 +73,7 @@ describe "Projects" do
end end
it "should beahave like activities page" do it "should beahave like activities page" do
within ".project-update" do within ".project-update" do
page.should have_content("master") page.should have_content("master")
page.should have_content(@project.commit.author.name) page.should have_content(@project.commit.author.name)
page.should have_content(@project.commit.safe_message) page.should have_content(@project.commit.safe_message)
......
...@@ -10,7 +10,6 @@ describe "Tags" do ...@@ -10,7 +10,6 @@ describe "Tags" do
# end # end
# end # end
describe "GET '/tags.json'" do describe "GET '/tags.json'" do
before do before do
@project = Factory :project @project = Factory :project
...@@ -20,12 +19,9 @@ describe "Tags" do ...@@ -20,12 +19,9 @@ describe "Tags" do
visit '/tags.json' visit '/tags.json'
end end
it "should contains tags" do it "should contains tags" do
page.should have_content('demo1') page.should have_content('demo1')
end end
end end
end end
...@@ -7,7 +7,7 @@ describe "Top Panel", :js => true do ...@@ -7,7 +7,7 @@ describe "Top Panel", :js => true do
before do before do
visit projects_path visit projects_path
fill_in "search", :with => "Ke" fill_in "search", :with => "Ke"
within ".ui-autocomplete" do within ".ui-autocomplete" do
find(:xpath, "//a[.=\"Keys\"]").click find(:xpath, "//a[.=\"Keys\"]").click
end end
end end
...@@ -24,7 +24,7 @@ describe "Top Panel", :js => true do ...@@ -24,7 +24,7 @@ describe "Top Panel", :js => true do
visit project_path(@project) visit project_path(@project)
fill_in "search", :with => "Commi" fill_in "search", :with => "Commi"
within ".ui-autocomplete" do within ".ui-autocomplete" do
find(:xpath, "//a[.=\"#{@project.code} / Commits\"]").click find(:xpath, "//a[.=\"#{@project.code} / Commits\"]").click
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment