Merge branch 'dev'
2
Gemfile
|
@ -19,6 +19,7 @@ gem "pygments.rb", "0.2.3"
|
||||||
gem "thin"
|
gem "thin"
|
||||||
gem "git"
|
gem "git"
|
||||||
gem "acts_as_list"
|
gem "acts_as_list"
|
||||||
|
gem 'rdiscount'
|
||||||
|
|
||||||
group :assets do
|
group :assets do
|
||||||
gem 'sass-rails', " ~> 3.1.0"
|
gem 'sass-rails', " ~> 3.1.0"
|
||||||
|
@ -27,6 +28,7 @@ group :assets do
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
|
gem 'letter_opener'
|
||||||
gem 'rails-footnotes', '>= 3.7.5.rc4'
|
gem 'rails-footnotes', '>= 3.7.5.rc4'
|
||||||
gem 'annotate', :git => 'git://github.com/ctran/annotate_models.git'
|
gem 'annotate', :git => 'git://github.com/ctran/annotate_models.git'
|
||||||
end
|
end
|
||||||
|
|
|
@ -119,6 +119,8 @@ GEM
|
||||||
rails (>= 3.0.0)
|
rails (>= 3.0.0)
|
||||||
launchy (2.0.5)
|
launchy (2.0.5)
|
||||||
addressable (~> 2.2.6)
|
addressable (~> 2.2.6)
|
||||||
|
letter_opener (0.0.2)
|
||||||
|
launchy
|
||||||
libv8 (3.3.10.2)
|
libv8 (3.3.10.2)
|
||||||
linecache19 (0.5.12)
|
linecache19 (0.5.12)
|
||||||
ruby_core_source (>= 0.1.4)
|
ruby_core_source (>= 0.1.4)
|
||||||
|
@ -161,6 +163,7 @@ GEM
|
||||||
rdoc (~> 3.4)
|
rdoc (~> 3.4)
|
||||||
thor (~> 0.14.6)
|
thor (~> 0.14.6)
|
||||||
rake (0.9.2)
|
rake (0.9.2)
|
||||||
|
rdiscount (1.6.8)
|
||||||
rdoc (3.9.4)
|
rdoc (3.9.4)
|
||||||
rspec (2.6.0)
|
rspec (2.6.0)
|
||||||
rspec-core (~> 2.6.0)
|
rspec-core (~> 2.6.0)
|
||||||
|
@ -261,9 +264,11 @@ DEPENDENCIES
|
||||||
jquery-rails
|
jquery-rails
|
||||||
kaminari
|
kaminari
|
||||||
launchy
|
launchy
|
||||||
|
letter_opener
|
||||||
pygments.rb (= 0.2.3)
|
pygments.rb (= 0.2.3)
|
||||||
rails (= 3.1.0)
|
rails (= 3.1.0)
|
||||||
rails-footnotes (>= 3.7.5.rc4)
|
rails-footnotes (>= 3.7.5.rc4)
|
||||||
|
rdiscount
|
||||||
rspec-rails
|
rspec-rails
|
||||||
ruby-debug19
|
ruby-debug19
|
||||||
sass-rails (~> 3.1.0)
|
sass-rails (~> 3.1.0)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[Dolphin]
|
[Dolphin]
|
||||||
ShowPreview=true
|
ShowPreview=true
|
||||||
Timestamp=2011,9,14,20,34,18
|
Timestamp=2011,10,28,13,16,25
|
||||||
Version=2
|
Version=2
|
||||||
|
|
BIN
app/assets/images/bg-header.png
Normal file
After Width: | Height: | Size: 212 B |
BIN
app/assets/images/icon-search.png
Normal file
After Width: | Height: | Size: 422 B |
BIN
app/assets/images/images.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
BIN
app/assets/images/login-logo.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
4
app/assets/javascripts/modernizr-2.0.6.min.js
vendored
Executable file
|
@ -102,54 +102,6 @@ table.round-borders {
|
||||||
float:left;
|
float:left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.day-commits-table {
|
|
||||||
@include round-borders-all(4px);
|
|
||||||
padding: 4px 0px;
|
|
||||||
margin-bottom:10px;
|
|
||||||
display:block;
|
|
||||||
width:100%;
|
|
||||||
background: #E6F1F6;
|
|
||||||
|
|
||||||
.day-header {
|
|
||||||
padding:10px;
|
|
||||||
h3 {
|
|
||||||
margin:0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
display:block;
|
|
||||||
list-style:none;
|
|
||||||
margin:0px;
|
|
||||||
padding:0px;
|
|
||||||
|
|
||||||
li.commit {
|
|
||||||
display:list-item;
|
|
||||||
padding:8px;
|
|
||||||
margin:0px;
|
|
||||||
background: #F7FBFC;
|
|
||||||
border-top: 1px solid #E2EAEE;
|
|
||||||
|
|
||||||
&:first-child {
|
|
||||||
border-top: 1px solid #E2EAEE;
|
|
||||||
}
|
|
||||||
&:nth-child(2n+1) {
|
|
||||||
background: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.button {
|
|
||||||
width:85px;
|
|
||||||
padding:10px;
|
|
||||||
margin:0px;
|
|
||||||
float:right;
|
|
||||||
}
|
|
||||||
p {
|
|
||||||
margin-bottom: 3px;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@mixin panel-color {
|
@mixin panel-color {
|
||||||
background: #111 !important;
|
background: #111 !important;
|
||||||
background: -webkit-gradient(linear,left top,left bottom,from(#333),to(#111)) !important;
|
background: -webkit-gradient(linear,left top,left bottom,from(#333),to(#111)) !important;
|
||||||
|
@ -210,9 +162,9 @@ table.round-borders {
|
||||||
padding:20px;
|
padding:20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
//body {
|
||||||
background: #eaeaea;
|
//background: #eaeaea;
|
||||||
}
|
//}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: #111;
|
color: #111;
|
||||||
|
@ -383,23 +335,19 @@ input.ssh_project_url {
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
tbody tr:nth-child(2n) td, tbody tr.even td {
|
|
||||||
background: none repeat scroll 0 0 #F7FBFC;
|
|
||||||
border-top: 1px solid #E2EAEE;
|
|
||||||
border-bottom: 1px solid #E2EAEE;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top_menu_count {
|
.top_menu_count {
|
||||||
background: none repeat scroll 0 0 #FFF6BF;
|
background: none repeat scroll 0 0 white;
|
||||||
border-color: #FFD324;
|
color: #333;
|
||||||
color: #514721;
|
border-color: #4BB8D2;
|
||||||
border: 1px solid #DDDDDD;
|
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
font-size:12px;
|
font-size:10px;
|
||||||
position:relative;
|
|
||||||
top:-14px;
|
|
||||||
left:10px;
|
|
||||||
border-top:none;
|
border-top:none;
|
||||||
|
text-align:center;
|
||||||
|
float:right;
|
||||||
|
width:25px;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#logo {
|
#logo {
|
||||||
|
@ -411,7 +359,7 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
|
||||||
text-shadow: #555 1px 1px;
|
text-shadow: #555 1px 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** FALSH **/
|
/** FLASH **/
|
||||||
|
|
||||||
#flash_container {
|
#flash_container {
|
||||||
height:40px;
|
height:40px;
|
||||||
|
@ -429,6 +377,7 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
|
||||||
color:#444;
|
color:#444;
|
||||||
font-size:22px;
|
font-size:22px;
|
||||||
padding-top:5px;
|
padding-top:5px;
|
||||||
|
margin:2px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -700,3 +649,60 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.left {
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
.right {
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.width-50p{
|
||||||
|
width:50%;
|
||||||
|
}
|
||||||
|
.width-49p{
|
||||||
|
width:49%;
|
||||||
|
}
|
||||||
|
.width-30p{
|
||||||
|
width:30%;
|
||||||
|
}
|
||||||
|
.width-65p{
|
||||||
|
width:65%;
|
||||||
|
}
|
||||||
|
pre.commit_message {
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#container {
|
||||||
|
min-height:100%;
|
||||||
|
}
|
||||||
|
.ui-selectmenu{
|
||||||
|
@include round-borders-all(4px);
|
||||||
|
margin-right:10px;
|
||||||
|
font-size:1.5em;
|
||||||
|
height:auto;
|
||||||
|
font-weight:bold;
|
||||||
|
.ui-selectmenu-status {
|
||||||
|
padding:3px 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
td.code {
|
||||||
|
width: 100%;
|
||||||
|
.highlight {
|
||||||
|
margin-left: 55px;
|
||||||
|
overflow:auto;
|
||||||
|
overflow-y:hidden;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.highlight pre {
|
||||||
|
white-space: pre;
|
||||||
|
word-wrap:normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlighttable tr:hover {
|
||||||
|
background:white;
|
||||||
|
}
|
||||||
|
table.highlighttable pre{
|
||||||
|
line-height:16px !important;
|
||||||
|
font-size:12px !important;
|
||||||
|
}
|
||||||
|
|
660
app/assets/stylesheets/style.scss
Executable file
|
@ -0,0 +1,660 @@
|
||||||
|
/* HTML5 ✰ Boilerplate
|
||||||
|
* ==|== normalize ==========================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
|
||||||
|
audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
|
||||||
|
audio:not([controls]) { display: none; }
|
||||||
|
[hidden] { display: none; }
|
||||||
|
|
||||||
|
html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
|
||||||
|
body { margin: 0; font-size: 13px; line-height: 1.231; }
|
||||||
|
body, button, input, select, textarea { font-family: sans-serif; color: #222; }
|
||||||
|
|
||||||
|
::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; }
|
||||||
|
::selection { background: #fe57a1; color: #fff; text-shadow: none; }
|
||||||
|
|
||||||
|
a { color: #00e; }
|
||||||
|
a:hover { color: #06e; }
|
||||||
|
a:focus { outline: thin dotted; }
|
||||||
|
a:hover, a:active { outline: 0; }
|
||||||
|
|
||||||
|
abbr[title] { border-bottom: 1px dotted; }
|
||||||
|
b, strong { font-weight: bold; }
|
||||||
|
blockquote { margin: 1em 40px; }
|
||||||
|
dfn { font-style: italic; }
|
||||||
|
hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
|
||||||
|
ins { background: #ff9; color: #000; text-decoration: none; }
|
||||||
|
mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
|
||||||
|
pre, code, kbd, samp { font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 1em; }
|
||||||
|
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
|
||||||
|
q { quotes: none; }
|
||||||
|
q:before, q:after { content: ""; content: none; }
|
||||||
|
small { font-size: 85%; }
|
||||||
|
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
|
||||||
|
sup { top: -0.5em; }
|
||||||
|
sub { bottom: -0.25em; }
|
||||||
|
ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
|
||||||
|
dd { margin: 0 0 0 40px; }
|
||||||
|
nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }
|
||||||
|
img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
|
||||||
|
svg:not(:root) { overflow: hidden; }
|
||||||
|
figure { margin: 0; }
|
||||||
|
|
||||||
|
form { margin: 0; }
|
||||||
|
fieldset { border: 0; margin: 0; padding: 0; }
|
||||||
|
label { cursor: pointer; }
|
||||||
|
legend { border: 0; *margin-left: -7px; padding: 0; }
|
||||||
|
button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
|
||||||
|
button, input { line-height: normal; *overflow: visible; }
|
||||||
|
table button, table input { *overflow: auto; }
|
||||||
|
button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; }
|
||||||
|
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; }
|
||||||
|
input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
|
||||||
|
input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
|
||||||
|
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
|
||||||
|
textarea { overflow: auto; vertical-align: top; resize: vertical; }
|
||||||
|
input:valid, textarea:valid { }
|
||||||
|
input:invalid, textarea:invalid { background-color: #f0dddd; }
|
||||||
|
|
||||||
|
table { border-collapse: collapse; border-spacing: 0; }
|
||||||
|
td { vertical-align: top; }
|
||||||
|
|
||||||
|
|
||||||
|
/* ==|== primary styles =====================================================
|
||||||
|
Author: Ricardo Rauch
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/* 960gs */
|
||||||
|
.container_4{width:98%;margin-left:1%;margin-right:1%}.grid_1,.grid_2,.grid_3,.grid_4{display:inline;float:left;position:relative;margin-left:1%;margin-right:1%}.alpha{margin-left:0}.omega{margin-right:0}.container_4 .grid_1{width:23.0%}.container_4 .grid_2{width:48.0%}.container_4 .grid_3{width:73.0%}.container_4 .grid_4{width:98.0%}.container_4 .prefix_1{padding-left:25.0%}.container_4 .prefix_2{padding-left:50.0%}.container_4 .prefix_3{padding-left:75.0%}.container_4 .suffix_1{padding-right:25.0%}.container_4 .suffix_2{padding-right:50.0%}.container_4 .suffix_3{padding-right:75.0%}.container_4 .push_1{left:25.0%}.container_4 .push_2{left:50.0%}.container_4 .push_3{left:75.0%}.container_4 .pull_1{left:-25.0%}.container_4 .pull_2{left:-50.0%}.container_4 .pull_3{left:-75.0%}.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0}.clearfix:after{clear:both;content:' ';display:block;font-size:0;line-height:0;visibility:hidden;width:0;height:0}.clearfix{display:inline-block}* html .clearfix{height:1%}.clearfix{display:block}
|
||||||
|
/* eo 960gs*/
|
||||||
|
|
||||||
|
/* Vars */
|
||||||
|
$color: "#4BB8D2";
|
||||||
|
$blue_link: "#2fa0bb";
|
||||||
|
/* eo Vars */
|
||||||
|
|
||||||
|
html{ -webkit-font-smoothing:antialiased; }
|
||||||
|
*{text-shadow: 0 1px 0 white}
|
||||||
|
body{font-size: 12px; background-color: #eee;}
|
||||||
|
a{text-decoration: none; font-weight: bold; color: #666}
|
||||||
|
a:hover{color: #333}
|
||||||
|
/* Typography */
|
||||||
|
h1,h2,h3,h4,h5{font-weight: normal; color: #666}
|
||||||
|
h2{margin: 1.5em 0}
|
||||||
|
/* eo Typography */
|
||||||
|
|
||||||
|
/* Forms */
|
||||||
|
input[type="text"]:focus, input[type="password"]:focus { outline: none; }
|
||||||
|
input.text{border: 1px solid #ccc; border-radius: 4px; display: block; padding: 10px}
|
||||||
|
/* eo Forms */
|
||||||
|
|
||||||
|
/* Tables */
|
||||||
|
table {width:100%; border: 1px solid #DEE2E3}
|
||||||
|
table thead{
|
||||||
|
-webkit-border-top-left-radius: 5px;
|
||||||
|
-webkit-border-top-right-radius: 5px;
|
||||||
|
-moz-border-radius-topleft: 5px;
|
||||||
|
-moz-border-radius-topright: 5px;
|
||||||
|
border-top-left-radius: 5px;
|
||||||
|
border-top-right-radius: 5px;
|
||||||
|
}
|
||||||
|
table thead th{
|
||||||
|
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: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8);
|
||||||
|
background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8);
|
||||||
|
margin: 0;
|
||||||
|
font-weight: normal;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: left;
|
||||||
|
color: #97A0A5;
|
||||||
|
}
|
||||||
|
td, th{ padding: .9em 1em; vertical-align: middle; }
|
||||||
|
|
||||||
|
table thead .image{width:100px}
|
||||||
|
table tr:hover, .listed_items tr.odd:hover{background-color:#FFFFCF}
|
||||||
|
/* eo Tables */
|
||||||
|
|
||||||
|
|
||||||
|
/* Buttons */
|
||||||
|
.grey-button{
|
||||||
|
border-radius: 5px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 6px 20px;
|
||||||
|
border: 1px solid #999;
|
||||||
|
color: #666;
|
||||||
|
display: inline-block;
|
||||||
|
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-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
|
||||||
|
background-image: -moz-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
|
||||||
|
background-image: -o-linear-gradient(#f7f7f7 7.6%, #d5d5d5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button{
|
||||||
|
padding: 10px 20px;
|
||||||
|
text-align: center;
|
||||||
|
display: inline-block;
|
||||||
|
border-radius: 5px;
|
||||||
|
color: #578E91;
|
||||||
|
font-size: 12px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
border: 1px solid #8CE2E6;
|
||||||
|
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: -moz-linear-gradient(#dbf5f6 79.4%, #c5eef0);
|
||||||
|
background-image: -o-linear-gradient(#dbf5f6 79.4%, #c5eef0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:hover {color: rgba(0,0,0,.8)}
|
||||||
|
|
||||||
|
.button.green {margin-right: 0; }
|
||||||
|
|
||||||
|
.button.yellow{
|
||||||
|
color: #908054;
|
||||||
|
border-color: #DDCDA1;
|
||||||
|
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: -moz-linear-gradient(#FFEFC3 79.4%, #F3E3B7);
|
||||||
|
background-image: -o-linear-gradient(#FFEFC3 79.4%, #F3E3B7);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button.blue{
|
||||||
|
color: #417E97;
|
||||||
|
border-color: #b2cdec;
|
||||||
|
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: -moz-linear-gradient(#dbe8f6 79.4%, #c7daf1);
|
||||||
|
background-image: -o-linear-gradient(#dbe8f6 79.4%, #c7daf1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-small{ text-shadow: none; padding: 4px 10px; }
|
||||||
|
.button-green{background: #A6B807; color: white}
|
||||||
|
|
||||||
|
/* eo Buttons */
|
||||||
|
|
||||||
|
/* UI Box */
|
||||||
|
.ui-box{border: 1px solid #DEDFE1; float: left; border-radius: 5px}
|
||||||
|
.ui-box h3{
|
||||||
|
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: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8);
|
||||||
|
background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8);
|
||||||
|
margin: 0;
|
||||||
|
padding: 1em;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: normal;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
border-bottom: 1px solid #DEDFE1;
|
||||||
|
-webkit-border-top-left-radius: 5px;
|
||||||
|
-webkit-border-top-right-radius: 5px;
|
||||||
|
-moz-border-radius-topleft: 5px;
|
||||||
|
-moz-border-radius-topright: 5px;
|
||||||
|
border-top-left-radius: 5px;
|
||||||
|
border-top-right-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-box.ui-box-small h3{
|
||||||
|
padding: 8px 10px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.ui-box .data{padding: .5em 1em}
|
||||||
|
|
||||||
|
.ui-box .buttons{background-color: #f7f8f9; padding: 1em;
|
||||||
|
-webkit-border-bottom-right-radius: 5px;
|
||||||
|
-webkit-border-bottom-left-radius: 5px;
|
||||||
|
-moz-border-radius-bottomright: 5px;
|
||||||
|
-moz-border-radius-bottomleft: 5px;
|
||||||
|
border-bottom-right-radius: 5px;
|
||||||
|
border-bottom-left-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.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;
|
||||||
|
|
||||||
|
-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);
|
||||||
|
-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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* eo UI Box */
|
||||||
|
|
||||||
|
/* Login Page */
|
||||||
|
body.login-page{background-color: #f1f1f1; padding-top: 10%}
|
||||||
|
|
||||||
|
.login-box{
|
||||||
|
width: 304px;
|
||||||
|
position: relative;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin: auto;
|
||||||
|
padding: 20px;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-box .login-logo{
|
||||||
|
margin: 10px 0 30px 0;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-box input.text{background-color: #f1f1f1; font-size: 16px; border-radius: 0; padding: 14px 10px; width: 280px}
|
||||||
|
|
||||||
|
.login-box input.text.top{
|
||||||
|
-webkit-border-top-left-radius: 5px;
|
||||||
|
-webkit-border-top-right-radius: 5px;
|
||||||
|
-moz-border-radius-topleft: 5px;
|
||||||
|
-moz-border-radius-topright: 5px;
|
||||||
|
border-top-left-radius: 5px;
|
||||||
|
border-top-right-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-box input.text.bottom{
|
||||||
|
-webkit-border-bottom-right-radius: 5px;
|
||||||
|
-webkit-border-bottom-left-radius: 5px;
|
||||||
|
-moz-border-radius-bottomright: 5px;
|
||||||
|
-moz-border-radius-bottomleft: 5px;
|
||||||
|
border-bottom-right-radius: 5px;
|
||||||
|
border-bottom-left-radius: 5px;
|
||||||
|
border-top: 0;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-box a.forgot{float: right; padding-top: 6px}
|
||||||
|
|
||||||
|
|
||||||
|
/* Icons */
|
||||||
|
.directory, .file{
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 10px;
|
||||||
|
width: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory{
|
||||||
|
background: url('images.png') no-repeat -73px -26px;
|
||||||
|
height: 11px;
|
||||||
|
margin-bottom: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file{
|
||||||
|
background: url('images.png') no-repeat -114px -24px;
|
||||||
|
height: 16px;
|
||||||
|
margin-bottom: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* eo Icons*/
|
||||||
|
|
||||||
|
/* General */
|
||||||
|
#container{background-color: white; overflow: hidden;}
|
||||||
|
/*#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{background: #474D57 url('bg-header.png') repeat-x bottom; z-index: 10000; height: 44px; padding: 10px 2% 6px 2%}
|
||||||
|
header a{color: white; text-shadow: 0 -1px 0 black}
|
||||||
|
header a:hover{color: #f1f1f1}
|
||||||
|
header h1{
|
||||||
|
width: 65px;
|
||||||
|
}
|
||||||
|
header h1.logo{margin: 0; padding: 0}
|
||||||
|
header h1.logo a{
|
||||||
|
background: url('images.png') no-repeat -3px -7px;
|
||||||
|
width: 65px;
|
||||||
|
height: 26px;
|
||||||
|
margin: 5px 0;
|
||||||
|
padding: 0;
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
text-indent: -1000em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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-linear-gradient(#595d63 6.6%, #31363e);
|
||||||
|
background-image: -moz-linear-gradient(#595d63 6.6%, #31363e);
|
||||||
|
background-image: -o-linear-gradient(#595d63 6.6%, #31363e);
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
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:last-child {border: 0; box-shadow: none}
|
||||||
|
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-linear-gradient(#595d63 6.6%, #2c2f35);
|
||||||
|
background-image: -moz-linear-gradient(#595d63 6.6%, #202227);
|
||||||
|
background-image: -o-linear-gradient(#595d63 6.6%, #202227);
|
||||||
|
}
|
||||||
|
|
||||||
|
header nav a:active{
|
||||||
|
box-shadow: 0 1px 4px rgba(0,0,0,.8) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
header nav a.dashboard {
|
||||||
|
-webkit-border-top-left-radius: 4px;
|
||||||
|
-webkit-border-bottom-left-radius: 4px;
|
||||||
|
-moz-border-radius-topleft: 4px;
|
||||||
|
-moz-border-radius-bottomleft: 4px;
|
||||||
|
border-top-left-radius: 4px;
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header nav a.admin{
|
||||||
|
-webkit-border-top-right-radius: 4px;
|
||||||
|
-webkit-border-bottom-right-radius: 4px;
|
||||||
|
-moz-border-radius-topright: 4px;
|
||||||
|
-moz-border-radius-bottomright: 4px;
|
||||||
|
border-top-right-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
header .search{ display: inline-block; float: right; margin-right: 10px}
|
||||||
|
|
||||||
|
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.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 span{width: 20px; height: 20px; display: inline-block; background: red; position: absolute; left: 8px; top: 14px;}
|
||||||
|
|
||||||
|
header nav a.dashboard.current span{ background-position: -163px -22px; }
|
||||||
|
header nav a.admin.current span{ background-position: -186px -22px;}
|
||||||
|
header nav a.project.current span{ background-position: -211px -23px;}
|
||||||
|
|
||||||
|
header nav a.project span{background: url('images.png') no-repeat -209px -1px; top: 15px}
|
||||||
|
|
||||||
|
|
||||||
|
header nav a span.current{top: 18px}
|
||||||
|
|
||||||
|
|
||||||
|
header nav {margin-left: 180px; display: inline-block; float: left;}
|
||||||
|
header nav a{float: left; background: #31363e; padding: 16px 20px 20px 34px; margin-right: 10px;
|
||||||
|
-webkit-border-top-left-radius: 5px;
|
||||||
|
-webkit-border-top-right-radius: 5px;
|
||||||
|
-moz-border-radius-topleft: 5px;
|
||||||
|
-moz-border-radius-topright: 5px;
|
||||||
|
border-top-left-radius: 5px;
|
||||||
|
border-top-right-radius: 5px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
header nav a.current{background: white; color: #333; text-shadow: none;}
|
||||||
|
*/
|
||||||
|
|
||||||
|
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-linear-gradient(#464c56 3.2%, #363c45);
|
||||||
|
background-image: -moz-linear-gradient(#464c56 3.2%, #363c45);
|
||||||
|
background-image: -o-linear-gradient(#464c56 3.2%, #363c45);
|
||||||
|
padding: 0 10px;
|
||||||
|
height: 44px;
|
||||||
|
}
|
||||||
|
header .login-top a{display: block;}
|
||||||
|
header .login-top a.pic{float: left; margin-right: 10px;
|
||||||
|
img{ height: 36px; width: 36px; border: 1px solid black}
|
||||||
|
}
|
||||||
|
header .login-top a.username{margin-bottom: 5px}
|
||||||
|
header .login-top a.logout{color: #ccc}
|
||||||
|
header{margin-bottom: 0; clear: both; }
|
||||||
|
|
||||||
|
.page-title{background-color: #f1f1f1;display: block; float: left; clear: both; width: 98%; padding: 1% 1%; border-bottom: 1px solid #ccc; box-shadow: 0 -1px 0 white inset; margin-bottom: 1.5em}
|
||||||
|
.page-title h1{font-size: 20px; width: 400px; margin: 0; padding-top: 8px }
|
||||||
|
.page-title a.grey-button{float: right;}
|
||||||
|
.right{float: right;}
|
||||||
|
|
||||||
|
/* Account box */
|
||||||
|
header .account-box{position: relative;z-index: 10000; top: -3px; width: 38px; height: 38px; font-size: 11px; float: right; display: block; cursor: pointer; }
|
||||||
|
header .account-box img{ border-radius: 4px; width: 38px; height: 38px; display: block; box-shadow: 0 1px 2px black}
|
||||||
|
header .account-box:after{
|
||||||
|
content: " ";
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
float: right;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid rgba(255, 255, 255, .1);
|
||||||
|
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: -moz-linear-gradient(top, rgba(255, 255, 255, .15), rgba(0, 0, 0, .25)), -moz-linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, .1) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
|
||||||
|
background: linear-gradient(top, rgba(255, 255, 255, .15), rgba(0, 0, 0, .25)), linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, .1) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
|
||||||
|
-webkit-background-origin: border-box;
|
||||||
|
-moz-background-origin: border;
|
||||||
|
background-origin: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.account-box:hover > .account-links, .account-box:hover > .arrow-up{display: block;}
|
||||||
|
header .account-links{background: white; display: none; border-radius: 5px; width: 100px; 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:hover{background-color: #f1f1f1; text-shadow: none; color: #333}
|
||||||
|
|
||||||
|
header .account-links a:first-child{
|
||||||
|
-webkit-border-top-left-radius: 5px;
|
||||||
|
-webkit-border-top-right-radius: 5px;
|
||||||
|
-moz-border-radius-topleft: 5px;
|
||||||
|
-moz-border-radius-topright: 5px;
|
||||||
|
border-top-left-radius: 5px;
|
||||||
|
border-top-right-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .account-links a:last-child{
|
||||||
|
-webkit-border-bottom-right-radius: 5px;
|
||||||
|
-webkit-border-bottom-left-radius: 5px;
|
||||||
|
-moz-border-radius-bottomright: 5px;
|
||||||
|
-moz-border-radius-bottomleft: 5px;
|
||||||
|
border-bottom-right-radius: 5px;
|
||||||
|
border-bottom-left-radius: 5px;
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
header a.arrow-up{
|
||||||
|
display: none;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
float: right;
|
||||||
|
margin-right: 26px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
border-left: 5px solid transparent;
|
||||||
|
border-right: 5px solid transparent;
|
||||||
|
|
||||||
|
border-bottom: 5px solid white;
|
||||||
|
}
|
||||||
|
/* eo Account Box */
|
||||||
|
input.search-input{float: left; text-shadow: none; width: 116px; background-image: url('icon-search.png') ; background-repeat: no-repeat; background-position: 10px; border-radius: 100px; border: 1px solid rgba(0,0,0,.7); box-shadow: 0 1px 0 rgba(255,255,255,.2), 0 2px 2px rgba(0,0,0,.4) inset ; background-color: #D2D5DA; background-color: rgba(255,255,255,.5); padding: 5px; padding-left: 26px; margin-top: 4px; margin-right: 10px }
|
||||||
|
input.search-input:focus{ background-color: white; width: 216px;}
|
||||||
|
input.search-input::-webkit-input-placeholder {color: #666}
|
||||||
|
/* eo Header */
|
||||||
|
|
||||||
|
|
||||||
|
h2.icon{position: relative; padding-left: 40px; float: left; }
|
||||||
|
/*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}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Dashboard Page */
|
||||||
|
html, body { height: 100%; }
|
||||||
|
|
||||||
|
body.dashboard-page h2.icon span{ background-position: 9px -69px; }
|
||||||
|
body.dashboard-page header{margin-bottom: 0}
|
||||||
|
body.dashboard-page .news-feed{padding-left: 1em; margin-right: 450px; margin-left: 1%}
|
||||||
|
body.dashboard-page .dashboard-content{ position: relative; float: left; width: 100%; height: 100%; }
|
||||||
|
body.dashboard-page .news-feed h2{float: left;}
|
||||||
|
body.dashboard-page aside{ width: 420px; float: right; right: 0; height: 100%; bottom: 0; position: absolute; background-color: #f7f7f7; border-left: 1px solid #ccc }
|
||||||
|
body.dashboard-page aside h4{margin: 0; border-bottom: 1px solid #ccc; padding: 10px 10px; font-size: 11px; font-weight: bold; text-transform: uppercase;}
|
||||||
|
body.dashboard-page aside h4 a.button-small{float: right; text-transform: none; border-radius: 4px; margin-right: 4%; margin-top: -4px; display: block;}
|
||||||
|
body.dashboard-page aside .project-list {list-style: none; margin: 0; padding: 0;}
|
||||||
|
body.dashboard-page aside .project-list li a {background: white; color: #{$blue_link}; display: block; border-bottom: 1px solid #eee; padding: 14px 6% 14px 14px;}
|
||||||
|
body.dashboard-page aside .project-list li a:hover {background: #f1f1f1}
|
||||||
|
body.dashboard-page aside .project-list li a:hover span.arrow{background-color: #E3E5EA;}
|
||||||
|
body.dashboard-page aside .project-list li a span.project-name{font-size: 14px; display: block; margin-bottom: 8px}
|
||||||
|
body.dashboard-page aside .project-list li a span.time{color: #666; font-weight: normal; font-size: 11px}
|
||||||
|
body.dashboard-page aside .project-list li a span.arrow{float: right; background: #E3E5EA; padding: 10px; border-radius: 5px; margin-top: 2px; text-shadow: none; color: #999}
|
||||||
|
body.dashboard-page .news-feed .project-updates {margin-bottom: 20px; display: block; width: 100%;}
|
||||||
|
body.dashboard-page .news-feed .project-updates .data{ padding: 0}
|
||||||
|
body.dashboard-page .news-feed .project-updates a.project-update {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
|
||||||
|
body.dashboard-page .news-feed .project-updates a.project-update:last-child{border-bottom: 0}
|
||||||
|
body.dashboard-page .news-feed .project-updates a.project-update img{float: left; margin-right: 10px;}
|
||||||
|
body.dashboard-page .news-feed .project-updates a.project-update span.update-title, .dashboard-page .news-feed .project-updates li a span.update-author{display: block;}
|
||||||
|
body.dashboard-page .news-feed .project-updates a.project-update span.update-title{margin-bottom: 10px}
|
||||||
|
body.dashboard-page .news-feed .project-updates a.project-update span.update-author{color: #999; font-weight: normal; font-style: italic;}
|
||||||
|
body.dashboard-page .news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;}
|
||||||
|
/* eo Dashboard Page */
|
||||||
|
|
||||||
|
|
||||||
|
.grey-button.right{margin-top: 20px}
|
||||||
|
|
||||||
|
/* 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 i.arrow{float: right;
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
top: 13px;
|
||||||
|
display: block;
|
||||||
|
background: url('images.png') no-repeat -97px -29px;
|
||||||
|
width: 4px;
|
||||||
|
height: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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 .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; border-left: 1px solid #ccc; float: left; display: inline-block; background: #f7f7f7; padding: 20px 0 20px 2%; margin: 0; }
|
||||||
|
body.project-page .project-sidebar input.text.git-url{ font-size: 12px; border-radius: 5px; color: #666; box-shadow: 0 1px 2px rgba(0,0,0,.2) inset; padding: 8px 14px 8px 30px; margin-bottom: 20px; background: white url('images.png') no-repeat 8px -40px;}
|
||||||
|
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:first-child{
|
||||||
|
-webkit-border-top-left-radius: 5px;
|
||||||
|
-moz-border-radius-topleft: 5px;
|
||||||
|
border-top-left-radius: 5px;
|
||||||
|
}
|
||||||
|
.project-page .project-sidebar aside a:last-child{
|
||||||
|
-webkit-border-bottom-left-radius: 5px;
|
||||||
|
-moz-border-radius-bottomleft: 5px;
|
||||||
|
border-bottom-left-radius: 5px;
|
||||||
|
}
|
||||||
|
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.current{background-color: #79c3e0; color: white; text-shadow: none; border-color: transparent}
|
||||||
|
body.project-page .project-content{ padding: 20px; display: block; margin-left: 250px }
|
||||||
|
body.project-page .project-content h2{ margin-top: 6px}
|
||||||
|
body.project-page .project-content .button.right{margin-left: 20px}
|
||||||
|
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 .fixed{position: fixed; }
|
||||||
|
|
||||||
|
/* Commit Page */
|
||||||
|
body.project-page.commits-page .commit-info{float: right;}
|
||||||
|
body.project-page.commits-page .commit-info data{
|
||||||
|
padding: 4px 10px;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
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-linear-gradient(#fff 19.2%, #f4f4f4);
|
||||||
|
background-image: -moz-linear-gradient(#fff 19.2%, #f4f4f4);
|
||||||
|
background-image: -o-linear-gradient(#fff 19.2%, #f4f4f4);
|
||||||
|
box-shadow: 0 -1px 0 white inset;
|
||||||
|
display: block;
|
||||||
|
border: 1px solid #eee;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
position: relative;
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
body.project-page.commits-page .commit-button i{
|
||||||
|
background: url('images.png') no-repeat -138px -27px;
|
||||||
|
width: 6px;
|
||||||
|
height: 9px;
|
||||||
|
float: right;
|
||||||
|
position: absolute;
|
||||||
|
top: 6px;
|
||||||
|
right: 5px;
|
||||||
|
}
|
||||||
|
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 a.commit{padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
|
||||||
|
body.project-page.commits-page .commits-date a.commit {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
|
||||||
|
body.project-page.commits-page .commits-date a.commit:last-child{border-bottom: 0}
|
||||||
|
body.project-page.commits-page .commits-date a.commit img{float: left; margin-right: 10px;}
|
||||||
|
body.project-page.commits-page .commits-date a.commit span.commit-title{display: block;}
|
||||||
|
body.project-page.commits-page .commits-date a.commit span.commit-title{margin-bottom: 10px}
|
||||||
|
body.project-page.commits-page .commits-date a.commit span.commit-author{color: #999; font-weight: normal; font-style: italic;}
|
||||||
|
body.project-page.commits-page .commits-date a.commit span.commit-author strong{font-weight: bold; font-style: normal;}
|
||||||
|
|
||||||
|
/* eo Commit Page */
|
||||||
|
|
||||||
|
/* eo Project Page */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Projects Page */
|
||||||
|
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 .title span{ font-weight: bold;}
|
||||||
|
body.projects-page .project-box{width: 100%; margin-bottom: 3em}
|
||||||
|
body.projects-page .browse-code{margin-right: 10px}
|
||||||
|
/* eo Projects Page */
|
||||||
|
|
||||||
|
|
||||||
|
/* ==|== 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 br { display: none; }
|
||||||
|
.hidden { display: none !important; visibility: hidden; }
|
||||||
|
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
|
||||||
|
.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
|
||||||
|
.invisible { visibility: hidden; }
|
||||||
|
.clearfix:before, .clearfix:after { content: ""; display: table; }
|
||||||
|
.clearfix:after { clear: both; }
|
||||||
|
.clearfix { zoom: 1; }
|
||||||
|
|
||||||
|
|
||||||
|
/* ==|== media queries ====================================================== */
|
||||||
|
|
||||||
|
@media only screen and (min-width: 480px) {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ==|== print styles ======================================================= */
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; }
|
||||||
|
a, a:visited { text-decoration: underline; }
|
||||||
|
a[href]:after { content: " (" attr(href) ")"; }
|
||||||
|
abbr[title]:after { content: " (" attr(title) ")"; }
|
||||||
|
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
|
||||||
|
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
|
||||||
|
thead { display: table-header-group; }
|
||||||
|
tr, img { page-break-inside: avoid; }
|
||||||
|
img { max-width: 100% !important; }
|
||||||
|
@page { margin: 0.5cm; }
|
||||||
|
p, h2, h3 { orphans: 3; widows: 3; }
|
||||||
|
h2, h3 { page-break-after: avoid; }
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
class Admin::MailerController < ApplicationController
|
class Admin::MailerController < ApplicationController
|
||||||
|
layout "admin"
|
||||||
before_filter :authenticate_user!
|
before_filter :authenticate_user!
|
||||||
before_filter :authenticate_admin!
|
before_filter :authenticate_admin!
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
class Admin::ProjectsController < ApplicationController
|
class Admin::ProjectsController < ApplicationController
|
||||||
|
layout "admin"
|
||||||
before_filter :authenticate_user!
|
before_filter :authenticate_user!
|
||||||
before_filter :authenticate_admin!
|
before_filter :authenticate_admin!
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
class Admin::TeamMembersController < ApplicationController
|
class Admin::TeamMembersController < ApplicationController
|
||||||
|
layout "admin"
|
||||||
before_filter :authenticate_user!
|
before_filter :authenticate_user!
|
||||||
before_filter :authenticate_admin!
|
before_filter :authenticate_admin!
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
class Admin::UsersController < ApplicationController
|
class Admin::UsersController < ApplicationController
|
||||||
|
layout "admin"
|
||||||
before_filter :authenticate_user!
|
before_filter :authenticate_user!
|
||||||
before_filter :authenticate_admin!
|
before_filter :authenticate_admin!
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,18 @@ class ApplicationController < ActionController::Base
|
||||||
render :file => File.join(Rails.root, "public", "gitosis_error"), :layout => false
|
render :file => File.join(Rails.root, "public", "gitosis_error"), :layout => false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
layout :layout_by_resource
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
def layout_by_resource
|
||||||
|
if devise_controller?
|
||||||
|
"devise"
|
||||||
|
else
|
||||||
|
"application"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def abilities
|
def abilities
|
||||||
@abilities ||= Six.new
|
@abilities ||= Six.new
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,7 @@ require "base64"
|
||||||
|
|
||||||
class CommitsController < ApplicationController
|
class CommitsController < ApplicationController
|
||||||
before_filter :project
|
before_filter :project
|
||||||
|
layout "project"
|
||||||
|
|
||||||
# Authorize
|
# Authorize
|
||||||
before_filter :add_project_abilities
|
before_filter :add_project_abilities
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class DashboardController < ApplicationController
|
class DashboardController < ApplicationController
|
||||||
def index
|
def index
|
||||||
@projects = current_user.projects.all
|
@projects = current_user.projects.all
|
||||||
|
@active_projects = @projects.select(&:last_activity_date).sort_by(&:last_activity_date).reverse
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,7 @@ class IssuesController < ApplicationController
|
||||||
before_filter :authenticate_user!
|
before_filter :authenticate_user!
|
||||||
before_filter :project
|
before_filter :project
|
||||||
before_filter :issue, :only => [:edit, :update, :destroy, :show]
|
before_filter :issue, :only => [:edit, :update, :destroy, :show]
|
||||||
|
layout "project"
|
||||||
|
|
||||||
# Authorize
|
# Authorize
|
||||||
before_filter :add_project_abilities
|
before_filter :add_project_abilities
|
||||||
|
@ -41,7 +42,7 @@ class IssuesController < ApplicationController
|
||||||
def create
|
def create
|
||||||
@issue = @project.issues.new(params[:issue])
|
@issue = @project.issues.new(params[:issue])
|
||||||
@issue.author = current_user
|
@issue.author = current_user
|
||||||
if @issue.save
|
if @issue.save && @issue.assignee != current_user
|
||||||
Notify.new_issue_email(@issue).deliver
|
Notify.new_issue_email(@issue).deliver
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
class KeysController < ApplicationController
|
class KeysController < ApplicationController
|
||||||
|
layout "profile"
|
||||||
respond_to :js
|
respond_to :js
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
class ProfileController < ApplicationController
|
class ProfileController < ApplicationController
|
||||||
|
layout "profile"
|
||||||
def show
|
def show
|
||||||
@user = current_user
|
@user = current_user
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class ProjectsController < ApplicationController
|
class ProjectsController < ApplicationController
|
||||||
before_filter :project, :except => [:index, :new, :create]
|
before_filter :project, :except => [:index, :new, :create]
|
||||||
|
layout :determine_layout
|
||||||
|
|
||||||
# Authorize
|
# Authorize
|
||||||
before_filter :add_project_abilities
|
before_filter :add_project_abilities
|
||||||
|
@ -152,4 +153,12 @@ class ProjectsController < ApplicationController
|
||||||
def project
|
def project
|
||||||
@project ||= Project.find_by_code(params[:id])
|
@project ||= Project.find_by_code(params[:id])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def determine_layout
|
||||||
|
if @project && !@project.new_record?
|
||||||
|
"project"
|
||||||
|
else
|
||||||
|
"application"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
class SnippetsController < ApplicationController
|
class SnippetsController < ApplicationController
|
||||||
before_filter :authenticate_user!
|
before_filter :authenticate_user!
|
||||||
before_filter :project
|
before_filter :project
|
||||||
|
layout "project"
|
||||||
|
|
||||||
# Authorize
|
# Authorize
|
||||||
before_filter :add_project_abilities
|
before_filter :add_project_abilities
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class TeamMembersController < ApplicationController
|
class TeamMembersController < ApplicationController
|
||||||
before_filter :project
|
before_filter :project
|
||||||
|
layout "project"
|
||||||
|
|
||||||
# Authorize
|
# Authorize
|
||||||
before_filter :add_project_abilities
|
before_filter :add_project_abilities
|
||||||
|
|
|
@ -28,6 +28,12 @@ module ApplicationHelper
|
||||||
else
|
else
|
||||||
"Never"
|
"Never"
|
||||||
end
|
end
|
||||||
|
rescue
|
||||||
|
"Never"
|
||||||
|
end
|
||||||
|
|
||||||
|
def markdown(text)
|
||||||
|
RDiscount.new(text, :autolink, :no_pseudo_protocols, :safelink, :smart, :filter_html).to_html.html_safe
|
||||||
end
|
end
|
||||||
|
|
||||||
def search_autocomplete_source
|
def search_autocomplete_source
|
||||||
|
|
|
@ -1,2 +1,30 @@
|
||||||
module DashboardHelper
|
module DashboardHelper
|
||||||
|
def dashboard_feed_path(project, object)
|
||||||
|
case object.class.name.to_s
|
||||||
|
when "Issue" then project_issues_path(project, project.issues.find(object.id))
|
||||||
|
when "Grit::Commit" then project_commit_path(project, project.repo.commits(object.id).first)
|
||||||
|
when "Note"
|
||||||
|
then
|
||||||
|
note = object
|
||||||
|
case note.noteable_type
|
||||||
|
when "Issue" then project_issue_path(project, note.noteable_id)
|
||||||
|
when "Snippet" then project_snippet_path(project, note.noteable_id)
|
||||||
|
when "Commit" then project_commit_path(project, :id => note.noteable_id)
|
||||||
|
else wall_project_path(project)
|
||||||
|
end
|
||||||
|
else "#"
|
||||||
|
end
|
||||||
|
rescue
|
||||||
|
"#"
|
||||||
|
end
|
||||||
|
|
||||||
|
def dashboard_feed_title(object)
|
||||||
|
title = case object.class.name.to_s
|
||||||
|
when "Note" then markdown(object.note)
|
||||||
|
when "Issue" then object.title
|
||||||
|
when "Grit::Commit" then object.safe_message
|
||||||
|
else ""
|
||||||
|
end
|
||||||
|
"[#{object.class.name}] #{truncate(sanitize(title, :tags => []), :length => 60)} "
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -119,6 +119,26 @@ class Project < ActiveRecord::Base
|
||||||
repo rescue false
|
repo rescue false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def last_activity
|
||||||
|
updates(1).first
|
||||||
|
rescue
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def last_activity_date
|
||||||
|
last_activity.try(:created_at)
|
||||||
|
end
|
||||||
|
|
||||||
|
def updates(n = 3)
|
||||||
|
[
|
||||||
|
fresh_commits(n),
|
||||||
|
issues.last(n),
|
||||||
|
notes.fresh.limit(n)
|
||||||
|
].compact.flatten.sort do |x, y|
|
||||||
|
y.created_at <=> x.created_at
|
||||||
|
end[0...n]
|
||||||
|
end
|
||||||
|
|
||||||
def commit(commit_id = nil)
|
def commit(commit_id = nil)
|
||||||
if commit_id
|
if commit_id
|
||||||
repo.commits(commit_id).first
|
repo.commits(commit_id).first
|
||||||
|
@ -131,16 +151,16 @@ class Project < ActiveRecord::Base
|
||||||
@heads ||= repo.heads
|
@heads ||= repo.heads
|
||||||
end
|
end
|
||||||
|
|
||||||
def fresh_commits
|
def fresh_commits(n = 10)
|
||||||
commits = heads.map do |h|
|
commits = heads.map do |h|
|
||||||
repo.commits(h.name, 10)
|
repo.commits(h.name, n)
|
||||||
end.flatten.uniq { |c| c.id }
|
end.flatten.uniq { |c| c.id }
|
||||||
|
|
||||||
commits.sort! do |x, y|
|
commits.sort! do |x, y|
|
||||||
y.committed_date <=> x.committed_date
|
y.committed_date <=> x.committed_date
|
||||||
end
|
end
|
||||||
|
|
||||||
commits[0..10]
|
commits[0...n]
|
||||||
end
|
end
|
||||||
|
|
||||||
def commits_since(date)
|
def commits_since(date)
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
%div.top_project_menu
|
|
||||||
%span= link_to "Users", admin_users_path, :style => "width:50px;", :class => controller.controller_name == "users" ? "current" : nil
|
|
||||||
%span= link_to "Projects", admin_projects_path, :style => "width:50px;", :class => controller.controller_name == "projects" ? "current" : nil
|
|
||||||
%span= link_to "Teams", admin_team_members_path, :style => "width:50px;", :class => controller.controller_name == "team_members" ? "current" : nil
|
|
||||||
%span= link_to "Emails", admin_emails_path, :style => "width:50px;", :class => controller.controller_name == "mailer" ? "current" : nil
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
%table
|
%table
|
||||||
%tr
|
%thead
|
||||||
%th Name
|
%th Name
|
||||||
%th Code
|
%th Code
|
||||||
%th Path
|
%th Path
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
- @admin_team_members.group_by(&:project).sort.each do |project, members|
|
- @admin_team_members.group_by(&:project).sort.each do |project, members|
|
||||||
%h3= link_to project.name, [:admin, project]
|
%h3= link_to project.name, [:admin, project]
|
||||||
%table
|
%table
|
||||||
%tr
|
%thead
|
||||||
%th Name
|
%th Name
|
||||||
%th Email
|
%th Email
|
||||||
%th Read
|
%th Read
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
%table
|
%table
|
||||||
%tr
|
%thead
|
||||||
%th Admin
|
%th Admin
|
||||||
%th Name
|
%th Name
|
||||||
%th Email
|
%th Email
|
||||||
|
|
|
@ -1,22 +1,25 @@
|
||||||
- @commits.group_by { |c| c.committed_date.to_date }.each do |day, commits|
|
- @commits.group_by { |c| c.committed_date.to_date }.each do |day, commits|
|
||||||
.day-commits-table
|
%div{ :class => "commits-date ui-box ui-box-small ui-box-big" }
|
||||||
.day-header
|
.day-commits-table
|
||||||
%h3= day.stamp("28 Aug, 2010")
|
%h3= day.stamp("28 Aug, 2010")
|
||||||
%ul
|
.data
|
||||||
- commits.each do |commit|
|
- commits.each do |commit|
|
||||||
%li{ :class => "commit", :url => project_commit_path(@project, :id => commit.id) }
|
%a{ :class => "commit", :href => project_commit_path(@project, :id => commit.id) }
|
||||||
- if commit.author.email
|
%span.commit-info
|
||||||
= image_tag gravatar_icon(commit.author.email), :class => "left", :width => 40, :style => "padding-right:5px;"
|
%data.commit-button
|
||||||
- else
|
= truncate(commit.id.to_s, :length => 16)
|
||||||
= image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;"
|
%i
|
||||||
%p
|
%data.commit-browse{ :onclick => "location.href='#{tree_project_path(@project, :commit_id => commit.id)}';return false;"}
|
||||||
%strong
|
Browse Code
|
||||||
= truncate(commit.safe_message, :length => 60)
|
- if commit.author.email
|
||||||
= link_to "Browse Code", tree_project_path(@project, :commit_id => commit.id), :class => "lite_button", :style => "float:right"
|
= image_tag gravatar_icon(commit.author.email), :class => "left", :width => 40, :style => "padding-right:5px;"
|
||||||
= link_to truncate(commit.id.to_s, :length => 16), project_commit_path(@project, :id => commit.id), :class => "lite_button", :style => "width:120px;float:right"
|
- else
|
||||||
%span
|
= image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;"
|
||||||
%span.author
|
%span.commit-title
|
||||||
= commit.author
|
%strong
|
||||||
= time_ago_in_words(commit.committed_date)
|
= truncate(commit.safe_message, :length => 60)
|
||||||
ago
|
%span.commit-author
|
||||||
|
%strong= commit.author
|
||||||
|
= time_ago_in_words(commit.committed_date)
|
||||||
|
ago
|
||||||
= more_commits_link if @commits.size > 99
|
= more_commits_link if @commits.size > 99
|
||||||
|
|
|
@ -1,15 +1,33 @@
|
||||||
%div
|
- content_for(:body_class, "project-page commits-page")
|
||||||
%h3
|
|
||||||
.left
|
.left
|
||||||
= form_tag project_commits_path(@project), :method => :get do
|
= form_tag project_commits_path(@project), :method => :get do
|
||||||
= select_tag "branch", options_for_select(@repo.heads.map(&:name), @branch), :onchange => "this.form.submit();", :class => "", :prompt => "Branches"
|
= select_tag "branch", options_for_select(@repo.heads.map(&:name), @branch), :onchange => "this.form.submit();", :class => "", :prompt => "Branches"
|
||||||
|
.left
|
||||||
.left.prepend-1
|
= form_tag project_commits_path(@project), :method => :get do
|
||||||
= form_tag project_commits_path(@project), :method => :get do
|
= select_tag "tag", options_for_select(@project.tags, @tag), :onchange => "this.form.submit();", :class => "", :prompt => "Tags"
|
||||||
= select_tag "tag", options_for_select(@project.tags, @tag), :onchange => "this.form.submit();", :class => "", :prompt => "Tags"
|
.clear
|
||||||
= text_field_tag "ssh", @project.url_to_repo, :class => ["ssh_project_url", "one_click_select"]
|
|
||||||
.clear
|
%br
|
||||||
|
|
||||||
|
|
||||||
|
-#%a.right.button{:href => "#"} Download
|
||||||
|
-#-if can? current_user, :admin_project, @project
|
||||||
|
%a.right.button.blue{:href => "#"} EDIT
|
||||||
|
%h2.icon
|
||||||
|
%span
|
||||||
|
%a.project-name{:href => "#"}
|
||||||
|
%i.arrow>
|
||||||
|
Project
|
||||||
|
|
||||||
|
%d
|
||||||
|
%a{:href => "#"}
|
||||||
|
= @ref
|
||||||
- if params[:path]
|
- if params[:path]
|
||||||
%h3{:style => "color:#555"} /#{params[:path]}
|
|
||||||
%div{:id => dom_id(@project)}
|
%d
|
||||||
= render "commits"
|
%a{:href => "#"}= params[:path].split("/").join(" / ")
|
||||||
|
|
||||||
|
|
||||||
|
%div{:id => dom_id(@project)}
|
||||||
|
= render "commits"
|
||||||
|
|
|
@ -16,7 +16,9 @@
|
||||||
%td= @commit.committed_date
|
%td= @commit.committed_date
|
||||||
%tr
|
%tr
|
||||||
%td Message
|
%td Message
|
||||||
%td= @commit.safe_message
|
%td
|
||||||
|
%pre.commit_message
|
||||||
|
= preserve @commit.safe_message
|
||||||
%tr
|
%tr
|
||||||
%td Tree
|
%td Tree
|
||||||
%td= link_to 'Browse Code', tree_project_path(@project, :commit_id => @commit.id)
|
%td= link_to 'Browse Code', tree_project_path(@project, :commit_id => @commit.id)
|
||||||
|
|
|
@ -1 +1,40 @@
|
||||||
timeline
|
- content_for(:body_class, "dashboard-page")
|
||||||
|
|
||||||
|
#dashboard-content.dashboard-content.content
|
||||||
|
%aside
|
||||||
|
%h4
|
||||||
|
- if current_user.can_create_project?
|
||||||
|
%a.button-small.button-green{:href => new_project_path} New Repository
|
||||||
|
Your Repositories
|
||||||
|
%ol.project-list
|
||||||
|
- @projects.each do |project|
|
||||||
|
%li
|
||||||
|
%a{:href => project_path(project)}
|
||||||
|
%span.arrow →
|
||||||
|
%span.project-name= project.name
|
||||||
|
%span.time
|
||||||
|
%strong Last activity:
|
||||||
|
= project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
|
||||||
|
#news-feed.news-feed
|
||||||
|
%h2.icon
|
||||||
|
%span>
|
||||||
|
Dashboard
|
||||||
|
- @active_projects.first(3).each do |project|
|
||||||
|
.project-box.project-updates.ui-box.ui-box-small.ui-box-big
|
||||||
|
%h3= project.name
|
||||||
|
.data
|
||||||
|
- project.updates.each do |update|
|
||||||
|
%a.project-update{:href => dashboard_feed_path(project, update)}
|
||||||
|
= image_tag gravatar_icon(update.author.email), :class => "left", :width => 40
|
||||||
|
%span.update-title
|
||||||
|
= dashboard_feed_title(update)
|
||||||
|
%span.update-author
|
||||||
|
%strong= update.author.name
|
||||||
|
authored
|
||||||
|
= time_ago_in_words(update.created_at)
|
||||||
|
ago
|
||||||
|
%br
|
||||||
|
/ .project-update
|
||||||
|
/ .project-updates
|
||||||
|
/ #news-feed
|
||||||
|
/ #dashboard-content
|
||||||
|
|
|
@ -1,15 +1,8 @@
|
||||||
<h2>Forgot your password?</h2>
|
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :class => "login-box", :method => :post }) do |f| %>
|
||||||
|
<%= image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo" %>
|
||||||
<div class="span-12 colborder">
|
<%= devise_error_messages! %>
|
||||||
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %>
|
<%= f.email_field :email, :placeholder => "Email", :class => "text top" %>
|
||||||
<%= devise_error_messages! %>
|
<br/>
|
||||||
|
<%= f.submit "Reset password", :class => "grey-button" %>
|
||||||
<div><%= f.label :email %><br />
|
<div class="right"> <%= render :partial => "devise/shared/links" %></div>
|
||||||
<%= f.email_field :email %></div>
|
<% end %>
|
||||||
|
|
||||||
<div><%= f.submit "Send me reset password instructions", :class => "lbutton vm" %></div>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<%= render :partial => "devise/shared/links" %>
|
|
||||||
</div>
|
|
||||||
|
|
|
@ -1,20 +1,12 @@
|
||||||
<h2>Sign in</h2>
|
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f| %>
|
||||||
|
<%= image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo" %>
|
||||||
|
<%= f.text_field :email, :class => "text top", :placeholder => "Email" %>
|
||||||
|
<%= f.password_field :password, :class => "text bottom", :placeholder => "Password" %>
|
||||||
|
|
||||||
<div class="span-12 colborder">
|
<% if devise_mapping.rememberable? -%>
|
||||||
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
|
<div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
|
||||||
<div><%= f.label :email %><br />
|
<% end -%>
|
||||||
<%= f.text_field :email %></div>
|
<br/>
|
||||||
|
<%= f.submit "Sign in", :class => "grey-button" %>
|
||||||
<div><%= f.label :password %><br />
|
<div class="right"> <%= render :partial => "devise/shared/links" %></div>
|
||||||
<%= f.password_field :password %></div>
|
<% end %>
|
||||||
|
|
||||||
<% if devise_mapping.rememberable? -%>
|
|
||||||
<div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
|
|
||||||
<% end -%>
|
|
||||||
<br/>
|
|
||||||
<div><%= f.submit "Sign in", :class => "lbutton vm" %></div>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<%= render :partial => "devise/shared/links" %>
|
|
||||||
</div>
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
%table.round-borders#issues-table
|
%table.round-borders#issues-table
|
||||||
%tr
|
%thead
|
||||||
- if can?(current_user, :admin_issue, @project) && !params[:f] || params[:f] == "0"
|
- if can?(current_user, :admin_issue, @project) && !params[:f] || params[:f] == "0"
|
||||||
%th
|
%th
|
||||||
%th Assignee
|
%th Assignee
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
%h2
|
%h2
|
||||||
= "Issue ##{@issue.id} - #{html_escape(@issue.title)}"
|
= "Issue ##{@issue.id} - #{html_escape(@issue.title)}"
|
||||||
.span-15
|
.left.width-65p
|
||||||
-#= simple_format html_escape(@issue.content)
|
-#= simple_format html_escape(@issue.content)
|
||||||
.issue_notes= render "notes/notes"
|
.issue_notes= render "notes/notes"
|
||||||
.span-8.right
|
.right.width-30p
|
||||||
.span-8
|
.span-8
|
||||||
- if @issue.closed
|
- if @issue.closed
|
||||||
%center.success Closed
|
%center.success Closed
|
||||||
|
|
|
@ -1,22 +1,43 @@
|
||||||
<div id="header-panel">
|
<!-- Page Header -->
|
||||||
|
<header>
|
||||||
|
<h1 class="logo">
|
||||||
|
<a href="/">GITLAB</a></h1>
|
||||||
|
<div class="login-top">
|
||||||
|
<%= link_to profile_path, :class => "pic" do %>
|
||||||
|
<%= image_tag gravatar_icon(current_user.email) %>
|
||||||
|
<% end %>
|
||||||
|
<%= link_to profile_path, :class => "username" do %>
|
||||||
|
<%= current_user.name %>
|
||||||
|
<% end %>
|
||||||
|
<%= link_to 'Logout', destroy_user_session_path, :class => "logout", :method => :delete %>
|
||||||
|
</div>
|
||||||
|
<div class="search">
|
||||||
|
<%= text_field_tag "search", nil, :placeholder => "Search", :class => "search-input" %>
|
||||||
|
</div>
|
||||||
|
<!-- .login-top -->
|
||||||
|
<nav>
|
||||||
|
<%= link_to dashboard_path, :class => current_page?(root_path) ? "current dashboard" : "dashboard" do %>
|
||||||
|
<span></span>Dashboard
|
||||||
|
<% end %>
|
||||||
|
<%= link_to projects_path, :class => current_page?(projects_path) ? "current project" : "project" do %>
|
||||||
|
<span></span>Projects
|
||||||
|
<% end %>
|
||||||
|
<%= link_to((current_user.is_admin? ? admin_root_path : "#"), :class => (admin_namespace? ? "current admin" : "admin")) do %>
|
||||||
|
<span></span>Admin
|
||||||
|
<% end %>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
<!-- eo Page Header -->
|
||||||
|
|
||||||
|
<div id="header-panel" style="display:none">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="span-24">
|
<div class="span-24">
|
||||||
<div class="span-10">
|
<div class="span-10">
|
||||||
<%#= image_tag "git.png", :height => 40, :class => "left" %>
|
|
||||||
<%#= link_to "gitlab", root_path, :id => "logo" %>
|
|
||||||
<span class="search-holder">
|
<span class="search-holder">
|
||||||
<%= text_field_tag "search", nil, :placeholder => "Search" %>
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<%= link_to truncate(@project.name, :length => 20), project_path(@project), :class => "current button" if @project && !@project.new_record? %>
|
<%= link_to truncate(@project.name, :length => 20), project_path(@project), :class => "current button" if @project && !@project.new_record? %>
|
||||||
<%= link_to 'Projects', projects_path, :class => current_page?(projects_path) ? "current button" : "button" %>
|
|
||||||
<%= link_to('Admin', admin_root_path, :class => admin_namespace? ? "current button" : "button" ) if current_user.is_admin? %>
|
|
||||||
<%= link_to profile_path, :class => ((controller.controller_name == "keys" || controller.controller_name == "profile") ? "current button" : "button") do %>
|
|
||||||
<%= image_tag gravatar_icon(current_user.email) %>
|
|
||||||
<%= current_user.name.split(" ").first %>
|
|
||||||
<% end %>
|
|
||||||
<%= link_to 'Logout', destroy_user_session_path, :style => "border-left: 1px solid #666;", :class => "button", :method => :delete %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
2
app/views/layouts/_page_title.html.haml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
- if content_for?(:page_title)
|
||||||
|
= yield :page_title
|
27
app/views/layouts/admin.html.haml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
!!!
|
||||||
|
%html
|
||||||
|
%head
|
||||||
|
%title
|
||||||
|
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
|
||||||
|
= stylesheet_link_tag "application"
|
||||||
|
= javascript_include_tag "application"
|
||||||
|
= csrf_meta_tags
|
||||||
|
%link{:href => "/assets/favicon.png", :rel => "icon", :type => "image/png"}/
|
||||||
|
= javascript_tag do
|
||||||
|
REQ_URI = "#{request.env["REQUEST_URI"]}";
|
||||||
|
REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
|
||||||
|
%body{ :class => content_for?(:body_class) ? yield(:body_class) : 'project-page', :id => yield(:boyd_id)}
|
||||||
|
#container
|
||||||
|
= render :partial => "layouts/flash"
|
||||||
|
= render :partial => "layouts/head_panel"
|
||||||
|
.project-container
|
||||||
|
.project-sidebar
|
||||||
|
.fixed
|
||||||
|
%aside
|
||||||
|
= link_to "Users", admin_users_path, :class => controller.controller_name == "users" ? "current" : nil
|
||||||
|
= link_to "Projects", admin_projects_path, :class => controller.controller_name == "projects" ? "current" : nil
|
||||||
|
= link_to "Teams", admin_team_members_path, :class => controller.controller_name == "team_members" ? "current" : nil
|
||||||
|
= link_to "Emails", admin_emails_path, :class => controller.controller_name == "mailer" ? "current" : nil
|
||||||
|
|
||||||
|
.project-content
|
||||||
|
= yield
|
|
@ -3,10 +3,10 @@
|
||||||
%head
|
%head
|
||||||
%title
|
%title
|
||||||
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
|
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
|
||||||
= stylesheet_link_tag 'blueprint/screen', :media => "screen, projection"
|
-#= stylesheet_link_tag 'blueprint/screen', :media => "screen, projection"
|
||||||
= stylesheet_link_tag 'blueprint/print', :media => "print"
|
-#= stylesheet_link_tag 'blueprint/print', :media => "print"
|
||||||
= stylesheet_link_tag 'blueprint/plugins/buttons/screen', :media => "screen, projection"
|
-#= stylesheet_link_tag 'blueprint/plugins/buttons/screen', :media => "screen, projection"
|
||||||
= stylesheet_link_tag 'blueprint/plugins/link-icons/screen', :media => "screen, projection"
|
-#= stylesheet_link_tag 'blueprint/plugins/link-icons/screen', :media => "screen, projection"
|
||||||
= stylesheet_link_tag "application"
|
= stylesheet_link_tag "application"
|
||||||
= javascript_include_tag "application"
|
= javascript_include_tag "application"
|
||||||
= csrf_meta_tags
|
= csrf_meta_tags
|
||||||
|
@ -14,15 +14,10 @@
|
||||||
= javascript_tag do
|
= javascript_tag do
|
||||||
REQ_URI = "#{request.env["REQUEST_URI"]}";
|
REQ_URI = "#{request.env["REQUEST_URI"]}";
|
||||||
REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
|
REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
|
||||||
%body#thebody
|
%body{ :class => yield(:body_class), :id => yield(:boyd_id)}
|
||||||
= render :partial => "layouts/flash"
|
#container
|
||||||
- if user_signed_in?
|
= render :partial => "layouts/flash"
|
||||||
= render :partial => "layouts/head_panel"
|
= render :partial => "layouts/head_panel"
|
||||||
.top_bar.container
|
%div{ :id => "main", :role => "main", :class => "container_4" }
|
||||||
= render :partial => "projects/top_menu" if @project && !@project.new_record?
|
= render :partial => "layouts/page_title"
|
||||||
= render :partial => "projects/projects_top_menu" if (controller.controller_name == "projects" && ["index", "new", "create"].include?(controller.action_name)) && !admin_namespace?
|
|
||||||
= render :partial => "profile/top_menu" if ["keys", "profile"].include?(controller.controller_name)
|
|
||||||
= render :partial => "admin/top_menu" if admin_namespace?
|
|
||||||
#content-container.container
|
|
||||||
.span-24
|
|
||||||
= yield
|
= yield
|
||||||
|
|
15
app/views/layouts/devise.html.haml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
!!!
|
||||||
|
%html
|
||||||
|
%head
|
||||||
|
%title
|
||||||
|
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
|
||||||
|
= stylesheet_link_tag "application"
|
||||||
|
= javascript_include_tag "application"
|
||||||
|
= csrf_meta_tags
|
||||||
|
%link{:href => "/assets/favicon.png", :rel => "icon", :type => "image/png"}/
|
||||||
|
= javascript_tag do
|
||||||
|
REQ_URI = "#{request.env["REQUEST_URI"]}";
|
||||||
|
REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
|
||||||
|
%body.login-page
|
||||||
|
= render :partial => "layouts/flash"
|
||||||
|
= yield
|
29
app/views/layouts/profile.html.haml
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
!!!
|
||||||
|
%html
|
||||||
|
%head
|
||||||
|
%title
|
||||||
|
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
|
||||||
|
= stylesheet_link_tag "application"
|
||||||
|
= javascript_include_tag "application"
|
||||||
|
= csrf_meta_tags
|
||||||
|
%link{:href => "/assets/favicon.png", :rel => "icon", :type => "image/png"}/
|
||||||
|
= javascript_tag do
|
||||||
|
REQ_URI = "#{request.env["REQUEST_URI"]}";
|
||||||
|
REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
|
||||||
|
%body{ :class => content_for?(:body_class) ? yield(:body_class) : 'project-page', :id => yield(:boyd_id)}
|
||||||
|
#container
|
||||||
|
= render :partial => "layouts/flash"
|
||||||
|
= render :partial => "layouts/head_panel"
|
||||||
|
.project-container
|
||||||
|
.project-sidebar
|
||||||
|
.fixed
|
||||||
|
%aside
|
||||||
|
= 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 keys_path, :class => controller.controller_name == "keys" ? "current" : nil do
|
||||||
|
Keys
|
||||||
|
- unless current_user.keys.empty?
|
||||||
|
%span{ :class => "number" }= current_user.keys.count
|
||||||
|
|
||||||
|
.project-content
|
||||||
|
= yield
|
45
app/views/layouts/project.html.haml
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
!!!
|
||||||
|
%html
|
||||||
|
%head
|
||||||
|
%title
|
||||||
|
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
|
||||||
|
= stylesheet_link_tag "application"
|
||||||
|
= javascript_include_tag "application"
|
||||||
|
= csrf_meta_tags
|
||||||
|
%link{:href => "/assets/favicon.png", :rel => "icon", :type => "image/png"}/
|
||||||
|
= javascript_tag do
|
||||||
|
REQ_URI = "#{request.env["REQUEST_URI"]}";
|
||||||
|
REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
|
||||||
|
%body{ :class => content_for?(:body_class) ? yield(:body_class) : 'project-page', :id => yield(:boyd_id)}
|
||||||
|
#container
|
||||||
|
= render :partial => "layouts/flash"
|
||||||
|
= render :partial => "layouts/head_panel"
|
||||||
|
.project-container
|
||||||
|
.project-sidebar
|
||||||
|
.fixed
|
||||||
|
%input.git-url.text{:id => "", :name => "", :readonly => "", :type => "text", :value => @project.url_to_repo}
|
||||||
|
%aside
|
||||||
|
= link_to "History", project_path(@project), :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil
|
||||||
|
= link_to "Tree", tree_project_path(@project), :class => current_page?(:controller => "projects", :action => "tree", :id => @project) ? "current" : nil
|
||||||
|
= link_to "Commits", project_commits_path(@project), :class => current_page?(:controller => "commits", :action => "index", :project_id => @project) ? "current" : nil
|
||||||
|
= link_to team_project_path(@project), :class => (current_page?(:controller => "projects", :action => "team", :id => @project) || controller.controller_name == "team_members") ? "current" : nil do
|
||||||
|
Team
|
||||||
|
- if @project.users_projects.count > 0
|
||||||
|
%span{ :class => "number" }= @project.users_projects.count
|
||||||
|
= link_to project_issues_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do
|
||||||
|
Issues
|
||||||
|
- if @project.issues.opened.count > 0
|
||||||
|
%span{ :class => "number" }= @project.issues.opened.count
|
||||||
|
= link_to wall_project_path(@project), :class => current_page?(:controller => "projects", :action => "wall", :id => @project) ? "current" : nil do
|
||||||
|
Wall
|
||||||
|
- if @project.common_notes.count > 0
|
||||||
|
%span{ :class => "number" }= @project.common_notes.count
|
||||||
|
= link_to project_snippets_path(@project), :class => (controller.controller_name == "snippets") ? "current" : nil do
|
||||||
|
Snippets
|
||||||
|
- if @project.snippets.count > 0
|
||||||
|
%span{ :class => "number" }= @project.snippets.non_expired.count
|
||||||
|
- if @commit
|
||||||
|
= link_to truncate(commit_name(@project,@commit), :length => 15), project_commit_path(@project, :id => @commit.id), :class => current_page?(:controller => "commits", :action => "show", :project_id => @project, :id => @commit.id) ? "current" : nil
|
||||||
|
|
||||||
|
.project-content
|
||||||
|
= yield
|
|
@ -2,7 +2,7 @@
|
||||||
%div.note_author
|
%div.note_author
|
||||||
= image_tag gravatar_icon(note.author.email), :class => "left", :width => 40, :style => "padding-right:5px;"
|
= image_tag gravatar_icon(note.author.email), :class => "left", :width => 40, :style => "padding-right:5px;"
|
||||||
%div.note_content.left
|
%div.note_content.left
|
||||||
= simple_format(html_escape(note.note))
|
= markdown(note.note)
|
||||||
- if note.attachment.url
|
- if note.attachment.url
|
||||||
Attachment:
|
Attachment:
|
||||||
= link_to note.attachment_identifier, note.attachment.url, :target => "_blank"
|
= link_to note.attachment_identifier, note.attachment.url, :target => "_blank"
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
%div.top_project_menu
|
|
||||||
%span= link_to "Profile", profile_path, :class => current_page?(:controller => "profile", :action => :show) ? "current" : nil
|
|
||||||
%span= link_to "Password", profile_password_path, :style => "width:70px;", :class => current_page?(:controller => "profile", :action => :password) ? "current" : nil
|
|
||||||
%span= link_to "Keys", keys_path, :class => controller.controller_name == "keys" ? "current" : nil
|
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
%p{:style => "margin-bottom: 3px;"}
|
%p{:style => "margin-bottom: 3px;"}
|
||||||
%span.author
|
%span.author
|
||||||
= note.author.name
|
= note.author.name
|
||||||
= link_to truncate(note.note, :length => 200), link_to_item + "#note_#{note.id}"
|
= link_to markdown(truncate(note.note, :length => 200)), link_to_item + "#note_#{note.id}"
|
||||||
- if note.attachment.url
|
- if note.attachment.url
|
||||||
%br
|
%br
|
||||||
Attachment:
|
Attachment:
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
%div#new-member-holder
|
%div#new-member-holder
|
||||||
= link_to "Add new", new_project_team_member_path(@project), :remote => true, :class => "lbutton vm"
|
= link_to "Add new", new_project_team_member_path(@project), :remote => true, :class => "lbutton vm"
|
||||||
%table.round-borders#team-table
|
%table.round-borders#team-table
|
||||||
%tr
|
%thead
|
||||||
%th Name
|
%th Name
|
||||||
%th Email
|
%th Email
|
||||||
%th Web
|
%th Web
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
- @projects.in_groups_of(3, false) do |projects|
|
- @projects.in_groups_of(3, false) do |projects|
|
||||||
- projects.each_with_index do |project, i|
|
- projects.each_with_index do |project, i|
|
||||||
%div{ :class => "project_thumb round-borders", :style => i == 2 ? "" : "margin-right:30px;" }
|
%div.grid_1
|
||||||
%div{ :class => "project", :url => project_path(project) }
|
%div{ :class => "project-box ui-box ui-box-big" }
|
||||||
%h2
|
= link_to project_path(project) do
|
||||||
= image_tag gravatar_icon(project.name), :class => "left", :width => 40, :style => "padding-right:5px;"
|
%h3= project.name
|
||||||
= link_to ("/" + project.code), project_path(project), :style => "text-decoration:none"
|
.data
|
||||||
%p= project.name
|
%p.title.repository
|
||||||
%p= project.url_to_repo
|
%span Repository:
|
||||||
-#%p
|
= project.url_to_repo
|
||||||
Commit –
|
%p.title.activity
|
||||||
= last_commit(project)
|
%span Last Activity:
|
||||||
%hr
|
- last_note = project.notes.last
|
||||||
= link_to "Browse Code", tree_project_path(project), :class => "lbutton"
|
= last_note ? last_note.created_at.stamp("24 Aug, 2011") : "Never"
|
||||||
= link_to "Commits", project_commits_path(project), :class => "lbutton", :style => "float:right;width:80px;"
|
.buttons
|
||||||
.clear
|
%a.browse-code.button.yellow{:href => tree_project_path(project)} Browse code
|
||||||
|
%a.commits.button.green{:href => project_commits_path(project)} Commits
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
%div.top_project_menu
|
%div.top_project_menu
|
||||||
-#%span= link_to @project.code.capitalize, @project, :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil
|
|
||||||
- if @project.repo_exists?
|
- if @project.repo_exists?
|
||||||
%span= link_to image_tag("home.png", :width => 20), project_path(@project), :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil
|
%span= link_to image_tag("home.png", :width => 20), project_path(@project), :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil
|
||||||
%span= link_to "Tree", tree_project_path(@project), :class => current_page?(:controller => "projects", :action => "tree", :id => @project) ? "current" : nil
|
%span= link_to "Tree", tree_project_path(@project), :class => current_page?(:controller => "projects", :action => "tree", :id => @project) ? "current" : nil
|
||||||
|
|
|
@ -1,31 +1,45 @@
|
||||||
%h3
|
.left
|
||||||
.left
|
= form_tag tree_project_path(@project), :method => :get do
|
||||||
= form_tag tree_project_path(@project), :method => :get do
|
= select_tag "branch", options_for_select(@repo.heads.map(&:name), @branch), :onchange => "this.form.submit();", :class => "", :prompt => "Branches"
|
||||||
= select_tag "branch", options_for_select(@repo.heads.map(&:name), @branch), :onchange => "this.form.submit();", :class => "", :prompt => "Branches"
|
.left
|
||||||
|
= form_tag tree_project_path(@project), :method => :get do
|
||||||
.left.prepend-1
|
= select_tag "tag", options_for_select(@project.tags, @tag), :onchange => "this.form.submit();", :class => "", :prompt => "Tags"
|
||||||
= form_tag tree_project_path(@project), :method => :get do
|
.clear
|
||||||
= select_tag "tag", options_for_select(@project.tags, @tag), :onchange => "this.form.submit();", :class => "", :prompt => "Tags"
|
|
||||||
= text_field_tag "ssh", @project.url_to_repo, :class => ["ssh_project_url","one_click_select"]
|
%br
|
||||||
.clear
|
|
||||||
|
-#%a.right.button{:href => "#"} Download
|
||||||
|
-#-if can? current_user, :admin_project, @project
|
||||||
|
%a.right.button.blue{:href => "#"} EDIT
|
||||||
|
#tree-breadcrumbs
|
||||||
|
%h2.icon
|
||||||
|
%span
|
||||||
|
= link_to tree_project_path(@project, :path => nil, :commit_id => @commit.try(:id)), :remote => true, :class => 'project-name' do
|
||||||
|
%i.arrow>
|
||||||
|
= @project.name
|
||||||
|
|
||||||
|
%d
|
||||||
|
%a{:href => "#"}
|
||||||
|
= @ref
|
||||||
|
|
||||||
|
- if params[:path]
|
||||||
|
- part_path = ""
|
||||||
|
- params[:path].split("\/").each do |part|
|
||||||
|
- part_path = File.join(part_path, part) unless part_path.empty?
|
||||||
|
- if part_path.empty?
|
||||||
|
- part_path = part
|
||||||
|
\/
|
||||||
|
= link_to truncate(part, :length => 40), tree_file_project_path(@project, :path => part_path, :commit_id => @commit.try(:id), :branch => @branch, :tag => @tag), :remote => :true
|
||||||
|
|
||||||
|
.clear
|
||||||
|
|
||||||
%h3#tree-breadcrumbs
|
|
||||||
= link_to @project.name, tree_project_path(@project, :path => nil, :commit_id => @commit.try(:id)), :remote => true
|
|
||||||
- if params[:path]
|
|
||||||
- part_path = ""
|
|
||||||
- params[:path].split("\/").each do |part|
|
|
||||||
- part_path = File.join(part_path, part) unless part_path.empty?
|
|
||||||
- if part_path.empty?
|
|
||||||
- part_path = part
|
|
||||||
\/
|
|
||||||
= link_to truncate(part, :length => 40), tree_file_project_path(@project, :path => part_path, :commit_id => @commit.try(:id), :branch => @branch, :tag => @tag), :remote => :true
|
|
||||||
#tree-content-holder
|
#tree-content-holder
|
||||||
- if tree.is_a?(Grit::Blob)
|
- if tree.is_a?(Grit::Blob)
|
||||||
= render :partial => "projects/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree }
|
= render :partial => "projects/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree }
|
||||||
- else
|
- else
|
||||||
- contents = tree.contents
|
- contents = tree.contents
|
||||||
%table#tree-slider.round-borders
|
%table#tree-slider.round-borders
|
||||||
%tr
|
%thead
|
||||||
%th Name
|
%th Name
|
||||||
%th Last Update
|
%th Last Update
|
||||||
%th
|
%th
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
|
- content_for(:body_class, "projects-page")
|
||||||
|
- content_for(:page_title) do
|
||||||
|
.grid_4
|
||||||
|
- if current_user.can_create_project?
|
||||||
|
%a.grey-button.right{:href => new_project_path} Create new project
|
||||||
|
%h2.icon
|
||||||
|
%span
|
||||||
|
Projects
|
||||||
|
|
||||||
- unless @projects.empty?
|
- unless @projects.empty?
|
||||||
%div{:class => "tile", :style => view_mode_style("tile")}
|
%div{:class => "tile", :style => view_mode_style("tile")}
|
||||||
= render "tile"
|
= render "tile"
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
= label_tag "week_view","Week"
|
= label_tag "week_view","Week"
|
||||||
.clear
|
.clear
|
||||||
%hr
|
%hr
|
||||||
.span-11
|
.left.width-49p
|
||||||
%h3 Commits
|
%h3 Commits
|
||||||
=render "projects/recent_commits"
|
=render "projects/recent_commits"
|
||||||
|
|
||||||
.span-11.right
|
.right.width-49p
|
||||||
%h3 Talk
|
%h3 Talk
|
||||||
=render "projects/recent_messages"
|
=render "projects/recent_messages"
|
||||||
|
|
||||||
|
|
|
@ -29,4 +29,5 @@ Gitlab::Application.configure do
|
||||||
config.assets.debug = true
|
config.assets.debug = true
|
||||||
|
|
||||||
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
|
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
|
||||||
|
config.action_mailer.delivery_method = :letter_opener
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,6 +15,7 @@ Gitlab::Application.routes.draw do
|
||||||
put "profile/password", :to => "profile#password_update"
|
put "profile/password", :to => "profile#password_update"
|
||||||
put "profile/edit", :to => "profile#social_update"
|
put "profile/edit", :to => "profile#social_update"
|
||||||
get "profile", :to => "profile#show"
|
get "profile", :to => "profile#show"
|
||||||
|
get "dashboard", :to => "dashboard#index"
|
||||||
#get "profile/:id", :to => "profile#show"
|
#get "profile/:id", :to => "profile#show"
|
||||||
|
|
||||||
resources :projects, :only => [:new, :create, :index]
|
resources :projects, :only => [:new, :create, :index]
|
||||||
|
|
|
@ -8,4 +8,8 @@ module CommitExt
|
||||||
rescue
|
rescue
|
||||||
"-- invalid encoding for commit message"
|
"-- invalid encoding for commit message"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def created_at
|
||||||
|
committed_date
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
BIN
public/apple-touch-icon-114x114-precomposed.png
Executable file
After Width: | Height: | Size: 1 KiB |
BIN
public/apple-touch-icon-57x57-precomposed.png
Executable file
After Width: | Height: | Size: 640 B |
BIN
public/apple-touch-icon-72x72-precomposed.png
Executable file
After Width: | Height: | Size: 747 B |
BIN
public/apple-touch-icon-precomposed.png
Executable file
After Width: | Height: | Size: 640 B |
BIN
public/apple-touch-icon.png
Executable file
After Width: | Height: | Size: 640 B |
BIN
public/favicon.ico
Normal file → Executable file
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 1.1 KiB |
|
@ -62,6 +62,51 @@ describe Project do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "updates" do
|
||||||
|
let(:project) { Factory :project }
|
||||||
|
|
||||||
|
before do
|
||||||
|
@issue = Factory :issue,
|
||||||
|
:project => project,
|
||||||
|
:author => Factory(:user),
|
||||||
|
:assignee => Factory(:user)
|
||||||
|
|
||||||
|
@note = Factory :note,
|
||||||
|
:project => project,
|
||||||
|
:author => Factory(:user)
|
||||||
|
|
||||||
|
@commit = project.fresh_commits(1).first
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "return commit, note & issue" do
|
||||||
|
it { project.updates(3).count.should == 3 }
|
||||||
|
it { project.updates(3).last.id.should == @commit.id }
|
||||||
|
it { project.updates(3).include?(@issue).should be_true }
|
||||||
|
it { project.updates(3).include?(@note).should be_true }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "last_activity" do
|
||||||
|
let(:project) { Factory :project }
|
||||||
|
|
||||||
|
before do
|
||||||
|
@note = Factory :note,
|
||||||
|
:project => project,
|
||||||
|
:author => Factory(:user)
|
||||||
|
end
|
||||||
|
|
||||||
|
it { project.last_activity.should == @note }
|
||||||
|
it { project.last_activity_date.to_s.should == @note.created_at.to_s }
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "fresh commits" do
|
||||||
|
let(:project) { Factory :project }
|
||||||
|
|
||||||
|
it { project.fresh_commits(3).count.should == 3 }
|
||||||
|
it { project.fresh_commits.first.id.should == "2fb376f61875b58bceee0492e270e9c805294b1a" }
|
||||||
|
it { project.fresh_commits.last.id.should == "0dac878dbfe0b9c6104a87d65fe999149a8d862c" }
|
||||||
|
end
|
||||||
|
|
||||||
describe "Git methods" do
|
describe "Git methods" do
|
||||||
let(:project) { Factory :project }
|
let(:project) { Factory :project }
|
||||||
|
|
||||||
|
|
30
spec/requests/dashboard_spec.rb
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe "Dashboard" do
|
||||||
|
before { login_as :user }
|
||||||
|
|
||||||
|
describe "GET /dashboard" do
|
||||||
|
before do
|
||||||
|
@project = Factory :project
|
||||||
|
@project.add_access(@user, :read, :write)
|
||||||
|
visit dashboard_path
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should be on dashboard page" do
|
||||||
|
current_path.should == dashboard_path
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should have projects panel" do
|
||||||
|
within ".project-list" do
|
||||||
|
page.should have_content(@project.name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should have news feed" do
|
||||||
|
within "#news-feed" do
|
||||||
|
page.should have_content(@project.commit.author.name)
|
||||||
|
page.should have_content(@project.commit.safe_message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -5,7 +5,10 @@ describe "Issues" do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
login_as :user
|
login_as :user
|
||||||
|
@user2 = Factory :user
|
||||||
|
|
||||||
project.add_access(@user, :read, :write)
|
project.add_access(@user, :read, :write)
|
||||||
|
project.add_access(@user2, :read, :write)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /issues" do
|
describe "GET /issues" do
|
||||||
|
@ -49,20 +52,20 @@ describe "Issues" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should show only open" do
|
it "should show only open" do
|
||||||
should have_content(@issue.title)
|
should have_content(@issue.title[0..25])
|
||||||
should have_no_content(@closed_issue.title)
|
should have_no_content(@closed_issue.title)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should show only closed" do
|
it "should show only closed" do
|
||||||
choose "closed_issues"
|
choose "closed_issues"
|
||||||
should have_no_content(@issue.title)
|
should have_no_content(@issue.title)
|
||||||
should have_content(@closed_issue.title)
|
should have_content(@closed_issue.title[0..25])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should show all" do
|
it "should show all" do
|
||||||
choose "all_issues"
|
choose "all_issues"
|
||||||
should have_content(@issue.title)
|
should have_content(@issue.title[0..25])
|
||||||
should have_content(@closed_issue.title)
|
should have_content(@closed_issue.title[0..25])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -78,35 +81,66 @@ describe "Issues" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "fill in" do
|
describe "fill in" do
|
||||||
before do
|
describe 'assign to me' do
|
||||||
fill_in "issue_title", :with => "bug 345"
|
before do
|
||||||
click_link "Select user"
|
fill_in "issue_title", :with => "bug 345"
|
||||||
click_link @user.name
|
click_link "Select user"
|
||||||
|
within "#issue_assignee_id-menu" do
|
||||||
|
click_link @user.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it { expect { click_button "Save" }.to change {Issue.count}.by(1) }
|
||||||
|
|
||||||
|
it "should add new issue to table" do
|
||||||
|
click_button "Save"
|
||||||
|
|
||||||
|
page.should_not have_content("Add new issue")
|
||||||
|
page.should have_content @user.name
|
||||||
|
page.should have_content "bug 345"
|
||||||
|
page.should have_content project.name
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should call send mail" do
|
||||||
|
Notify.should_not_receive(:new_issue_email)
|
||||||
|
click_button "Save"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect { click_button "Save" }.to change {Issue.count}.by(1) }
|
describe 'assign to other' do
|
||||||
|
before do
|
||||||
|
fill_in "issue_title", :with => "bug 345"
|
||||||
|
click_link "Select user"
|
||||||
|
within "#issue_assignee_id-menu" do
|
||||||
|
click_link @user2.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "should add new issue to table" do
|
it { expect { click_button "Save" }.to change {Issue.count}.by(1) }
|
||||||
click_button "Save"
|
|
||||||
|
|
||||||
page.should_not have_content("Add new issue")
|
it "should add new issue to table" do
|
||||||
page.should have_content @user.name
|
click_button "Save"
|
||||||
page.should have_content "bug 345"
|
|
||||||
page.should have_content project.name
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should call send mail" do
|
page.should_not have_content("Add new issue")
|
||||||
Notify.should_receive(:new_issue_email).and_return(stub(:deliver => true))
|
page.should have_content @user2.name
|
||||||
click_button "Save"
|
page.should have_content "bug 345"
|
||||||
end
|
page.should have_content project.name
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should call send mail" do
|
||||||
|
Notify.should_receive(:new_issue_email).and_return(stub(:deliver => true))
|
||||||
|
click_button "Save"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should send valid email to user with email & password" do
|
||||||
|
click_button "Save"
|
||||||
|
issue = Issue.last
|
||||||
|
email = ActionMailer::Base.deliveries.last
|
||||||
|
email.subject.should have_content("New Issue was created")
|
||||||
|
email.body.should have_content(issue.title)
|
||||||
|
email.body.should have_content(issue.assignee.name)
|
||||||
|
end
|
||||||
|
|
||||||
it "should send valid email to user with email & password" do
|
|
||||||
click_button "Save"
|
|
||||||
issue = Issue.last
|
|
||||||
email = ActionMailer::Base.deliveries.last
|
|
||||||
email.subject.should have_content("New Issue was created")
|
|
||||||
email.body.should have_content(issue.title)
|
|
||||||
email.body.should have_content(issue.assignee.name)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,14 +13,14 @@ describe "Projects" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should have link to new project" do
|
it "should have link to new project" do
|
||||||
page.should have_content("New Project")
|
page.should have_content("Create new project")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /projects/new" do
|
describe "GET /projects/new" do
|
||||||
before do
|
before do
|
||||||
visit projects_path
|
visit projects_path
|
||||||
click_link "New Project"
|
click_link "Create new project"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should be correct path" do
|
it "should be correct path" do
|
||||||
|
|
|
@ -12,15 +12,15 @@ module LoginMacros
|
||||||
end
|
end
|
||||||
|
|
||||||
visit new_user_session_path
|
visit new_user_session_path
|
||||||
fill_in "Email", :with => @user.email
|
fill_in "user_email", :with => @user.email
|
||||||
fill_in "Password", :with => "123456"
|
fill_in "user_password", :with => "123456"
|
||||||
click_button "Sign in"
|
click_button "Sign in"
|
||||||
end
|
end
|
||||||
|
|
||||||
def login_with(user)
|
def login_with(user)
|
||||||
visit new_user_session_path
|
visit new_user_session_path
|
||||||
fill_in "Email", :with => user.email
|
fill_in "user_email", :with => user.email
|
||||||
fill_in "Password", :with => "123456"
|
fill_in "user_password", :with => "123456"
|
||||||
click_button "Sign in"
|
click_button "Sign in"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -445,7 +445,7 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
|
||||||
* http://docs.jquery.com/UI/Dialog#theming
|
* http://docs.jquery.com/UI/Dialog#theming
|
||||||
*/
|
*/
|
||||||
.ui-dialog { position: absolute; padding: 0; width: 300px; overflow: hidden; }
|
.ui-dialog { position: absolute; padding: 0; width: 300px; overflow: hidden; }
|
||||||
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; background: #333; color:#eaeaea }
|
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; background: #F7F7F7; color:#555; }
|
||||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0;}
|
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0;}
|
||||||
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; background:#eaeaea}
|
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; background:#eaeaea}
|
||||||
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
||||||
|
|