Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
iv
gitlab-ce
Commits
12782adf
Commit
12782adf
authored
Nov 15, 2011
by
gitlabhq
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of dev.gitlabhq.com:gitlabhq
parents
6b9f221a
d63f04ab
Changes
66
Hide whitespace changes
Inline
Side-by-side
Showing
66 changed files
with
493 additions
and
440 deletions
+493
-440
app/assets/javascripts/application.js
app/assets/javascripts/application.js
+7
-5
app/assets/javascripts/commits.js
app/assets/javascripts/commits.js
+10
-12
app/assets/javascripts/note.js
app/assets/javascripts/note.js
+12
-15
app/assets/javascripts/projects.js
app/assets/javascripts/projects.js
+0
-1
app/assets/stylesheets/application.css
app/assets/stylesheets/application.css
+4
-3
app/assets/stylesheets/issues.css.scss
app/assets/stylesheets/issues.css.scss
+3
-4
app/assets/stylesheets/notes.css.scss
app/assets/stylesheets/notes.css.scss
+0
-1
app/assets/stylesheets/projects.css.scss
app/assets/stylesheets/projects.css.scss
+20
-22
app/assets/stylesheets/style.scss
app/assets/stylesheets/style.scss
+215
-244
app/assets/stylesheets/tags.css.css
app/assets/stylesheets/tags.css.css
+5
-7
app/controllers/application_controller.rb
app/controllers/application_controller.rb
+2
-2
app/controllers/commits_controller.rb
app/controllers/commits_controller.rb
+3
-3
app/controllers/issues_controller.rb
app/controllers/issues_controller.rb
+3
-2
app/controllers/projects_controller.rb
app/controllers/projects_controller.rb
+2
-2
app/controllers/tags_controller.rb
app/controllers/tags_controller.rb
+8
-8
app/helpers/application_helper.rb
app/helpers/application_helper.rb
+2
-2
app/helpers/dashboard_helper.rb
app/helpers/dashboard_helper.rb
+3
-3
app/models/issue.rb
app/models/issue.rb
+2
-2
app/models/note.rb
app/models/note.rb
+2
-2
app/models/project.rb
app/models/project.rb
+3
-3
app/models/repository.rb
app/models/repository.rb
+1
-1
app/models/user.rb
app/models/user.rb
+3
-1
app/views/admin/projects/_form.html.haml
app/views/admin/projects/_form.html.haml
+2
-3
app/views/commits/index.atom.builder
app/views/commits/index.atom.builder
+23
-0
app/views/commits/index.html.haml
app/views/commits/index.html.haml
+1
-3
app/views/dashboard/index.html.haml
app/views/dashboard/index.html.haml
+2
-2
app/views/issues/_show.html.haml
app/views/issues/_show.html.haml
+1
-1
app/views/issues/index.atom.builder
app/views/issues/index.atom.builder
+23
-0
app/views/issues/index.html.haml
app/views/issues/index.html.haml
+0
-1
app/views/issues/show.html.haml
app/views/issues/show.html.haml
+2
-3
app/views/layouts/_head_panel.html.erb
app/views/layouts/_head_panel.html.erb
+1
-1
app/views/layouts/profile.html.haml
app/views/layouts/profile.html.haml
+1
-1
app/views/layouts/project.html.haml
app/views/layouts/project.html.haml
+4
-0
app/views/notes/_form.html.haml
app/views/notes/_form.html.haml
+1
-1
app/views/notes/_load.js.haml
app/views/notes/_load.js.haml
+0
-1
app/views/notes/_show.html.haml
app/views/notes/_show.html.haml
+1
-1
app/views/notify/new_issue_email.html.haml
app/views/notify/new_issue_email.html.haml
+1
-3
app/views/projects/_feed.html.haml
app/views/projects/_feed.html.haml
+2
-2
app/views/projects/_form.html.haml
app/views/projects/_form.html.haml
+2
-2
app/views/projects/_list.html.haml
app/views/projects/_list.html.haml
+0
-1
app/views/projects/_refs.html.haml
app/views/projects/_refs.html.haml
+0
-1
app/views/projects/_tile.html.haml
app/views/projects/_tile.html.haml
+1
-1
app/views/projects/_tree.html.haml
app/views/projects/_tree.html.haml
+1
-2
app/views/projects/index.html.haml
app/views/projects/index.html.haml
+1
-1
app/views/projects/new.html.haml
app/views/projects/new.html.haml
+7
-7
app/views/snippets/index.html.haml
app/views/snippets/index.html.haml
+1
-1
app/views/tags/index.html.haml
app/views/tags/index.html.haml
+2
-3
config/initializers/devise.rb
config/initializers/devise.rb
+2
-2
config/routes.rb
config/routes.rb
+2
-5
db/migrate/20111027152724_issue_conten_to_note.rb
db/migrate/20111027152724_issue_conten_to_note.rb
+4
-4
db/migrate/20111111093150_remove_content_from_issues.rb
db/migrate/20111111093150_remove_content_from_issues.rb
+9
-0
db/migrate/20111115063954_add_authentication_token_to_users.rb
...grate/20111115063954_add_authentication_token_to_users.rb
+5
-0
db/schema.rb
db/schema.rb
+2
-2
lib/assets/javascripts/branch-graph.js
lib/assets/javascripts/branch-graph.js
+4
-4
lib/graph_commit.rb
lib/graph_commit.rb
+10
-10
spec/models/project_spec.rb
spec/models/project_spec.rb
+5
-5
spec/models/user_spec.rb
spec/models/user_spec.rb
+8
-3
spec/requests/commits_spec.rb
spec/requests/commits_spec.rb
+19
-0
spec/requests/dashboard_spec.rb
spec/requests/dashboard_spec.rb
+3
-3
spec/requests/issues_spec.rb
spec/requests/issues_spec.rb
+27
-8
spec/requests/projects_spec.rb
spec/requests/projects_spec.rb
+1
-1
spec/requests/tags_spec.rb
spec/requests/tags_spec.rb
+0
-4
spec/requests/top_panel_spec.rb
spec/requests/top_panel_spec.rb
+2
-2
vendor/assets/javascripts/chosen.js
vendor/assets/javascripts/chosen.js
+0
-0
vendor/assets/javascripts/modernizr.js
vendor/assets/javascripts/modernizr.js
+0
-0
vendor/assets/stylesheets/chosen.css
vendor/assets/stylesheets/chosen.css
+0
-0
No files found.
app/assets/javascripts/application.js
View file @
12782adf
...
...
@@ -10,6 +10,8 @@
//= require jquery.ui.selectmenu
//= require jquery.tagify
//= require jquery.cookie
//= require modernizr
//= require chosen
//= require raphael
//= require branch-graph
//= require_tree .
...
...
@@ -22,9 +24,9 @@ $(function(){
$
(
'
select#branch
'
).
selectmenu
({
style
:
'
popup
'
,
width
:
200
});
$
(
'
select#tag
'
).
selectmenu
({
style
:
'
popup
'
,
width
:
200
});
$
(
"
.account-box
"
).
mouseenter
(
showMenu
);
$
(
"
.account-box
"
).
mouseleave
(
resetMenu
);
$
(
"
.account-box
"
).
mouseenter
(
showMenu
);
$
(
"
.account-box
"
).
mouseleave
(
resetMenu
);
});
function
updatePage
(
data
){
...
...
@@ -32,9 +34,9 @@ function updatePage(data){
}
function
showMenu
()
{
$
(
this
).
toggleClass
(
'
hover
'
);
$
(
this
).
toggleClass
(
'
hover
'
);
}
function
resetMenu
()
{
$
(
this
).
removeClass
(
"
hover
"
);
$
(
this
).
removeClass
(
"
hover
"
);
}
app/assets/javascripts/commits.js
View file @
12782adf
...
...
@@ -8,25 +8,23 @@ $(document).ready(function(){
});
});
var
CommitsList
=
{
var
CommitsList
=
{
ref
:
null
,
limit
:
0
,
offset
:
0
,
init
:
function
(
ref
,
limit
)
{
this
.
ref
=
ref
;
this
.
limit
=
limit
;
this
.
offset
=
limit
;
init
:
function
(
ref
,
limit
)
{
this
.
ref
=
ref
;
this
.
limit
=
limit
;
this
.
offset
=
limit
;
this
.
initLoadMore
();
$
(
'
.loading
'
).
show
();
},
getOld
:
function
()
{
function
()
{
$
(
'
.loading
'
).
show
();
$
.
ajax
({
type
:
"
GET
"
,
...
...
@@ -39,14 +37,14 @@ getOld:
append
:
function
(
count
,
html
)
{
$
(
"
#commits_list
"
).
append
(
html
);
if
(
count
>
0
)
{
if
(
count
>
0
)
{
this
.
offset
+=
count
;
this
.
initLoadMore
();
}
}
},
initLoadMore
:
function
()
{
function
()
{
$
(
window
).
bind
(
'
scroll
'
,
function
(){
if
(
$
(
window
).
scrollTop
()
==
$
(
document
).
height
()
-
$
(
window
).
height
()){
$
(
window
).
unbind
(
'
scroll
'
);
...
...
app/assets/javascripts/note.js
View file @
12782adf
var
NoteList
=
{
var
NoteList
=
{
first_id
:
0
,
last_id
:
0
,
resource_name
:
null
,
init
:
function
(
resource_name
,
first_id
,
last_id
)
{
this
.
resource_name
=
resource_name
;
this
.
first_id
=
first_id
;
this
.
last_id
=
last_id
;
init
:
function
(
resource_name
,
first_id
,
last_id
)
{
this
.
resource_name
=
resource_name
;
this
.
first_id
=
first_id
;
this
.
last_id
=
last_id
;
this
.
initRefresh
();
this
.
initLoadMore
();
},
getOld
:
function
()
{
function
()
{
$
(
'
.loading
'
).
show
();
$
.
ajax
({
type
:
"
GET
"
,
...
...
@@ -31,7 +31,7 @@ append:
this
.
initLoadMore
();
},
replace
:
replace
:
function
(
fid
,
lid
,
html
)
{
this
.
first_id
=
fid
;
this
.
last_id
=
lid
;
...
...
@@ -39,17 +39,16 @@ replace:
this
.
initLoadMore
();
},
prepend
:
function
(
id
,
html
)
{
if
(
id
!=
this
.
last_id
)
{
if
(
id
!=
this
.
last_id
)
{
this
.
last_id
=
id
;
$
(
"
#notes-list
"
).
prepend
(
html
);
}
},
getNew
:
function
()
{
function
()
{
// refersh notes list
$
.
ajax
({
type
:
"
GET
"
,
...
...
@@ -59,7 +58,7 @@ getNew:
},
refresh
:
function
()
{
function
()
{
// refersh notes list
$
.
ajax
({
type
:
"
GET
"
,
...
...
@@ -68,8 +67,6 @@ refresh:
dataType
:
"
script
"
});
},
initRefresh
:
function
()
{
// init timer
...
...
@@ -78,7 +75,7 @@ initRefresh:
},
initLoadMore
:
function
()
{
function
()
{
$
(
window
).
bind
(
'
scroll
'
,
function
(){
if
(
$
(
window
).
scrollTop
()
==
$
(
document
).
height
()
-
$
(
window
).
height
()){
$
(
window
).
unbind
(
'
scroll
'
);
...
...
app/assets/javascripts/projects.js
View file @
12782adf
...
...
@@ -48,7 +48,6 @@ function taggifyForm(){
source
:
'
/tags.json
'
});
$
(
'
form
'
).
submit
(
function
()
{
var
tag_field
=
$
(
'
#tag_field
'
)
tag_field
.
val
(
tag_field
.
tagify
(
'
serialize
'
)
);
...
...
app/assets/stylesheets/application.css
View file @
12782adf
...
...
@@ -5,6 +5,7 @@
*= require jquery-ui/jquery-ui
*= require jquery-ui/jquery.ui.selectmenu
*= require jquery-ui/jquery.tagify
*= require chosen
*= require_self
*= require_tree .
*/
...
...
@@ -15,10 +16,10 @@
.cgreen
{
color
:
#44aa22
;
}
/** COMMON STYLES **/
.left
{
.left
{
float
:
left
;
}
.right
{
.right
{
float
:
right
;
}
.width-50p
{
...
...
@@ -33,7 +34,7 @@
.width-65p
{
width
:
65%
;
}
.append-bottom-10
{
.append-bottom-10
{
margin-bottom
:
10px
;
}
.prepend-top-10
{
...
...
app/assets/stylesheets/issues.css.scss
View file @
12782adf
...
...
@@ -12,7 +12,7 @@
.issues_filter
{
margin-top
:
10px
;
.left
{
.left
{
margin-right
:
15px
;
}
}
...
...
@@ -38,11 +38,10 @@
/** ISSUES LIST **/
.issue
.action-links
{
display
:none
;
a
{
display
:none
;
a
{
margin-left
:
10px
;
}
}
.issue
:hover
.action-links
{
display
:block
;
}
app/assets/stylesheets/notes.css.scss
View file @
12782adf
...
...
@@ -14,7 +14,6 @@
}
}
/* Note textare */
#note_note
{
height
:
100px
;
...
...
app/assets/stylesheets/projects.css.scss
View file @
12782adf
...
...
@@ -99,15 +99,15 @@ a {
}
}
td
.code
{
td
.code
{
width
:
100%
;
.highlight
{
.highlight
{
margin-left
:
55px
;
overflow
:auto
;
overflow-y
:hidden
;
}
}
.highlight
pre
{
.highlight
pre
{
white-space
:
pre
;
word-wrap
:normal
;
}
...
...
@@ -115,12 +115,11 @@ td.code {
.highlighttable
tr
:hover
{
background
:white
;
}
table
.highlighttable
pre
{
table
.highlighttable
pre
{
line-height
:
16px
!
important
;
font-size
:
12px
!
important
;
}
table
.highlighttable
.linenodiv
pre
{
text-align
:
right
;
padding-right
:
4px
;
...
...
@@ -235,7 +234,6 @@ input.ssh_project_url {
}
}
#user_projects_limit
{
width
:
60px
;
}
...
...
@@ -244,7 +242,7 @@ input.ssh_project_url {
cursor
:
move
;
}
.project-refs-form
{
.project-refs-form
{
span
{
background
:
none
!
important
;
position
:static
!
important
;
...
...
@@ -258,18 +256,18 @@ input.ssh_project_url {
}
.filter
.left
{
margin-right
:
15px
;
}
body
.project-page
table
.commit
{
a
.tree-commit-link
{
body
.project-page
table
.commit
{
a
.tree-commit-link
{
color
:gray
;
&
:hover
{
&
:hover
{
text-decoration
:underline
;
}
}
}
/** NEW PROJECT **/
.new-project-hodler
{
.new-project-hodler
{
.icon
span
{
background-position
:
-31px
-70px
;
}
td
{
border-bottom
:
1px
solid
#DEE2E3
;
}
}
...
...
@@ -277,8 +275,8 @@ body.project-page table .commit {
/** Feed entry **/
.commit
,
.snippet
,
.message
{
.title
{
.message
{
.title
{
color
:
#666
;
a
{
color
:
#666
!
important
;
}
p
{
margin-top
:
0px
;
}
...
...
@@ -295,21 +293,21 @@ body.project-page table .commit {
font-size
:
1
.5em
;
height
:auto
;
font-weight
:bold
;
.ui-selectmenu-status
{
.ui-selectmenu-status
{
padding
:
3px
10px
;
}
}
/** Snippets **/
.new_snippet
textarea
,
.edit_snippet
textarea
{
.new_snippet
textarea
,
.edit_snippet
textarea
{
height
:
300px
;
padding
:
8px
;
width
:
95%
;
}
.snippet
.action-links
{
display
:none
;
a
{
display
:none
;
a
{
margin-left
:
10px
;
}
}
...
...
@@ -348,11 +346,11 @@ body.project-page table .commit {
background
:
#2c5c66
;
color
:white
;
}
&
.issue
{
&
.issue
{
background
:
#D12F19
;
color
:white
;
}
&
.commit
{
&
.commit
{
background
:
#44aacc
;
color
:white
;
}
...
...
app/assets/stylesheets/style.scss
View file @
12782adf
...
...
@@ -60,7 +60,6 @@ input:invalid, textarea:invalid { background-color: #f0dddd; }
table
{
border-collapse
:
collapse
;
border-spacing
:
0
;
}
td
{
vertical-align
:
top
;
}
/* ==|== primary styles =====================================================
Author: Ricardo Rauch
========================================================================== */
...
...
@@ -89,13 +88,13 @@ input[type="text"]:focus, input[type="password"]:focus { outline: none; }
input
.text
{
border
:
1px
solid
#ccc
;
border-radius
:
4px
;
display
:
block
;
padding
:
10px
}
.form-row
{
padding
:
0px
0px
10px
0px
;
padding
:
0px
0px
10px
0px
;
}
.form-row
label
{
font-weight
:bold
;
display
:
inline-block
;
padding
:
0px
0px
5px
0px
;
font-weight
:bold
;
display
:
inline-block
;
padding
:
0px
0px
5px
0px
;
}
/* eo Forms */
...
...
@@ -103,23 +102,23 @@ input.text{border: 1px solid #ccc; border-radius: 4px; display: block; padding:
/* Tables */
table
{
width
:
100%
;
border
:
1px
solid
#DEE2E3
;
margin-bottom
:
20px
}
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
;
-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
;
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
;
}
...
...
@@ -127,37 +126,36 @@ 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
);
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
);
}
a
.button
,
input
.button
{
font-weight
:
bold
;
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
);
font-weight
:
bold
;
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
);
}
input
.button
{
margin-bottom
:
1
.5em
}
...
...
@@ -167,21 +165,21 @@ input.button{margin-bottom: 1.5em}
.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
);
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
);
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
;
}
...
...
@@ -192,50 +190,49 @@ input.button{margin-bottom: 1.5em}
/* 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
;
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
;
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
;
-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
);
-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 */
...
...
@@ -244,62 +241,61 @@ input.button{margin-bottom: 1.5em}
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
;
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
;
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
;
-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
;
-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
;
display
:
inline-block
;
margin-right
:
10px
;
width
:
14px
;
}
.directory
{
background
:
url('images.png')
no-repeat
-73px
-26px
;
height
:
11px
;
margin-bottom
:
-1px
;
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
;
background
:
url('images.png')
no-repeat
-114px
-24px
;
height
:
16px
;
margin-bottom
:
-3px
;
}
/* eo Icons*/
...
...
@@ -315,7 +311,7 @@ body.login-page{background-color: #f1f1f1; padding-top: 10%}
textarea
{
border
:
1px
solid
#FFBBBB
;
background
:
#fff4f6
;
background
:
#fff4f6
;
}
}
/* eo Errors */
...
...
@@ -324,91 +320,84 @@ body.login-page{background-color: #f1f1f1; padding-top: 10%}
#container
{
background-color
:
white
;
overflow
:
hidden
;
}
body
.collapsed
#container
{
margin
:
auto
;
width
:
980px
;
border
:
1px
solid
rgba
(
0
,
0
,
0
,.
22
);
border-top
:
0
;
box-shadow
:
0
0
0px
4px
rgba
(
0
,
0
,
0
,.
04
)}
/* Header */
header
{
background
:
#474D57
url('bg-header.png')
repeat-x
bottom
;
z-index
:
10000
;
height
:
44px
;
padding
:
10px
2%
6px
2%
;
position
:
relative
}
header
a
{
color
:
white
;
text-shadow
:
0
-1px
0
black
}
header
a
:hover
{
color
:
#f1f1f1
}
header
h1
{
width
:
65px
;
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
;
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
;
height
:
30px
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
;
height
:
30px
}
header
nav
a
{
padding
:
8px
12px
8px
34px
;
display
:
inline-block
;
color
:
#D6DADF
;
border-right
:
1px
solid
#31363E
;
position
:
relative
;
box-shadow
:
1px
0
0
rgba
(
255
,
255
,
255
,.
1
);
margin
:
0
}
header
nav
a
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
);
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
;
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
;
-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
;
-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
:
46px
}
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
.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
.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
;
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
}
img
{
height
:
36px
;
width
:
36px
;
border
:
1px
solid
black
}
}
header
.login-top
a
.username
{
margin-bottom
:
5px
}
header
.login-top
a
.logout
{
color
:
#ccc
}
...
...
@@ -419,12 +408,11 @@ header{margin-bottom: 0; clear: both; }
.page-title
a
.grey-button
{
float
:
right
;}
.right
{
float
:
right
;}
/* Account box */
header
.account-box
{
position
:
absolute
;
right
:
0
;
top
:
8px
;
z-index
:
10000
;
width
:
128px
;
font-size
:
11px
;
float
:
right
;
display
:
block
;
cursor
:
pointer
;}
header
.account-box
img
{
border-radius
:
4px
;
right
:
20px
;
position
:
absolute
;
width
:
38px
;
height
:
38px
;
display
:
block
;
box-shadow
:
0
1px
2px
black
}
header
.account-box
img
:after
{
content
:
" "
;
content
:
" "
;
display
:
block
;
position
:
absolute
;
top
:
0
;
...
...
@@ -432,7 +420,7 @@ header .account-box img:after{
left
:
0
;
bottom
:
0
;
float
:
right
;
border-radius
:
5px
;
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
)));
...
...
@@ -462,7 +450,6 @@ header .account-links:before {
z-index
:
10
;
}
/* Inspired by http://maxvoltar.com/temp/nowplaying/ */
header
.account-links
{
background
:
white
;
display
:
none
;
z-index
:
100000
;
border-radius
:
5px
;
width
:
100px
;
position
:
absolute
;
right
:
20px
;
top
:
46px
;
margin-top
:
0
;
float
:
right
;
box-shadow
:
0
1px
1px
rgba
(
0
,
0
,
0
,.
2
);
}
header
.account-links
a
{
color
:
#666
;
padding
:
6px
10px
;
display
:
block
;
text-shadow
:
none
;
border-bottom
:
1px
solid
#eee
}
...
...
@@ -470,28 +457,28 @@ header .account-links a:hover{
background
:
#3aacec
;
background
:
-webkit-gradient
(
linear
,
0%
0%
,
0%
100%
,
from
(
#39acec
)
,
to
(
#279ada
)
,
color-stop
(
.05
,
#4cbefe
));
background
:
-moz-linear-gradient
(
top
,
#39acec
,
#4cbefe
5%
,
#279ada
);
background
:
linear-gradient
(
top
,
#39acec
,
#4cbefe
5%
,
#279ada
);
color
:
#fff
;
background
:
linear-gradient
(
top
,
#39acec
,
#4cbefe
5%
,
#279ada
);
color
:
#fff
;
text-shadow
:
#1488c8
0
-1px
0
;
}
.account-box.hover
.arrow-up
{
top
:
41px
;
right
:
6px
;
position
:
absolute
}
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
;
-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
;
-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
;
}
#no_ssh_key_defined
{
...
...
@@ -509,13 +496,10 @@ 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%
;
}
...
...
@@ -545,25 +529,22 @@ body.dashboard-page .news-feed .project-updates a.project-update span.update-aut
body
.dashboard-page
.news-feed
.project-updates
a
.project-update
span
.update-author
strong
{
font-weight
:
bold
;
font-style
:
normal
;}
/* 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
;
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
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
;
float
:
left
;
display
:
inline-block
;
background
:
#f7f7f7
;
padding
:
20px
0
20px
2%
;
margin
:
0
;
}
...
...
@@ -575,18 +556,17 @@ body.projects-page input.text.git-url {margin:10px 0 0 }
.projects_selector
:hover
>
.project-box
{
-moz-box-shadow
:
0px
0px
10px
rgba
(
0
,
0
,
0
,
.1
);
-webkit-box-shadow
:
0px
0px
10px
rgba
(
0
,
0
,
0
,
.1
);
box-shadow
:
0px
0px
10px
rgba
(
0
,
0
,
0
,
.1
);
}
body
.project-page
.project-sidebar
aside
{
width
:
219px
}
body
.project-page
.project-sidebar
aside
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
;
-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
;
-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
}
...
...
@@ -595,7 +575,7 @@ body.project-page .project-content{ padding: 20px; display: block; margin-left:
body
.project-page
.project-content
h2
{
margin-top
:
6px
}
body
.project-page
.project-content
.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
table
th
,
body
.project-page
table
td
{
border-bottom
:
1px
solid
#DEE2E3
;}
body
.project-page
.fixed
{
position
:
fixed
;
}
/* New project Page */
...
...
@@ -606,32 +586,31 @@ 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
;
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
;
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
;
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
}
...
...
@@ -648,9 +627,6 @@ body.project-page.commits-page .commits-date a.commit span.commit-author strong{
/* 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
}
...
...
@@ -659,7 +635,6 @@ 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
;
}
...
...
@@ -671,28 +646,24 @@ body.projects-page .browse-code{margin-right: 10px}
.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
;
}
*
{
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
:
""
;
}
.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
;
}
...
...
app/assets/stylesheets/tags.css.css
View file @
12782adf
.tags-list
{
padding
:
0px
10px
10px
10px
;
padding
:
0px
10px
10px
10px
;
}
.tags-list
a
{
...
...
@@ -15,7 +15,6 @@
font-size
:
14px
;
}
.small-tags
a
{
font-size
:
9px
;
...
...
@@ -26,10 +25,9 @@
background-color
:
#72bbdf
;
color
:
#FFF
;
text-shadow
:
none
;
font-weight
:
bold
;
font-weight
:
bold
;
}
.medium-tags
a
{
font-size
:
12px
;
...
...
@@ -40,5 +38,5 @@
background-color
:
#72bbdf
;
color
:
#FFF
;
text-shadow
:
none
;
font-weight
:
bold
;
}
\ No newline at end of file
font-weight
:
bold
;
}
app/controllers/application_controller.rb
View file @
12782adf
...
...
@@ -79,8 +79,8 @@ class ApplicationController < ActionController::Base
elsif
params
[
:last_id
]
@notes
=
@notes
.
where
(
"id > ?"
,
params
[
:last_id
])
elsif
params
[
:first_id
]
@notes
=
@notes
.
where
(
"id < ?"
,
params
[
:first_id
])
else
@notes
=
@notes
.
where
(
"id < ?"
,
params
[
:first_id
])
else
nil
end
end
...
...
app/controllers/commits_controller.rb
View file @
12782adf
...
...
@@ -10,10 +10,9 @@ class CommitsController < ApplicationController
before_filter
:require_non_empty_project
before_filter
:load_refs
,
:only
=>
:index
# load @branch, @tag & @ref
def
index
@repo
=
project
.
repo
limit
,
offset
=
(
params
[
:limit
]
||
20
),
(
params
[
:offset
]
||
0
)
limit
,
offset
=
(
params
[
:limit
]
||
20
),
(
params
[
:offset
]
||
0
)
@commits
=
if
params
[
:path
]
@repo
.
log
(
@ref
,
params
[
:path
],
:max_count
=>
limit
,
:skip
=>
offset
)
...
...
@@ -24,6 +23,7 @@ class CommitsController < ApplicationController
respond_to
do
|
format
|
format
.
html
# index.html.erb
format
.
js
format
.
atom
{
render
:layout
=>
false
}
end
end
...
...
@@ -32,7 +32,7 @@ class CommitsController < ApplicationController
@notes
=
project
.
commit_notes
(
@commit
).
fresh
.
limit
(
20
)
@note
=
@project
.
build_commit_note
(
@commit
)
respond_to
do
|
format
|
respond_to
do
|
format
|
format
.
html
format
.
js
{
respond_with_notes
}
end
...
...
app/controllers/issues_controller.rb
View file @
12782adf
...
...
@@ -24,6 +24,7 @@ class IssuesController < ApplicationController
respond_to
do
|
format
|
format
.
html
# index.html.erb
format
.
js
format
.
atom
{
render
:layout
=>
false
}
end
end
...
...
@@ -40,7 +41,7 @@ class IssuesController < ApplicationController
@notes
=
@issue
.
notes
.
inc_author
.
order
(
"created_at DESC"
).
limit
(
20
)
@note
=
@project
.
notes
.
new
(
:noteable
=>
@issue
)
respond_to
do
|
format
|
respond_to
do
|
format
|
format
.
html
format
.
js
{
respond_with_notes
}
end
...
...
@@ -97,7 +98,7 @@ class IssuesController < ApplicationController
else
@project
.
issues
.
opened
end
@issues
=
@issues
.
where
(
"title LIKE ?
OR content LIKE ?"
,
"%
#{
terms
}
%
"
,
"%
#{
terms
}
%"
)
unless
terms
.
blank?
@issues
=
@issues
.
where
(
"title LIKE ?"
,
"%
#{
terms
}
%"
)
unless
terms
.
blank?
render
:partial
=>
'issues'
end
...
...
app/controllers/projects_controller.rb
View file @
12782adf
...
...
@@ -79,7 +79,7 @@ class ProjectsController < ApplicationController
@notes
=
@project
.
common_notes
.
order
(
"created_at DESC"
)
@notes
=
@notes
.
fresh
.
limit
(
20
)
respond_to
do
|
format
|
respond_to
do
|
format
|
format
.
html
format
.
js
{
respond_with_notes
}
end
...
...
@@ -168,7 +168,7 @@ class ProjectsController < ApplicationController
def
add_refs
(
commit
,
ref_cache
)
if
ref_cache
.
empty?
@repo
.
refs
.
each
do
|
ref
|
@repo
.
refs
.
each
do
|
ref
|
ref_cache
[
ref
.
commit
.
id
]
||=
[]
ref_cache
[
ref
.
commit
.
id
]
<<
ref
end
...
...
app/controllers/tags_controller.rb
View file @
12782adf
class
TagsController
<
ApplicationController
def
index
@tags
=
Project
.
tag_counts
.
order
(
'count DESC'
)
@tags
=
@tags
.
where
(
'name like ?'
,
"%
#{
params
[
:term
]
}
%"
)
unless
params
[
:term
].
blank?
def
index
@tags
=
Project
.
tag_counts
.
order
(
'count DESC'
)
@tags
=
@tags
.
where
(
'name like ?'
,
"%
#{
params
[
:term
]
}
%"
)
unless
params
[
:term
].
blank?
respond_to
do
|
format
|
format
.
html
format
.
json
{
render
json:
@tags
.
limit
(
8
).
map
{
|
t
|
t
.
name
}}
end
end
respond_to
do
|
format
|
format
.
html
format
.
json
{
render
json:
@tags
.
limit
(
8
).
map
{
|
t
|
t
.
name
}}
end
end
end
app/helpers/application_helper.rb
View file @
12782adf
...
...
@@ -11,7 +11,7 @@ module ApplicationHelper
end
def
body_class
(
default_class
=
nil
)
main
=
content_for
(
:body_class
).
blank?
?
main
=
content_for
(
:body_class
).
blank?
?
default_class
:
content_for
(
:body_class
)
...
...
@@ -42,7 +42,7 @@ module ApplicationHelper
else
"Never"
end
rescue
rescue
"Never"
end
...
...
app/helpers/dashboard_helper.rb
View file @
12782adf
...
...
@@ -4,7 +4,7 @@ module DashboardHelper
when
"Issue"
then
project_issue_path
(
project
,
project
.
issues
.
find
(
object
.
id
))
when
"Grit::Commit"
then
project_commit_path
(
project
,
project
.
repo
.
commits
(
object
.
id
).
first
)
when
"Note"
then
then
note
=
object
case
note
.
noteable_type
when
"Issue"
then
project_issue_path
(
project
,
note
.
noteable_id
)
...
...
@@ -12,9 +12,9 @@ module DashboardHelper
when
"Commit"
then
project_commit_path
(
project
,
:id
=>
note
.
noteable_id
)
else
wall_project_path
(
project
)
end
else
wall_project_path
(
project
)
else
wall_project_path
(
project
)
end
rescue
rescue
"#"
end
...
...
app/models/issue.rb
View file @
12782adf
...
...
@@ -11,8 +11,8 @@ class Issue < ActiveRecord::Base
validates_presence_of
:author_id
delegate
:name
,
:email
,
:to
=>
:author
,
:email
,
:to
=>
:author
,
:prefix
=>
true
validates
:title
,
...
...
app/models/note.rb
View file @
12782adf
...
...
@@ -8,8 +8,8 @@ class Note < ActiveRecord::Base
:class_name
=>
"User"
delegate
:name
,
:email
,
:to
=>
:author
,
:email
,
:to
=>
:author
,
:prefix
=>
true
attr_protected
:author
,
:author_id
...
...
app/models/project.rb
View file @
12782adf
...
...
@@ -129,9 +129,9 @@ class Project < ActiveRecord::Base
private_flag
end
def
last_activity
def
last_activity
updates
(
1
).
first
rescue
rescue
nil
end
...
...
@@ -140,7 +140,7 @@ class Project < ActiveRecord::Base
end
def
updates
(
n
=
3
)
[
[
fresh_commits
(
n
),
fresh_issues
(
n
),
fresh_notes
(
n
)
...
...
app/models/repository.rb
View file @
12782adf
...
...
@@ -9,7 +9,7 @@ class Repository
@project
=
project
end
def
path
def
path
@path
||=
project
.
path
end
...
...
app/models/user.rb
View file @
12782adf
class
User
<
ActiveRecord
::
Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise
:database_authenticatable
,
devise
:database_authenticatable
,
:token_authenticatable
,
:recoverable
,
:rememberable
,
:trackable
,
:validatable
# Setup accessible (or protected) attributes for your model
...
...
@@ -25,6 +25,8 @@ class User < ActiveRecord::Base
:foreign_key
=>
:assignee_id
,
:dependent
=>
:destroy
before_create
:ensure_authentication_token
alias_attribute
:private_token
,
:authentication_token
scope
:not_in_project
,
lambda
{
|
project
|
where
(
"id not in (:ids)"
,
:ids
=>
project
.
users
.
map
(
&
:id
)
)
}
def
identifier
...
...
app/views/admin/projects/_form.html.haml
View file @
12782adf
=
form_for
[
:admin
,
@admin_project
]
do
|
f
|
-
if
@admin_project
.
errors
.
any?
#error_explanation
%h2
=
"
#{
pluralize
(
@admin_project
.
errors
.
count
,
"error"
)
}
prohibited this admin_project from being saved:"
%h2
=
"
#{
pluralize
(
@admin_project
.
errors
.
count
,
"error"
)
}
prohibited this admin_project from being saved:"
%ul
-
@admin_project
.
errors
.
full_messages
.
each
do
|
msg
|
%li
=
msg
...
...
@@ -19,7 +19,6 @@
%br
=
f
.
text_field
:path
.form-row
=
f
.
label
:tag_list
%br
...
...
@@ -36,4 +35,4 @@
:javascript
$
(
function
(){
taggifyForm
();
})
})
app/views/commits/index.atom.builder
0 → 100644
View file @
12782adf
xml.instruct!
xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do
xml.title "Recent commits to #{@project.name}:#{@ref}"
xml.link :href => project_commits_url(@project, :atom, :ref => @ref), :rel => "self", :type => "application/atom+xml"
xml.link :href => project_commits_url(@project), :rel => "alternate", :type => "text/html"
xml.id project_commits_url(@project)
xml.updated @commits.first.committed_date.strftime("%Y-%m-%dT%H:%M:%SZ") if @commits.any?
@commits.each do |commit|
xml.entry do
xml.id project_commit_url(@project, :id => commit.id)
xml.link :href => project_commit_url(@project, :id => commit.id)
xml.title truncate(commit.safe_message, :length => 80)
xml.updated commit.committed_date.strftime("%Y-%m-%dT%H:%M:%SZ")
xml.media :thumbnail, :width => "40", :height => "40", :url => gravatar_icon(commit.author_email)
xml.author do |author|
xml.name commit.author_name
xml.email commit.author_email
end
xml.summary commit.safe_message
end
end
end
app/views/commits/index.html.haml
View file @
12782adf
...
...
@@ -6,7 +6,7 @@
%h2
.icon
%span
%d
=
link_to
project_commits_path
(
@project
)
do
=
link_to
project_commits_path
(
@project
)
do
=
@project
.
name
-
if
params
[
:path
]
\/
...
...
@@ -20,8 +20,6 @@
.loading
{
:style
=>
"display:none;"
}
%center
=
image_tag
"ajax-loader.gif"
:javascript
$
(
function
(){
CommitsList
.
init
(
"
#{
@ref
}
"
,
20
);
...
...
app/views/dashboard/index.html.haml
View file @
12782adf
...
...
@@ -27,13 +27,13 @@
%a
.project-update
{
:href
=>
dashboard_feed_path
(
project
,
update
)}
=
image_tag
gravatar_icon
(
update
.
author_email
),
:class
=>
"left"
,
:width
=>
40
%span
.update-title
-
if
update
.
kind_of?
(
Grit
::
Commit
)
-
if
update
.
kind_of?
(
Grit
::
Commit
)
%span
.right.tag.commit
=
update
.
head
.
name
=
dashboard_feed_title
(
update
)
%span
.update-author
%strong
=
update
.
author_name
authored
=
time_ago_in_words
(
update
.
created_at
)
=
time_ago_in_words
(
update
.
created_at
)
ago
/ #news-feed
/ #dashboard-content
app/views/issues/_show.html.haml
View file @
12782adf
...
...
@@ -18,7 +18,7 @@
-
if
can?
current_user
,
:write_issue
,
issue
-
if
issue
.
closed
=
link_to
'Reopen'
,
project_issue_path
(
@project
,
issue
,
:issue
=>
{
:closed
=>
false
},
:status_only
=>
true
),
:method
=>
:put
,
:class
=>
"cgray"
,
:remote
=>
true
-
else
-
else
=
link_to
'Resolve'
,
project_issue_path
(
@project
,
issue
,
:issue
=>
{
:closed
=>
true
},
:status_only
=>
true
),
:method
=>
:put
,
:class
=>
"cgray"
,
:remote
=>
true
-
if
can?
current_user
,
:write_issue
,
issue
=
link_to
'Edit'
,
edit_project_issue_path
(
@project
,
issue
),
:class
=>
"cgray edit-issue-link"
,
:remote
=>
true
...
...
app/views/issues/index.atom.builder
0 → 100644
View file @
12782adf
xml.instruct!
xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do
xml.title "#{@project.name} issues"
xml.link :href => project_issues_url(@project, :atom), :rel => "self", :type => "application/atom+xml"
xml.link :href => project_issues_url(@project), :rel => "alternate", :type => "text/html"
xml.id project_issues_url(@project)
xml.updated @issues.first.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") if @issues.any?
@issues.each do |issue|
xml.entry do
xml.id project_issue_url(@project, issue)
xml.link :href => project_issue_url(@project, issue)
xml.title truncate(issue.title, :length => 80)
xml.updated issue.created_at.strftime("%Y-%m-%dT%H:%M:%SZ")
xml.media :thumbnail, :width => "40", :height => "40", :url => gravatar_icon(issue.author_email)
xml.author do |author|
xml.name issue.author_name
xml.email issue.author_email
end
xml.summary issue.title
end
end
end
app/views/issues/index.html.haml
View file @
12782adf
...
...
@@ -31,7 +31,6 @@
var
href
=
$
(
'
.issue_search
'
).
parent
().
attr
(
'
action
'
);
var
last_terms
=
''
;
var
setIssueFilter
=
function
(
form
,
value
){
$
.
cookie
(
'
issue_filter
'
,
value
,
{
expires
:
140
});
form
.
submit
();
...
...
app/views/issues/show.html.haml
View file @
12782adf
...
...
@@ -22,12 +22,12 @@
%td
=
image_tag
gravatar_icon
(
@issue
.
assignee
.
email
),
:class
=>
"left"
,
:width
=>
40
,
:style
=>
"padding:0 5px;"
=
@issue
.
assignee
.
name
%tr
%tr
%td
Tags
%td
-
if
@issue
.
critical
%span
.tag.high
critical
-
else
-
else
%span
.tag.normal
normal
-
if
@issue
.
today?
...
...
@@ -42,7 +42,6 @@
-
else
=
check_box_tag
"closed"
,
1
,
@issue
.
closed
,
:disabled
=>
true
-
if
can?
(
current_user
,
:write_issue
,
@issue
)
.clear
%br
...
...
app/views/layouts/_head_panel.html.erb
View file @
12782adf
...
...
@@ -10,7 +10,7 @@
<div
class=
"account-links"
>
<%=
link_to
profile_path
,
:class
=>
"username"
do
%>
<%#= current_user.name %>
<%#= current_user.name %>
My profile
<%
end
%>
<%=
link_to
'Logout'
,
destroy_user_session_path
,
:class
=>
"logout"
,
:method
=>
:delete
%>
...
...
app/views/layouts/profile.html.haml
View file @
12782adf
...
...
@@ -19,7 +19,7 @@
%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
=
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
...
...
app/views/layouts/project.html.haml
View file @
12782adf
...
...
@@ -5,6 +5,10 @@
GitLab
#{
" - #{@project.name}"
if
@project
&&
!
@project
.
new_record?
}
=
stylesheet_link_tag
"application"
=
javascript_include_tag
"application"
-
if
current_page?
(
tree_project_path
(
@project
))
||
current_page?
(
project_commits_path
(
@project
))
=
auto_discovery_link_tag
(
:atom
,
project_commits_url
(
@project
,
:atom
,
:ref
=>
@ref
,
:private_token
=>
current_user
.
private_token
),
:title
=>
"Recent commits to
#{
@project
.
name
}
:
#{
@ref
}
"
)
-
if
request
.
path
==
project_issues_path
(
@project
)
=
auto_discovery_link_tag
(
:atom
,
project_issues_url
(
@project
,
:atom
,
:private_token
=>
current_user
.
private_token
),
:title
=>
"
#{
@project
.
name
}
issues"
)
=
csrf_meta_tags
=
javascript_tag
do
REQ_URI = "
#{
request
.
env
[
"REQUEST_URI"
]
}
";
...
...
app/views/notes/_form.html.haml
View file @
12782adf
...
...
@@ -14,7 +14,7 @@
%br
%br
=
f
.
text_area
:note
,
:size
=>
255
%div
.attach_holder
%br
=
f
.
label
:attachment
...
...
app/views/notes/_load.js.haml
View file @
12782adf
...
...
@@ -4,7 +4,6 @@
:plain
NoteList.replace(
#{
@notes
.
last
.
id
}
,
#{
@notes
.
first
.
id
}
, "
#{
escape_javascript
(
render
(
:partial
=>
'notes/notes_list'
))
}
");
-
elsif
params
[
:last_id
]
:plain
NoteList.prepend(
#{
@notes
.
first
.
id
}
, "
#{
escape_javascript
(
render
(
:partial
=>
'notes/notes_list'
))
}
");
...
...
app/views/notes/_show.html.haml
View file @
12782adf
...
...
@@ -7,7 +7,7 @@
ago
-
if
(
note
.
author_id
==
current_user
.
id
)
||
can?
(
current_user
,
:admin_note
,
@project
)
=
link_to
"Remove"
,
[
@project
,
note
],
:confirm
=>
'Are you sure?'
,
:method
=>
:delete
,
:remote
=>
true
,
:class
=>
"cred delete-note right"
%div
.note-title
=
markdown
(
note
.
note
)
-
if
note
.
attachment
.
url
...
...
app/views/notify/new_issue_email.html.haml
View file @
12782adf
...
...
@@ -10,9 +10,7 @@
%td
{
:style
=>
"font-size: 1px; line-height: 1px;"
,
:width
=>
"21"
}
%td
{
:align
=>
"left"
,
:style
=>
"padding: 20px 0 0;"
}
%h2
{
:style
=>
"color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "
}
=
link_to
project_issue_url
(
@project
,
@issue
)
do
=
link_to
project_issue_url
(
@project
,
@issue
)
,
:title
=>
@issue
.
title
do
=
"Issue #
#{
@issue
.
id
.
to_s
}
"
=
truncate
(
@issue
.
title
,
:length
=>
45
)
%br
%cite
{
:style
=>
"color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "
}
=
@issue
.
content
app/views/projects/_feed.html.haml
View file @
12782adf
...
...
@@ -5,11 +5,11 @@
%span
.update-author
%strong
=
update
.
author_name
authored
=
time_ago_in_words
(
update
.
created_at
)
=
time_ago_in_words
(
update
.
created_at
)
ago
.right
-
klass
=
update
.
class
.
to_s
.
split
(
"::"
).
last
.
downcase
%span
.tag
{
:class
=>
klass
}=
klass
-
if
update
.
kind_of?
(
Grit
::
Commit
)
-
if
update
.
kind_of?
(
Grit
::
Commit
)
%span
.tag.commit
=
update
.
head
.
name
app/views/projects/_form.html.haml
View file @
12782adf
=
form_for
(
@project
,
:remote
=>
true
)
do
|
f
|
%div
.form_content
-
unless
@project
.
new_record?
%h2
.icon
%h2
.icon
%span
=
@project
.
name
-
if
@project
.
errors
.
any?
...
...
@@ -56,4 +56,4 @@
:javascript
$
(
function
(){
taggifyForm
();
})
})
app/views/projects/_list.html.haml
View file @
12782adf
...
...
@@ -14,7 +14,6 @@
=
project
.
name
.small-tags
=
tag_list
project
%td
=
truncate
project
.
url_to_repo
%td
=
project
.
code
%td
=
check_box_tag
"read"
,
1
,
project
.
readers
.
include?
(
current_user
),
:disabled
=>
:disabled
...
...
app/views/projects/_refs.html.haml
View file @
12782adf
=
form_tag
destination
,
:method
=>
:get
,
:class
=>
"project-refs-form"
do
=
select_tag
"ref"
,
grouped_options_refs
,
:onchange
=>
"this.form.submit();"
,
:class
=>
"project-refs-select"
:javascript
$
(
function
(){
$
(
'
.project-refs-select
'
).
chosen
();
...
...
app/views/projects/_tile.html.haml
View file @
12782adf
...
...
@@ -2,7 +2,7 @@
-
projects
.
each_with_index
do
|
project
,
i
|
%div
.grid_1.projects_selector
%div
{
:class
=>
"project-box ui-box ui-box-big"
}
=
link_to
project_path
(
project
)
do
=
link_to
project_path
(
project
)
do
%h3
=
truncate
(
project
.
name
,
:length
=>
20
)
.data
%p
.title.repository.git_url_wrapper
...
...
app/views/projects/_tree.html.haml
View file @
12782adf
-#%a.right.button{:href => "#"} Download
-#-if can? current_user, :admin_project, @project
%a.right.button.blue{:href => "#"} EDIT
...
...
@@ -6,7 +5,7 @@
%h2
.icon
%span
%d
=
link_to
tree_project_path
(
@project
,
:path
=>
nil
,
:commit_id
=>
@commit
.
try
(
:id
)),
:remote
=>
true
do
=
link_to
tree_project_path
(
@project
,
:path
=>
nil
,
:commit_id
=>
@commit
.
try
(
:id
)),
:remote
=>
true
do
=
@project
.
name
-
if
params
[
:path
]
-
part_path
=
""
...
...
app/views/projects/index.html.haml
View file @
12782adf
...
...
@@ -4,7 +4,7 @@
.grid_4
-
if
current_user
.
can_create_project?
%a
.grey-button.right
{
:href
=>
new_project_path
}
Create new project
%h2
.icon
%h2
.icon
%span
Projects
...
...
app/views/projects/new.html.haml
View file @
12782adf
-
content_for
(
:body_class
,
"new-project-page"
)
-
content_for
(
:page_title
)
do
.new-project-hodler
.container
%h2
.icon
%span
New Project
.new-project-hodler
.container
%h2
.icon
%span
New Project
%div
.clear
=
render
'form'
%div
.clear
=
render
'form'
app/views/snippets/index.html.haml
View file @
12782adf
...
...
@@ -4,7 +4,7 @@
%table
.round-borders
#snippets-table
%thead
%th
%th
=
render
@snippets
.
fresh
:javascript
$
(
'
.delete-snippet
'
).
live
(
'
ajax:success
'
,
function
()
{
...
...
app/views/tags/index.html.haml
View file @
12782adf
-
content_for
(
:body_class
,
"projects-page"
)
-
content_for
(
:page_title
)
do
.grid_4
%h2
%h2
Tags
.tags-list
-
@tags
.
all
.
each
do
|
tag
|
=
link_to
"
#{
tag
.
name
}
(
#{
tag
.
count
}
)"
,
tag_path
(
name
)
config/initializers/devise.rb
View file @
12782adf
...
...
@@ -158,11 +158,11 @@ Devise.setup do |config|
# ==> Configuration for :token_authenticatable
# Defines name of the authentication token params key
# config.token_authentication_key = :auth
_token
config
.
token_authentication_key
=
:private
_token
# If true, authentication through token does not store user in session and needs
# to be supplied on each request. Useful if you are using the token as API token.
# config.stateless_token = fals
e
config
.
stateless_token
=
tru
e
# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
...
...
config/routes.rb
View file @
12782adf
...
...
@@ -3,7 +3,6 @@ Gitlab::Application.routes.draw do
get
'tags'
=>
'tags#index'
get
'tags/:tag'
=>
'projects#index'
namespace
:admin
do
resources
:users
resources
:projects
...
...
@@ -53,10 +52,8 @@ Gitlab::Application.routes.draw do
resources
:team_members
resources
:issues
do
collection
do
post
:sort
end
collection
do
get
:search
post
:sort
get
:search
end
end
resources
:notes
,
:only
=>
[
:create
,
:destroy
]
...
...
db/migrate/20111027152724_issue_conten_to_note.rb
View file @
12782adf
...
...
@@ -15,16 +15,16 @@ class IssueContenToNote < ActiveRecord::Migration
if
note
.
save
issue
.
update_attributes
(
:content
=>
nil
)
print
"."
else
else
print
"F"
end
end
total
=
Issue
.
where
(
"content is not null"
).
count
if
total
>
0
puts
"content of
#{
total
}
issues were not migrated"
else
if
total
>
0
puts
"content of
#{
total
}
issues were not migrated"
else
puts
"Done"
end
end
...
...
db/migrate/20111111093150_remove_content_from_issues.rb
0 → 100644
View file @
12782adf
class
RemoveContentFromIssues
<
ActiveRecord
::
Migration
def
up
remove_column
:issues
,
:content
end
def
down
add_column
:issues
,
:content
,
:text
end
end
db/migrate/20111115063954_add_authentication_token_to_users.rb
0 → 100644
View file @
12782adf
class
AddAuthenticationTokenToUsers
<
ActiveRecord
::
Migration
def
change
add_column
:users
,
:authentication_token
,
:string
end
end
db/schema.rb
View file @
12782adf
...
...
@@ -11,11 +11,10 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord
::
Schema
.
define
(
:version
=>
201111
01222453
)
do
ActiveRecord
::
Schema
.
define
(
:version
=>
201111
15063954
)
do
create_table
"issues"
,
:force
=>
true
do
|
t
|
t
.
string
"title"
t
.
text
"content"
t
.
integer
"assignee_id"
t
.
integer
"author_id"
t
.
integer
"project_id"
...
...
@@ -104,6 +103,7 @@ ActiveRecord::Schema.define(:version => 20111101222453) do
t
.
string
"skype"
,
:default
=>
""
,
:null
=>
false
t
.
string
"linkedin"
,
:default
=>
""
,
:null
=>
false
t
.
string
"twitter"
,
:default
=>
""
,
:null
=>
false
t
.
string
"authentication_token"
end
add_index
"users"
,
[
"email"
],
:name
=>
"index_users_on_email"
,
:unique
=>
true
...
...
lib/assets/javascripts/branch-graph.js
View file @
12782adf
...
...
@@ -39,7 +39,7 @@ function branchGraph(holder) {
var
cuday
=
0
,
cumonth
=
""
;
r
.
rect
(
0
,
0
,
days
.
length
*
20
+
20
,
20
).
attr
({
fill
:
"
#474D57
"
});
r
.
rect
(
0
,
20
,
days
.
length
*
20
+
20
,
20
).
attr
({
fill
:
"
#f7f7f7
"
});
for
(
mm
=
0
;
mm
<
days
.
length
;
mm
++
)
{
if
(
days
[
mm
]
!=
null
){
if
(
cuday
!=
days
[
mm
][
0
]){
...
...
@@ -50,7 +50,7 @@ function branchGraph(holder) {
r
.
text
(
10
+
mm
*
20
,
10
,
days
[
mm
][
1
]).
attr
({
font
:
"
12px Fontin-Sans, Arial
"
,
fill
:
"
#444
"
});
cumonth
=
days
[
mm
][
1
]
}
}
}
for
(
i
=
0
;
i
<
ii
;
i
++
)
{
...
...
@@ -65,7 +65,7 @@ function branchGraph(holder) {
}
var
t
=
r
.
text
(
x
+
5
,
y
+
5
,
shortrefs
).
attr
({
font
:
"
12px Fontin-Sans, Arial
"
,
fill
:
"
#666
"
,
title
:
longrefs
,
cursor
:
"
pointer
"
,
rotation
:
"
90
"
});
var
textbox
=
t
.
getBBox
();
t
.
translate
(
textbox
.
height
/-
4
,
textbox
.
width
/
2
);
}
...
...
@@ -77,7 +77,7 @@ function branchGraph(holder) {
if
(
c
.
space
==
commits
[
i
].
space
)
{
r
.
path
(
"
M
"
+
(
x
-
5
)
+
"
,
"
+
(
y
+
.
0001
)
+
"
L
"
+
(
15
+
20
*
c
.
time
)
+
"
,
"
+
(
y
+
.
0001
))
.
attr
({
stroke
:
colors
[
c
.
space
],
"
stroke-width
"
:
2
});
}
else
if
(
c
.
space
<
commits
[
i
].
space
)
{
r
.
path
([
"
M
"
,
x
-
5
,
y
+
.
0001
,
"
l-5-2,0,4,5,-2C
"
,
x
-
5
,
y
,
x
-
17
,
y
+
2
,
x
-
20
,
y
-
10
,
"
L
"
,
cx
,
y
-
10
,
cx
,
cy
])
.
attr
({
stroke
:
colors
[
commits
[
i
].
space
],
"
stroke-width
"
:
2
});
...
...
lib/graph_commit.rb
View file @
12782adf
...
...
@@ -12,20 +12,20 @@ class GraphCommit
@_commit
.
send
(
m
,
*
args
,
&
block
)
end
# Method is adding time and space on the
# list of commits. As well as returns date list
# Method is adding time and space on the
# list of commits. As well as returns date list
# corelated with time set on commits.
#
# @param [Array<GraphCommit>] comits to index
#
# @return [Array<TimeDate>] list of commit dates corelated with time on commits
# @return [Array<TimeDate>] list of commit dates corelated with time on commits
def
self
.
index_commits
(
commits
)
days
,
heads
=
[],
[]
map
=
{}
commits
.
reverse
.
each_with_index
do
|
c
,
i
|
c
.
time
=
i
days
[
i
]
=
c
.
committed_date
days
[
i
]
=
c
.
committed_date
map
[
c
.
id
]
=
c
heads
+=
c
.
refs
unless
c
.
refs
.
nil?
end
...
...
@@ -35,7 +35,7 @@ class GraphCommit
heads
.
sort!
do
|
a
,
b
|
if
a
.
name
==
"master"
-
1
elsif
b
.
name
==
"master"
elsif
b
.
name
==
"master"
1
else
b
.
commit
.
committed_date
<=>
a
.
commit
.
committed_date
...
...
@@ -45,7 +45,7 @@ class GraphCommit
j
=
0
heads
.
each
do
|
h
|
if
map
.
include?
h
.
commit
.
id
then
j
=
mark_chain
(
j
+=
1
,
map
[
h
.
commit
.
id
],
map
)
j
=
mark_chain
(
j
+=
1
,
map
[
h
.
commit
.
id
],
map
)
end
end
days
...
...
@@ -55,15 +55,15 @@ class GraphCommit
#
# @param [Fixnum] space (row on the graph) to be set
# @param [GraphCommit] the commit object.
# @param [Hash<String,GraphCommit>] map of commits
# @param [Hash<String,GraphCommit>] map of commits
#
# @return [Fixnum] max space used.
# @return [Fixnum] max space used.
def
self
.
mark_chain
(
mark
,
commit
,
map
)
commit
.
space
=
mark
if
commit
.
space
==
0
m1
=
mark
-
1
marks
=
commit
.
parents
.
collect
do
|
p
|
if
map
.
include?
p
.
id
and
map
[
p
.
id
].
space
==
0
then
mark_chain
(
m1
+=
1
,
map
[
p
.
id
],
map
)
mark_chain
(
m1
+=
1
,
map
[
p
.
id
],
map
)
else
m1
+
1
end
...
...
@@ -71,5 +71,5 @@ class GraphCommit
marks
<<
mark
marks
.
compact
.
max
end
end
spec/models/project_spec.rb
View file @
12782adf
...
...
@@ -62,10 +62,10 @@ describe Project do
end
end
describe
"updates"
do
describe
"updates"
do
let
(
:project
)
{
Factory
:project
}
before
do
before
do
@issue
=
Factory
:issue
,
:project
=>
project
,
:author
=>
Factory
(
:user
),
...
...
@@ -86,10 +86,10 @@ describe Project do
end
end
describe
"last_activity"
do
describe
"last_activity"
do
let
(
:project
)
{
Factory
:project
}
before
do
before
do
@note
=
Factory
:note
,
:project
=>
project
,
:author
=>
Factory
(
:user
)
...
...
@@ -99,7 +99,7 @@ describe Project do
it
{
project
.
last_activity_date
.
to_s
.
should
==
@note
.
created_at
.
to_s
}
end
describe
"fresh commits"
do
describe
"fresh commits"
do
let
(
:project
)
{
Factory
:project
}
it
{
project
.
fresh_commits
(
3
).
count
.
should
==
3
}
...
...
spec/models/user_spec.rb
View file @
12782adf
...
...
@@ -19,15 +19,20 @@ describe User do
user
.
identifier
.
should
==
"test_mail.com"
end
it
"should have authentication token"
do
user
=
Factory
(
:user
)
user
.
authentication_token
.
should_not
==
""
end
describe
"dependent"
do
before
do
before
do
@user
=
Factory
:user
@note
=
Factory
:note
,
@note
=
Factory
:note
,
:author
=>
@user
,
:project
=>
Factory
(
:project
)
end
it
"should destroy all notes with user"
do
it
"should destroy all notes with user"
do
Note
.
find_by_id
(
@note
.
id
).
should_not
be_nil
@user
.
destroy
Note
.
find_by_id
(
@note
.
id
).
should
be_nil
...
...
spec/requests/commits_spec.rb
View file @
12782adf
...
...
@@ -25,6 +25,25 @@ describe "Commits" do
page
.
should
have_content
(
commit
.
author
)
page
.
should
have_content
(
commit
.
message
)
end
it
"should render atom feed"
do
visit
project_commits_path
(
project
,
:atom
)
page
.
response_headers
[
'Content-Type'
].
should
have_content
(
"application/atom+xml"
)
page
.
body
.
should
have_selector
(
"title"
,
:text
=>
"Recent commits to
#{
project
.
name
}
"
)
page
.
body
.
should
have_selector
(
"author email"
,
:text
=>
commit
.
author_email
)
page
.
body
.
should
have_selector
(
"entry summary"
,
:text
=>
commit
.
message
)
end
it
"should render atom feed via private token"
do
logout
visit
project_commits_path
(
project
,
:atom
,
:private_token
=>
@user
.
private_token
)
page
.
response_headers
[
'Content-Type'
].
should
have_content
(
"application/atom+xml"
)
page
.
body
.
should
have_selector
(
"title"
,
:text
=>
"Recent commits to
#{
project
.
name
}
"
)
page
.
body
.
should
have_selector
(
"author email"
,
:text
=>
commit
.
author_email
)
page
.
body
.
should
have_selector
(
"entry summary"
,
:text
=>
commit
.
message
)
end
end
describe
"GET /commits/:id"
do
...
...
spec/requests/dashboard_spec.rb
View file @
12782adf
...
...
@@ -15,13 +15,13 @@ describe "Dashboard" do
end
it
"should have projects panel"
do
within
".project-list"
do
within
".project-list"
do
page
.
should
have_content
(
@project
.
name
)
end
end
it
"should have news feed"
do
within
"#news-feed"
do
within
"#news-feed"
do
page
.
should
have_content
(
"master"
)
page
.
should
have_content
(
@project
.
commit
.
author
.
name
)
page
.
should
have_content
(
@project
.
commit
.
safe_message
)
...
...
spec/requests/issues_spec.rb
View file @
12782adf
...
...
@@ -27,6 +27,25 @@ describe "Issues" do
it
{
should
have_content
(
@issue
.
project
.
name
)
}
it
{
should
have_content
(
@issue
.
assignee
.
name
)
}
it
"should render atom feed"
do
visit
project_issues_path
(
project
,
:atom
)
page
.
response_headers
[
'Content-Type'
].
should
have_content
(
"application/atom+xml"
)
page
.
body
.
should
have_selector
(
"title"
,
:text
=>
"
#{
project
.
name
}
issues"
)
page
.
body
.
should
have_selector
(
"author email"
,
:text
=>
@issue
.
author_email
)
page
.
body
.
should
have_selector
(
"entry summary"
,
:text
=>
@issue
.
title
)
end
it
"should render atom feed via private token"
do
logout
visit
project_issues_path
(
project
,
:atom
,
:private_token
=>
@user
.
private_token
)
page
.
response_headers
[
'Content-Type'
].
should
have_content
(
"application/atom+xml"
)
page
.
body
.
should
have_selector
(
"title"
,
:text
=>
"
#{
project
.
name
}
issues"
)
page
.
body
.
should
have_selector
(
"author email"
,
:text
=>
@issue
.
author_email
)
page
.
body
.
should
have_selector
(
"entry summary"
,
:text
=>
@issue
.
title
)
end
describe
"Destroy"
do
before
do
# admin access to remove issue
...
...
@@ -81,13 +100,13 @@ describe "Issues" do
end
describe
"fill in"
do
describe
'assign to me'
do
describe
'assign to me'
do
before
do
fill_in
"issue_title"
,
:with
=>
"bug 345"
click_link
"Select user"
within
"#issue_assignee_id-menu"
do
click_link
@user
.
name
end
end
end
it
{
expect
{
click_button
"Save"
}.
to
change
{
Issue
.
count
}.
by
(
1
)
}
...
...
@@ -107,13 +126,13 @@ describe "Issues" do
end
end
describe
'assign to other'
do
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
end
it
{
expect
{
click_button
"Save"
}.
to
change
{
Issue
.
count
}.
by
(
1
)
}
...
...
@@ -145,7 +164,7 @@ describe "Issues" do
end
end
describe
"Show issue"
do
describe
"Show issue"
do
before
do
@issue
=
Factory
:issue
,
:author
=>
@user
,
...
...
@@ -205,7 +224,7 @@ describe "Issues" do
@issue
.
save
end
end
it
"should be able to search on different statuses"
do
@issue
=
Issue
.
first
@issue
.
closed
=
true
...
...
@@ -214,13 +233,13 @@ describe "Issues" do
visit
project_issues_path
(
project
)
choose
'closed_issues'
fill_in
'issue_search'
,
:with
=>
'foobar'
page
.
should
have_content
'foobar'
page
.
should_not
have_content
'foobar2'
page
.
should_not
have_content
'gitlab'
end
it
"should search for term and return the correct results"
do
it
"should search for term and return the correct results"
do
visit
project_issues_path
(
project
)
fill_in
'issue_search'
,
:with
=>
'foobar'
...
...
spec/requests/projects_spec.rb
View file @
12782adf
...
...
@@ -73,7 +73,7 @@ describe "Projects" do
end
it
"should beahave like activities page"
do
within
".project-update"
do
within
".project-update"
do
page
.
should
have_content
(
"master"
)
page
.
should
have_content
(
@project
.
commit
.
author
.
name
)
page
.
should
have_content
(
@project
.
commit
.
safe_message
)
...
...
spec/requests/tags_spec.rb
View file @
12782adf
...
...
@@ -10,7 +10,6 @@ describe "Tags" do
# end
# end
describe
"GET '/tags.json'"
do
before
do
@project
=
Factory
:project
...
...
@@ -20,12 +19,9 @@ describe "Tags" do
visit
'/tags.json'
end
it
"should contains tags"
do
page
.
should
have_content
(
'demo1'
)
end
end
end
spec/requests/top_panel_spec.rb
View file @
12782adf
...
...
@@ -7,7 +7,7 @@ describe "Top Panel", :js => true do
before
do
visit
projects_path
fill_in
"search"
,
:with
=>
"Ke"
within
".ui-autocomplete"
do
within
".ui-autocomplete"
do
find
(
:xpath
,
"//a[.=
\"
Keys
\"
]"
).
click
end
end
...
...
@@ -24,7 +24,7 @@ describe "Top Panel", :js => true do
visit
project_path
(
@project
)
fill_in
"search"
,
:with
=>
"Commi"
within
".ui-autocomplete"
do
within
".ui-autocomplete"
do
find
(
:xpath
,
"//a[.=
\"
#{
@project
.
code
}
/ Commits
\"
]"
).
click
end
end
...
...
app/assets/javascripts/chosen.jquery
.js
→
vendor/assets/javascripts/chosen
.js
View file @
12782adf
File moved
app/assets/javascripts/modernizr-2.0.6.min
.js
→
vendor/assets/javascripts/modernizr
.js
View file @
12782adf
File moved
app
/assets/stylesheets/chosen.css
→
vendor
/assets/stylesheets/chosen.css
View file @
12782adf
File moved
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment