Commit 12782adf authored by gitlabhq's avatar gitlabhq

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

parents 6b9f221a d63f04ab
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
//= require jquery.ui.selectmenu //= require jquery.ui.selectmenu
//= require jquery.tagify //= require jquery.tagify
//= require jquery.cookie //= require jquery.cookie
//= require modernizr
//= require chosen
//= require raphael //= require raphael
//= require branch-graph //= require branch-graph
//= require_tree . //= require_tree .
......
...@@ -8,8 +8,6 @@ $(document).ready(function(){ ...@@ -8,8 +8,6 @@ $(document).ready(function(){
}); });
}); });
var CommitsList = { var CommitsList = {
ref:null, ref:null,
......
...@@ -39,7 +39,6 @@ replace: ...@@ -39,7 +39,6 @@ replace:
this.initLoadMore(); this.initLoadMore();
}, },
prepend: prepend:
function(id, html) { function(id, html) {
if(id != this.last_id) { if(id != this.last_id) {
...@@ -68,8 +67,6 @@ refresh: ...@@ -68,8 +67,6 @@ refresh:
dataType: "script"}); dataType: "script"});
}, },
initRefresh: initRefresh:
function() { function() {
// init timer // init timer
......
...@@ -48,7 +48,6 @@ function taggifyForm(){ ...@@ -48,7 +48,6 @@ function taggifyForm(){
source: '/tags.json' source: '/tags.json'
}); });
$('form').submit( function() { $('form').submit( function() {
var tag_field = $('#tag_field') var tag_field = $('#tag_field')
tag_field.val( tag_field.tagify('serialize') ); tag_field.val( tag_field.tagify('serialize') );
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
*= require jquery-ui/jquery-ui *= require jquery-ui/jquery-ui
*= require jquery-ui/jquery.ui.selectmenu *= require jquery-ui/jquery.ui.selectmenu
*= require jquery-ui/jquery.tagify *= require jquery-ui/jquery.tagify
*= require chosen
*= require_self *= require_self
*= require_tree . *= require_tree .
*/ */
......
...@@ -45,4 +45,3 @@ ...@@ -45,4 +45,3 @@
} }
.issue:hover .action-links { display:block; } .issue:hover .action-links { display:block; }
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
} }
} }
/* Note textare */ /* Note textare */
#note_note { #note_note {
height:100px; height:100px;
......
...@@ -120,7 +120,6 @@ table.highlighttable pre{ ...@@ -120,7 +120,6 @@ table.highlighttable pre{
font-size:12px !important; font-size:12px !important;
} }
table.highlighttable .linenodiv pre { table.highlighttable .linenodiv pre {
text-align: right; text-align: right;
padding-right: 4px; padding-right: 4px;
...@@ -235,7 +234,6 @@ input.ssh_project_url { ...@@ -235,7 +234,6 @@ input.ssh_project_url {
} }
} }
#user_projects_limit{ #user_projects_limit{
width: 60px; width: 60px;
} }
......
...@@ -60,7 +60,6 @@ input:invalid, textarea:invalid { background-color: #f0dddd; } ...@@ -60,7 +60,6 @@ input:invalid, textarea:invalid { background-color: #f0dddd; }
table { border-collapse: collapse; border-spacing: 0; } table { border-collapse: collapse; border-spacing: 0; }
td { vertical-align: top; } td { vertical-align: top; }
/* ==|== primary styles ===================================================== /* ==|== primary styles =====================================================
Author: Ricardo Rauch Author: Ricardo Rauch
========================================================================== */ ========================================================================== */
...@@ -127,7 +126,6 @@ table thead .image{width:100px} ...@@ -127,7 +126,6 @@ table thead .image{width:100px}
table tr:hover, .listed_items tr.odd:hover{background-color:#FFFFCF} table tr:hover, .listed_items tr.odd:hover{background-color:#FFFFCF}
/* eo Tables */ /* eo Tables */
/* Buttons */ /* Buttons */
.grey-button{ .grey-button{
border-radius: 5px; border-radius: 5px;
...@@ -216,7 +214,6 @@ input.button{margin-bottom: 1.5em} ...@@ -216,7 +214,6 @@ input.button{margin-bottom: 1.5em}
font-size: 12px; font-size: 12px;
} }
.ui-box .data{padding: .5em 1em} .ui-box .data{padding: .5em 1em}
.ui-box .buttons{background-color: #f7f8f9; padding: 1em; .ui-box .buttons{background-color: #f7f8f9; padding: 1em;
...@@ -282,7 +279,6 @@ body.login-page{background-color: #f1f1f1; padding-top: 10%} ...@@ -282,7 +279,6 @@ body.login-page{background-color: #f1f1f1; padding-top: 10%}
.login-box a.forgot{float: right; padding-top: 6px} .login-box a.forgot{float: right; padding-top: 6px}
/* Icons */ /* Icons */
.directory, .file{ .directory, .file{
display: inline-block; display: inline-block;
...@@ -324,8 +320,6 @@ body.login-page{background-color: #f1f1f1; padding-top: 10%} ...@@ -324,8 +320,6 @@ body.login-page{background-color: #f1f1f1; padding-top: 10%}
#container{background-color: white; overflow: hidden; } #container{background-color: white; overflow: hidden; }
body.collapsed #container{margin: auto; width: 980px; border: 1px solid rgba(0,0,0,.22); border-top: 0; box-shadow: 0 0 0px 4px rgba(0,0,0,.04)} body.collapsed #container{margin: auto; width: 980px; border: 1px solid rgba(0,0,0,.22); border-top: 0; box-shadow: 0 0 0px 4px rgba(0,0,0,.04)}
/* Header */ /* Header */
header{background: #474D57 url('bg-header.png') repeat-x bottom; z-index: 10000; height: 44px; padding: 10px 2% 6px 2%; position: relative} header{background: #474D57 url('bg-header.png') repeat-x bottom; z-index: 10000; height: 44px; padding: 10px 2% 6px 2%; position: relative}
header a{color: white; text-shadow: 0 -1px 0 black} header a{color: white; text-shadow: 0 -1px 0 black}
...@@ -345,8 +339,6 @@ header h1.logo a{ ...@@ -345,8 +339,6 @@ header h1.logo a{
text-indent: -1000em; text-indent: -1000em;
} }
header nav{border-radius: 4px; box-shadow: 0 1px 2px black; width: 294px; margin: auto; header nav{border-radius: 4px; box-shadow: 0 1px 2px black; width: 294px; margin: auto;
background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #595d63), to(#31363e)); background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #595d63), to(#31363e));
background-image: -webkit-linear-gradient(#595d63 6.6%, #31363e); background-image: -webkit-linear-gradient(#595d63 6.6%, #31363e);
...@@ -369,7 +361,6 @@ header nav a:active{ ...@@ -369,7 +361,6 @@ header nav a:active{
box-shadow: 0 1px 4px rgba(0,0,0,.8) inset; box-shadow: 0 1px 4px rgba(0,0,0,.8) inset;
} }
header nav a.dashboard { header nav a.dashboard {
-webkit-border-top-left-radius: 4px; -webkit-border-top-left-radius: 4px;
-webkit-border-bottom-left-radius: 4px; -webkit-border-bottom-left-radius: 4px;
...@@ -388,7 +379,6 @@ header nav a.admin{ ...@@ -388,7 +379,6 @@ header nav a.admin{
border-bottom-right-radius: 4px; border-bottom-right-radius: 4px;
} }
header .search{ display: inline-block; float: right; margin-right: 46px} header .search{ display: inline-block; float: right; margin-right: 46px}
header nav a span{width: 20px; height: 20px; display: inline-block; background: red; position: absolute; left: 8px; top: 6px;} header nav a span{width: 20px; height: 20px; display: inline-block; background: red; position: absolute; left: 8px; top: 6px;}
...@@ -397,7 +387,6 @@ header nav a.dashboard span{background: url('images.png') no-repeat -161px 0;} ...@@ -397,7 +387,6 @@ header nav a.dashboard span{background: url('images.png') no-repeat -161px 0;}
header nav a.admin span{background: url('images.png') no-repeat -184px 0;} header nav a.admin span{background: url('images.png') no-repeat -184px 0;}
header nav a.project span{background: url('images.png') no-repeat -209px -1px; top: 7px} header nav a.project span{background: url('images.png') no-repeat -209px -1px; top: 7px}
header .login-top{float: right; width: 180px; header .login-top{float: right; width: 180px;
background-image: -webkit-gradient(linear, 0 0, 0 62, color-stop(0.032, #464c56), to(#363c45)); background-image: -webkit-gradient(linear, 0 0, 0 62, color-stop(0.032, #464c56), to(#363c45));
background-image: -webkit-linear-gradient(#464c56 3.2%, #363c45); background-image: -webkit-linear-gradient(#464c56 3.2%, #363c45);
...@@ -419,7 +408,6 @@ header{margin-bottom: 0; clear: both; } ...@@ -419,7 +408,6 @@ header{margin-bottom: 0; clear: both; }
.page-title a.grey-button{float: right;} .page-title a.grey-button{float: right;}
.right{float: right;} .right{float: right;}
/* Account box */ /* Account box */
header .account-box{position: absolute; right: 0; top: 8px; z-index: 10000; width: 128px; font-size: 11px; float: right; display: block; cursor: pointer;} header .account-box{position: absolute; right: 0; top: 8px; z-index: 10000; width: 128px; font-size: 11px; float: right; display: block; cursor: pointer;}
header .account-box img{ border-radius: 4px; right: 20px; position: absolute; width: 38px; height: 38px; display: block; box-shadow: 0 1px 2px black} header .account-box img{ border-radius: 4px; right: 20px; position: absolute; width: 38px; height: 38px; display: block; box-shadow: 0 1px 2px black}
...@@ -462,7 +450,6 @@ header .account-links:before { ...@@ -462,7 +450,6 @@ header .account-links:before {
z-index:10; z-index:10;
} }
/* Inspired by http://maxvoltar.com/temp/nowplaying/ */ /* Inspired by http://maxvoltar.com/temp/nowplaying/ */
header .account-links{background: white; display: none; z-index: 100000; border-radius: 5px; width: 100px; position: absolute; right: 20px; top: 46px; margin-top: 0; float: right; box-shadow: 0 1px 1px rgba(0,0,0,.2); } header .account-links{background: white; display: none; z-index: 100000; border-radius: 5px; width: 100px; position: absolute; right: 20px; top: 46px; margin-top: 0; float: right; box-shadow: 0 1px 1px rgba(0,0,0,.2); }
header .account-links a{color: #666; padding: 6px 10px; display: block; text-shadow: none; border-bottom: 1px solid #eee} header .account-links a{color: #666; padding: 6px 10px; display: block; text-shadow: none; border-bottom: 1px solid #eee}
...@@ -509,13 +496,10 @@ input.search-input:focus{ background-color: white; width: 216px;} ...@@ -509,13 +496,10 @@ input.search-input:focus{ background-color: white; width: 216px;}
input.search-input::-webkit-input-placeholder {color: #666} input.search-input::-webkit-input-placeholder {color: #666}
/* eo Header */ /* eo Header */
h2.icon{position: relative; padding-left: 40px; float: left; } h2.icon{position: relative; padding-left: 40px; float: left; }
/*h2 a{font-weight: normal;}*/ /*h2 a{font-weight: normal;}*/
h2.icon span{background: #E3E5EA url('images.png'); height: 32px; width: 32px; left: 0; top: -5px; border-radius: 4px; display: inline-block; position: absolute} h2.icon span{background: #E3E5EA url('images.png'); height: 32px; width: 32px; left: 0; top: -5px; border-radius: 4px; display: inline-block; position: absolute}
/* Dashboard Page */ /* Dashboard Page */
html, body { height: 100%; } html, body { height: 100%; }
...@@ -545,7 +529,6 @@ body.dashboard-page .news-feed .project-updates a.project-update span.update-aut ...@@ -545,7 +529,6 @@ body.dashboard-page .news-feed .project-updates a.project-update span.update-aut
body.dashboard-page .news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;} body.dashboard-page .news-feed .project-updates a.project-update span.update-author strong{font-weight: bold; font-style: normal;}
/* eo Dashboard Page */ /* eo Dashboard Page */
.grey-button.right{margin-top: 20px} .grey-button.right{margin-top: 20px}
/* Project Page */ /* Project Page */
...@@ -561,8 +544,6 @@ body.project-page h2.icon .project-name i.arrow{float: right; ...@@ -561,8 +544,6 @@ body.project-page h2.icon .project-name i.arrow{float: right;
height: 5px; height: 5px;
} }
body.project-page h2.icon span{ background-position: -78px -68px; } body.project-page h2.icon span{ background-position: -78px -68px; }
body.project-page .project-container{ position: relative; float: left; width: 100%; height: 100%; } body.project-page .project-container{ position: relative; float: left; width: 100%; height: 100%; }
body.project-page .page-title{margin-bottom: 0} body.project-page .page-title{margin-bottom: 0}
...@@ -575,7 +556,6 @@ body.projects-page input.text.git-url {margin:10px 0 0 } ...@@ -575,7 +556,6 @@ body.projects-page input.text.git-url {margin:10px 0 0 }
.projects_selector:hover > .project-box{ -moz-box-shadow:0px 0px 10px rgba(0, 0, 0, .1); -webkit-box-shadow:0px 0px 10px rgba(0, 0, 0, .1); box-shadow:0px 0px 10px rgba(0, 0, 0, .1); } .projects_selector:hover > .project-box{ -moz-box-shadow:0px 0px 10px rgba(0, 0, 0, .1); -webkit-box-shadow:0px 0px 10px rgba(0, 0, 0, .1); box-shadow:0px 0px 10px rgba(0, 0, 0, .1); }
body.project-page .project-sidebar aside{width: 219px} body.project-page .project-sidebar aside{width: 219px}
body.project-page .project-sidebar aside a{display: block; position: relative; background: white; padding: 15px 10px; border-bottom: 1px solid #eee} body.project-page .project-sidebar aside a{display: block; position: relative; background: white; padding: 15px 10px; border-bottom: 1px solid #eee}
body.project-page .project-sidebar aside a:first-child{ body.project-page .project-sidebar aside a:first-child{
...@@ -623,7 +603,6 @@ body.project-page.commits-page .commit-info data.commit-button{ ...@@ -623,7 +603,6 @@ body.project-page.commits-page .commit-info data.commit-button{
padding-right: 20px; padding-right: 20px;
} }
body.project-page.commits-page .commit-button i{ body.project-page.commits-page .commit-button i{
background: url('images.png') no-repeat -138px -27px; background: url('images.png') no-repeat -138px -27px;
width: 6px; width: 6px;
...@@ -648,9 +627,6 @@ body.project-page.commits-page .commits-date a.commit span.commit-author strong{ ...@@ -648,9 +627,6 @@ body.project-page.commits-page .commits-date a.commit span.commit-author strong{
/* eo Project Page */ /* eo Project Page */
/* Projects Page */ /* Projects Page */
body.projects-page h2.icon span{background-position: -31px -70px;} body.projects-page h2.icon span{background-position: -31px -70px;}
body.projects-page .project-box.ui-box .data .repository {margin-bottom: 20px} body.projects-page .project-box.ui-box .data .repository {margin-bottom: 20px}
...@@ -659,7 +635,6 @@ body.projects-page .project-box{width: 100%; margin-bottom: 3em} ...@@ -659,7 +635,6 @@ body.projects-page .project-box{width: 100%; margin-bottom: 3em}
body.projects-page .browse-code{margin-right: 10px} body.projects-page .browse-code{margin-right: 10px}
/* eo Projects Page */ /* eo Projects Page */
/* ==|== non-semantic helper classes ======================================== */ /* ==|== non-semantic helper classes ======================================== */
.ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; } .ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; }
.ir br { display: none; } .ir br { display: none; }
...@@ -671,20 +646,16 @@ body.projects-page .browse-code{margin-right: 10px} ...@@ -671,20 +646,16 @@ body.projects-page .browse-code{margin-right: 10px}
.clearfix:after { clear: both; } .clearfix:after { clear: both; }
.clearfix { zoom: 1; } .clearfix { zoom: 1; }
/* ==|== media queries ====================================================== */ /* ==|== media queries ====================================================== */
@media only screen and (min-width: 480px) { @media only screen and (min-width: 480px) {
} }
@media only screen and (min-width: 768px) { @media only screen and (min-width: 768px) {
} }
/* ==|== print styles ======================================================= */ /* ==|== print styles ======================================================= */
@media print { @media print {
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
font-size: 14px; font-size: 14px;
} }
.small-tags a{ .small-tags a{
font-size: 9px; font-size: 9px;
...@@ -29,7 +28,6 @@ ...@@ -29,7 +28,6 @@
font-weight: bold; font-weight: bold;
} }
.medium-tags a{ .medium-tags a{
font-size: 12px; font-size: 12px;
......
...@@ -10,7 +10,6 @@ class CommitsController < ApplicationController ...@@ -10,7 +10,6 @@ class CommitsController < ApplicationController
before_filter :require_non_empty_project before_filter :require_non_empty_project
before_filter :load_refs, :only => :index # load @branch, @tag & @ref before_filter :load_refs, :only => :index # load @branch, @tag & @ref
def index def index
@repo = project.repo @repo = project.repo
limit, offset = (params[:limit] || 20), (params[:offset] || 0) limit, offset = (params[:limit] || 20), (params[:offset] || 0)
...@@ -24,6 +23,7 @@ class CommitsController < ApplicationController ...@@ -24,6 +23,7 @@ class CommitsController < ApplicationController
respond_to do |format| respond_to do |format|
format.html # index.html.erb format.html # index.html.erb
format.js format.js
format.atom { render :layout => false }
end end
end end
......
...@@ -24,6 +24,7 @@ class IssuesController < ApplicationController ...@@ -24,6 +24,7 @@ class IssuesController < ApplicationController
respond_to do |format| respond_to do |format|
format.html # index.html.erb format.html # index.html.erb
format.js format.js
format.atom { render :layout => false }
end end
end end
...@@ -97,7 +98,7 @@ class IssuesController < ApplicationController ...@@ -97,7 +98,7 @@ class IssuesController < ApplicationController
else @project.issues.opened else @project.issues.opened
end end
@issues = @issues.where("title LIKE ? OR content LIKE ?", "%#{terms}%", "%#{terms}%") unless terms.blank? @issues = @issues.where("title LIKE ?", "%#{terms}%") unless terms.blank?
render :partial => 'issues' render :partial => 'issues'
end end
......
class User < ActiveRecord::Base class User < ActiveRecord::Base
# Include default devise modules. Others available are: # Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, devise :database_authenticatable, :token_authenticatable,
:recoverable, :rememberable, :trackable, :validatable :recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model # Setup accessible (or protected) attributes for your model
...@@ -25,6 +25,8 @@ class User < ActiveRecord::Base ...@@ -25,6 +25,8 @@ class User < ActiveRecord::Base
:foreign_key => :assignee_id, :foreign_key => :assignee_id,
:dependent => :destroy :dependent => :destroy
before_create :ensure_authentication_token
alias_attribute :private_token, :authentication_token
scope :not_in_project, lambda { |project| where("id not in (:ids)", :ids => project.users.map(&:id) ) } scope :not_in_project, lambda { |project| where("id not in (:ids)", :ids => project.users.map(&:id) ) }
def identifier def identifier
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
%br %br
= f.text_field :path = f.text_field :path
.form-row .form-row
= f.label :tag_list = f.label :tag_list
%br %br
......
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
...@@ -20,8 +20,6 @@ ...@@ -20,8 +20,6 @@
.loading{ :style => "display:none;"} .loading{ :style => "display:none;"}
%center= image_tag "ajax-loader.gif" %center= image_tag "ajax-loader.gif"
:javascript :javascript
$(function(){ $(function(){
CommitsList.init("#{@ref}", 20); CommitsList.init("#{@ref}", 20);
......
xml.instruct!
xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do
xml.title "#{@project.name} issues"
xml.link :href => project_issues_url(@project, :atom), :rel => "self", :type => "application/atom+xml"
xml.link :href => project_issues_url(@project), :rel => "alternate", :type => "text/html"
xml.id project_issues_url(@project)
xml.updated @issues.first.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") if @issues.any?
@issues.each do |issue|
xml.entry do
xml.id project_issue_url(@project, issue)
xml.link :href => project_issue_url(@project, issue)
xml.title truncate(issue.title, :length => 80)
xml.updated issue.created_at.strftime("%Y-%m-%dT%H:%M:%SZ")
xml.media :thumbnail, :width => "40", :height => "40", :url => gravatar_icon(issue.author_email)
xml.author do |author|
xml.name issue.author_name
xml.email issue.author_email
end
xml.summary issue.title
end
end
end
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
var href = $('.issue_search').parent().attr('action'); var href = $('.issue_search').parent().attr('action');
var last_terms = ''; var last_terms = '';
var setIssueFilter = function(form, value){ var setIssueFilter = function(form, value){
$.cookie('issue_filter', value, { expires: 140 }); $.cookie('issue_filter', value, { expires: 140 });
form.submit(); form.submit();
......
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
- else - else
= check_box_tag "closed", 1, @issue.closed, :disabled => true = check_box_tag "closed", 1, @issue.closed, :disabled => true
- if can?(current_user, :write_issue, @issue) - if can?(current_user, :write_issue, @issue)
.clear .clear
%br %br
......
...@@ -5,6 +5,10 @@ ...@@ -5,6 +5,10 @@
GitLab #{" - #{@project.name}" if @project && !@project.new_record?} GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
= stylesheet_link_tag "application" = stylesheet_link_tag "application"
= javascript_include_tag "application" = javascript_include_tag "application"
- if current_page?(tree_project_path(@project)) || current_page?(project_commits_path(@project))
= auto_discovery_link_tag(:atom, project_commits_url(@project, :atom, :ref => @ref, :private_token => current_user.private_token), :title => "Recent commits to #{@project.name}:#{@ref}")
- if request.path == project_issues_path(@project)
= auto_discovery_link_tag(:atom, project_issues_url(@project, :atom, :private_token => current_user.private_token), :title => "#{@project.name} issues")
= csrf_meta_tags = csrf_meta_tags
= javascript_tag do = javascript_tag do
REQ_URI = "#{request.env["REQUEST_URI"]}"; REQ_URI = "#{request.env["REQUEST_URI"]}";
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
:plain :plain
NoteList.replace(#{@notes.last.id}, #{@notes.first.id}, "#{escape_javascript(render(:partial => 'notes/notes_list'))}"); NoteList.replace(#{@notes.last.id}, #{@notes.first.id}, "#{escape_javascript(render(:partial => 'notes/notes_list'))}");
- elsif params[:last_id] - elsif params[:last_id]
:plain :plain
NoteList.prepend(#{@notes.first.id}, "#{escape_javascript(render(:partial => 'notes/notes_list'))}"); NoteList.prepend(#{@notes.first.id}, "#{escape_javascript(render(:partial => 'notes/notes_list'))}");
......
...@@ -10,9 +10,7 @@ ...@@ -10,9 +10,7 @@
%td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"}
%td{:align => "left", :style => "padding: 20px 0 0;"} %td{:align => "left", :style => "padding: 20px 0 0;"}
%h2{:style => "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} %h2{:style => "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
= link_to project_issue_url(@project, @issue) do = link_to project_issue_url(@project, @issue), :title => @issue.title do
= "Issue ##{@issue.id.to_s}" = "Issue ##{@issue.id.to_s}"
= truncate(@issue.title, :length => 45) = truncate(@issue.title, :length => 45)
%br %br
%cite{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "}
= @issue.content
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
= project.name = project.name
.small-tags= tag_list project .small-tags= tag_list project
%td= truncate project.url_to_repo %td= truncate project.url_to_repo
%td= project.code %td= project.code
%td= check_box_tag "read", 1, project.readers.include?(current_user), :disabled => :disabled %td= check_box_tag "read", 1, project.readers.include?(current_user), :disabled => :disabled
......
= form_tag destination, :method => :get, :class => "project-refs-form" do = form_tag destination, :method => :get, :class => "project-refs-form" do
= select_tag "ref", grouped_options_refs, :onchange => "this.form.submit();", :class => "project-refs-select" = select_tag "ref", grouped_options_refs, :onchange => "this.form.submit();", :class => "project-refs-select"
:javascript :javascript
$(function(){ $(function(){
$('.project-refs-select').chosen(); $('.project-refs-select').chosen();
......
-#%a.right.button{:href => "#"} Download -#%a.right.button{:href => "#"} Download
-#-if can? current_user, :admin_project, @project -#-if can? current_user, :admin_project, @project
%a.right.button.blue{:href => "#"} EDIT %a.right.button.blue{:href => "#"} EDIT
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
%h2 %h2
Tags Tags
.tags-list .tags-list
- @tags.all.each do |tag| - @tags.all.each do |tag|
= link_to "#{tag.name}(#{tag.count})", tag_path(name) = link_to "#{tag.name}(#{tag.count})", tag_path(name)
......
...@@ -158,11 +158,11 @@ Devise.setup do |config| ...@@ -158,11 +158,11 @@ Devise.setup do |config|
# ==> Configuration for :token_authenticatable # ==> Configuration for :token_authenticatable
# Defines name of the authentication token params key # Defines name of the authentication token params key
# config.token_authentication_key = :auth_token config.token_authentication_key = :private_token
# If true, authentication through token does not store user in session and needs # If true, authentication through token does not store user in session and needs
# to be supplied on each request. Useful if you are using the token as API token. # to be supplied on each request. Useful if you are using the token as API token.
# config.stateless_token = false config.stateless_token = true
# ==> Scopes configuration # ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for # Turn scoped views on. Before rendering "sessions/new", it will first check for
......
...@@ -3,7 +3,6 @@ Gitlab::Application.routes.draw do ...@@ -3,7 +3,6 @@ Gitlab::Application.routes.draw do
get 'tags'=> 'tags#index' get 'tags'=> 'tags#index'
get 'tags/:tag' => 'projects#index' get 'tags/:tag' => 'projects#index'
namespace :admin do namespace :admin do
resources :users resources :users
resources :projects resources :projects
...@@ -54,8 +53,6 @@ Gitlab::Application.routes.draw do ...@@ -54,8 +53,6 @@ Gitlab::Application.routes.draw do
resources :issues do resources :issues do
collection do collection do
post :sort post :sort
end
collection do
get :search get :search
end end
end end
......
class RemoveContentFromIssues < ActiveRecord::Migration
def up
remove_column :issues, :content
end
def down
add_column :issues, :content, :text
end
end
class AddAuthenticationTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :authentication_token, :string
end
end
...@@ -11,11 +11,10 @@ ...@@ -11,11 +11,10 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20111101222453) do ActiveRecord::Schema.define(:version => 20111115063954) do
create_table "issues", :force => true do |t| create_table "issues", :force => true do |t|
t.string "title" t.string "title"
t.text "content"
t.integer "assignee_id" t.integer "assignee_id"
t.integer "author_id" t.integer "author_id"
t.integer "project_id" t.integer "project_id"
...@@ -104,6 +103,7 @@ ActiveRecord::Schema.define(:version => 20111101222453) do ...@@ -104,6 +103,7 @@ ActiveRecord::Schema.define(:version => 20111101222453) do
t.string "skype", :default => "", :null => false t.string "skype", :default => "", :null => false
t.string "linkedin", :default => "", :null => false t.string "linkedin", :default => "", :null => false
t.string "twitter", :default => "", :null => false t.string "twitter", :default => "", :null => false
t.string "authentication_token"
end end
add_index "users", ["email"], :name => "index_users_on_email", :unique => true add_index "users", ["email"], :name => "index_users_on_email", :unique => true
......
...@@ -19,6 +19,11 @@ describe User do ...@@ -19,6 +19,11 @@ describe User do
user.identifier.should == "test_mail.com" user.identifier.should == "test_mail.com"
end end
it "should have authentication token" do
user = Factory(:user)
user.authentication_token.should_not == ""
end
describe "dependent" do describe "dependent" do
before do before do
@user = Factory :user @user = Factory :user
......
...@@ -25,6 +25,25 @@ describe "Commits" do ...@@ -25,6 +25,25 @@ describe "Commits" do
page.should have_content(commit.author) page.should have_content(commit.author)
page.should have_content(commit.message) page.should have_content(commit.message)
end end
it "should render atom feed" do
visit project_commits_path(project, :atom)
page.response_headers['Content-Type'].should have_content("application/atom+xml")
page.body.should have_selector("title", :text => "Recent commits to #{project.name}")
page.body.should have_selector("author email", :text => commit.author_email)
page.body.should have_selector("entry summary", :text => commit.message)
end
it "should render atom feed via private token" do
logout
visit project_commits_path(project, :atom, :private_token => @user.private_token)
page.response_headers['Content-Type'].should have_content("application/atom+xml")
page.body.should have_selector("title", :text => "Recent commits to #{project.name}")
page.body.should have_selector("author email", :text => commit.author_email)
page.body.should have_selector("entry summary", :text => commit.message)
end
end end
describe "GET /commits/:id" do describe "GET /commits/:id" do
......
...@@ -27,6 +27,25 @@ describe "Issues" do ...@@ -27,6 +27,25 @@ describe "Issues" do
it { should have_content(@issue.project.name) } it { should have_content(@issue.project.name) }
it { should have_content(@issue.assignee.name) } it { should have_content(@issue.assignee.name) }
it "should render atom feed" do
visit project_issues_path(project, :atom)
page.response_headers['Content-Type'].should have_content("application/atom+xml")
page.body.should have_selector("title", :text => "#{project.name} issues")
page.body.should have_selector("author email", :text => @issue.author_email)
page.body.should have_selector("entry summary", :text => @issue.title)
end
it "should render atom feed via private token" do
logout
visit project_issues_path(project, :atom, :private_token => @user.private_token)
page.response_headers['Content-Type'].should have_content("application/atom+xml")
page.body.should have_selector("title", :text => "#{project.name} issues")
page.body.should have_selector("author email", :text => @issue.author_email)
page.body.should have_selector("entry summary", :text => @issue.title)
end
describe "Destroy" do describe "Destroy" do
before do before do
# admin access to remove issue # admin access to remove issue
......
...@@ -10,7 +10,6 @@ describe "Tags" do ...@@ -10,7 +10,6 @@ describe "Tags" do
# end # end
# end # end
describe "GET '/tags.json'" do describe "GET '/tags.json'" do
before do before do
@project = Factory :project @project = Factory :project
...@@ -20,12 +19,9 @@ describe "Tags" do ...@@ -20,12 +19,9 @@ describe "Tags" do
visit '/tags.json' visit '/tags.json'
end end
it "should contains tags" do it "should contains tags" do
page.should have_content('demo1') page.should have_content('demo1')
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment