Commit 7863319b97498a7621815cfe5691794ecb86b8c5

Authored by Raffael Schmid
2 parents 568d1c27 68590fdd

Merge branch 'master' into dont-depend-on-appid-and-appsecret

* master: (238 commits)
  Version 6.5.1
  Fix selectbox when submit MR from fork to origin
  Fix HELP layout
  No need for code tag here.
  Spelling mistake and add links.
  Warn against RVM.
  Remove GitHub mention because we also have a GitLab issue tracker now.
  Replace 6.0-to-6.4.md with 6.0-to-6.5.md
  Add public assets to gitignore
  Version 6.5.0
  Use 6-5 branch in installation docs
  Remove deprecated twitter handle.
  Further explain userPrincipalName settings
  Update from 6.4 to 6.5 guide
  Explain how to use AD userPrincipalName for logins
  More entries to CHANGELOG. Version to rc1
  Rephrase LDAP check script output
  add O'Reilly sponsorship in CHANGELOG
  Fix select2 css for drop above style
  Rename "Website url" labels to "Website"
  ...
Showing 434 changed files with 5849 additions and 5315 deletions   Show diff stats

Too many changes.

To preserve performance only 100 of 434 files displayed.

@@ -34,3 +34,4 @@ doc/code/* @@ -34,3 +34,4 @@ doc/code/*
34 .secret 34 .secret
35 *.log 35 *.log
36 public/uploads.* 36 public/uploads.*
  37 +public/assets/
  1 +v 6.5.1
  2 + - Fix branch selectbox when create merge request from fork
  3 +
1 v 6.5.0 4 v 6.5.0
2 - Dropdown menus on issue#show page for assignee and milestone (Jason Blanchard) 5 - Dropdown menus on issue#show page for assignee and milestone (Jason Blanchard)
3 - Add color custimization and previewing to broadcast messages 6 - Add color custimization and previewing to broadcast messages
4 - Fixed notes anchors 7 - Fixed notes anchors
5 - Load new comments in issues dynamically 8 - Load new comments in issues dynamically
6 - Added sort options to Public page 9 - Added sort options to Public page
7 - - Added new filters(assigned/authored/all) to Dashboard#issues, Dashboard#merge_request pages 10 + - New filters (assigned/authored/all) for Dashboard#issues/merge_requests (sponsored by Say Media)
8 - Add project visibility icons to dashboard 11 - Add project visibility icons to dashboard
9 - Enable secure cookies if https used 12 - Enable secure cookies if https used
10 - Protect users/confirmation with rack_attack 13 - Protect users/confirmation with rack_attack
  14 + - Default HTTP headers to protect against MIME-sniffing, force https if enabled
  15 + - Bootstrap 3 with responsive UI
  16 + - New repository download formats: tar.bz2, zip, tar (Jason Hollingsworth)
  17 + - Restyled accept widgets for MR
  18 + - SCSS refactored
  19 + - Use jquery timeago plugin
  20 + - Fix 500 error for rdoc files
  21 + - Ability to customize merge commit message (sponsored by Say Media)
  22 + - Search autocomplete via ajax
  23 + - Add website url to user profile
  24 + - Files API supports base64 encoded content (sponsored by O'Reilly Media)
  25 + - Added support for Go's repository retrieval (Bruno Albuquerque)
11 26
12 v6.4.3 27 v6.4.3
13 - Don't use unicorn worker killer if PhusionPassenger is defined 28 - Don't use unicorn worker killer if PhusionPassenger is defined
CONTRIBUTING.md
1 # Contribute to GitLab 1 # Contribute to GitLab
2 2
3 -This guide details how to use issues and pull requests to improve GitLab.  
4 -  
5 -- [Closing policy for issues and pull requests](#closing-policy-for-issues-and-pull-requests)  
6 -- [Issue tracker](#issue-tracker)  
7 -- [Pull requests](#pull-requests)  
8 -- [Security vulnerabilities](#security-vulnerabilities) 3 +This guide details how contribute to GitLab.
9 4
10 If you want to know how the GitLab team handles contributions have a look at [the GitLab contributing process](PROCESS.md). 5 If you want to know how the GitLab team handles contributions have a look at [the GitLab contributing process](PROCESS.md).
11 6
@@ -17,30 +12,30 @@ By submitting code as an individual you agree to the [individual contributor lic @@ -17,30 +12,30 @@ By submitting code as an individual you agree to the [individual contributor lic
17 12
18 Please report suspected security vulnerabilities in private to support@gitlab.com, also see the [disclosure section on the GitLab.com website](http://www.gitlab.com/disclosure/). Please do NOT create publicly viewable issues for suspected security vulnerabilities. 13 Please report suspected security vulnerabilities in private to support@gitlab.com, also see the [disclosure section on the GitLab.com website](http://www.gitlab.com/disclosure/). Please do NOT create publicly viewable issues for suspected security vulnerabilities.
19 14
20 -## Closing policy for issues and pull requests 15 +## Closing policy for issues and merge requests
21 16
22 -GitLab is a popular open source project and the capacity to deal with issues and pull requests is limited. Out of respect for our volunteers, issues and pull requests not in line with the guidelines listed in this document may be closed without notice. 17 +GitLab is a popular open source project and the capacity to deal with issues and merge requests is limited. Out of respect for our volunteers, issues and merge requests not in line with the guidelines listed in this document may be closed without notice.
23 18
24 Please treat our volunteers with courtesy and respect, it will go a long way towards getting your issue resolved. 19 Please treat our volunteers with courtesy and respect, it will go a long way towards getting your issue resolved.
25 20
26 -Issues and pull requests should be in English and contain appropriate language for audiences of all ages. 21 +Issues and merge requests should be in English and contain appropriate language for audiences of all ages.
27 22
28 ## Issue tracker 23 ## Issue tracker
29 24
30 -To get support for your particular problem please use the channels as detailed in [the getting help section of the readme](https://github.com/gitlabhq/gitlabhq#getting-help). Professional [support subscriptions](http://www.gitlab.com/subscription/) and [consulting services](http://www.gitlab.com/consultancy/) are available from [GitLab.com](http://www.gitlab.com/). 25 +To get support for your particular problem please use the channels as detailed in the getting help section of [the readme](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/README.md). Professional [support subscriptions](http://www.gitlab.com/subscription/) and [consulting services](http://www.gitlab.com/consultancy/) are available from [GitLab.com](http://www.gitlab.com/).
31 26
32 -The [issue tracker](https://github.com/gitlabhq/gitlabhq/issues) is only for obvious bugs or misbehavior in the latest [stable or development release of GitLab](MAINTENANCE.md). When submitting an issue please conform to the issue submission guidelines listed below. Not all issues will be addressed and your issue is more likely to be addressed if you submit a pull request which partially or fully addresses the issue. 27 +The [issue tracker](https://gitlab.com/gitlab-org/gitlab-ce/issues) is only for obvious bugs or misbehavior in the latest [stable or development release of GitLab](MAINTENANCE.md). When submitting an issue please conform to the issue submission guidelines listed below. Not all issues will be addressed and your issue is more likely to be addressed if you submit a merge request which partially or fully addresses the issue.
33 28
34 Do not use the issue tracker for feature requests. We have a specific [feedback and suggestions forum](http://feedback.gitlab.com) for this purpose. 29 Do not use the issue tracker for feature requests. We have a specific [feedback and suggestions forum](http://feedback.gitlab.com) for this purpose.
35 30
36 -Please send a pull request with a tested solution or a pull request with a failing test instead of opening an issue if you can. If you're unsure where to post, post to the [mailing list](https://groups.google.com/forum/#!forum/gitlabhq) or [Stack Overflow](http://stackoverflow.com/questions/tagged/gitlab) first. There are a lot of helpful GitLab users there who may be able to help you quickly. If your particular issue turns out to be a bug, it will find its way from there. 31 +Please send a merge request with a tested solution or a merge request with a failing test instead of opening an issue if you can. If you're unsure where to post, post to the [mailing list](https://groups.google.com/forum/#!forum/gitlabhq) or [Stack Overflow](http://stackoverflow.com/questions/tagged/gitlab) first. There are a lot of helpful GitLab users there who may be able to help you quickly. If your particular issue turns out to be a bug, it will find its way from there.
37 32
38 ### Issue tracker guidelines 33 ### Issue tracker guidelines
39 34
40 -**[Search](https://github.com/gitlabhq/gitlabhq/search?q=&ref=cmdform&type=Issues)** for similar entries before submitting your own, there's a good chance somebody else had the same issue. Show your support with `:+1:` and/or join the discussion. Please submit issues in the following format (as the first post): 35 +**[Search the issues](https://gitlab.com/gitlab-org/gitlab-ce/issues)** for similar entries before submitting your own, there's a good chance somebody else had the same issue. Show your support with `:+1:` and/or join the discussion. Please submit issues in the following format (as the first post):
41 36
42 1. **Summary:** Summarize your issue in one sentence (what goes wrong, what did you expect to happen) 37 1. **Summary:** Summarize your issue in one sentence (what goes wrong, what did you expect to happen)
43 -2. **Steps to reproduce:** How can we reproduce the issue, preferably on the [GitLab Vagrant virtual machine](https://github.com/gitlabhq/gitlab-vagrant-vm) (start with: `vagrant destroy && vagrant up && vagrant ssh`) 38 +2. **Steps to reproduce:** How can we reproduce the issue, preferably on the [GitLab development virtual machine with vagrant](https://gitlab.com/gitlab-org/cookbook-gitlab/blob/master/doc/development.md) (start your issue with: `vagrant destroy && vagrant up && vagrant ssh`)
44 3. **Expected behavior:** Describe your issue in detail 39 3. **Expected behavior:** Describe your issue in detail
45 4. **Observed behavior** 40 4. **Observed behavior**
46 5. **Relevant logs and/or screenshots:** Please use code blocks (\`\`\`) to format console output, logs, and code as it's very hard to read otherwise. 41 5. **Relevant logs and/or screenshots:** Please use code blocks (\`\`\`) to format console output, logs, and code as it's very hard to read otherwise.
@@ -51,37 +46,39 @@ Please send a pull request with a tested solution or a pull request with a faili @@ -51,37 +46,39 @@ Please send a pull request with a tested solution or a pull request with a faili
51 * Describe your setup (use relevant parts from `sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production`) 46 * Describe your setup (use relevant parts from `sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production`)
52 7. **Possible fixes**: If you can, link to the line of code that might be responsible for the problem 47 7. **Possible fixes**: If you can, link to the line of code that might be responsible for the problem
53 48
54 -## Pull requests 49 +## Merge requests
55 50
56 -We welcome pull requests with fixes and improvements to GitLab code, tests, and/or documentation. The features we would really like a pull request for are listed with the [status 'accepting merge/pull requests' on our feedback forum](http://feedback.gitlab.com/forums/176466-general/status/796455) but other improvements are also welcome. 51 +We welcome merge requests with fixes and improvements to GitLab code, tests, and/or documentation. The features we would really like a merge request for are listed with the [status 'accepting merge/merge requests' on our feedback forum](http://feedback.gitlab.com/forums/176466-general/status/796455) but other improvements are also welcome.
57 52
58 -### Pull request guidelines 53 +### Merge request guidelines
59 54
60 -If you can, please submit a pull request with the fix or improvements including tests. If you don't know how to fix the issue but can write a test that exposes the issue we will accept that as well. In general bug fixes that include a regression test are merged quickly while new features without proper tests are least likely to receive timely feedback. The workflow to make a pull request is as follows: 55 +If you can, please submit a merge request with the fix or improvements including tests. If you don't know how to fix the issue but can write a test that exposes the issue we will accept that as well. In general bug fixes that include a regression test are merged quickly while new features without proper tests are least likely to receive timely feedback. The workflow to make a merge request is as follows:
61 56
62 -1. Fork the project on GitHub 57 +1. Fork the project on GitLab Cloud
63 1. Create a feature branch 58 1. Create a feature branch
64 1. Write [tests](README.md#run-the-tests) and code 59 1. Write [tests](README.md#run-the-tests) and code
65 1. Add your changes to the [CHANGELOG](CHANGELOG) 60 1. Add your changes to the [CHANGELOG](CHANGELOG)
66 1. If you have multiple commits please combine them into one commit by [squashing them](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) 61 1. If you have multiple commits please combine them into one commit by [squashing them](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)
67 1. Push the commit to your fork 62 1. Push the commit to your fork
68 -1. Submit a pull request (PR)  
69 -1. The PR title should describes the change you want to make  
70 -1. The PR description should give a motive for your change and the method you used to achieve it  
71 -* If the PR changes the UI it should include before and after screenshots  
72 -1. [Search for issues](https://github.com/gitlabhq/gitlabhq/search?q=&ref=cmdform&type=Issues) related to your pull request and mention them in the pull request description  
73 -  
74 -Please keep the change in a single PR as small as possible. If you want to contribute a large feature think very hard what the minimum viable change is. Can you split functionality? Can you only submit the backend/API code? Can you start with a very simple UI? The smaller a PR is the more likely it is it will be merged, after that you can send more PR's to enhance it.  
75 -  
76 -We will accept pull requests if:  
77 -  
78 -* The code has proper tests and all tests pass (or it is a test exposing a failure in existing code)  
79 -* It can be merged without problems (if not please use: `git rebase master`)  
80 -* It does not break any existing functionality  
81 -* It's quality code that conforms to the [Ruby](https://github.com/bbatsov/ruby-style-guide) and [Rails](https://github.com/bbatsov/rails-style-guide) style guides and best practices  
82 -* It is not a catch all pull request but rather fixes a specific issue or implements a specific feature  
83 -* It keeps the GitLab code base clean and well structured  
84 -* We think other users will benefit from the same functionality  
85 -* It is a single commit (please use `git rebase -i` to squash commits)  
86 -  
87 -For examples of feedback on pull requests please look at already [closed pull requests](https://github.com/gitlabhq/gitlabhq/pulls?direction=desc&page=1&sort=created&state=closed). 63 +1. Submit a merge request (MR)
  64 +1. The MR title should describes the change you want to make
  65 +1. The MR description should give a motive for your change and the method you used to achieve it
  66 +1. If the MR changes the UI it should include before and after screenshots
  67 +1. Link relevant [issues](https://gitlab.com/gitlab-org/gitlab-ce/issues) and/or [feedback items](http://feedback.gitlab.com/) from the merge request description and leave a comment on them with a link back to the MR
  68 +1. Be prepared to answer questions and incorporate feedback even if requests for this arrive weeks or months after your MR submittion
  69 +
  70 +Please keep the change in a single MR as small as possible. If you want to contribute a large feature think very hard what the minimum viable change is. Can you split functionality? Can you only submit the backend/API code? Can you start with a very simple UI? The smaller a MR is the more likely it is it will be merged, after that you can send more MR's to enhance it.
  71 +
  72 +We will accept a merge requests if it:
  73 +
  74 +* Includes proper tests and all tests pass (unless it contains a test exposing a bug in existing code)
  75 +* Can be merged without problems (if not please use: `git rebase master`)
  76 +* Do not break any existing functionality
  77 +* Conforms to the [Ruby](https://github.com/bbatsov/ruby-style-guide) and [Rails](https://github.com/bbatsov/rails-style-guide) style guides and best practices
  78 +* Fixes one specific issue or implements one specific feature (do not combine things, send separate merge requests if needed)
  79 +* Keeps the GitLab code base clean and well structured
  80 +* Contains functionality we think other users will benefit from too
  81 +* Doesn't add unnessecary configuration options since they complicate future changes
  82 +* Contains a single commit (please use `git rebase -i` to squash commits)
  83 +
  84 +For examples of feedback on merge requests please look at already [closed merge requests](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests?assignee_id=&label_name=&milestone_id=&scope=&sort=&state=closed).
@@ -14,7 +14,6 @@ gem "protected_attributes" @@ -14,7 +14,6 @@ gem "protected_attributes"
14 gem 'rails-observers' 14 gem 'rails-observers'
15 gem 'actionpack-page_caching' 15 gem 'actionpack-page_caching'
16 gem 'actionpack-action_caching' 16 gem 'actionpack-action_caching'
17 -gem 'activerecord-deprecated_finders'  
18 17
19 # Supported DBs 18 # Supported DBs
20 gem "mysql2", group: :mysql 19 gem "mysql2", group: :mysql
@@ -52,6 +51,9 @@ gem "grape", "~> 0.6.1" @@ -52,6 +51,9 @@ gem "grape", "~> 0.6.1"
52 gem "grape-entity", "~> 0.3.0" 51 gem "grape-entity", "~> 0.3.0"
53 gem 'rack-cors', require: 'rack/cors' 52 gem 'rack-cors', require: 'rack/cors'
54 53
  54 +# Email validation
  55 +gem "email_validator", "~> 1.4.0", :require => 'email_validator/strict'
  56 +
55 # Format dates and times 57 # Format dates and times
56 # based on human-friendly examples 58 # based on human-friendly examples
57 gem "stamp" 59 gem "stamp"
@@ -60,7 +62,7 @@ gem "stamp" @@ -60,7 +62,7 @@ gem "stamp"
60 gem 'enumerize' 62 gem 'enumerize'
61 63
62 # Pagination 64 # Pagination
63 -gem "kaminari", "~> 0.14.1" 65 +gem "kaminari", "~> 0.15.1"
64 66
65 # HAML 67 # HAML
66 gem "haml-rails" 68 gem "haml-rails"
@@ -120,7 +122,7 @@ gem "redis-rails" @@ -120,7 +122,7 @@ gem "redis-rails"
120 gem 'tinder', '~> 1.9.2' 122 gem 'tinder', '~> 1.9.2'
121 123
122 # HipChat integration 124 # HipChat integration
123 -gem "hipchat", "~> 0.9.0" 125 +gem "hipchat", "~> 0.14.0"
124 126
125 # Flowdock integration 127 # Flowdock integration
126 gem "gitlab-flowdock-git-hook", "~> 0.4.2" 128 gem "gitlab-flowdock-git-hook", "~> 0.4.2"
@@ -144,17 +146,16 @@ gem "therubyracer" @@ -144,17 +146,16 @@ gem "therubyracer"
144 gem 'turbolinks' 146 gem 'turbolinks'
145 gem 'jquery-turbolinks' 147 gem 'jquery-turbolinks'
146 148
147 -gem 'chosen-rails', "1.0.1"  
148 gem 'select2-rails' 149 gem 'select2-rails'
149 gem 'jquery-atwho-rails', "~> 0.3.3" 150 gem 'jquery-atwho-rails', "~> 0.3.3"
150 gem "jquery-rails", "2.1.3" 151 gem "jquery-rails", "2.1.3"
151 gem "jquery-ui-rails", "2.0.2" 152 gem "jquery-ui-rails", "2.0.2"
152 gem "modernizr", "2.6.2" 153 gem "modernizr", "2.6.2"
153 gem "raphael-rails", "~> 2.1.2" 154 gem "raphael-rails", "~> 2.1.2"
154 -gem 'bootstrap-sass', '~> 2.3' 155 +gem 'bootstrap-sass', '~> 3.0'
155 gem "font-awesome-rails", '~> 3.2' 156 gem "font-awesome-rails", '~> 3.2'
156 gem "gemoji", "~> 1.3.0" 157 gem "gemoji", "~> 1.3.0"
157 -gem "gon", git: "https://github.com/gitlabhq/gon.git", ref: '58ca8e17273051cb370182cabd3602d1da6783ab' 158 +gem "gon", '~> 5.0.0'
158 159
159 group :development do 160 group :development do
160 gem "annotate", "~> 2.6.0.beta2" 161 gem "annotate", "~> 2.6.0.beta2"
1 GIT 1 GIT
2 - remote: https://github.com/gitlabhq/gon.git  
3 - revision: 58ca8e17273051cb370182cabd3602d1da6783ab  
4 - ref: 58ca8e17273051cb370182cabd3602d1da6783ab  
5 - specs:  
6 - gon (4.1.1)  
7 - actionpack (>= 2.3.0)  
8 - json  
9 -  
10 -GIT  
11 remote: https://github.com/gitlabhq/markup.git 2 remote: https://github.com/gitlabhq/markup.git
12 revision: 61ade389c1e1c159359338f570d18464a44ddbc4 3 revision: 61ade389c1e1c159359338f570d18464a44ddbc4
13 ref: 61ade389c1e1c159359338f570d18464a44ddbc4 4 ref: 61ade389c1e1c159359338f570d18464a44ddbc4
@@ -64,7 +55,7 @@ GEM @@ -64,7 +55,7 @@ GEM
64 erubis (>= 2.6.6) 55 erubis (>= 2.6.6)
65 binding_of_caller (0.7.2) 56 binding_of_caller (0.7.2)
66 debug_inspector (>= 0.0.1) 57 debug_inspector (>= 0.0.1)
67 - bootstrap-sass (2.3.2.2) 58 + bootstrap-sass (3.0.3.0)
68 sass (~> 3.2) 59 sass (~> 3.2)
69 builder (3.1.4) 60 builder (3.1.4)
70 capybara (2.1.0) 61 capybara (2.1.0)
@@ -80,12 +71,6 @@ GEM @@ -80,12 +71,6 @@ GEM
80 celluloid (0.15.2) 71 celluloid (0.15.2)
81 timers (~> 1.1.0) 72 timers (~> 1.1.0)
82 charlock_holmes (0.6.9.4) 73 charlock_holmes (0.6.9.4)
83 - chosen-rails (1.0.1)  
84 - coffee-rails (>= 3.2)  
85 - compass-rails (>= 1.0)  
86 - railties (>= 3.0)  
87 - sass-rails (>= 3.2)  
88 - chunky_png (1.2.9)  
89 cliver (0.2.2) 74 cliver (0.2.2)
90 code_analyzer (0.4.3) 75 code_analyzer (0.4.3)
91 sexp_processor 76 sexp_processor
@@ -101,12 +86,6 @@ GEM @@ -101,12 +86,6 @@ GEM
101 coffee-script-source (1.6.3) 86 coffee-script-source (1.6.3)
102 colored (1.2) 87 colored (1.2)
103 colorize (0.5.8) 88 colorize (0.5.8)
104 - compass (0.12.2)  
105 - chunky_png (~> 1.2)  
106 - fssm (>= 0.2.7)  
107 - sass (~> 3.1)  
108 - compass-rails (1.1.1)  
109 - compass (>= 0.12.2)  
110 connection_pool (1.2.0) 89 connection_pool (1.2.0)
111 coveralls (0.7.0) 90 coveralls (0.7.0)
112 multi_json (~> 1.3) 91 multi_json (~> 1.3)
@@ -135,6 +114,8 @@ GEM @@ -135,6 +114,8 @@ GEM
135 email_spec (1.5.0) 114 email_spec (1.5.0)
136 launchy (~> 2.1) 115 launchy (~> 2.1)
137 mail (~> 2.2) 116 mail (~> 2.2)
  117 + email_validator (1.4.0)
  118 + activemodel
138 enumerize (0.7.0) 119 enumerize (0.7.0)
139 activesupport (>= 3.2) 120 activesupport (>= 3.2)
140 equalizer (0.0.8) 121 equalizer (0.0.8)
@@ -170,7 +151,6 @@ GEM @@ -170,7 +151,6 @@ GEM
170 dotenv (>= 0.7) 151 dotenv (>= 0.7)
171 thor (>= 0.13.6) 152 thor (>= 0.13.6)
172 formatador (0.2.4) 153 formatador (0.2.4)
173 - fssm (0.2.10)  
174 gemoji (1.3.1) 154 gemoji (1.3.1)
175 gherkin-ruby (0.3.1) 155 gherkin-ruby (0.3.1)
176 racc 156 racc
@@ -212,6 +192,9 @@ GEM @@ -212,6 +192,9 @@ GEM
212 omniauth (~> 1.0) 192 omniauth (~> 1.0)
213 pyu-ruby-sasl (~> 0.0.3.1) 193 pyu-ruby-sasl (~> 0.0.3.1)
214 rubyntlm (~> 0.1.1) 194 rubyntlm (~> 0.1.1)
  195 + gon (5.0.1)
  196 + actionpack (>= 2.3.0)
  197 + json
215 grape (0.6.1) 198 grape (0.6.1)
216 activesupport 199 activesupport
217 builder 200 builder
@@ -247,7 +230,7 @@ GEM @@ -247,7 +230,7 @@ GEM
247 railties (~> 4.0.0) 230 railties (~> 4.0.0)
248 hashie (2.0.5) 231 hashie (2.0.5)
249 hike (1.2.3) 232 hike (1.2.3)
250 - hipchat (0.9.0) 233 + hipchat (0.14.0)
251 httparty 234 httparty
252 httparty 235 httparty
253 http_parser.rb (0.5.3) 236 http_parser.rb (0.5.3)
@@ -276,7 +259,7 @@ GEM @@ -276,7 +259,7 @@ GEM
276 json (1.8.1) 259 json (1.8.1)
277 jwt (0.1.8) 260 jwt (0.1.8)
278 multi_json (>= 1.5) 261 multi_json (>= 1.5)
279 - kaminari (0.14.1) 262 + kaminari (0.15.1)
280 actionpack (>= 3.0.0) 263 actionpack (>= 3.0.0)
281 activesupport (>= 3.0.0) 264 activesupport (>= 3.0.0)
282 kgio (2.8.1) 265 kgio (2.8.1)
@@ -298,7 +281,7 @@ GEM @@ -298,7 +281,7 @@ GEM
298 minitest (4.7.5) 281 minitest (4.7.5)
299 modernizr (2.6.2) 282 modernizr (2.6.2)
300 sprockets (~> 2.0) 283 sprockets (~> 2.0)
301 - multi_json (1.8.2) 284 + multi_json (1.8.4)
302 multi_xml (0.5.5) 285 multi_xml (0.5.5)
303 multipart-post (1.2.0) 286 multipart-post (1.2.0)
304 mysql2 (0.3.11) 287 mysql2 (0.3.11)
@@ -568,17 +551,15 @@ PLATFORMS @@ -568,17 +551,15 @@ PLATFORMS
568 DEPENDENCIES 551 DEPENDENCIES
569 actionpack-action_caching 552 actionpack-action_caching
570 actionpack-page_caching 553 actionpack-page_caching
571 - activerecord-deprecated_finders  
572 acts-as-taggable-on 554 acts-as-taggable-on
573 annotate (~> 2.6.0.beta2) 555 annotate (~> 2.6.0.beta2)
574 asciidoctor 556 asciidoctor
575 awesome_print 557 awesome_print
576 better_errors 558 better_errors
577 binding_of_caller 559 binding_of_caller
578 - bootstrap-sass (~> 2.3) 560 + bootstrap-sass (~> 3.0)
579 capybara 561 capybara
580 carrierwave 562 carrierwave
581 - chosen-rails (= 1.0.1)  
582 coffee-rails 563 coffee-rails
583 colored 564 colored
584 coveralls 565 coveralls
@@ -587,6 +568,7 @@ DEPENDENCIES @@ -587,6 +568,7 @@ DEPENDENCIES
587 devise (= 3.0.4) 568 devise (= 3.0.4)
588 devise-async (= 0.8.0) 569 devise-async (= 0.8.0)
589 email_spec 570 email_spec
  571 + email_validator (~> 1.4.0)
590 enumerize 572 enumerize
591 factory_girl_rails 573 factory_girl_rails
592 ffaker 574 ffaker
@@ -603,21 +585,21 @@ DEPENDENCIES @@ -603,21 +585,21 @@ DEPENDENCIES
603 gitlab_git (~> 4.0.0) 585 gitlab_git (~> 4.0.0)
604 gitlab_meta (= 6.0) 586 gitlab_meta (= 6.0)
605 gitlab_omniauth-ldap (= 1.0.3) 587 gitlab_omniauth-ldap (= 1.0.3)
606 - gon! 588 + gon (~> 5.0.0)
607 grape (~> 0.6.1) 589 grape (~> 0.6.1)
608 grape-entity (~> 0.3.0) 590 grape-entity (~> 0.3.0)
609 growl 591 growl
610 guard-rspec 592 guard-rspec
611 guard-spinach 593 guard-spinach
612 haml-rails 594 haml-rails
613 - hipchat (~> 0.9.0) 595 + hipchat (~> 0.14.0)
614 httparty 596 httparty
615 jasmine (= 2.0.0.rc5) 597 jasmine (= 2.0.0.rc5)
616 jquery-atwho-rails (~> 0.3.3) 598 jquery-atwho-rails (~> 0.3.3)
617 jquery-rails (= 2.1.3) 599 jquery-rails (= 2.1.3)
618 jquery-turbolinks 600 jquery-turbolinks
619 jquery-ui-rails (= 2.0.2) 601 jquery-ui-rails (= 2.0.2)
620 - kaminari (~> 0.14.1) 602 + kaminari (~> 0.15.1)
621 launchy 603 launchy
622 letter_opener 604 letter_opener
623 minitest (~> 4.7.0) 605 minitest (~> 4.7.0)
@@ -8,25 +8,25 @@ Below we describe the contributing process to GitLab for two reasons. So that co @@ -8,25 +8,25 @@ Below we describe the contributing process to GitLab for two reasons. So that co
8 8
9 ### Issue team 9 ### Issue team
10 - Looks for issues without workflow labels and triages issue 10 - Looks for issues without workflow labels and triages issue
11 -- Monitors pull requests  
12 -- Closes invalid issues and pull requests with a comment (duplicates, [feature requests](#feature-requests), [fixed in newer version](#issue-fixed-in-newer-version), [issue report for old version](#issue-report-for-old-version), not a problem in GitLab, etc.) 11 +- Monitors merge requests
  12 +- Closes invalid issues and merge requests with a comment (duplicates, [feature requests](#feature-requests), [fixed in newer version](#issue-fixed-in-newer-version), [issue report for old version](#issue-report-for-old-version), not a problem in GitLab, etc.)
13 - Assigns appropriate [labels](#how-we-handle-issues) 13 - Assigns appropriate [labels](#how-we-handle-issues)
14 -- Asks for feedback from issue reporter/pull request initiator ([invalid issue reports](#improperly-formatted-issue), [format code](#code-format), etc.) 14 +- Asks for feedback from issue reporter/merge request initiator ([invalid issue reports](#improperly-formatted-issue), [format code](#code-format), etc.)
15 - Asks for feedback from the relevant developer(s) based on the [list of members and their specialities](http://gitlab.org/team/) 15 - Asks for feedback from the relevant developer(s) based on the [list of members and their specialities](http://gitlab.org/team/)
16 -- Monitors all issues/pull requests for feedback (but especially ones commented on since automatically watching them): 16 +- Monitors all issues/merge requests for feedback (but especially ones commented on since automatically watching them):
17 - Closes issues with no feedback from the reporter for two weeks 17 - Closes issues with no feedback from the reporter for two weeks
18 -- Closes stale pull requests 18 +- Closes stale merge requests
19 19
20 ### Development team 20 ### Development team
21 21
22 -- Responds to issues and pull requests the issue team mentions them in 22 +- Responds to issues and merge requests the issue team mentions them in
23 - Monitors for new issues in _Awaiting developer action/feedback_ with no developer activity (once a week) 23 - Monitors for new issues in _Awaiting developer action/feedback_ with no developer activity (once a week)
24 -- Monitors for new pull requests (at least once a week)  
25 -- Manages their work queue by looking at issues and pull requests assigned to them 24 +- Monitors for new merge requests (at least once a week)
  25 +- Manages their work queue by looking at issues and merge requests assigned to them
26 - Close fixed issues (via commit messages or manually) 26 - Close fixed issues (via commit messages or manually)
27 - Codes [new features](http://feedback.gitlab.com/forums/176466-general/filters/top)! 27 - Codes [new features](http://feedback.gitlab.com/forums/176466-general/filters/top)!
28 - Response guidelines 28 - Response guidelines
29 -- Be kind to people trying to contribute. Be aware that people can be a non-native or a native English speaker, they might not understand thing or they might be very sensitive to how your word things. Use emoji to express your feelings (heart, star, smile, etc.). Some good tips about giving feedback to pull requests is in the [Thoughtbot code review guide](https://github.com/thoughtbot/guides/tree/master/code-review). 29 +- Be kind to people trying to contribute. Be aware that people can be a non-native or a native English speaker, they might not understand thing or they might be very sensitive to how your word things. Use emoji to express your feelings (heart, star, smile, etc.). Some good tips about giving feedback to merge requests is in the [Thoughtbot code review guide](https://github.com/thoughtbot/guides/tree/master/code-review).
30 30
31 ## Priorities of the issue team 31 ## Priorities of the issue team
32 32
@@ -45,8 +45,8 @@ Workflow labels are purposely not very detailed since that would be hard to keep @@ -45,8 +45,8 @@ Workflow labels are purposely not very detailed since that would be hard to keep
45 45
46 - _Awaiting feedback_: Feedback pending from the reporter 46 - _Awaiting feedback_: Feedback pending from the reporter
47 - _Awaiting confirmation of fix_: The issue should already be solved in **master** (generally you can avoid this workflow item and just close the issue right away) 47 - _Awaiting confirmation of fix_: The issue should already be solved in **master** (generally you can avoid this workflow item and just close the issue right away)
48 -- _Attached PR_: There is a PR attached and the discussion should happen there  
49 - - We need to let issues stay in sync with the PR's. We can do this with a "Closing #XXXX" or "Fixes #XXXX" comment in the PR. We can't close the issue when there is a pull request because sometimes a PR is not good and we just close the PR, then the issue must stay. 48 +- _Attached MR_: There is a MR attached and the discussion should happen there
  49 + - We need to let issues stay in sync with the MR's. We can do this with a "Closing #XXXX" or "Fixes #XXXX" comment in the MR. We can't close the issue when there is a merge request because sometimes a MR is not good and we just close the MR, then the issue must stay.
50 - _Awaiting developer action/feedback_: Issue needs to be fixed or clarified by a developer 50 - _Awaiting developer action/feedback_: Issue needs to be fixed or clarified by a developer
51 51
52 ## Functional labels 52 ## Functional labels
@@ -59,7 +59,7 @@ If an issue is complex and needs the attention of a specific person, assignment @@ -59,7 +59,7 @@ If an issue is complex and needs the attention of a specific person, assignment
59 59
60 ## Label colors 60 ## Label colors
61 - Light orange `#fef2c0`: workflow labels for issue team members (awaiting feedback, awaiting confirmation of fix) 61 - Light orange `#fef2c0`: workflow labels for issue team members (awaiting feedback, awaiting confirmation of fix)
62 -- Bright orange `#eb6420`: workflow labels for core team members (attached PR, awaiting developer action/feedback) 62 +- Bright orange `#eb6420`: workflow labels for core team members (attached MR, awaiting developer action/feedback)
63 - Light blue `#82C5FF`: functional labels 63 - Light blue `#82C5FF`: functional labels
64 - Green labels `#009800`: issues that can generally be ignored. For example, issues given the following labels normally can be closed immediately: 64 - Green labels `#009800`: issues that can generally be ignored. For example, issues given the following labels normally can be closed immediately:
65 - Feature request (see copy & paste response: [Feature requests](#feature-requests)) 65 - Feature request (see copy & paste response: [Feature requests](#feature-requests))
@@ -69,19 +69,19 @@ If an issue is complex and needs the attention of a specific person, assignment @@ -69,19 +69,19 @@ If an issue is complex and needs the attention of a specific person, assignment
69 69
70 ### Improperly formatted issue 70 ### Improperly formatted issue
71 71
72 -Thanks for the issue report. Please reformat your issue to conform to the issue tracker guidelines found in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines). 72 +Thanks for the issue report. Please reformat your issue to conform to the issue tracker guidelines found in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
73 73
74 ### Feature requests 74 ### Feature requests
75 75
76 -Thanks for your interest in GitLab. We don't use the GitHub issue tracker for feature requests. Please use http://feedback.gitlab.com/ for this purpose or create a pull request implementing this feature. Have a look at the \[contribution guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) for more information. 76 +Thanks for your interest in GitLab. We don't use the issue tracker for feature requests. Please use http://feedback.gitlab.com/ for this purpose or create a merge request implementing this feature. Have a look at the \[contribution guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md) for more information.
77 77
78 ### Issue report for old version 78 ### Issue report for old version
79 79
80 -Thanks for the issue report but we only support issues for the latest stable version of GitLab. I'm closing this issue but if you still experience this problem in the latest stable version, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines). 80 +Thanks for the issue report but we only support issues for the latest stable version of GitLab. I'm closing this issue but if you still experience this problem in the latest stable version, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
81 81
82 ### Support requests and configuration questions 82 ### Support requests and configuration questions
83 83
84 -Thanks for your interest in GitLab. We don't use the GitHub issue tracker for support requests and configuration questions. Please use the \[support forum\]\(https://groups.google.com/forum/#!forum/gitlabhq), \[Stack Overflow\]\(http://stackoverflow.com/questions/tagged/gitlab), the unofficial #gitlab IRC channel on Freenode or the http://www.gitlab.com paid services for this purpose. Have a look at the \[contribution guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) for more information. 84 +Thanks for your interest in GitLab. We don't use the issue tracker for support requests and configuration questions. Please use the \[support forum\]\(https://groups.google.com/forum/#!forum/gitlabhq), \[Stack Overflow\]\(http://stackoverflow.com/questions/tagged/gitlab), the unofficial #gitlab IRC channel on Freenode or the http://www.gitlab.com paid services for this purpose. Have a look at the \[contribution guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md) for more information.
85 85
86 ### Code format 86 ### Code format
87 87
@@ -89,17 +89,17 @@ Please use ``` to format console output, logs, and code as it's very hard to rea @@ -89,17 +89,17 @@ Please use ``` to format console output, logs, and code as it's very hard to rea
89 89
90 ### Issue fixed in newer version 90 ### Issue fixed in newer version
91 91
92 -Thanks for the issue report. This issue has already been fixed in newer versions of GitLab. Due to the size of this project and our limited resources we are only able to support the latest stable release as outlined in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker). In order to get this bug fix and enjoy many new features please \[upgrade\]\(http://blog.gitlab.org/). If you still experience issues at that time please open a new issue following our issue tracker guidelines found in the \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines). 92 +Thanks for the issue report. This issue has already been fixed in newer versions of GitLab. Due to the size of this project and our limited resources we are only able to support the latest stable release as outlined in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker). In order to get this bug fix and enjoy many new features please \[upgrade\]\(http://blog.gitlab.org/). If you still experience issues at that time please open a new issue following our issue tracker guidelines found in the \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
93 93
94 -### Improperly formatted pull request 94 +### Improperly formatted merge request
95 95
96 -Thanks for your interest in improving the GitLab codebase! Please update your pull request according to the \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#pull-request-guidelines). 96 +Thanks for your interest in improving the GitLab codebase! Please update your merge request according to the \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#pull-request-guidelines).
97 97
98 ### Inactivity close of an issue 98 ### Inactivity close of an issue
99 99
100 -It's been at least 2 weeks (and a new release) since we heard from you. I'm closing this issue but if you still experience this problem, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines). 100 +It's been at least 2 weeks (and a new release) since we heard from you. I'm closing this issue but if you still experience this problem, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
101 101
102 -### Inactivity close of a pull request 102 +### Inactivity close of a merge request
103 103
104 -This pull request has been closed because a request for more information has not been reacted to for more than 2 weeks. If you respond and conform to the pull request guidelines in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#pull-requests) we will reopen this pull request. 104 +This merge request has been closed because a request for more information has not been reacted to for more than 2 weeks. If you respond and conform to the merge request guidelines in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#pull-requests) we will reopen this merge request.
105 105
1 ## GitLab: self hosted Git management software 1 ## GitLab: self hosted Git management software
2 2
3 -![logo](https://raw.github.com/gitlabhq/gitlabhq/master/public/gitlab_logo.png) 3 +![logo](https://gitlab.com/gitlab-org/gitlab-ce/raw/master/public/gitlab_logo.png)
4 4
5 ![animated-screenshots](https://gist.github.com/fnkr/2f9badd56bfe0ed04ee7/raw/4f48806fbae97f556c2f78d8c2d299c04500cb0d/compiled.gif) 5 ![animated-screenshots](https://gist.github.com/fnkr/2f9badd56bfe0ed04ee7/raw/4f48806fbae97f556c2f78d8c2d299c04500cb0d/compiled.gif)
6 6
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 34
35 * [GitLab Enterprise Edition](https://www.gitlab.com/features/) offers additional features that are useful for larger organizations (100+ users). 35 * [GitLab Enterprise Edition](https://www.gitlab.com/features/) offers additional features that are useful for larger organizations (100+ users).
36 36
37 -* [GitLab CI](https://github.com/gitlabhq/gitlab-ci/blob/master/README.md) is a continuous integration (CI) server that is easy to integrate with GitLab. 37 +* [GitLab CI](https://gitlab.com/gitlab-org/gitlab-ci/blob/master/README.md) is a continuous integration (CI) server that is easy to integrate with GitLab.
38 38
39 ### Requirements 39 ### Requirements
40 40
@@ -62,7 +62,7 @@ @@ -62,7 +62,7 @@
62 62
63 #### Unofficial installation methods 63 #### Unofficial installation methods
64 64
65 -* [GitLab recipes](https://github.com/gitlabhq/gitlab-recipes) repository with unofficial guides for using GitLab with different software (operating systems, webservers, etc.) than the official version. 65 +* [GitLab recipes](https://gitlab.com/gitlab-org/gitlab-recipes/) repository with unofficial guides for using GitLab with different software (operating systems, webservers, etc.) than the official version.
66 66
67 * [Installation guides](https://github.com/gitlabhq/gitlab-public-wiki/wiki/Unofficial-Installation-Guides) public wiki with unofficial guides to install GitLab on different operating systems. 67 * [Installation guides](https://github.com/gitlabhq/gitlab-public-wiki/wiki/Unofficial-Installation-Guides) public wiki with unofficial guides to install GitLab on different operating systems.
68 68
@@ -145,13 +145,13 @@ or start each component separately @@ -145,13 +145,13 @@ or start each component separately
145 145
146 * [Feedback and suggestions forum](http://feedback.gitlab.com) is the place to propose and discuss new features for GitLab. 146 * [Feedback and suggestions forum](http://feedback.gitlab.com) is the place to propose and discuss new features for GitLab.
147 147
148 -* [Contributing guide](https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) describes how to submit pull requests and issues. Pull requests and issues not in line with the guidelines in this document will be closed. 148 +* [Contributing guide](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md) describes how to submit merge requests and issues. Pull requests and issues not in line with the guidelines in this document will be closed.
149 149
150 * [Support subscription](http://www.gitlab.com/subscription/) connects you to the knowledge of GitLab experts that will resolve your issues and answer your questions. 150 * [Support subscription](http://www.gitlab.com/subscription/) connects you to the knowledge of GitLab experts that will resolve your issues and answer your questions.
151 151
152 * [Consultancy](http://www.gitlab.com/consultancy/) from the GitLab experts for installations, upgrades and customizations. 152 * [Consultancy](http://www.gitlab.com/consultancy/) from the GitLab experts for installations, upgrades and customizations.
153 153
154 -* [#gitlab IRC channel](http://www.freenode.net/) on Freenode to get in touch with other GitLab users and get help, it's managed by James Newton, Drew Blessing and Sam Gleske 154 +* [#gitlab IRC channel](http://www.freenode.net/) on Freenode to get in touch with other GitLab users and get help, it's managed by James Newton (newton), Drew Blessing (dblessing), and Sam Gleske (sag47).
155 155
156 * [Book](http://www.packtpub.com/gitlab-repository-management/book) written by GitLab enthusiast Jonathan M. Hethey is unofficial but it offers a good overview. 156 * [Book](http://www.packtpub.com/gitlab-repository-management/book) written by GitLab enthusiast Jonathan M. Hethey is unofficial but it offers a good overview.
157 157
1 -6.5.0.pre 1 +6.5.1
app/assets/javascripts/application.js
@@ -19,7 +19,6 @@ @@ -19,7 +19,6 @@
19 //= require jquery.turbolinks 19 //= require jquery.turbolinks
20 //= require bootstrap 20 //= require bootstrap
21 //= require modernizr 21 //= require modernizr
22 -//= require chosen-jquery  
23 //= require select2 22 //= require select2
24 //= require raphael 23 //= require raphael
25 //= require g.raphael-min 24 //= require g.raphael-min
app/assets/javascripts/behaviors/toggler_behavior.coffee
@@ -3,7 +3,7 @@ $ -> @@ -3,7 +3,7 @@ $ ->
3 container = $(@).closest(".js-toggler-container") 3 container = $(@).closest(".js-toggler-container")
4 4
5 container.toggleClass("on") 5 container.toggleClass("on")
6 - 6 +
7 $("body").on "click", ".js-toggle-visibility-link", (e) -> 7 $("body").on "click", ".js-toggle-visibility-link", (e) ->
8 $(@).find('i'). 8 $(@).find('i').
9 toggleClass('icon-chevron-down'). 9 toggleClass('icon-chevron-down').
@@ -11,7 +11,7 @@ $ -> @@ -11,7 +11,7 @@ $ ->
11 container = $(".js-toggle-visibility-container") 11 container = $(".js-toggle-visibility-container")
12 container.toggleClass("hide") 12 container.toggleClass("hide")
13 e.preventDefault() 13 e.preventDefault()
14 - 14 +
15 $("body").on "click", ".js-toggle-button", (e) -> 15 $("body").on "click", ".js-toggle-button", (e) ->
16 $(@).closest(".js-toggle-container").find(".js-toggle-content").toggle() 16 $(@).closest(".js-toggle-container").find(".js-toggle-content").toggle()
17 e.preventDefault() 17 e.preventDefault()
app/assets/javascripts/branch-graph.js.coffee
@@ -194,11 +194,14 @@ class BranchGraph @@ -194,11 +194,14 @@ class BranchGraph
194 fill: @colors[commit.space] 194 fill: @colors[commit.space]
195 stroke: "none" 195 stroke: "none"
196 ) 196 )
197 - r.rect(@offsetX + @unitSpace * @mspace + 10, y - 10, 20, 20).attr(  
198 - fill: "url(#{commit.author.icon})" 197 +
  198 + avatar_box_x = @offsetX + @unitSpace * @mspace + 10
  199 + avatar_box_y = y - 10
  200 + r.rect(avatar_box_x, avatar_box_y, 20, 20).attr(
199 stroke: @colors[commit.space] 201 stroke: @colors[commit.space]
200 "stroke-width": 2 202 "stroke-width": 2
201 ) 203 )
  204 + r.image(commit.author.icon, avatar_box_x, avatar_box_y, 20, 20)
202 r.text(@offsetX + @unitSpace * @mspace + 35, y, commit.message.split("\n")[0]).attr( 205 r.text(@offsetX + @unitSpace * @mspace + 35, y, commit.message.split("\n")[0]).attr(
203 "text-anchor": "start" 206 "text-anchor": "start"
204 font: "14px Monaco, monospace" 207 font: "14px Monaco, monospace"
app/assets/javascripts/dispatcher.js.coffee
@@ -47,5 +47,9 @@ class Dispatcher @@ -47,5 +47,9 @@ class Dispatcher
47 47
48 48
49 initSearch: -> 49 initSearch: ->
50 - autocomplete_json = $('.search-autocomplete-json').data('autocomplete-opts')  
51 - new SearchAutocomplete(autocomplete_json) 50 + opts = $('.search-autocomplete-opts')
  51 + path = opts.data('autocomplete-path')
  52 + project_id = opts.data('autocomplete-project-id')
  53 + project_ref = opts.data('autocomplete-project-ref')
  54 +
  55 + new SearchAutocomplete(path, project_id, project_ref)
app/assets/javascripts/issues.js.coffee
@@ -29,12 +29,10 @@ @@ -29,12 +29,10 @@
29 $('#filter_issue_search').val($('#issue_search').val()) 29 $('#filter_issue_search').val($('#issue_search').val())
30 30
31 initSelects: -> 31 initSelects: ->
32 - $("#update_status").chosen()  
33 - $("#update_assignee_id").chosen()  
34 - $("#update_milestone_id").chosen()  
35 - $("#label_name").chosen()  
36 - $("#assignee_id").chosen()  
37 - $("#milestone_id").chosen() 32 + $("select#update_status").select2(width: 'resolve', dropdownAutoWidth: true)
  33 + $("select#update_assignee_id").select2(width: 'resolve', dropdownAutoWidth: true)
  34 + $("select#update_milestone_id").select2(width: 'resolve', dropdownAutoWidth: true)
  35 + $("select#label_name").select2(width: 'resolve', dropdownAutoWidth: true)
38 $("#milestone_id, #assignee_id, #label_name").on "change", -> 36 $("#milestone_id, #assignee_id, #label_name").on "change", ->
39 $(this).closest("form").submit() 37 $(this).closest("form").submit()
40 38
app/assets/javascripts/main.js.coffee
@@ -67,8 +67,8 @@ $ -> @@ -67,8 +67,8 @@ $ ->
67 $('.appear-data').fadeIn() 67 $('.appear-data').fadeIn()
68 e.preventDefault() 68 e.preventDefault()
69 69
70 - # Initialize chosen selects  
71 - $('select.chosen').chosen() 70 + # Initialize select2 selects
  71 + $('select.select2').select2(width: 'resolve', dropdownAutoWidth: true)
72 72
73 # Initialize tooltips 73 # Initialize tooltips
74 $('.has_tooltip').tooltip() 74 $('.has_tooltip').tooltip()
@@ -81,6 +81,7 @@ $ -> @@ -81,6 +81,7 @@ $ ->
81 $(@).parents('form').submit() 81 $(@).parents('form').submit()
82 82
83 $("abbr.timeago").timeago() 83 $("abbr.timeago").timeago()
  84 + $('.js-timeago').timeago()
84 85
85 # Flash 86 # Flash
86 if (flash = $(".flash-container")).length > 0 87 if (flash = $(".flash-container")).length > 0
@@ -125,12 +126,6 @@ $ -> @@ -125,12 +126,6 @@ $ ->
125 $(@).remove() 126 $(@).remove()
126 127
127 (($) -> 128 (($) ->
128 - _chosen = $.fn.chosen  
129 - $.fn.extend chosen: (options) ->  
130 - default_options = search_contains: "true"  
131 - $.extend default_options, options  
132 - _chosen.apply @, [default_options]  
133 -  
134 # Disable an element and add the 'disabled' Bootstrap class 129 # Disable an element and add the 'disabled' Bootstrap class
135 $.fn.extend disable: -> 130 $.fn.extend disable: ->
136 $(@).attr('disabled', 'disabled').addClass('disabled') 131 $(@).attr('disabled', 'disabled').addClass('disabled')
app/assets/javascripts/merge_requests.js.coffee
@@ -2,8 +2,8 @@ @@ -2,8 +2,8 @@
2 # * Filter merge requests 2 # * Filter merge requests
3 # 3 #
4 @merge_requestsPage = -> 4 @merge_requestsPage = ->
5 - $('#assignee_id').chosen()  
6 - $('#milestone_id').chosen() 5 + $('#assignee_id').select2()
  6 + $('#milestone_id').select2()
7 $('#milestone_id, #assignee_id').on 'change', -> 7 $('#milestone_id, #assignee_id').on 'change', ->
8 $(this).closest('form').submit() 8 $(this).closest('form').submit()
9 9
@@ -24,6 +24,8 @@ class MergeRequest @@ -24,6 +24,8 @@ class MergeRequest
24 24
25 modal = $('#modal_merge_info').modal(show: false) 25 modal = $('#modal_merge_info').modal(show: false)
26 26
  27 + disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request'
  28 +
27 # Local jQuery finder 29 # Local jQuery finder
28 $: (selector) -> 30 $: (selector) ->
29 this.$el.find(selector) 31 this.$el.find(selector)
app/assets/javascripts/notes.js.coffee
@@ -37,6 +37,9 @@ class Notes @@ -37,6 +37,9 @@ class Notes
37 # attachment button 37 # attachment button
38 $(document).on "click", ".js-choose-note-attachment-button", @chooseNoteAttachment 38 $(document).on "click", ".js-choose-note-attachment-button", @chooseNoteAttachment
39 39
  40 + # update the file name when an attachment is selected
  41 + $(document).on "change", ".js-note-attachment-input", @updateFormAttachment
  42 +
40 # reply to diff/discussion notes 43 # reply to diff/discussion notes
41 $(document).on "click", ".js-discussion-reply-button", @replyToDiscussionNote 44 $(document).on "click", ".js-discussion-reply-button", @replyToDiscussionNote
42 45
@@ -429,4 +432,16 @@ class Notes @@ -429,4 +432,16 @@ class Notes
429 updateVotes: -> 432 updateVotes: ->
430 (new NotesVotes).updateVotes() 433 (new NotesVotes).updateVotes()
431 434
  435 + ###
  436 + Called after an attachment file has been selected.
  437 +
  438 + Updates the file name for the selected attachment.
  439 + ###
  440 + updateFormAttachment: ->
  441 + form = $(this).closest("form")
  442 +
  443 + # get only the basename
  444 + filename = $(this).val().replace(/^.*[\\\/]/, "")
  445 + form.find(".js-attachment-filename").text filename
  446 +
432 @Notes = Notes 447 @Notes = Notes
app/assets/javascripts/project.js.coffee
@@ -35,7 +35,7 @@ $ -> @@ -35,7 +35,7 @@ $ ->
35 $('a, button', scope).removeClass 'active' 35 $('a, button', scope).removeClass 'active'
36 $(@).addClass 'active' 36 $(@).addClass 'active'
37 $('#project_clone', scope).val $(@).data 'clone' 37 $('#project_clone', scope).val $(@).data 'clone'
38 - $(".clone").text("").append 'git remote add origin ' + $(@).data 'clone' 38 + $(".clone").text("").append $(@).data 'clone'
39 39
40 # Ref switcher 40 # Ref switcher
41 $('.project-refs-select').on 'change', -> 41 $('.project-refs-select').on 'change', ->
app/assets/javascripts/search_autocomplete.js.coffee
1 class SearchAutocomplete 1 class SearchAutocomplete
2 - constructor: (json) -> 2 + constructor: (search_autocomplete_path, project_id, project_ref) ->
  3 + project_id = '' unless project_id
  4 + project_ref = '' unless project_ref
  5 + query = "?project_id=" + project_id + "&project_ref=" + project_ref
  6 +
3 $("#search").autocomplete 7 $("#search").autocomplete
4 - source: json 8 + source: search_autocomplete_path + query
  9 + minLength: 1
5 select: (event, ui) -> 10 select: (event, ui) ->
6 location.href = ui.item.url 11 location.href = ui.item.url
7 12
app/assets/javascripts/stat_graph_contributors_graph.js.coffee
@@ -46,11 +46,7 @@ class window.ContributorsGraph @@ -46,11 +46,7 @@ class window.ContributorsGraph
46 46
47 class window.ContributorsMasterGraph extends ContributorsGraph 47 class window.ContributorsMasterGraph extends ContributorsGraph
48 constructor: (@data) -> 48 constructor: (@data) ->
49 - if $(window).width() > 1214  
50 - @width = 1100  
51 - else  
52 - @width = 870  
53 - 49 + @width = $('.container').width() - 70
54 @height = 200 50 @height = 200
55 @x = null 51 @x = null
56 @y = null 52 @y = null
@@ -88,7 +84,6 @@ class window.ContributorsMasterGraph extends ContributorsGraph @@ -88,7 +84,6 @@ class window.ContributorsMasterGraph extends ContributorsGraph
88 x(d.date) 84 x(d.date)
89 ).y0(@height).y1((d) -> 85 ).y0(@height).y1((d) ->
90 xa = d.commits = d.commits ? d.additions ? d.deletions 86 xa = d.commits = d.commits ? d.additions ? d.deletions
91 - console.log(xa)  
92 y(xa) 87 y(xa)
93 ).interpolate("basis") 88 ).interpolate("basis")
94 create_brush: -> 89 create_brush: ->
@@ -124,11 +119,7 @@ class window.ContributorsMasterGraph extends ContributorsGraph @@ -124,11 +119,7 @@ class window.ContributorsMasterGraph extends ContributorsGraph
124 119
125 class window.ContributorsAuthorGraph extends ContributorsGraph 120 class window.ContributorsAuthorGraph extends ContributorsGraph
126 constructor: (@data) -> 121 constructor: (@data) ->
127 - if $(window).width() > 1214  
128 - @width = 490  
129 - else  
130 - @width = 380  
131 - 122 + @width = $('.container').width()/2 - 100
132 @height = 200 123 @height = 200
133 @x = null 124 @x = null
134 @y = null 125 @y = null
app/assets/stylesheets/application.scss
@@ -4,19 +4,44 @@ @@ -4,19 +4,44 @@
4 * the top of the compiled file, but it's generally better to create a new file per style scope. 4 * the top of the compiled file, but it's generally better to create a new file per style scope.
5 *= require jquery.ui.gitlab 5 *= require jquery.ui.gitlab
6 *= require jquery.atwho 6 *= require jquery.atwho
7 - *= require chosen  
8 *= require select2 7 *= require select2
9 *= require_self 8 *= require_self
10 */ 9 */
11 10
  11 +@import "main/variables.scss";
  12 +@import "main/mixins.scss";
  13 +@import "main/fonts.scss";
  14 +@import "main/layout.scss";
  15 +
  16 +/**
  17 + * Customized Twitter bootstrap
  18 + */
  19 +@import 'gl_bootstrap';
  20 +
12 /** 21 /**
13 - * GitLab bootstrap: 22 + * Font icons
  23 + *
14 */ 24 */
15 -@import "gitlab_bootstrap.scss"; 25 +@import "font-awesome";
16 26
17 -@import "common.scss";  
18 -@import "selects.scss"; 27 +/**
  28 + * Generic css (forms, nav etc):
  29 + */
  30 +@import "generic/avatar.scss";
  31 +@import "generic/common.scss";
  32 +@import "generic/typography.scss";
  33 +@import "generic/buttons.scss";
  34 +@import "generic/blocks.scss";
  35 +@import "generic/ui_box.scss";
  36 +@import "generic/issue_box.scss";
  37 +@import "generic/files.scss";
  38 +@import "generic/lists.scss";
  39 +@import "generic/forms.scss";
  40 +@import "generic/selects.scss";
19 41
  42 +/**
  43 + * Page specific styles (issues, projects etc):
  44 + */
20 @import "sections/header.scss"; 45 @import "sections/header.scss";
21 @import "sections/nav.scss"; 46 @import "sections/nav.scss";
22 @import "sections/commits.scss"; 47 @import "sections/commits.scss";
@@ -39,6 +64,9 @@ @@ -39,6 +64,9 @@
39 @import "sections/dashboard.scss"; 64 @import "sections/dashboard.scss";
40 @import "sections/stat_graph.scss"; 65 @import "sections/stat_graph.scss";
41 66
  67 +/**
  68 + * Code ighlight
  69 + */
42 @import "highlight/white.scss"; 70 @import "highlight/white.scss";
43 @import "highlight/dark.scss"; 71 @import "highlight/dark.scss";
44 @import "highlight/solarized_dark.scss"; 72 @import "highlight/solarized_dark.scss";
@@ -57,4 +85,3 @@ @@ -57,4 +85,3 @@
57 * Styles for JS behaviors. 85 * Styles for JS behaviors.
58 */ 86 */
59 @import "behaviors.scss"; 87 @import "behaviors.scss";
60 -  
app/assets/stylesheets/common.scss
@@ -1,397 +0,0 @@ @@ -1,397 +0,0 @@
1 -html {  
2 - overflow-y: scroll;  
3 -}  
4 -  
5 -/** LAYOUT **/  
6 -  
7 -body {  
8 - -webkit-font-smoothing: antialiased;  
9 - -moz-osx-font-smoothing: grayscale;  
10 - margin-bottom: 20px;  
11 -}  
12 -  
13 -.container {  
14 - padding-top: 0;  
15 - z-index: 5;  
16 -}  
17 -  
18 -.container .content {  
19 - margin: 0 0;  
20 -}  
21 -  
22 -.author_link {  
23 - color: $link_color;  
24 -}  
25 -  
26 -.help li { color:$style_color; }  
27 -  
28 -.back-link {  
29 - font-size: 14px;  
30 -}  
31 -  
32 -table a code {  
33 - position: relative;  
34 - top: -2px;  
35 - margin-right: 3px;  
36 -}  
37 -  
38 -.loading {  
39 - margin: 20px auto;  
40 - background: url(ajax_loader.gif) no-repeat center center;  
41 - width: 40px;  
42 - height: 40px;  
43 - &.loading-gray {  
44 - background: url(ajax_loader_gray.gif) no-repeat center center;  
45 - }  
46 -}  
47 -  
48 -/** FLASH message **/  
49 -.flash-container {  
50 - display: none;  
51 - cursor: pointer;  
52 - margin: 0;  
53 - text-align: center;  
54 - color: #fff;  
55 - font-size: 14px;  
56 - position: fixed;  
57 - bottom: 0;  
58 - width: 100%;  
59 - opacity: 0.8;  
60 - z-index: 100;  
61 -  
62 - .flash-notice {  
63 - background: #49C;  
64 - padding: 10px;  
65 - text-shadow: 0 1px 1px #178;  
66 - }  
67 -  
68 - .flash-alert {  
69 - background: #C67;  
70 - text-shadow: 0 1px 1px #945;  
71 - padding: 10px;  
72 - }  
73 -}  
74 -  
75 -span.update-author {  
76 - display: block;  
77 - color: #999;  
78 - font-weight: normal;  
79 - font-style: italic;  
80 - strong {  
81 - font-weight: bold;  
82 - font-style: normal;  
83 - }  
84 -}  
85 -  
86 -.user-mention {  
87 - color: #2FA0BB;  
88 - font-weight: bold;  
89 -}  
90 -  
91 -.field_with_errors {  
92 - display: inline;  
93 -}  
94 -  
95 -ul.breadcrumb {  
96 - background: white;  
97 - border: none;  
98 - li {  
99 - display: inline;  
100 - text-shadow: 0 1px 0 white  
101 - }  
102 -  
103 - a {  
104 - font-size: 16px;  
105 - }  
106 -}  
107 -  
108 -.line_holder {  
109 - &:hover {  
110 - td {  
111 - background: #FFFFCF !important;  
112 - }  
113 - }  
114 -}  
115 -  
116 -p.time {  
117 - color: #999;  
118 - font-size: 90%;  
119 - margin: 30px 3px 3px 2px;  
120 -}  
121 -  
122 -.search-holder {  
123 - label, input {  
124 - height: 30px;  
125 - padding: 0;  
126 - font-size: 14px;  
127 - }  
128 - label {  
129 - line-height: 30px;  
130 - color: #666;  
131 - }  
132 -}  
133 -  
134 -.highlight {  
135 - text-shadow: none;  
136 -}  
137 -  
138 -.highlight_word {  
139 - border-bottom: 2px solid #F90;  
140 -}  
141 -  
142 -.thin_area{  
143 - height: 150px;  
144 -}  
145 -  
146 -// Fixes alignment on notes.  
147 -.new_note {  
148 - label {  
149 - text-align: left;  
150 - }  
151 -}  
152 -  
153 -// Fix issue with notes & lists creating a bunch of bottom borders.  
154 -li.note {  
155 - img { max-width:100% }  
156 - .note-title {  
157 - li {  
158 - border-bottom:none !important;  
159 - }  
160 - }  
161 -}  
162 -  
163 -.markdown {  
164 - img {  
165 - max-width: 100%;  
166 - }  
167 -}  
168 -  
169 -.wiki_content code, .readme code{  
170 - background-color: inherit;  
171 -}  
172 -  
173 -.team_member_show {  
174 - td:first-child {  
175 - color: #aaa;  
176 - }  
177 -}  
178 -  
179 -.rss-icon {  
180 - img {  
181 - width: 24px;  
182 - vertical-align: top;  
183 - }  
184 -  
185 - strong {  
186 - line-height: 24px;  
187 - }  
188 -}  
189 -  
190 -.supp_diff_link,  
191 -.show-all-commits {  
192 - cursor: pointer;  
193 -}  
194 -  
195 -.merge-request,  
196 -.issue {  
197 - &.today{  
198 - background: #EFE;  
199 - border-color: #CEC;  
200 - }  
201 - &.closed {  
202 - background: #F5f5f5;  
203 - border-color: #E5E5E5;  
204 - }  
205 - &.merged {  
206 - background: #F5f5f5;  
207 - border-color: #E5E5E5;  
208 - }  
209 -}  
210 -  
211 -.git_error_tips {  
212 - @extend .span6;  
213 - text-align: left;  
214 - margin-top: 40px;  
215 - pre {  
216 - background: white;  
217 - border: none;  
218 - font-size: 12px;  
219 - }  
220 -}  
221 -  
222 -.error-message {  
223 - padding: 10px;  
224 - background: #C67;  
225 - margin: 0;  
226 - color: #FFF;  
227 -  
228 - a {  
229 - color: #fff;  
230 - text-decoration: underline;  
231 - }  
232 -}  
233 -  
234 -.no-ssh-key-message {  
235 - padding: 10px 0;  
236 - background: #C67;  
237 - margin: 0;  
238 - color: #FFF;  
239 - text-align: center;  
240 -  
241 - a {  
242 - color: #fff;  
243 - text-decoration: underline;  
244 - }  
245 -}  
246 -  
247 -.warning_message {  
248 - border-left: 4px solid #ed9;  
249 - color: #b90;  
250 - padding: 10px;  
251 - margin-bottom: 10px;  
252 - background: #ffffe6;  
253 - padding-left: 20px;  
254 -  
255 - &.centered {  
256 - text-align: center;  
257 - }  
258 -}  
259 -  
260 -.gitlab-promo {  
261 - a {  
262 - color: #aaa;  
263 - margin-right: 30px;  
264 - }  
265 -}  
266 -  
267 -pre {  
268 - &.clean {  
269 - background: none;  
270 - border: none;  
271 - margin: 0;  
272 - padding: 0;  
273 - }  
274 -}  
275 -  
276 -.milestone {  
277 - &.milestone-closed {  
278 - background: #eee;  
279 - }  
280 - .progress {  
281 - margin-bottom: 0;  
282 - margin-top: 4px;  
283 - }  
284 -}  
285 -  
286 -h1.http_status_code {  
287 - font-size: 56px;  
288 - line-height: 100px;  
289 - font-weight: normal;  
290 - color: #456;  
291 -}  
292 -  
293 -.control-group {  
294 - .controls {  
295 - span {  
296 - &.descr {  
297 - position: relative;  
298 - top: 2px;  
299 - left: 5px;  
300 - color: #666;  
301 - }  
302 - }  
303 - }  
304 -}  
305 -  
306 -img.emoji {  
307 - height: 20px;  
308 - vertical-align: middle;  
309 - width: 20px;  
310 -}  
311 -  
312 -.appear-data {  
313 - display: none;  
314 -}  
315 -  
316 -.chart {  
317 - overflow: hidden;  
318 - height: 220px;  
319 -}  
320 -  
321 -.navless-container {  
322 - margin-top: 20px;  
323 -}  
324 -  
325 -.description-block {  
326 - @extend .light-well;  
327 - @extend .light;  
328 - margin-bottom: 10px;  
329 -}  
330 -  
331 -table {  
332 - td.permission-x {  
333 - background: #D9EDF7 !important;  
334 - text-align: center;  
335 - }  
336 -}  
337 -  
338 -.dashboard-intro-icon {  
339 - float: left;  
340 - font-size: 32px;  
341 - color: #AAA;  
342 - padding: 5px 0;  
343 - width: 50px;  
344 - min-height: 100px;  
345 -}  
346 -  
347 -.navbar-gitlab .navbar-inner .nav > li .btn-sign-in {  
348 - @extend .btn-new;  
349 - padding: 5px 15px;  
350 - text-shadow: none;  
351 -}  
352 -  
353 -.broadcast-message {  
354 - padding: 10px;  
355 - text-align: center;  
356 - background: #555;  
357 - color: #BBB;  
358 -}  
359 -  
360 -.broadcast-message-preview {  
361 - @extend .broadcast-message;  
362 - margin-bottom: 20px;  
363 -}  
364 -  
365 -.ajax-users-select {  
366 - width: 400px;  
367 -  
368 - &.input-large {  
369 - width: 210px;  
370 - }  
371 -  
372 - &.input-clamp {  
373 - max-width: 100%;  
374 - }  
375 -}  
376 -  
377 -.user-result {  
378 - .user-image {  
379 - float: left;  
380 - }  
381 - .user-name {  
382 - }  
383 - .user-username {  
384 - color: #999;  
385 - }  
386 -}  
387 -  
388 -.namespace-result {  
389 - .namespace-kind {  
390 - color: #AAA;  
391 - font-weight: normal;  
392 - }  
393 - .namespace-path {  
394 - margin-left: 10px;  
395 - font-weight: bolder;  
396 - }  
397 -}  
app/assets/stylesheets/generic/avatar.scss 0 → 100644
@@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
  1 +.avatar {
  2 + float: left;
  3 + margin-right: 12px;
  4 + width: 40px;
  5 + padding: 1px;
  6 + @include border-radius(4px);
  7 +
  8 + &.avatar-inline {
  9 + float: none;
  10 + margin-left: 3px;
  11 +
  12 + &.s16 { margin-right: 2px; }
  13 + &.s24 { margin-right: 2px; }
  14 + }
  15 +
  16 + &.s16 { width: 16px; height: 16px; margin-right: 6px; }
  17 + &.s24 { width: 24px; height: 24px; margin-right: 8px; }
  18 + &.s26 { width: 26px; height: 26px; margin-right: 8px; }
  19 + &.s32 { width: 32px; height: 32px; margin-right: 10px; }
  20 + &.s60 { width: 60px; height: 60px; margin-right: 12px; }
  21 + &.s90 { width: 90px; height: 90px; margin-right: 15px; }
  22 + &.s160 { width: 160px; height: 160px; margin-right: 20px; }
  23 +}
app/assets/stylesheets/generic/blocks.scss 0 → 100644
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +.light-well {
  2 + background: #f9f9f9;
  3 + padding: 15px;
  4 +}
app/assets/stylesheets/generic/buttons.scss 0 → 100644
@@ -0,0 +1,169 @@ @@ -0,0 +1,169 @@
  1 +.btn {
  2 + display: inline-block;
  3 + margin-bottom: 0;
  4 + font-weight: normal;
  5 + text-align: center;
  6 + vertical-align: middle;
  7 + cursor: pointer;
  8 + background-image: none;
  9 + border: 1px solid transparent;
  10 + white-space: nowrap;
  11 + padding: 6px 12px;
  12 + font-size: 13px;
  13 + line-height: 18px;
  14 + border-radius: 4px;
  15 + -webkit-user-select: none;
  16 + -moz-user-select: none;
  17 + -ms-user-select: none;
  18 + -o-user-select: none;
  19 + user-select: none;
  20 + color: #444444;
  21 + background-color: #fff;
  22 + border-color: #ccc;
  23 + text-shadow: none;
  24 +
  25 + &.hover,
  26 + &:hover {
  27 + color: #444444;
  28 + text-decoration: none;
  29 + background-color: #ebebeb;
  30 + border-color: #adadad;
  31 + }
  32 +
  33 + &.focus,
  34 + &:focus {
  35 + color: #444444;
  36 + text-decoration: none;
  37 + outline: thin dotted #333;
  38 + outline: 5px auto -webkit-focus-ring-color;
  39 + outline-offset: -2px;
  40 + }
  41 +
  42 + &.active,
  43 + &:active {
  44 + outline: 0;
  45 + background-image: none;
  46 + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  47 + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  48 + }
  49 +
  50 + &.disabled,
  51 + &[disabled] {
  52 + cursor: not-allowed;
  53 + pointer-events: none;
  54 + opacity: 0.65;
  55 + filter: alpha(opacity=65);
  56 + -webkit-box-shadow: none;
  57 + box-shadow: none;
  58 + }
  59 +
  60 + &.btn-primary {
  61 + color: #ffffff;
  62 + background-color: #429bca;
  63 + border-color: #358ebd;
  64 +
  65 + &.hover,
  66 + &:hover,
  67 + &.disabled,
  68 + &[disabled] {
  69 + color: #ffffff;
  70 + background-color: #3286b1;
  71 + border-color: #286e8e;
  72 + }
  73 + }
  74 +
  75 + &.btn-success {
  76 + color: #ffffff;
  77 + background-color: #5cb85c;
  78 + border-color: #4cae4c;
  79 +
  80 +
  81 + &.hover,
  82 + &:hover,
  83 + &.disabled,
  84 + &[disabled] {
  85 + color: #ffffff;
  86 + background-color: #47a447;
  87 + border-color: #398439;
  88 + }
  89 + }
  90 +
  91 + &.btn-danger {
  92 + color: #ffffff;
  93 + background-color: #d9534f;
  94 + border-color: #d43f3a;
  95 +
  96 +
  97 + &.hover,
  98 + &:hover,
  99 + &.disabled,
  100 + &[disabled] {
  101 + color: #ffffff;
  102 + background-color: #d2322d;
  103 + border-color: #ac2925;
  104 + }
  105 + }
  106 +
  107 + &.btn-new {
  108 + @extend .btn-success;
  109 + }
  110 +
  111 + &.btn-create {
  112 + @extend .wide;
  113 + @extend .btn-success;
  114 + }
  115 +
  116 + &.btn-save {
  117 + @extend .wide;
  118 + @extend .btn-primary;
  119 + }
  120 +
  121 + &.btn-close,
  122 + &.btn-remove {
  123 + @extend .btn-danger;
  124 + }
  125 +
  126 + &.btn-cancel {
  127 + float: right;
  128 + }
  129 +
  130 + &.wide {
  131 + padding-left: 20px;
  132 + padding-right: 20px;
  133 + }
  134 +
  135 + &.btn-small {
  136 + padding: 2px 10px;
  137 + font-size: 12px;
  138 + }
  139 +
  140 + &.btn-tiny {
  141 + font-size: 11px;
  142 + padding: 2px 6px;
  143 + line-height: 16px;
  144 + margin: 2px;
  145 + }
  146 +}
  147 +
  148 +.btn-block {
  149 + width: 100%;
  150 + margin: 0;
  151 + margin-bottom: 15px;
  152 + &.btn {
  153 + padding: 6px 0;
  154 + }
  155 +}
  156 +
  157 +.btn,
  158 +.btn-group {
  159 + &.grouped {
  160 + margin-right: 7px;
  161 + float: left;
  162 + &:last-child {
  163 + margin-right: 0px;
  164 + }
  165 + }
  166 +}
  167 +
  168 +.btn-group-small > .btn { @extend .btn.btn-small; }
  169 +.btn-group-tiny > .btn { @extend .btn.btn-tiny; }
app/assets/stylesheets/generic/common.scss 0 → 100644
@@ -0,0 +1,487 @@ @@ -0,0 +1,487 @@
  1 +/** COLORS **/
  2 +.cgray { color: gray }
  3 +.clgray { color: #BBB }
  4 +.cred { color: #D12F19 }
  5 +.cgreen { color: #4a2 }
  6 +.cblue { color: #29A }
  7 +.cblack { color: #111 }
  8 +.cdark { color: #444 }
  9 +.camber { color: #ffc000 }
  10 +.cwhite { color: #fff!important }
  11 +.bgred { background: #F2DEDE!important }
  12 +
  13 +/** COMMON CLASSES **/
  14 +.left { float:left }
  15 +
  16 +.prepend-top-10 { margin-top:10px }
  17 +.prepend-top-20 { margin-top:20px }
  18 +.prepend-left-10 { margin-left:10px }
  19 +.prepend-left-20 { margin-left:20px }
  20 +.append-right-10 { margin-right:10px }
  21 +.append-right-20 { margin-right:20px }
  22 +.append-bottom-10 { margin-bottom:10px }
  23 +.append-bottom-15 { margin-bottom:15px }
  24 +.append-bottom-20 { margin-bottom:20px }
  25 +.inline { display: inline-block }
  26 +
  27 +.padded { padding:20px }
  28 +.ipadded { padding:20px!important }
  29 +.lborder { border-left:1px solid #eee }
  30 +.underlined_link { text-decoration: underline; }
  31 +.hint { font-style: italic; color: #999; }
  32 +.light { color: #888 }
  33 +.tiny { font-weight: normal }
  34 +.vtop { vertical-align: top !important; }
  35 +
  36 +
  37 +/** ALERT MESSAGES **/
  38 +.alert.alert-disabled {
  39 + background: #EEE;
  40 + color: #777;
  41 + border-color: #DDD;
  42 +}
  43 +
  44 +/** HELPERS **/
  45 +.nothing_here_message {
  46 + text-align: center;
  47 + padding: 20px;
  48 + color: #666;
  49 + font-weight: normal;
  50 + font-size: 16px;
  51 + line-height: 36px;
  52 +}
  53 +
  54 +.slead {
  55 + color: #666;
  56 + font-size: 14px;
  57 + margin-bottom: 12px;
  58 + font-weight: normal;
  59 + line-height: 24px;
  60 +}
  61 +
  62 +
  63 +.tab-content {
  64 + overflow: visible;
  65 +}
  66 +
  67 +@media (max-width: 1200px) {
  68 + .only-wide {
  69 + display: none;
  70 + }
  71 +}
  72 +
  73 +pre.well-pre {
  74 + border: 1px solid #EEE;
  75 + background: #f9f9f9;
  76 + border-radius: 0;
  77 + color: #555;
  78 +}
  79 +
  80 +.input-append .btn.active, .input-prepend .btn.active {
  81 + background: #CCC;
  82 + border-color: #BBB;
  83 + text-shadow: 0 1px 1px #fff;
  84 + font-weight: bold;
  85 + @include box-shadow(inset 0 2px 4px rgba(0,0,0,.15));
  86 +}
  87 +
  88 +/** Big Labels **/
  89 +.state-label {
  90 + font-size: 14px;
  91 + padding: 6px 25px;
  92 + text-align: center;
  93 + @include border-radius(4px);
  94 + text-shadow: none;
  95 + margin-left: 10px;
  96 +
  97 + &.state-label-green {
  98 + background: #4A4;
  99 + color: #FFF;
  100 + }
  101 +
  102 + &.state-label-red {
  103 + background: #DA4E49;
  104 + color: #FFF;
  105 + }
  106 +}
  107 +
  108 +.dropdown-menu > li > a {
  109 + text-shadow: none;
  110 +}
  111 +
  112 +.dropdown-menu > li > a:hover,
  113 +.dropdown-menu > li > a:focus {
  114 + background: #29b;
  115 +}
  116 +
  117 +.breadcrumb > li + li:before {
  118 + content: "/";
  119 + padding: 0;
  120 + color: #666;
  121 +}
  122 +
  123 +.str-truncated {
  124 + display: inline-block;
  125 + overflow: hidden;
  126 + text-overflow: ellipsis;
  127 + vertical-align: top;
  128 + white-space: nowrap;
  129 + max-width: 82%;
  130 +}
  131 +
  132 +/** FLASH message **/
  133 +.flash-container {
  134 + display: none;
  135 + cursor: pointer;
  136 + margin: 0;
  137 + text-align: center;
  138 + color: #fff;
  139 + font-size: 14px;
  140 + position: fixed;
  141 + bottom: 0;
  142 + width: 100%;
  143 + opacity: 0.8;
  144 + z-index: 100;
  145 +
  146 + .flash-notice {
  147 + background: #49C;
  148 + padding: 10px;
  149 + text-shadow: 0 1px 1px #178;
  150 + }
  151 +
  152 + .flash-alert {
  153 + background: #C67;
  154 + text-shadow: 0 1px 1px #945;
  155 + padding: 10px;
  156 + }
  157 +}
  158 +.author_link {
  159 + color: $link_color;
  160 +}
  161 +
  162 +.help li { color:$style_color; }
  163 +
  164 +.back-link {
  165 + font-size: 14px;
  166 +}
  167 +
  168 +table a code {
  169 + position: relative;
  170 + top: -2px;
  171 + margin-right: 3px;
  172 +}
  173 +
  174 +.loading {
  175 + margin: 20px auto;
  176 + background: url(ajax_loader.gif) no-repeat center center;
  177 + width: 40px;
  178 + height: 40px;
  179 + &.loading-gray {
  180 + background: url(ajax_loader_gray.gif) no-repeat center center;
  181 + }
  182 +}
  183 +
  184 +span.update-author {
  185 + display: block;
  186 + color: #999;
  187 + font-weight: normal;
  188 + font-style: italic;
  189 + strong {
  190 + font-weight: bold;
  191 + font-style: normal;
  192 + }
  193 +}
  194 +
  195 +.user-mention {
  196 + color: #2FA0BB;
  197 + font-weight: bold;
  198 +}
  199 +
  200 +.field_with_errors {
  201 + display: inline;
  202 +}
  203 +
  204 +.line_holder {
  205 + &:hover {
  206 + td {
  207 + background: #FFFFCF !important;
  208 + }
  209 + }
  210 +}
  211 +
  212 +p.time {
  213 + color: #999;
  214 + font-size: 90%;
  215 + margin: 30px 3px 3px 2px;
  216 +}
  217 +
  218 +.highlight {
  219 + text-shadow: none;
  220 +}
  221 +
  222 +.highlight_word {
  223 + border-bottom: 2px solid #F90;
  224 +}
  225 +
  226 +.thin_area{
  227 + height: 150px;
  228 +}
  229 +
  230 +// Fixes alignment on notes.
  231 +.new_note {
  232 + label {
  233 + text-align: left;
  234 + }
  235 +}
  236 +
  237 +// Fix issue with notes & lists creating a bunch of bottom borders.
  238 +li.note {
  239 + img { max-width:100% }
  240 + .note-title {
  241 + li {
  242 + border-bottom:none !important;
  243 + }
  244 + }
  245 +}
  246 +
  247 +.markdown {
  248 + img {
  249 + max-width: 100%;
  250 + }
  251 +}
  252 +
  253 +.wiki_content code, .readme code{
  254 + background-color: inherit;
  255 +}
  256 +
  257 +.team_member_show {
  258 + td:first-child {
  259 + color: #aaa;
  260 + }
  261 +}
  262 +
  263 +.rss-icon {
  264 + img {
  265 + width: 24px;
  266 + vertical-align: top;
  267 + }
  268 +
  269 + strong {
  270 + line-height: 24px;
  271 + }
  272 +}
  273 +
  274 +.supp_diff_link,
  275 +.show-all-commits {
  276 + cursor: pointer;
  277 +}
  278 +
  279 +.merge-request,
  280 +.issue {
  281 + &.today{
  282 + background: #EFE;
  283 + border-color: #CEC;
  284 + }
  285 + &.closed {
  286 + background: #F5f5f5;
  287 + border-color: #E5E5E5;
  288 + }
  289 + &.merged {
  290 + background: #F5f5f5;
  291 + border-color: #E5E5E5;
  292 + }
  293 +}
  294 +
  295 +.git_error_tips {
  296 + @extend .col-md-6;
  297 + text-align: left;
  298 + margin-top: 40px;
  299 + pre {
  300 + background: white;
  301 + border: none;
  302 + font-size: 12px;
  303 + }
  304 +}
  305 +
  306 +.error-message {
  307 + padding: 10px;
  308 + background: #C67;
  309 + margin: 0;
  310 + color: #FFF;
  311 +
  312 + a {
  313 + color: #fff;
  314 + text-decoration: underline;
  315 + }
  316 +}
  317 +
  318 +.no-ssh-key-message {
  319 + padding: 10px 0;
  320 + background: #C67;
  321 + margin: 0;
  322 + color: #FFF;
  323 + margin-top: -1px;
  324 + text-align: center;
  325 +
  326 + a {
  327 + color: #fff;
  328 + text-decoration: underline;
  329 + }
  330 +}
  331 +
  332 +.warning_message {
  333 + border-left: 4px solid #ed9;
  334 + color: #b90;
  335 + padding: 10px;
  336 + margin-bottom: 10px;
  337 + background: #ffffe6;
  338 + padding-left: 20px;
  339 +
  340 + &.centered {
  341 + text-align: center;
  342 + }
  343 +}
  344 +
  345 +.gitlab-promo {
  346 + a {
  347 + color: #aaa;
  348 + margin-right: 30px;
  349 + }
  350 +}
  351 +
  352 +pre {
  353 + &.clean {
  354 + background: none;
  355 + border: none;
  356 + margin: 0;
  357 + padding: 0;
  358 + }
  359 +}
  360 +
  361 +.milestone {
  362 + &.milestone-closed {
  363 + background: #eee;
  364 + }
  365 + .progress {
  366 + margin-bottom: 0;
  367 + margin-top: 4px;
  368 + }
  369 +}
  370 +
  371 +h1.http_status_code {
  372 + font-size: 56px;
  373 + line-height: 100px;
  374 + font-weight: normal;
  375 + color: #456;
  376 +}
  377 +
  378 +.control-group {
  379 + .controls {
  380 + span {
  381 + &.descr {
  382 + position: relative;
  383 + top: 2px;
  384 + left: 5px;
  385 + color: #666;
  386 + }
  387 + }
  388 + }
  389 +}
  390 +
  391 +img.emoji {
  392 + height: 20px;
  393 + vertical-align: middle;
  394 + width: 20px;
  395 +}
  396 +
  397 +.appear-data {
  398 + display: none;
  399 +}
  400 +
  401 +.chart {
  402 + overflow: hidden;
  403 + height: 220px;
  404 +}
  405 +
  406 +.navless-container {
  407 + margin-top: 20px;
  408 +}
  409 +
  410 +.description-block {
  411 + @extend .light-well;
  412 + @extend .light;
  413 + margin-bottom: 10px;
  414 +}
  415 +
  416 +table {
  417 + td.permission-x {
  418 + background: #D9EDF7 !important;
  419 + text-align: center;
  420 + }
  421 +}
  422 +
  423 +.dashboard-intro-icon {
  424 + float: left;
  425 + font-size: 32px;
  426 + color: #AAA;
  427 + padding: 5px 0;
  428 + width: 50px;
  429 + min-height: 100px;
  430 +}
  431 +
  432 +.broadcast-message {
  433 + padding: 10px;
  434 + text-align: center;
  435 + background: #555;
  436 + color: #BBB;
  437 +}
  438 +
  439 +.broadcast-message-preview {
  440 + @extend .broadcast-message;
  441 + margin-bottom: 20px;
  442 +}
  443 +
  444 +.ajax-users-select {
  445 + width: 400px;
  446 +
  447 + &.input-large {
  448 + width: 210px;
  449 + }
  450 +
  451 + &.input-clamp {
  452 + max-width: 100%;
  453 + }
  454 +}
  455 +
  456 +.user-result {
  457 + .user-image {
  458 + float: left;
  459 + }
  460 + .user-name {
  461 + }
  462 + .user-username {
  463 + color: #999;
  464 + }
  465 +}
  466 +
  467 +.namespace-result {
  468 + .namespace-kind {
  469 + color: #AAA;
  470 + font-weight: normal;
  471 + }
  472 + .namespace-path {
  473 + margin-left: 10px;
  474 + font-weight: bolder;
  475 + }
  476 +}
  477 +
  478 +.btn-sign-in {
  479 + margin-top: 7px;
  480 + text-shadow: none;
  481 +}
  482 +
  483 +.side-filters {
  484 + fieldset {
  485 + margin-bottom: 15px;
  486 + }
  487 +}
app/assets/stylesheets/generic/files.scss 0 → 100644
@@ -0,0 +1,218 @@ @@ -0,0 +1,218 @@
  1 +/**
  2 + * File content holder
  3 + *
  4 + */
  5 +.file-holder {
  6 + border: 1px solid #CCC;
  7 + margin-bottom: 1em;
  8 +
  9 + table {
  10 + @extend .table;
  11 + }
  12 +
  13 + .file-title {
  14 + background: #DDD;
  15 + border-bottom: 1px solid #CCC;
  16 + text-shadow: 0 1px 1px #fff;
  17 + margin: 0;
  18 + font-weight: normal;
  19 + font-weight: bold;
  20 + text-align: left;
  21 + color: $style_color;
  22 + padding: 9px 10px;
  23 +
  24 + .options {
  25 + float: right;
  26 + margin-top: -5px;
  27 + }
  28 +
  29 + .file_name {
  30 + color: $style_color;
  31 + font-size: 14px;
  32 + text-shadow: 0 1px 1px #fff;
  33 + small {
  34 + color: #999;
  35 + font-size: 13px;
  36 + }
  37 + }
  38 + }
  39 + .file-content {
  40 + background: #fff;
  41 + font-size: 11px;
  42 +
  43 + &.image_file {
  44 + background: #eee;
  45 + text-align: center;
  46 + img {
  47 + padding: 100px;
  48 + max-width: 50%;
  49 + }
  50 + }
  51 +
  52 + &.wiki {
  53 + padding: 20px;
  54 + font-size: 14px;
  55 + line-height: 1.6;
  56 +
  57 + .highlight {
  58 + margin-bottom: 9px;
  59 + @include border-radius(4px);
  60 +
  61 + > pre {
  62 + margin: 0;
  63 + }
  64 + }
  65 + }
  66 +
  67 + &.blob_file {
  68 +
  69 + }
  70 +
  71 + &.blob-no-preview {
  72 + background: #eee;
  73 + text-shadow: 0 1px 2px #FFF;
  74 + padding: 100px 0;
  75 + }
  76 +
  77 + /**
  78 + * Blame file
  79 + */
  80 + &.blame {
  81 + table {
  82 + border: none;
  83 + box-shadow: none;
  84 + margin: 0;
  85 + }
  86 + tr {
  87 + border-bottom: 1px solid #eee;
  88 + }
  89 + td {
  90 + &:first-child {
  91 + border-left: none;
  92 + }
  93 + &:last-child {
  94 + border-right: none;
  95 + }
  96 + background: #fff;
  97 + padding: 5px;
  98 + }
  99 + .author,
  100 + .blame_commit {
  101 + background: #f5f5f5;
  102 + vertical-align: top;
  103 + }
  104 + .lines {
  105 + pre {
  106 + padding: 0;
  107 + margin: 0;
  108 + background: none;
  109 + border: none;
  110 + }
  111 + }
  112 + }
  113 +
  114 + &.logs {
  115 + background: #eee;
  116 + max-height: 700px;
  117 + overflow-y: auto;
  118 +
  119 + ol {
  120 + margin-left: 40px;
  121 + padding: 10px 0;
  122 + border-left: 1px solid #CCC;
  123 + margin-bottom: 0;
  124 + background: white;
  125 + li {
  126 + color: #888;
  127 + p {
  128 + margin: 0;
  129 + color: #333;
  130 + line-height: 24px;
  131 + padding-left: 10px;
  132 + }
  133 +
  134 + &:hover {
  135 + background: $hover;
  136 + }
  137 + }
  138 + }
  139 + }
  140 +
  141 + /**
  142 + * Code file
  143 + */
  144 + &.code {
  145 + padding: 0;
  146 +
  147 + table.lines {
  148 + border: none;
  149 + box-shadow: none;
  150 + margin: 0px;
  151 + padding: 0px;
  152 + table-layout: fixed;
  153 +
  154 + pre {
  155 + border: none;
  156 + border-radius: 0;
  157 + font-family: $monospace_font;
  158 + font-size: 12px !important;
  159 + line-height: 16px !important;
  160 + margin: 0;
  161 + padding: 10px 0;
  162 + }
  163 + td {
  164 + border: none;
  165 + margin: 0;
  166 + padding: 0;
  167 + vertical-align: top;
  168 +
  169 + &:first-child {
  170 + background: #eee;
  171 + width: 50px;
  172 + }
  173 + &:last-child {
  174 + }
  175 + }
  176 + tr:hover {
  177 + background: none;
  178 + }
  179 +
  180 + pre.line_numbers {
  181 + color: #666;
  182 + padding: 10px 6px 10px 0;
  183 + text-align: right;
  184 + background: #EEE;
  185 +
  186 + a {
  187 + color: #666;
  188 +
  189 + i {
  190 + display: none;
  191 + font-size: 14px;
  192 + line-height: 14px;
  193 + }
  194 + &:hover i {
  195 + display: inherit;
  196 + }
  197 + }
  198 + }
  199 +
  200 + .highlight {
  201 + border-left: 1px solid #DEE2E3;
  202 + overflow: auto;
  203 + overflow-y: hidden;
  204 +
  205 + pre {
  206 + white-space: pre;
  207 + word-wrap: normal;
  208 +
  209 + .line {
  210 + padding: 0 10px;
  211 + }
  212 + }
  213 + }
  214 + }
  215 + }
  216 + }
  217 +}
  218 +
app/assets/stylesheets/generic/forms.scss 0 → 100644
@@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
  1 +input[type='search'].search-text-input {
  2 + background-image: url("icon-search.png");
  3 + background-repeat: no-repeat;
  4 + background-position: 10px;
  5 + padding-left: 25px;
  6 +}
  7 +
  8 +input[type='text'].danger {
  9 + background: #F2DEDE!important;
  10 + border-color: #D66;
  11 + text-shadow: 0 1px 1px #fff
  12 +}
  13 +
  14 +fieldset legend {
  15 + font-size: 16px;
  16 +}
  17 +
  18 +.datetime-controls {
  19 + select {
  20 + width: 100px;
  21 + }
  22 +}
  23 +
  24 +.form-actions {
  25 + padding: 17px 20px 18px;
  26 + margin-top: 18px;
  27 + margin-bottom: 18px;
  28 + background-color: whitesmoke;
  29 + border-top: 1px solid #e5e5e5;
  30 + padding-left: 17%;
  31 +}
  32 +
  33 +label {
  34 + &.control-label {
  35 + @extend .col-sm-2;
  36 + }
  37 +
  38 + &.inline-label {
  39 + margin: 0;
  40 + }
  41 +}
  42 +
  43 +.inline-input-group {
  44 + width: 250px;
  45 +}
  46 +
  47 +.input-mx-250 {
  48 + max-width: 250px;
  49 +}
  50 +
  51 +.input-mn-300 {
  52 + min-width: 300px;
  53 +}
app/assets/stylesheets/generic/issue_box.scss 0 → 100644
@@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
  1 +/**
  2 + * Issue box:
  3 + * Huge block (one per page) for storing title, descripion and other information.
  4 + * Used for Issue#show page, MergeRequest#show page etc
  5 + *
  6 + * CLasses:
  7 + * .issue-box - Regular box
  8 + */
  9 +
  10 +.issue-box {
  11 + color: #666;
  12 + margin:20px 0;
  13 + background: #FAFAFA;
  14 + border: 1px solid #DDD;
  15 +
  16 + .control-group {
  17 + margin-bottom: 0;
  18 + }
  19 +
  20 + .title {
  21 + font-size: 20px;
  22 + font-weight: 500;
  23 + line-height: 28px;
  24 + margin: 0;
  25 + color: #444;
  26 + }
  27 +
  28 + .context {
  29 + border: none;
  30 + background-color: #f5f5f5;
  31 + border: none;
  32 + border-top: 1px solid #eee;
  33 + }
  34 +
  35 + .description {
  36 + border-top: 1px solid #eee;
  37 + }
  38 +
  39 + .title, .context, .description {
  40 + padding: 15px;
  41 +
  42 + .clearfix {
  43 + margin: 0;
  44 + }
  45 + }
  46 +}
app/assets/stylesheets/generic/lists.scss 0 → 100644
@@ -0,0 +1,97 @@ @@ -0,0 +1,97 @@
  1 +/**
  2 + * Well styled list
  3 + *
  4 + */
  5 +.well-list {
  6 + margin: 0;
  7 + padding: 0;
  8 + list-style: none;
  9 +
  10 + li {
  11 + padding: 10px;
  12 + min-height: 20px;
  13 + border-bottom: 1px solid #eee;
  14 + border-bottom: 1px solid rgba(0, 0, 0, 0.05);
  15 +
  16 + &.disabled {
  17 + color: #888;
  18 + }
  19 +
  20 + &.unstyled {
  21 + &:hover {
  22 + background: none;
  23 + }
  24 + }
  25 +
  26 + &.smoke { background-color: #f5f5f5; }
  27 +
  28 + &:hover {
  29 + background: $hover;
  30 + border-bottom: 1px solid #ADF;
  31 + }
  32 +
  33 + &:last-child {
  34 + border-bottom: none;
  35 +
  36 + &.bottom {
  37 + background: #f5f5f5;
  38 + }
  39 + }
  40 +
  41 + .author { color: #999; }
  42 +
  43 + p {
  44 + padding-top: 1px;
  45 + margin: 0;
  46 + color: #222;
  47 + img {
  48 + position: relative;
  49 + top: 3px;
  50 + }
  51 + }
  52 +
  53 + .well-title {
  54 + font-size: 14px;
  55 + line-height: 18px;
  56 + }
  57 + }
  58 +}
  59 +
  60 +ol, ul {
  61 + &.styled {
  62 + li {
  63 + padding: 2px;
  64 + }
  65 + }
  66 +}
  67 +
  68 +/** light list with border-bottom between li **/
  69 +ul.bordered-list {
  70 + margin: 5px 0px;
  71 + padding: 0px;
  72 + li {
  73 + padding: 5px 0;
  74 + border-bottom: 1px solid #EEE;
  75 + overflow: hidden;
  76 + display: block;
  77 + margin: 0px;
  78 + &:last-child { border:none }
  79 + &.active {
  80 + background: #f9f9f9;
  81 + a { font-weight: bold; }
  82 + }
  83 +
  84 + &.light {
  85 + a { color: #777; }
  86 + }
  87 + }
  88 +
  89 + &.top-list {
  90 + li:first-child {
  91 + padding-top: 0;
  92 + h4, h5 {
  93 + margin-top: 0;
  94 + }
  95 + }
  96 + }
  97 +}
app/assets/stylesheets/generic/selects.scss 0 → 100644
@@ -0,0 +1,80 @@ @@ -0,0 +1,80 @@
  1 +/** Select2 selectbox style override **/
  2 +
  3 +.select2-container, .select2-container.select2-drop-above {
  4 + .select2-choice {
  5 + background: #FFF;
  6 + border-color: #BBB;
  7 +
  8 + .select2-arrow {
  9 + background: #FFF;
  10 + }
  11 + }
  12 +}
  13 +
  14 +.select2-drop-active {
  15 + border: 1px solid #BBB;
  16 + margin-top: 4px;
  17 +
  18 + .select2-search input {
  19 + background: #fafafa;
  20 + border-color: #DDD;
  21 + }
  22 +
  23 + .select2-results {
  24 + max-height: 350px;
  25 + .select2-highlighted {
  26 + background: $bg_style_color;
  27 + }
  28 + }
  29 +}
  30 +
  31 +select {
  32 + &.select2 {
  33 + width: 100px;
  34 + }
  35 +
  36 + &.select2-sm {
  37 + width: 100px;
  38 + }
  39 +}
  40 +
  41 +@media (min-width: $screen-sm-min) {
  42 + select {
  43 + &.select2 {
  44 + width: 150px;
  45 + }
  46 + &.select2-sm {
  47 + width: 120px;
  48 + }
  49 + }
  50 +}
  51 +
  52 +/* Medium devices (desktops, 992px and up) */
  53 +@media (min-width: $screen-md-min) {
  54 + select {
  55 + &.select2 {
  56 + width: 170px;
  57 + }
  58 + &.select2-sm {
  59 + width: 140px;
  60 + }
  61 + }
  62 +}
  63 +
  64 +/* Large devices (large desktops, 1200px and up) */
  65 +@media (min-width: $screen-lg-min) {
  66 + select {
  67 + &.select2 {
  68 + width: 200px;
  69 + }
  70 + &.select2-sm {
  71 + width: 150px;
  72 + }
  73 + }
  74 +}
  75 +
  76 +
  77 +/** Branch/tag selector **/
  78 +.project-refs-form .select2-container {
  79 + margin-right: 10px;
  80 +}
app/assets/stylesheets/generic/typography.scss 0 → 100644
@@ -0,0 +1,104 @@ @@ -0,0 +1,104 @@
  1 +/**
  2 + * Headers
  3 + *
  4 + */
  5 +h1.page-title {
  6 + @include page-title;
  7 + font-size: 28px;
  8 +}
  9 +
  10 +h2.page-title {
  11 + @include page-title;
  12 + font-size: 24px;
  13 +}
  14 +
  15 +h3.page-title {
  16 + @include page-title;
  17 +}
  18 +
  19 +h6 {
  20 + color: #888;
  21 + text-transform: uppercase;
  22 +}
  23 +
  24 +/** CODE **/
  25 +pre {
  26 + font-family: $monospace_font;
  27 +
  28 + &.dark {
  29 + background: #333;
  30 + color: #f5f5f5;
  31 + }
  32 +}
  33 +
  34 +/**
  35 + * Links
  36 + *
  37 + */
  38 +a {
  39 + outline: none;
  40 + color: $link_color;
  41 + &:hover {
  42 + text-decoration: none;
  43 + color: $primary_color;
  44 + }
  45 +
  46 + &:focus {
  47 + text-decoration: underline;
  48 + }
  49 +
  50 + &.dark {
  51 + color: $style_color;
  52 + }
  53 +
  54 + &.lined {
  55 + text-decoration: underline;
  56 + &:hover { text-decoration: underline; }
  57 + }
  58 +
  59 + &.gray {
  60 + color: gray;
  61 + }
  62 +
  63 + &.supp_diff_link {
  64 + text-align: center;
  65 + padding: 20px 0;
  66 + background: #f1f1f1;
  67 + width: 100%;
  68 + float: left;
  69 + }
  70 +
  71 + &.neib {
  72 + margin-right: 15px;
  73 + }
  74 +}
  75 +
  76 +a:focus {
  77 + outline: none;
  78 +}
  79 +
  80 +.monospace {
  81 + font-family: $monospace_font;
  82 +}
  83 +
  84 +/**
  85 + * Wiki typography
  86 + *
  87 + */
  88 +.wiki {
  89 + @include md-typography;
  90 +
  91 + font-size: 14px;
  92 + line-height: 1.6;
  93 + .white .highlight pre {
  94 + background: #f5f5f5;
  95 + }
  96 + ul {
  97 + padding: 0;
  98 + margin: 0 0 9px 25px !important;
  99 + }
  100 +}
  101 +
  102 +.md {
  103 + @include md-typography;
  104 +}
app/assets/stylesheets/generic/ui_box.scss 0 → 100644
@@ -0,0 +1,173 @@ @@ -0,0 +1,173 @@
  1 +/**
  2 + * UI box:
  3 + * Block element for separating information on page.
  4 + * Used for storing issues lists, grouped data.
  5 + * You can have multiple ui boxes on one page
  6 + *
  7 + * Classes:
  8 + * .ui-box - for any block & widgets
  9 + * .ui-box.ui-box-small - same but with smaller title
  10 + * .ui-box.ui-box-danger - with red title
  11 + *
  12 + * Ex. 1: List
  13 + * .ui-box
  14 + * .title
  15 + * # title here
  16 + * %ul
  17 + * # content here
  18 + *
  19 + * Ex. 2: Block data
  20 + * .ui-box
  21 + * .title
  22 + * # title here
  23 + * .body
  24 + * # content here
  25 + *
  26 + */
  27 +
  28 +.ui-box {
  29 + background: #FFF;
  30 + margin-bottom: 20px;
  31 + border: 1px solid #DDD;
  32 + word-wrap: break-word;
  33 +
  34 + img {
  35 + max-width: 100%;
  36 + }
  37 +
  38 + pre {
  39 + code {
  40 + background: none !important;
  41 + }
  42 + }
  43 +
  44 + ul {
  45 + margin: 0;
  46 + padding: 0;
  47 + }
  48 +
  49 + .title {
  50 + background-color: #EEE;
  51 + border-bottom: 1px solid #DDD;
  52 + color: #666;
  53 + font-size: 16px;
  54 + text-shadow: 0 1px 1px #fff;
  55 + padding: 0 10px;
  56 + font-size: 14px;
  57 + line-height: 40px;
  58 + font-weight: normal;
  59 + margin: 0;
  60 +
  61 + > a {
  62 + text-shadow: 0 1px 1px #fff;
  63 + }
  64 +
  65 + form {
  66 + margin-bottom: 0;
  67 + margin-top: 0;
  68 + }
  69 +
  70 + .btn {
  71 + vertical-align: middle;
  72 + padding: 4px 12px;
  73 + @include box-shadow(0 0px 1px 1px #f2f2f2);
  74 + }
  75 +
  76 + .nav-pills {
  77 + > li {
  78 + > a {
  79 + padding: 13px;
  80 + margin: 0;
  81 + font-size: 13px;
  82 + }
  83 + &.active {
  84 + > a {
  85 + background: #D5D5D5;
  86 + color: $style_color;
  87 + @include border-radius(0);
  88 + border-radius: 0;
  89 + border-left: 1px solid #CCC;
  90 + border-right: 1px solid #CCC;
  91 + }
  92 + }
  93 + }
  94 + }
  95 + }
  96 +
  97 + .body {
  98 + padding: 10px;
  99 + }
  100 +
  101 + &.padded {
  102 + h5, .title {
  103 + margin: -20px;
  104 + margin-bottom: 0;
  105 + padding: 5px 20px;
  106 + }
  107 + }
  108 +
  109 + .row_title {
  110 + font-weight: 500;
  111 + color: #444;
  112 + &:hover {
  113 + color: #444;
  114 + text-decoration: underline;
  115 + }
  116 + }
  117 +
  118 + .form-holder {
  119 + padding-top: 20px;
  120 + form {
  121 + margin-bottom: 0;
  122 + legend {
  123 + text-indent: 10px;
  124 + }
  125 + .form-actions {
  126 + margin-bottom: 0;
  127 + }
  128 + }
  129 + }
  130 +}
  131 +
  132 +/*
  133 + * Small box
  134 + */
  135 +.ui-box.ui-box-small {
  136 + margin-bottom: 10px;
  137 +
  138 + .title {
  139 + font-size: 13px;
  140 + line-height: 30px;
  141 +
  142 + a {
  143 + color: #666;
  144 + &:hover {
  145 + text-decoration: underline;
  146 + }
  147 + }
  148 + }
  149 +}
  150 +
  151 +/*
  152 + * Danger box
  153 + */
  154 +.ui-box.ui-box-danger {
  155 + background: #f7f7f7;
  156 + border: none;
  157 +
  158 + .title {
  159 + background: #D65;
  160 + color: #fff;
  161 + text-shadow: none;
  162 + font-weight: 500;
  163 + }
  164 +}
  165 +
  166 +/*
  167 + * Block under tw-bootstrap tabs
  168 + */
  169 +.tab-pane {
  170 + .ui-box {
  171 + margin: 3px 3px 25px 3px;
  172 + }
  173 +}
app/assets/stylesheets/gitlab_bootstrap.scss
@@ -1,68 +0,0 @@ @@ -1,68 +0,0 @@
1 -/** Override bootstrap variables **/  
2 -$baseFontSize: 13px !default;  
3 -$baseLineHeight: 18px !default;  
4 -  
5 -/**  
6 - * BOOTSTRAP  
7 - */  
8 -@import "bootstrap/variables";  
9 -@import "bootstrap/mixins";  
10 -@import "bootstrap/reset";  
11 -@import "bootstrap/scaffolding";  
12 -@import "bootstrap/grid";  
13 -@import "bootstrap/layouts";  
14 -@import "bootstrap/type";  
15 -@import "bootstrap/code";  
16 -@import "bootstrap/forms";  
17 -@import "bootstrap/tables";  
18 -@import "bootstrap/sprites";  
19 -@import "bootstrap/dropdowns";  
20 -@import "bootstrap/wells";  
21 -@import "bootstrap/component-animations";  
22 -@import "bootstrap/close";  
23 -@import "bootstrap/button-groups";  
24 -@import "bootstrap/alerts";  
25 -@import "bootstrap/navs";  
26 -@import "bootstrap/navbar";  
27 -@import "bootstrap/breadcrumbs";  
28 -@import "bootstrap/pagination";  
29 -@import "bootstrap/pager";  
30 -@import "bootstrap/modals";  
31 -@import "bootstrap/tooltip";  
32 -@import "bootstrap/popovers";  
33 -@import "bootstrap/thumbnails";  
34 -@import "bootstrap/media";  
35 -@import "bootstrap/labels-badges";  
36 -@import "bootstrap/progress-bars";  
37 -@import "bootstrap/accordion";  
38 -@import "bootstrap/carousel";  
39 -@import "bootstrap/hero-unit";  
40 -@import "bootstrap/utilities";  
41 -@import "bootstrap/responsive-utilities";  
42 -@import "bootstrap/responsive-1200px-min";  
43 -  
44 -/**  
45 - * Font icons  
46 - *  
47 - */  
48 -@import "font-awesome";  
49 -  
50 -/**  
51 - * GitLab bootstrap.  
52 - * Overrides some styles of twitter bootstrap.  
53 - * Also give some common classes for GitLab app  
54 - */  
55 -@import "gitlab_bootstrap/variables.scss";  
56 -@import "gitlab_bootstrap/fonts.scss";  
57 -@import "gitlab_bootstrap/mixins.scss";  
58 -@import "gitlab_bootstrap/avatar.scss";  
59 -@import "gitlab_bootstrap/nav.scss";  
60 -@import "gitlab_bootstrap/common.scss";  
61 -@import "gitlab_bootstrap/typography.scss";  
62 -@import "gitlab_bootstrap/buttons.scss";  
63 -@import "gitlab_bootstrap/blocks.scss";  
64 -@import "gitlab_bootstrap/ui_box.scss";  
65 -@import "gitlab_bootstrap/issue_box.scss";  
66 -@import "gitlab_bootstrap/files.scss";  
67 -@import "gitlab_bootstrap/lists.scss";  
68 -@import "gitlab_bootstrap/forms.scss";  
app/assets/stylesheets/gitlab_bootstrap/avatar.scss
@@ -1,23 +0,0 @@ @@ -1,23 +0,0 @@
1 -.avatar {  
2 - float: left;  
3 - margin-right: 12px;  
4 - width: 40px;  
5 - padding: 1px;  
6 - @include border-radius(4px);  
7 -  
8 - &.avatar-inline {  
9 - float: none;  
10 - margin-left: 3px;  
11 -  
12 - &.s16 { margin-right: 2px; }  
13 - &.s24 { margin-right: 2px; }  
14 - }  
15 -  
16 - &.s16 { width: 16px; height: 16px; margin-right: 6px; }  
17 - &.s24 { width: 24px; height: 24px; margin-right: 8px; }  
18 - &.s26 { width: 26px; height: 26px; margin-right: 8px; }  
19 - &.s32 { width: 32px; height: 32px; margin-right: 10px; }  
20 - &.s60 { width: 60px; height: 60px; margin-right: 12px; }  
21 - &.s90 { width: 90px; height: 90px; margin-right: 15px; }  
22 - &.s160 { width: 160px; height: 160px; margin-right: 20px; }  
23 -}  
app/assets/stylesheets/gitlab_bootstrap/blocks.scss
@@ -1,4 +0,0 @@ @@ -1,4 +0,0 @@
1 -.light-well {  
2 - background: #f9f9f9;  
3 - padding: 15px;  
4 -}  
app/assets/stylesheets/gitlab_bootstrap/buttons.scss
@@ -1,158 +0,0 @@ @@ -1,158 +0,0 @@
1 -.btn {  
2 - display: inline-block;  
3 - margin-bottom: 0;  
4 - font-weight: normal;  
5 - text-align: center;  
6 - vertical-align: middle;  
7 - cursor: pointer;  
8 - background-image: none;  
9 - border: 1px solid transparent;  
10 - white-space: nowrap;  
11 - padding: 6px 12px;  
12 - font-size: 13px;  
13 - line-height: 18px;  
14 - border-radius: 4px;  
15 - -webkit-user-select: none;  
16 - -moz-user-select: none;  
17 - -ms-user-select: none;  
18 - -o-user-select: none;  
19 - user-select: none;  
20 - color: #444444;  
21 - background-color: #fff;  
22 - border-color: #ccc;  
23 - text-shadow: none;  
24 -  
25 - &.hover,  
26 - &:hover {  
27 - color: #444444;  
28 - text-decoration: none;  
29 - background-color: #ebebeb;  
30 - border-color: #adadad;  
31 - }  
32 -  
33 - &.focus,  
34 - &:focus {  
35 - color: #444444;  
36 - text-decoration: none;  
37 - outline: thin dotted #333;  
38 - outline: 5px auto -webkit-focus-ring-color;  
39 - outline-offset: -2px;  
40 - }  
41 -  
42 - &.active,  
43 - &:active {  
44 - outline: 0;  
45 - background-image: none;  
46 - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);  
47 - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);  
48 - }  
49 -  
50 - &.disabled,  
51 - &[disabled] {  
52 - cursor: not-allowed;  
53 - pointer-events: none;  
54 - opacity: 0.65;  
55 - filter: alpha(opacity=65);  
56 - -webkit-box-shadow: none;  
57 - box-shadow: none;  
58 - }  
59 -  
60 - &.btn-primary {  
61 - color: #ffffff;  
62 - background-color: #429bca;  
63 - border-color: #358ebd;  
64 -  
65 - &.hover,  
66 - &:hover,  
67 - &.disabled,  
68 - &[disabled] {  
69 - color: #ffffff;  
70 - background-color: #3286b1;  
71 - border-color: #286e8e;  
72 - }  
73 - }  
74 -  
75 - &.btn-success {  
76 - color: #ffffff;  
77 - background-color: #5cb85c;  
78 - border-color: #4cae4c;  
79 -  
80 -  
81 - &.hover,  
82 - &:hover,  
83 - &.disabled,  
84 - &[disabled] {  
85 - color: #ffffff;  
86 - background-color: #47a447;  
87 - border-color: #398439;  
88 - }  
89 - }  
90 -  
91 - &.btn-danger {  
92 - color: #ffffff;  
93 - background-color: #d9534f;  
94 - border-color: #d43f3a;  
95 -  
96 -  
97 - &.hover,  
98 - &:hover,  
99 - &.disabled,  
100 - &[disabled] {  
101 - color: #ffffff;  
102 - background-color: #d2322d;  
103 - border-color: #ac2925;  
104 - }  
105 - }  
106 -  
107 - &.btn-new {  
108 - @extend .btn-success;  
109 - }  
110 -  
111 - &.btn-create {  
112 - @extend .wide;  
113 - @extend .btn-success;  
114 - }  
115 -  
116 - &.btn-save {  
117 - @extend .wide;  
118 - @extend .btn-primary;  
119 - }  
120 -  
121 - &.btn-close,  
122 - &.btn-remove {  
123 - @extend .btn-danger;  
124 - }  
125 -  
126 - &.btn-cancel {  
127 - float: right;  
128 - }  
129 -  
130 - &.wide {  
131 - padding-left: 20px;  
132 - padding-right: 20px;  
133 - }  
134 -  
135 - &.btn-small {  
136 - padding: 2px 10px;  
137 - font-size: 12px;  
138 - }  
139 -  
140 - &.btn-tiny {  
141 - font-size: 11px;  
142 - padding: 2px 6px;  
143 - line-height: 16px;  
144 - margin: 2px;  
145 - }  
146 -  
147 - &.grouped {  
148 - margin-right: 7px;  
149 - float: left;  
150 - }  
151 -  
152 - &.btn-block {  
153 - width: 100%;  
154 - margin: 0;  
155 - padding: 6px 0;  
156 - margin-bottom: 15px;  
157 - }  
158 -}  
app/assets/stylesheets/gitlab_bootstrap/common.scss
@@ -1,133 +0,0 @@ @@ -1,133 +0,0 @@
1 -/** COLORS **/  
2 -.cgray { color: gray }  
3 -.clgray { color: #BBB }  
4 -.cred { color: #D12F19 }  
5 -.cgreen { color: #4a2 }  
6 -.cblue { color: #29A }  
7 -.cblack { color: #111 }  
8 -.cdark { color: #444 }  
9 -.camber { color: #ffc000 }  
10 -.cwhite { color: #fff!important }  
11 -.bgred { background: #F2DEDE!important }  
12 -  
13 -/** COMMON CLASSES **/  
14 -.left { float:left }  
15 -  
16 -.prepend-top-10 { margin-top:10px }  
17 -.prepend-top-20 { margin-top:20px }  
18 -.prepend-left-10 { margin-left:10px }  
19 -.prepend-left-20 { margin-left:20px }  
20 -.append-right-10 { margin-right:10px }  
21 -.append-right-20 { margin-right:20px }  
22 -.append-bottom-10 { margin-bottom:10px }  
23 -.append-bottom-20 { margin-bottom:20px }  
24 -.inline { display: inline-block }  
25 -  
26 -.padded { padding:20px }  
27 -.ipadded { padding:20px!important }  
28 -.lborder { border-left:1px solid #eee }  
29 -.underlined_link { text-decoration: underline; }  
30 -.hint { font-style: italic; color: #999; }  
31 -.light { color: #888 }  
32 -.tiny { font-weight: normal }  
33 -.vtop { vertical-align: top !important; }  
34 -  
35 -  
36 -/** ALERT MESSAGES **/  
37 -.alert.alert-disabled {  
38 - background: #EEE;  
39 - color: #777;  
40 - border-color: #DDD;  
41 -}  
42 -  
43 -/** HELPERS **/  
44 -.nothing_here_message {  
45 - text-align: center;  
46 - padding: 20px;  
47 - color: #666;  
48 - font-weight: normal;  
49 - font-size: 16px;  
50 - line-height: 36px;  
51 -}  
52 -  
53 -.slead {  
54 - color: #666;  
55 - font-size: 14px;  
56 - margin-bottom: 12px;  
57 - font-weight: normal;  
58 - line-height: 24px;  
59 -}  
60 -  
61 -  
62 -.tab-content {  
63 - overflow: visible;  
64 -}  
65 -  
66 -@media (max-width: 1200px) {  
67 - .only-wide {  
68 - display: none;  
69 - }  
70 -}  
71 -  
72 -.pagination ul > li > a, .pagination ul > li >span {  
73 - @include linear-gradient(#f1f1f1, #e1e1e1);  
74 - color: #333;  
75 - text-shadow: 0 1px 1px #FFF;  
76 -}  
77 -  
78 -pre.well-pre {  
79 - border: 1px solid #EEE;  
80 - background: #f9f9f9;  
81 - border-radius: 0;  
82 - color: #555;  
83 -}  
84 -  
85 -.input-append .btn.active, .input-prepend .btn.active {  
86 - background: #CCC;  
87 - border-color: #BBB;  
88 - text-shadow: 0 1px 1px #fff;  
89 - font-weight: bold;  
90 - @include box-shadow(inset 0 2px 4px rgba(0,0,0,.15));  
91 -}  
92 -  
93 -.label {  
94 - padding: 2px 4px;  
95 - font-size: 12px;  
96 - font-style: normal;  
97 - font-weight: normal;  
98 -  
99 - &.label-gray {  
100 - background-color: #eee;  
101 - color: #999;  
102 - text-shadow: none;  
103 - }  
104 -}  
105 -  
106 -/** Big Labels **/  
107 -.state-label {  
108 - font-size: 14px;  
109 - padding: 6px 25px;  
110 - text-align: center;  
111 - @include border-radius(4px);  
112 - text-shadow: none;  
113 - margin-left: 10px;  
114 -  
115 - &.state-label-green {  
116 - background: #4A4;  
117 - color: #FFF;  
118 - }  
119 -  
120 - &.state-label-red {  
121 - background: #DA4E49;  
122 - color: #FFF;  
123 - }  
124 -}  
125 -  
126 -.dropdown-menu > li > a {  
127 - text-shadow: none;  
128 -}  
129 -  
130 -.dropdown-menu > li > a:hover,  
131 -.dropdown-menu > li > a:focus {  
132 - background: #29b;  
133 -}  
app/assets/stylesheets/gitlab_bootstrap/files.scss
@@ -1,219 +0,0 @@ @@ -1,219 +0,0 @@
1 -/**  
2 - * File content holder  
3 - *  
4 - */  
5 -.file-holder {  
6 - border: 1px solid #CCC;  
7 - margin-bottom: 1em;  
8 -  
9 - table {  
10 - @extend .table;  
11 - }  
12 -  
13 - .file-title {  
14 - background: #DDD;  
15 - border-bottom: 1px solid #CCC;  
16 - text-shadow: 0 1px 1px #fff;  
17 - margin: 0;  
18 - font-weight: normal;  
19 - font-weight: bold;  
20 - text-align: left;  
21 - color: $style_color;  
22 - padding: 9px 10px;  
23 - height: 18px;  
24 -  
25 - .options {  
26 - float: right;  
27 - margin-top: -5px;  
28 - }  
29 -  
30 - .file_name {  
31 - color: $style_color;  
32 - font-size: 14px;  
33 - text-shadow: 0 1px 1px #fff;  
34 - small {  
35 - color: #999;  
36 - font-size: 13px;  
37 - }  
38 - }  
39 - }  
40 - .file-content {  
41 - background: #fff;  
42 - font-size: 11px;  
43 -  
44 - &.image_file {  
45 - background: #eee;  
46 - text-align: center;  
47 - img {  
48 - padding: 100px;  
49 - max-width: 300px;  
50 - }  
51 - }  
52 -  
53 - &.wiki {  
54 - padding: 20px;  
55 - font-size: 14px;  
56 - line-height: 1.6;  
57 -  
58 - .highlight {  
59 - margin-bottom: 9px;  
60 - @include border-radius(4px);  
61 -  
62 - > pre {  
63 - margin: 0;  
64 - }  
65 - }  
66 - }  
67 -  
68 - &.blob_file {  
69 -  
70 - }  
71 -  
72 - &.blob-no-preview {  
73 - background: #eee;  
74 - text-shadow: 0 1px 2px #FFF;  
75 - padding: 100px 0;  
76 - }  
77 -  
78 - /**  
79 - * Blame file  
80 - */  
81 - &.blame {  
82 - table {  
83 - border: none;  
84 - box-shadow: none;  
85 - margin: 0;  
86 - }  
87 - tr {  
88 - border-bottom: 1px solid #eee;  
89 - }  
90 - td {  
91 - &:first-child {  
92 - border-left: none;  
93 - }  
94 - &:last-child {  
95 - border-right: none;  
96 - }  
97 - background: #fff;  
98 - padding: 5px;  
99 - }  
100 - .author,  
101 - .blame_commit {  
102 - background: #f5f5f5;  
103 - vertical-align: top;  
104 - }  
105 - .lines {  
106 - pre {  
107 - padding: 0;  
108 - margin: 0;  
109 - background: none;  
110 - border: none;  
111 - }  
112 - }  
113 - }  
114 -  
115 - &.logs {  
116 - background: #eee;  
117 - max-height: 700px;  
118 - overflow-y: auto;  
119 -  
120 - ol {  
121 - margin-left: 40px;  
122 - padding: 10px 0;  
123 - border-left: 1px solid #CCC;  
124 - margin-bottom: 0;  
125 - background: white;  
126 - li {  
127 - color: #888;  
128 - p {  
129 - margin: 0;  
130 - color: #333;  
131 - line-height: 24px;  
132 - padding-left: 10px;  
133 - }  
134 -  
135 - &:hover {  
136 - background: $hover;  
137 - }  
138 - }  
139 - }  
140 - }  
141 -  
142 - /**  
143 - * Code file  
144 - */  
145 - &.code {  
146 - padding: 0;  
147 -  
148 - table.lines {  
149 - border: none;  
150 - box-shadow: none;  
151 - margin: 0px;  
152 - padding: 0px;  
153 - table-layout: fixed;  
154 -  
155 - pre {  
156 - border: none;  
157 - border-radius: 0;  
158 - font-family: $monospace_font;  
159 - font-size: 12px !important;  
160 - line-height: 16px !important;  
161 - margin: 0;  
162 - padding: 10px 0;  
163 - }  
164 - td {  
165 - border: none;  
166 - margin: 0;  
167 - padding: 0;  
168 - vertical-align: top;  
169 -  
170 - &:first-child {  
171 - background: #eee;  
172 - width: 50px;  
173 - }  
174 - &:last-child {  
175 - }  
176 - }  
177 - tr:hover {  
178 - background: none;  
179 - }  
180 -  
181 - pre.line_numbers {  
182 - color: #666;  
183 - padding: 10px 6px 10px 0;  
184 - text-align: right;  
185 - background: #EEE;  
186 -  
187 - a {  
188 - color: #666;  
189 -  
190 - i {  
191 - display: none;  
192 - font-size: 14px;  
193 - line-height: 14px;  
194 - }  
195 - &:hover i {  
196 - display: inherit;  
197 - }  
198 - }  
199 - }  
200 -  
201 - .highlight {  
202 - border-left: 1px solid #DEE2E3;  
203 - overflow: auto;  
204 - overflow-y: hidden;  
205 -  
206 - pre {  
207 - white-space: pre;  
208 - word-wrap: normal;  
209 -  
210 - .line {  
211 - padding: 0 10px;  
212 - }  
213 - }  
214 - }  
215 - }  
216 - }  
217 - }  
218 -}  
219 -  
app/assets/stylesheets/gitlab_bootstrap/fonts.scss
@@ -1,2 +0,0 @@ @@ -1,2 +0,0 @@
1 -/** Typo **/  
2 -$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono', 'lucida console', monospace;  
app/assets/stylesheets/gitlab_bootstrap/forms.scss
@@ -1,78 +0,0 @@ @@ -1,78 +0,0 @@
1 -form {  
2 - @extend .form-horizontal;  
3 -  
4 - label {  
5 - @extend .control-label;  
6 -  
7 - &.radio-label {  
8 - text-align: left;  
9 - width: 100%;  
10 - margin-left: 0;  
11 -  
12 - input[type="radio"] {  
13 - margin-top: 1px !important;  
14 - }  
15 - }  
16 -  
17 - &.list-label {  
18 - float: none;  
19 - padding: 0 !important;  
20 - margin: 0;  
21 - text-align: left;  
22 - }  
23 - }  
24 -  
25 - &.form-tiny {  
26 - margin: 0;  
27 - }  
28 -}  
29 -  
30 -input.input-xpadding,  
31 -.add-on.input-xpadding {  
32 - padding: 6px 10px;  
33 -}  
34 -  
35 -.control-group {  
36 - .control-label {  
37 - padding-top: 6px;  
38 - }  
39 - .controls {  
40 - input, textarea {  
41 - padding: 6px 10px;  
42 - }  
43 -  
44 - input[type="radio"], input[type="checkbox"] {  
45 - margin-top: 6px;  
46 - }  
47 -  
48 - .add-on {  
49 - padding: 6px;  
50 - }  
51 - }  
52 -}  
53 -  
54 -input[type='search'].search-text-input {  
55 - background-image: url("icon-search.png");  
56 - background-repeat: no-repeat;  
57 - background-position: 10px;  
58 - padding-left: 25px;  
59 - @include border-radius(4px);  
60 - border: 1px solid #ccc;  
61 -}  
62 -  
63 -input[type='text'].danger {  
64 - background: #F2DEDE!important;  
65 - border-color: #D66;  
66 - text-shadow: 0 1px 1px #fff  
67 -}  
68 -  
69 -fieldset legend {  
70 - font-size: 16px;  
71 - margin-bottom: 10px;  
72 -}  
73 -  
74 -.datetime-controls {  
75 - select {  
76 - width: 100px;  
77 - }  
78 -}  
app/assets/stylesheets/gitlab_bootstrap/issue_box.scss
@@ -1,46 +0,0 @@ @@ -1,46 +0,0 @@
1 -/**  
2 - * Issue box:  
3 - * Huge block (one per page) for storing title, descripion and other information.  
4 - * Used for Issue#show page, MergeRequest#show page etc  
5 - *  
6 - * CLasses:  
7 - * .issue-box - Regular box  
8 - */  
9 -  
10 -.issue-box {  
11 - color: #666;  
12 - margin:20px 0;  
13 - background: #FAFAFA;  
14 - border: 1px solid #DDD;  
15 -  
16 - .control-group {  
17 - margin-bottom: 0;  
18 - }  
19 -  
20 - .title {  
21 - font-size: 20px;  
22 - font-weight: 500;  
23 - line-height: 28px;  
24 - margin: 0;  
25 - color: #444;  
26 - }  
27 -  
28 - .context {  
29 - border: none;  
30 - background-color: #f5f5f5;  
31 - border: none;  
32 - border-top: 1px solid #eee;  
33 - }  
34 -  
35 - .description {  
36 - border-top: 1px solid #eee;  
37 - }  
38 -  
39 - .title, .context, .description {  
40 - padding: 15px;  
41 -  
42 - .clearfix {  
43 - margin: 0;  
44 - }  
45 - }  
46 -}  
app/assets/stylesheets/gitlab_bootstrap/lists.scss
@@ -1,95 +0,0 @@ @@ -1,95 +0,0 @@
1 -/**  
2 - * Well styled list  
3 - *  
4 - */  
5 -.well-list {  
6 - margin: 0;  
7 - list-style: none;  
8 - li {  
9 - padding: 10px;  
10 - min-height: 20px;  
11 - border-bottom: 1px solid #eee;  
12 - border-bottom: 1px solid rgba(0, 0, 0, 0.05);  
13 -  
14 - &.disabled {  
15 - color: #888;  
16 - }  
17 -  
18 - &.unstyled {  
19 - &:hover {  
20 - background: none;  
21 - }  
22 - }  
23 -  
24 - &.smoke { background-color: #f5f5f5; }  
25 -  
26 - &:hover {  
27 - background: $hover;  
28 - border-bottom: 1px solid #ADF;  
29 - }  
30 -  
31 - &:last-child {  
32 - border-bottom: none;  
33 -  
34 - &.bottom {  
35 - background: #f5f5f5;  
36 - }  
37 - }  
38 -  
39 - .author { color: #999; }  
40 -  
41 - p {  
42 - padding-top: 1px;  
43 - margin: 0;  
44 - color: #222;  
45 - img {  
46 - position: relative;  
47 - top: 3px;  
48 - }  
49 - }  
50 -  
51 - .well-title {  
52 - font-size: 14px;  
53 - line-height: 18px;  
54 - }  
55 - }  
56 -}  
57 -  
58 -ol, ul {  
59 - &.styled {  
60 - li {  
61 - padding: 2px;  
62 - }  
63 - }  
64 -}  
65 -  
66 -/** light list with border-bottom between li **/  
67 -ul.bordered-list {  
68 - margin: 5px 0px;  
69 - padding: 0px;  
70 - li {  
71 - padding: 5px 0;  
72 - border-bottom: 1px solid #EEE;  
73 - overflow: hidden;  
74 - display: block;  
75 - margin: 0px;  
76 - &:last-child { border:none }  
77 - &.active {  
78 - background: #f9f9f9;  
79 - a { font-weight: bold; }  
80 - }  
81 -  
82 - &.light {  
83 - a { color: #777; }  
84 - }  
85 - }  
86 -  
87 - &.top-list {  
88 - li:first-child {  
89 - padding-top: 0;  
90 - h4, h5 {  
91 - margin-top: 0;  
92 - }  
93 - }  
94 - }  
95 -}  
app/assets/stylesheets/gitlab_bootstrap/mixins.scss
@@ -1,144 +0,0 @@ @@ -1,144 +0,0 @@
1 -/**  
2 - * Generic mixins  
3 - */  
4 - @mixin box-shadow($shadow) {  
5 - -webkit-box-shadow: $shadow;  
6 - -moz-box-shadow: $shadow;  
7 - -ms-box-shadow: $shadow;  
8 - -o-box-shadow: $shadow;  
9 - box-shadow: $shadow;  
10 -}  
11 -  
12 -@mixin border-radius($radius) {  
13 - -webkit-border-radius: $radius;  
14 - -moz-border-radius: $radius;  
15 - -ms-border-radius: $radius;  
16 - -o-border-radius: $radius;  
17 - border-radius: $radius;  
18 -}  
19 -  
20 -@mixin border-radius-left($radius) {  
21 - @include border-radius($radius 0 0 $radius)  
22 -}  
23 -  
24 -@mixin linear-gradient($from, $to) {  
25 - background-image: -webkit-gradient(linear, 0 0, 0 100%, from($from), to($to));  
26 - background-image: -webkit-linear-gradient($from, $to);  
27 - background-image: -moz-linear-gradient($from, $to);  
28 - background-image: -ms-linear-gradient($from, $to);  
29 - background-image: -o-linear-gradient($from, $to);  
30 -}  
31 -  
32 -@mixin transition($transition) {  
33 - -webkit-transition: $transition;  
34 - -moz-transition: $transition;  
35 - -ms-transition: $transition;  
36 - -o-transition: $transition;  
37 - transition: $transition;  
38 -}  
39 -  
40 -/**  
41 - * Prefilled mixins  
42 - * Mixins with fixed values  
43 - */  
44 -@mixin bg-light-gray-gradient {  
45 - background: #f1f1f1;  
46 - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #f5f5f5), to(#e1e1e1));  
47 - background-image: -webkit-linear-gradient(#f5f5f5 6.6%, #e1e1e1);  
48 - background-image: -moz-linear-gradient(#f5f5f5 6.6%, #e1e1e1);  
49 - background-image: -ms-linear-gradient(#f5f5f5 6.6%, #e1e1e1);  
50 - background-image: -o-linear-gradient(#f5f5f5 6.6%, #e1e1e1);  
51 -}  
52 -  
53 -@mixin bg-gray-gradient {  
54 - background: #eee;  
55 - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf));  
56 - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf);  
57 - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);  
58 - background-image: -ms-linear-gradient(#eee 6.6%, #dfdfdf);  
59 - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);  
60 -}  
61 -  
62 -@mixin bg-dark-gray-gradient {  
63 - background: #eee;  
64 - background-image: -webkit-linear-gradient(#e9e9e9, #d7d7d7);  
65 - background-image: -moz-linear-gradient(#e9e9e9, #d7d7d7);  
66 - background-image: -ms-linear-gradient(#e9e9e9, #d7d7d7);  
67 - background-image: -o-linear-gradient(#e9e9e9, #d7d7d7);  
68 -}  
69 -  
70 -@mixin shade {  
71 - @include box-shadow(0 0 3px #ddd);  
72 -}  
73 -  
74 -@mixin solid-shade {  
75 - @include box-shadow(0 0 0 3px #f1f1f1);  
76 -}  
77 -  
78 -@mixin header-font {  
79 - color: $style_color;  
80 - text-shadow: 0 1px 1px #FFF;  
81 - font-size: 16px;  
82 - line-height: 40px;  
83 - font-weight: normal;  
84 -}  
85 -  
86 -@mixin md-typography {  
87 - *:first-child {  
88 - margin-top: 0;  
89 - }  
90 -  
91 - code { padding: 0 4px; }  
92 -  
93 - h1 {  
94 - margin-top: 45px;  
95 - font-size: 2.5em;  
96 - }  
97 -  
98 - h2 {  
99 - margin-top: 40px;  
100 - font-size: 2em;  
101 - }  
102 -  
103 - h3 {  
104 - margin-top: 35px;  
105 - font-size: 2em;  
106 - }  
107 -  
108 - h4 {  
109 - margin-top: 30px;  
110 - font-size: 1.5em;  
111 - }  
112 -  
113 - blockquote p {  
114 - color: #888;  
115 - font-size: 14px;  
116 - line-height: 1.5;  
117 - }  
118 -  
119 - table {  
120 - @extend .table;  
121 - @extend .table-bordered;  
122 - th {  
123 - background: #EEE;  
124 - }  
125 - }  
126 -  
127 - code {  
128 - font-size: inherit;  
129 - font-weight: inherit;  
130 - color: #555;  
131 - }  
132 -  
133 - li {  
134 - line-height: 1.5;  
135 - }  
136 -}  
137 -  
138 -@mixin page-title {  
139 - color: #333;  
140 - font-size: 20px;  
141 - line-height: 1.5;  
142 - margin-top: 0px;  
143 - margin-bottom: 15px;  
144 -}  
app/assets/stylesheets/gitlab_bootstrap/nav.scss
@@ -1,91 +0,0 @@ @@ -1,91 +0,0 @@
1 -/**  
2 - * nav-pills  
3 - *  
4 - */  
5 -.nav-pills {  
6 - .active a {  
7 - background: $primary_color;  
8 - }  
9 -  
10 - > li > a {  
11 - @include border-radius(0);  
12 - }  
13 -  
14 - &.nav-stacked {  
15 - > li > a {  
16 - border-left: 4px solid #EEE;  
17 - padding: 12px;  
18 - color: #777;  
19 - }  
20 - > .active > a {  
21 - border-color: $primary_color;  
22 - background: none;  
23 - color: #333;  
24 - font-weight: bolder;  
25 - }  
26 -  
27 - &.nav-stacked-menu {  
28 - li > a {  
29 - padding: 16px;  
30 - }  
31 - }  
32 - }  
33 -  
34 - &.nav-pills-small {  
35 - > li > a {  
36 - padding: 8px 12px;  
37 - font-size: 12px;  
38 - }  
39 - }  
40 -}  
41 -  
42 -.nav-pills > .active > a > i[class^="icon-"] { background: inherit; }  
43 -  
44 -  
45 -  
46 -/**  
47 - * nav-tabs  
48 - *  
49 - */  
50 -.nav-tabs > li > a, .nav-pills > li > a { color: $style_color; }  
51 -.nav.nav-tabs {  
52 - li {  
53 - > a {  
54 - padding: 8px 20px;  
55 - margin-right: 7px;  
56 - line-height: 20px;  
57 - border-color: #EEE;  
58 - color: #888;  
59 - border-bottom: 1px solid #ddd;  
60 - .badge {  
61 - background-color: #eee;  
62 - color: #888;  
63 - text-shadow: 0 1px 1px #fff;  
64 - }  
65 - i[class^="icon-"] {  
66 - line-height: 14px;  
67 - }  
68 - }  
69 - &.active {  
70 - > a {  
71 - border-color: #CCC;  
72 - border-bottom: 1px solid #fff;  
73 - color: #333;  
74 - font-weight: bold;  
75 - }  
76 - }  
77 - }  
78 -  
79 - &.nav-small-tabs > li > a { padding: 6px 9px; }  
80 -}  
81 -  
82 -  
83 -  
84 -/**  
85 - * fix to keep tooltips position in top navigation bar  
86 - *  
87 - */  
88 -.navbar .nav > li {  
89 - position: relative;  
90 - white-space: nowrap;  
91 -}  
app/assets/stylesheets/gitlab_bootstrap/typography.scss
@@ -1,108 +0,0 @@ @@ -1,108 +0,0 @@
1 -/**  
2 - * Headers  
3 - *  
4 - */  
5 -h1, h2, h3, h4, h5, h6 {  
6 - font-weight: 500;  
7 - line-height: 1.1;  
8 -}  
9 -  
10 -h1.page-title {  
11 - @include page-title;  
12 - font-size: 28px;  
13 -}  
14 -  
15 -h2.page-title {  
16 - @include page-title;  
17 - font-size: 24px;  
18 -}  
19 -  
20 -h3.page-title {  
21 - @include page-title;  
22 -}  
23 -  
24 -h6 {  
25 - color: #888;  
26 - text-transform: uppercase;  
27 -}  
28 -  
29 -/** CODE **/  
30 -pre {  
31 - font-family: $monospace_font;  
32 -  
33 - &.dark {  
34 - background: #333;  
35 - color: #f5f5f5;  
36 - }  
37 -}  
38 -  
39 -/**  
40 - * Links  
41 - *  
42 - */  
43 -a {  
44 - outline: none;  
45 - color: $link_color;  
46 - &:hover {  
47 - text-decoration: none;  
48 - color: $primary_color;  
49 - }  
50 -  
51 - &:focus {  
52 - text-decoration: underline;  
53 - }  
54 -  
55 - &.dark {  
56 - color: $style_color;  
57 - }  
58 -  
59 - &.lined {  
60 - text-decoration: underline;  
61 - &:hover { text-decoration: underline; }  
62 - }  
63 -  
64 - &.gray {  
65 - color: gray;  
66 - }  
67 -  
68 - &.supp_diff_link {  
69 - text-align: center;  
70 - padding: 20px 0;  
71 - background: #f1f1f1;  
72 - width: 100%;  
73 - float: left;  
74 - }  
75 -  
76 - &.neib {  
77 - margin-right: 15px;  
78 - }  
79 -}  
80 -  
81 -a:focus {  
82 - outline: none;  
83 -}  
84 -  
85 -.monospace {  
86 - font-family: $monospace_font;  
87 -}  
88 -  
89 -/**  
90 - * Wiki typography  
91 - *  
92 - */  
93 -.wiki {  
94 - @include md-typography;  
95 -  
96 - font-size: 14px;  
97 - line-height: 1.6;  
98 - .white .highlight pre {  
99 - background: #f5f5f5;  
100 - }  
101 - ul {  
102 - margin: 0 0 9px 25px !important;  
103 - }  
104 -}  
105 -  
106 -.md {  
107 - @include md-typography;  
108 -}  
app/assets/stylesheets/gitlab_bootstrap/ui_box.scss
@@ -1,171 +0,0 @@ @@ -1,171 +0,0 @@
1 -/**  
2 - * UI box:  
3 - * Block element for separating information on page.  
4 - * Used for storing issues lists, grouped data.  
5 - * You can have multiple ui boxes on one page  
6 - *  
7 - * Classes:  
8 - * .ui-box - for any block & widgets  
9 - * .ui-box.ui-box-small - same but with smaller title  
10 - * .ui-box.ui-box-danger - with red title  
11 - *  
12 - * Ex. 1: List  
13 - * .ui-box  
14 - * .title  
15 - * # title here  
16 - * %ul  
17 - * # content here  
18 - *  
19 - * Ex. 2: Block data  
20 - * .ui-box  
21 - * .title  
22 - * # title here  
23 - * .body  
24 - * # content here  
25 - *  
26 - */  
27 -  
28 -.ui-box {  
29 - background: #FFF;  
30 - margin-bottom: 20px;  
31 - border: 1px solid #DDD;  
32 - word-wrap: break-word;  
33 -  
34 - img {  
35 - max-width: 100%;  
36 - }  
37 -  
38 - pre {  
39 - code {  
40 - background: none !important;  
41 - }  
42 - }  
43 -  
44 - ul {  
45 - margin: 0;  
46 - }  
47 -  
48 - .title {  
49 - background-color: #EEE;  
50 - border-bottom: 1px solid #DDD;  
51 - color: #666;  
52 - font-size: 16px;  
53 - text-shadow: 0 1px 1px #fff;  
54 - padding: 0 10px;  
55 - font-size: 14px;  
56 - line-height: 40px;  
57 - font-weight: normal;  
58 - margin: 0;  
59 -  
60 - > a {  
61 - text-shadow: 0 1px 1px #fff;  
62 - }  
63 -  
64 - form {  
65 - margin-bottom: 0;  
66 - margin-top: 0;  
67 - }  
68 -  
69 - .btn {  
70 - vertical-align: middle;  
71 - padding: 4px 12px;  
72 - @include box-shadow(0 0px 1px 1px #f2f2f2);  
73 - }  
74 -  
75 - .nav-pills {  
76 - > li {  
77 - > a {  
78 - padding: 13px;  
79 - margin: 0;  
80 - font-size: 13px;  
81 - }  
82 - &.active {  
83 - > a {  
84 - background: #D5D5D5;  
85 - color: $style_color;  
86 - @include border-radius(0);  
87 - border-radius: 0;  
88 - border-left: 1px solid #CCC;  
89 - border-right: 1px solid #CCC;  
90 - }  
91 - }  
92 - }  
93 - }  
94 - }  
95 -  
96 - .body {  
97 - padding: 10px;  
98 - }  
99 -  
100 - &.padded {  
101 - h5, .title {  
102 - margin: -20px;  
103 - margin-bottom: 0;  
104 - padding: 5px 20px;  
105 - }  
106 - }  
107 -  
108 - .row_title {  
109 - font-weight: 500;  
110 - color: #444;  
111 - &:hover {  
112 - color: #444;  
113 - text-decoration: underline;  
114 - }  
115 - }  
116 -  
117 - .form-holder {  
118 - padding-top: 20px;  
119 - form {  
120 - margin-bottom: 0;  
121 - legend {  
122 - text-indent: 10px;  
123 - }  
124 - .form-actions {  
125 - margin-bottom: 0;  
126 - }  
127 - }  
128 - }  
129 -}  
130 -  
131 -/*  
132 - * Small box  
133 - */  
134 -.ui-box.ui-box-small {  
135 - margin-bottom: 10px;  
136 -  
137 - .title {  
138 - font-size: 13px;  
139 - line-height: 30px;  
140 -  
141 - a {  
142 - color: #666;  
143 - &:hover {  
144 - text-decoration: underline;  
145 - }  
146 - }  
147 - }  
148 -}  
149 -  
150 -/*  
151 - * Danger box  
152 - */  
153 -.ui-box.ui-box-danger {  
154 - background: #f7f7f7;  
155 - border: none;  
156 -  
157 - .title {  
158 - background: #D65;  
159 - color: #fff;  
160 - text-shadow: 0 1px 1px #900;  
161 - }  
162 -}  
163 -  
164 -/*  
165 - * Block under tw-bootstrap tabs  
166 - */  
167 -.tab-pane {  
168 - .ui-box {  
169 - margin: 3px 3px 25px 3px;  
170 - }  
171 -}  
app/assets/stylesheets/gitlab_bootstrap/variables.scss
@@ -1,13 +0,0 @@ @@ -1,13 +0,0 @@
1 -/**  
2 - * General Colors  
3 - */  
4 -$primary_color: #2FA0BB;  
5 -$link_color: #3A89A3;  
6 -$style_color: #474D57;  
7 -$hover: #D9EDF7;  
8 -  
9 -/**  
10 - * Commit Diff Colors  
11 - */  
12 -$added: #63c363;  
13 -$deleted: #f77;  
app/assets/stylesheets/gl_bootstrap.scss 0 → 100644
@@ -0,0 +1,220 @@ @@ -0,0 +1,220 @@
  1 +/*
  2 + * Twitter bootstrap with GitLab customizations/additions
  3 + *
  4 + * Some unused bootstrap compontents like panels are not included.
  5 + * Other components like tabs are modified to GitLab style.
  6 + *
  7 + */
  8 +
  9 +$font-size-base: 13px !default;
  10 +$nav-pills-active-link-hover-bg: $bg_style_color;
  11 +$pagination-active-bg: $bg_style_color;
  12 +
  13 +// Core variables and mixins
  14 +@import "bootstrap/variables";
  15 +@import "bootstrap/mixins";
  16 +
  17 +// Reset
  18 +@import "bootstrap/normalize";
  19 +@import "bootstrap/print";
  20 +
  21 +// Core CSS
  22 +@import "bootstrap/scaffolding";
  23 +@import "bootstrap/type";
  24 +@import "bootstrap/code";
  25 +@import "bootstrap/grid";
  26 +@import "bootstrap/tables";
  27 +@import "bootstrap/forms";
  28 +
  29 +// Components
  30 +@import "bootstrap/component-animations";
  31 +@import "bootstrap/dropdowns";
  32 +@import "bootstrap/button-groups";
  33 +@import "bootstrap/input-groups";
  34 +@import "bootstrap/navs";
  35 +@import "bootstrap/navbar";
  36 +@import "bootstrap/breadcrumbs";
  37 +@import "bootstrap/pagination";
  38 +@import "bootstrap/pager";
  39 +@import "bootstrap/labels";
  40 +@import "bootstrap/badges";
  41 +@import "bootstrap/jumbotron";
  42 +@import "bootstrap/thumbnails";
  43 +@import "bootstrap/alerts";
  44 +@import "bootstrap/progress-bars";
  45 +@import "bootstrap/list-group";
  46 +@import "bootstrap/wells";
  47 +@import "bootstrap/close";
  48 +
  49 +// Components w/ JavaScript
  50 +@import "bootstrap/modals";
  51 +@import "bootstrap/tooltip";
  52 +@import "bootstrap/popovers";
  53 +@import "bootstrap/carousel";
  54 +
  55 +// Utility classes
  56 +.clearfix {
  57 + @include clearfix();
  58 +}
  59 +.center-block {
  60 + @include center-block();
  61 +}
  62 +.pull-right {
  63 + float: right !important;
  64 +}
  65 +.pull-left {
  66 + float: left !important;
  67 +}
  68 +.hide {
  69 + display: none;
  70 +}
  71 +.show {
  72 + display: block !important;
  73 +}
  74 +.invisible {
  75 + visibility: hidden;
  76 +}
  77 +.text-hide {
  78 + @include text-hide();
  79 +}
  80 +.hidden {
  81 + display: none !important;
  82 + visibility: hidden !important;
  83 +}
  84 +.affix {
  85 + position: fixed;
  86 +}
  87 +
  88 +@import "bootstrap/responsive-utilities";
  89 +
  90 +// Labels
  91 +.label {
  92 + padding: 2px 4px;
  93 + font-size: 12px;
  94 + font-style: normal;
  95 + font-weight: normal;
  96 + display: inline-block;
  97 +
  98 + &.label-gray {
  99 + background-color: #eee;
  100 + color: #999;
  101 + text-shadow: none;
  102 + }
  103 +
  104 + &.label-inverse {
  105 + background-color: #333333;
  106 + }
  107 +}
  108 +
  109 +// Nav tabs
  110 +.nav.nav-tabs {
  111 + li {
  112 + > a {
  113 + padding: 8px 20px;
  114 + margin-right: 7px;
  115 + line-height: 20px;
  116 + border-color: #EEE;
  117 + color: #888;
  118 + border-bottom: 1px solid #ddd;
  119 + .badge {
  120 + background-color: #eee;
  121 + color: #888;
  122 + text-shadow: 0 1px 1px #fff;
  123 + }
  124 + i[class^="icon-"] {
  125 + line-height: 14px;
  126 + }
  127 + }
  128 + &.active {
  129 + > a {
  130 + border-color: #CCC;
  131 + border-bottom: 1px solid #fff;
  132 + color: #333;
  133 + font-weight: bold;
  134 + }
  135 + }
  136 + }
  137 +
  138 + &.nav-small-tabs > li > a {
  139 + padding: 6px 9px;
  140 + }
  141 +}
  142 +
  143 +.nav-tabs > li > a,
  144 +.nav-pills > li > a {
  145 + color: #666;
  146 +}
  147 +
  148 +.nav-small > li > a {
  149 + padding: 3px 5px;
  150 + font-size: 12px;
  151 +}
  152 +
  153 +
  154 +/*
  155 + * Callouts from Bootstrap3 docs
  156 + *
  157 + * Not quite alerts, but custom and helpful notes for folks reading the docs.
  158 + * Requires a base and modifier class.
  159 + */
  160 +
  161 +/* Common styles for all types */
  162 +.bs-callout {
  163 + margin: 20px 0;
  164 + padding: 20px;
  165 + border-left: 3px solid #eee;
  166 + color: #666;
  167 + background: #f9f9f9;
  168 +}
  169 +.bs-callout h4 {
  170 + margin-top: 0;
  171 + margin-bottom: 5px;
  172 +}
  173 +.bs-callout p:last-child {
  174 + margin-bottom: 0;
  175 +}
  176 +
  177 +/* Variations */
  178 +.bs-callout-danger {
  179 + background-color: #fdf7f7;
  180 + border-color: #eed3d7;
  181 + color: #b94a48;
  182 +}
  183 +.bs-callout-warning {
  184 + background-color: #faf8f0;
  185 + border-color: #faebcc;
  186 + color: #8a6d3b;
  187 +}
  188 +.bs-callout-info {
  189 + background-color: #f4f8fa;
  190 + border-color: #bce8f1;
  191 + color: #34789a;
  192 +}
  193 +.bs-callout-success {
  194 + background-color: #dff0d8;
  195 + border-color: #5cA64d;
  196 + color: #3c763d;
  197 +}
  198 +
  199 +// Breadcrumb
  200 +ul.breadcrumb {
  201 + background: white;
  202 + border: none;
  203 + li {
  204 + display: inline;
  205 + text-shadow: 0 1px 0 white
  206 + }
  207 +
  208 + a {
  209 + font-size: 16px;
  210 + }
  211 +}
  212 +
  213 +/**
  214 + * fix to keep tooltips position in top navigation bar
  215 + *
  216 + */
  217 +.navbar .nav > li {
  218 + position: relative;
  219 + white-space: nowrap;
  220 +}
app/assets/stylesheets/main/fonts.scss 0 → 100644
@@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
  1 +/** Typo **/
  2 +$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono', 'lucida console', monospace;
app/assets/stylesheets/main/layout.scss 0 → 100644
@@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
  1 +html {
  2 + overflow-y: scroll;
  3 +}
  4 +
  5 +body {
  6 + -webkit-font-smoothing: antialiased;
  7 + -moz-osx-font-smoothing: grayscale;
  8 + margin-bottom: 20px;
  9 +}
  10 +
  11 +.container {
  12 + padding-top: 0;
  13 + z-index: 5;
  14 +}
  15 +
  16 +.container .content {
  17 + margin: 0 0;
  18 +}
app/assets/stylesheets/main/mixins.scss 0 → 100644
@@ -0,0 +1,148 @@ @@ -0,0 +1,148 @@
  1 +/**
  2 + * Generic mixins
  3 + */
  4 + @mixin box-shadow($shadow) {
  5 + -webkit-box-shadow: $shadow;
  6 + -moz-box-shadow: $shadow;
  7 + -ms-box-shadow: $shadow;
  8 + -o-box-shadow: $shadow;
  9 + box-shadow: $shadow;
  10 +}
  11 +
  12 +@mixin border-radius($radius) {
  13 + -webkit-border-radius: $radius;
  14 + -moz-border-radius: $radius;
  15 + -ms-border-radius: $radius;
  16 + -o-border-radius: $radius;
  17 + border-radius: $radius;
  18 +}
  19 +
  20 +@mixin border-radius-left($radius) {
  21 + @include border-radius($radius 0 0 $radius)
  22 +}
  23 +
  24 +@mixin linear-gradient($from, $to) {
  25 + background-image: -webkit-gradient(linear, 0 0, 0 100%, from($from), to($to));
  26 + background-image: -webkit-linear-gradient($from, $to);
  27 + background-image: -moz-linear-gradient($from, $to);
  28 + background-image: -ms-linear-gradient($from, $to);
  29 + background-image: -o-linear-gradient($from, $to);
  30 +}
  31 +
  32 +@mixin transition($transition) {
  33 + -webkit-transition: $transition;
  34 + -moz-transition: $transition;
  35 + -ms-transition: $transition;
  36 + -o-transition: $transition;
  37 + transition: $transition;
  38 +}
  39 +
  40 +/**
  41 + * Prefilled mixins
  42 + * Mixins with fixed values
  43 + */
  44 +@mixin bg-light-gray-gradient {
  45 + background: #f1f1f1;
  46 + background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #f5f5f5), to(#e1e1e1));
  47 + background-image: -webkit-linear-gradient(#f5f5f5 6.6%, #e1e1e1);
  48 + background-image: -moz-linear-gradient(#f5f5f5 6.6%, #e1e1e1);
  49 + background-image: -ms-linear-gradient(#f5f5f5 6.6%, #e1e1e1);
  50 + background-image: -o-linear-gradient(#f5f5f5 6.6%, #e1e1e1);
  51 +}
  52 +
  53 +@mixin bg-gray-gradient {
  54 + background: #eee;
  55 + background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf));
  56 + background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf);
  57 + background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);
  58 + background-image: -ms-linear-gradient(#eee 6.6%, #dfdfdf);
  59 + background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);
  60 +}
  61 +
  62 +@mixin bg-dark-gray-gradient {
  63 + background: #eee;
  64 + background-image: -webkit-linear-gradient(#e9e9e9, #d7d7d7);
  65 + background-image: -moz-linear-gradient(#e9e9e9, #d7d7d7);
  66 + background-image: -ms-linear-gradient(#e9e9e9, #d7d7d7);
  67 + background-image: -o-linear-gradient(#e9e9e9, #d7d7d7);
  68 +}
  69 +
  70 +@mixin shade {
  71 + @include box-shadow(0 0 3px #ddd);
  72 +}
  73 +
  74 +@mixin solid-shade {
  75 + @include box-shadow(0 0 0 3px #f1f1f1);
  76 +}
  77 +
  78 +@mixin header-font {
  79 + color: $style_color;
  80 + text-shadow: 0 1px 1px #FFF;
  81 + font-size: 16px;
  82 + line-height: 44px;
  83 + font-weight: normal;
  84 +}
  85 +
  86 +@mixin md-typography {
  87 + img {
  88 + max-width: 100%;
  89 + }
  90 +
  91 + *:first-child {
  92 + margin-top: 0;
  93 + }
  94 +
  95 + code { padding: 0 4px; }
  96 +
  97 + h1 {
  98 + margin-top: 45px;
  99 + font-size: 2.5em;
  100 + }
  101 +
  102 + h2 {
  103 + margin-top: 40px;
  104 + font-size: 2em;
  105 + }
  106 +
  107 + h3 {
  108 + margin-top: 35px;
  109 + font-size: 2em;
  110 + }
  111 +
  112 + h4 {
  113 + margin-top: 30px;
  114 + font-size: 1.5em;
  115 + }
  116 +
  117 + blockquote p {
  118 + color: #888;
  119 + font-size: 14px;
  120 + line-height: 1.5;
  121 + }
  122 +
  123 + table {
  124 + @extend .table;
  125 + @extend .table-bordered;
  126 + th {
  127 + background: #EEE;
  128 + }
  129 + }
  130 +
  131 + code {
  132 + font-size: inherit;
  133 + font-weight: inherit;
  134 + color: #555;
  135 + }
  136 +
  137 + li {
  138 + line-height: 1.5;
  139 + }
  140 +}
  141 +
  142 +@mixin page-title {
  143 + color: #333;
  144 + font-size: 20px;
  145 + line-height: 1.5;
  146 + margin-top: 0px;
  147 + margin-bottom: 15px;
  148 +}
app/assets/stylesheets/main/variables.scss 0 → 100644
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
  1 +/**
  2 + * General Colors
  3 + */
  4 +$primary_color: #2FA0BB;
  5 +$link_color: #3A89A3;
  6 +$style_color: #474D57;
  7 +$bg_style_color: #2299BB;
  8 +$hover: #D9EDF7;
  9 +
  10 +/**
  11 + * Commit Diff Colors
  12 + */
  13 +$added: #63c363;
  14 +$deleted: #f77;
app/assets/stylesheets/sections/commits.scss
@@ -80,7 +80,7 @@ @@ -80,7 +80,7 @@
80 border-right: 1px solid #ccc; 80 border-right: 1px solid #ccc;
81 text-align: right; 81 text-align: right;
82 min-width: 35px; 82 min-width: 35px;
83 - max-width: 35px; 83 + max-width: 50px;
84 width: 35px; 84 width: 35px;
85 @include user-select(none); 85 @include user-select(none);
86 a { 86 a {
@@ -399,8 +399,8 @@ @@ -399,8 +399,8 @@
399 399
400 .commits-compare-switch{ 400 .commits-compare-switch{
401 background: url("switch_icon.png") no-repeat center center; 401 background: url("switch_icon.png") no-repeat center center;
402 - width: 22px;  
403 - height: 22px; 402 + width: 32px;
  403 + height: 32px;
404 text-indent: -9999px; 404 text-indent: -9999px;
405 float: left; 405 float: left;
406 margin-right: 9px; 406 margin-right: 9px;
@@ -481,6 +481,10 @@ li.commit { @@ -481,6 +481,10 @@ li.commit {
481 font-family: $monospace_font; 481 font-family: $monospace_font;
482 } 482 }
483 483
  484 + .str-truncated {
  485 + max-width: 70%;
  486 + }
  487 +
484 .commit-row-message { 488 .commit-row-message {
485 color: #333; 489 color: #333;
486 font-weight: 500; 490 font-weight: 500;
app/assets/stylesheets/sections/dashboard.scss
1 .dashboard { 1 .dashboard {
2 - @extend .row;  
3 - .activities {  
4 - }  
5 -  
6 .side { 2 .side {
7 - @extend .pull-right;  
8 -  
9 .ui-box { 3 .ui-box {
10 margin: 0px; 4 margin: 0px;
11 box-shadow: none; 5 box-shadow: none;
@@ -20,7 +14,7 @@ @@ -20,7 +14,7 @@
20 14
21 .search-text-input { 15 .search-text-input {
22 float:left; 16 float:left;
23 - @extend .span2; 17 + @extend .col-md-2;
24 } 18 }
25 .btn { 19 .btn {
26 margin-left: 5px; 20 margin-left: 5px;
@@ -32,14 +26,15 @@ @@ -32,14 +26,15 @@
32 .dash-filter { 26 .dash-filter {
33 margin: 7px 0; 27 margin: 7px 0;
34 padding: 4px 6px; 28 padding: 4px 6px;
35 - width: 202px; 29 + width: 220px;
36 float: left; 30 float: left;
  31 + height: inherit;
37 } 32 }
38 } 33 }
39 34
40 @media (max-width: 1200px) { 35 @media (max-width: 1200px) {
41 .dashboard .dash-filter { 36 .dashboard .dash-filter {
42 - width: 132px; 37 + width: 150px;
43 } 38 }
44 } 39 }
45 40
@@ -107,7 +102,6 @@ @@ -107,7 +102,6 @@
107 padding: 8px 12px; 102 padding: 8px 12px;
108 border-radius: 50px; 103 border-radius: 50px;
109 background: #f5f5f5; 104 background: #f5f5f5;
110 - width: 16px;  
111 text-align: center; 105 text-align: center;
112 106
113 i { 107 i {
app/assets/stylesheets/sections/editor.scss
@@ -34,15 +34,4 @@ @@ -34,15 +34,4 @@
34 margin: 5px 8px 0 8px; 34 margin: 5px 8px 0 8px;
35 } 35 }
36 } 36 }
37 - .commit_message-group {  
38 - margin-top: 20px;  
39 -  
40 - label {  
41 - font-size: 16px;  
42 - line-height: 20px;  
43 - }  
44 - textarea {  
45 - @extend .span8;  
46 - }  
47 - }  
48 } 37 }
app/assets/stylesheets/sections/events.scss
@@ -75,6 +75,7 @@ @@ -75,6 +75,7 @@
75 margin-top: 4px; 75 margin-top: 4px;
76 margin-left: 0px; 76 margin-left: 0px;
77 max-width: 200px; 77 max-width: 200px;
  78 + float: none;
78 } 79 }
79 80
80 p:last-child { 81 p:last-child {
@@ -147,7 +148,7 @@ @@ -147,7 +148,7 @@
147 float: left; 148 float: left;
148 padding: 9px 6px; 149 padding: 9px 6px;
149 font-size: 18px; 150 font-size: 18px;
150 - width: 26px; 151 + width: 40px;
151 @include border-radius(3px); 152 @include border-radius(3px);
152 } 153 }
153 154
app/assets/stylesheets/sections/header.scss
@@ -4,17 +4,24 @@ @@ -4,17 +4,24 @@
4 */ 4 */
5 header { 5 header {
6 &.navbar-gitlab { 6 &.navbar-gitlab {
  7 + margin-bottom: 0;
  8 + min-height: 40px;
  9 +
7 .navbar-inner { 10 .navbar-inner {
8 - height: 40px;  
9 - padding: 3px;  
10 background: #F1F1F1; 11 background: #F1F1F1;
  12 + border-bottom: 1px solid #DDD;
11 filter: none; 13 filter: none;
12 14
13 .nav > li > a { 15 .nav > li > a {
14 color: $style_color; 16 color: $style_color;
15 text-shadow: 0 1px 0 #fff; 17 text-shadow: 0 1px 0 #fff;
16 font-size: 14px; 18 font-size: 14px;
17 - padding: 10px; 19 + line-height: 32px;
  20 + padding: 6px 10px;
  21 +
  22 + &:hover {
  23 + background: none;
  24 + }
18 } 25 }
19 26
20 /** NAV block with links and profile **/ 27 /** NAV block with links and profile **/
@@ -35,9 +42,6 @@ header { @@ -35,9 +42,6 @@ header {
35 .app_logo { 42 .app_logo {
36 float: left; 43 float: left;
37 margin-right: 9px; 44 margin-right: 9px;
38 - position: relative;  
39 - top: -3px;  
40 - padding-top: 3px;  
41 45
42 a { 46 a {
43 float: left; 47 float: left;
@@ -49,7 +53,7 @@ header { @@ -49,7 +53,7 @@ header {
49 background: url('logo-black.png') no-repeat center center; 53 background: url('logo-black.png') no-repeat center center;
50 background-size: 32px; 54 background-size: 32px;
51 float: left; 55 float: left;
52 - height: 40px; 56 + height: 46px;
53 width: 40px; 57 width: 40px;
54 @include header-font; 58 @include header-font;
55 text-indent: -9999px; 59 text-indent: -9999px;
@@ -75,7 +79,7 @@ header { @@ -75,7 +79,7 @@ header {
75 79
76 .profile-pic { 80 .profile-pic {
77 position: relative; 81 position: relative;
78 - top: -4px; 82 + top: -1px;
79 img { 83 img {
80 width: 26px; 84 width: 26px;
81 height: 26px; 85 height: 26px;
@@ -91,21 +95,25 @@ header { @@ -91,21 +95,25 @@ header {
91 .search { 95 .search {
92 margin-right: 10px; 96 margin-right: 10px;
93 margin-left: 10px; 97 margin-left: 10px;
  98 + margin-top: 8px;
  99 +
  100 + form {
  101 + margin: 0;
  102 + padding: 0;
  103 + }
94 104
95 .search-input { 105 .search-input {
96 - @extend .span3;  
97 background-image: url("icon-search.png"); 106 background-image: url("icon-search.png");
98 background-repeat: no-repeat; 107 background-repeat: no-repeat;
99 background-position: 10px; 108 background-position: 10px;
  109 + height: inherit;
  110 + padding: 4px 6px;
100 padding-left: 25px; 111 padding-left: 25px;
101 font-size: 13px; 112 font-size: 13px;
102 @include border-radius(3px); 113 @include border-radius(3px);
103 border: 1px solid #c6c6c6; 114 border: 1px solid #c6c6c6;
104 box-shadow: none; 115 box-shadow: none;
105 @include transition(all 0.15s ease-in 0s); 116 @include transition(all 0.15s ease-in 0s);
106 - &:focus {  
107 - @extend .span4;  
108 - }  
109 } 117 }
110 } 118 }
111 119
@@ -181,12 +189,26 @@ header { @@ -181,12 +189,26 @@ header {
181 .separator { 189 .separator {
182 float: left; 190 float: left;
183 height: 46px; 191 height: 46px;
184 - width: 1px; 192 + width: 2px;
185 background: white; 193 background: white;
186 border-left: 1px solid #DDD; 194 border-left: 1px solid #DDD;
187 - margin-top: -3px;  
188 margin-left: 10px; 195 margin-left: 10px;
189 margin-right: 10px; 196 margin-right: 10px;
190 } 197 }
191 } 198 }
192 199
  200 +.search .search-input {
  201 + width: 300px;
  202 + &:focus {
  203 + width: 400px;
  204 + }
  205 +}
  206 +
  207 +@media (max-width: 1200px) {
  208 + .search .search-input {
  209 + width: 200px;
  210 + &:focus {
  211 + width: 300px;
  212 + }
  213 + }
  214 +}
app/assets/stylesheets/sections/issues.scss
@@ -77,8 +77,8 @@ input.check_all_issues { @@ -77,8 +77,8 @@ input.check_all_issues {
77 @media (min-width: 800px) { .issues_filters select { width: 160px; } } 77 @media (min-width: 800px) { .issues_filters select { width: 160px; } }
78 @media (min-width: 1200px) { .issues_filters select { width: 220px; } } 78 @media (min-width: 1200px) { .issues_filters select { width: 220px; } }
79 79
80 -@media (min-width: 800px) { .issues_bulk_update .chosen-container { min-width: 120px; } }  
81 -@media (min-width: 1200px) { .issues_bulk_update .chosen-container { min-width: 160px; } } 80 +@media (min-width: 800px) { .issues_bulk_update .select2-container { min-width: 120px; } }
  81 +@media (min-width: 1200px) { .issues_bulk_update .select2-container { min-width: 160px; } }
82 82
83 .issues-holder { 83 .issues-holder {
84 .issues_filters { 84 .issues_filters {
@@ -105,7 +105,7 @@ input.check_all_issues { @@ -105,7 +105,7 @@ input.check_all_issues {
105 } 105 }
106 106
107 .issues_bulk_update { 107 .issues_bulk_update {
108 - .chosen-container { 108 + .select2-container {
109 text-shadow: none; 109 text-shadow: none;
110 } 110 }
111 } 111 }
@@ -120,11 +120,6 @@ input.check_all_issues { @@ -120,11 +120,6 @@ input.check_all_issues {
120 } 120 }
121 } 121 }
122 122
123 -.edit-issue.inline-update select {  
124 - width: 100%;  
125 - max-width: 200px;  
126 -}  
127 -  
128 .issue-show-labels .label { 123 .issue-show-labels .label {
129 padding: 6px 10px; 124 padding: 6px 10px;
130 } 125 }
app/assets/stylesheets/sections/login.scss
1 /* Login Page */ 1 /* Login Page */
2 -body.login-page{  
3 - .container > .content {  
4 - padding-top: 20px; 2 +.login-page {
  3 + h1 {
  4 + font-size: 3em;
  5 + font-weight: 200;
5 } 6 }
6 -}  
7 -  
8 -.login-box{  
9 - width: 304px;  
10 - position: relative;  
11 - @include border-radius(5px);  
12 - margin: auto;  
13 - padding: 20px;  
14 - background: white;  
15 -}  
16 -  
17 -.login-box .login-logo{  
18 - margin: 10px 0 30px 0;  
19 - display: block;  
20 -}  
21 -  
22 -.login-box input.text{background-color: #f1f1f1; font-size: 16px; @include border-radius(0); padding: 14px 10px; width: 280px}  
23 -  
24 -.login-box input.text.top{  
25 - @include border-radius(5px 5px 0 0);  
26 - margin-bottom: 0px;  
27 -}  
28 7
29 -.login-box input.text.bottom{  
30 - @include border-radius(0 0 5px 5px);  
31 - border-top: 0;  
32 - margin-bottom: 20px;  
33 -}  
34 -  
35 -.login-box input.text.middle{  
36 - border-top: 0;  
37 - margin-bottom:0px;  
38 -} 8 + .login-box{
  9 + width: 304px;
  10 + position: relative;
  11 + @include border-radius(5px);
  12 + margin: auto;
  13 + padding: 20px;
  14 + background: white;
  15 + }
39 16
40 -.login-box a.forgot{float: right; padding-top: 6px} 17 + .login-logo{
  18 + margin: 10px 0 30px 0;
  19 + display: block;
  20 + }
41 21
42 -.remember_me {  
43 - text-align: left; 22 + .form-control {
  23 + background-color: #f1f1f1;
  24 + font-size: 16px;
  25 + padding: 14px 10px;
  26 + width: 280px;
  27 + height: auto;
  28 +
  29 + &.top {
  30 + @include border-radius(5px 5px 0 0);
  31 + margin-bottom: 0px;
  32 + }
  33 +
  34 + &.bottom {
  35 + @include border-radius(0 0 5px 5px);
  36 + border-top: 0;
  37 + margin-bottom: 20px;
  38 + }
  39 +
  40 + &.middle {
  41 + border-top: 0;
  42 + margin-bottom:0px;
  43 + @include border-radius(0);
  44 + }
  45 + }
44 46
45 - input {  
46 - margin: 2px; 47 + .login-box a.forgot {
  48 + float: right;
  49 + padding-top: 6px
47 } 50 }
48 -}  
49 51
50 -.devise-errors {  
51 - h2 {  
52 - font-size: 14px;  
53 - color: #a00; 52 + .devise-errors {
  53 + h2 {
  54 + font-size: 14px;
  55 + color: #a00;
  56 + }
54 } 57 }
55 } 58 }
app/assets/stylesheets/sections/merge_requests.scss
@@ -4,10 +4,6 @@ @@ -4,10 +4,6 @@
4 * 4 *
5 */ 5 */
6 .automerge_widget { 6 .automerge_widget {
7 - &.can_be_merged {  
8 - background: #DFF0D8;  
9 - }  
10 -  
11 form { 7 form {
12 margin-bottom: 0; 8 margin-bottom: 0;
13 .clearfix { 9 .clearfix {
@@ -15,32 +11,12 @@ @@ -15,32 +11,12 @@
15 } 11 }
16 } 12 }
17 13
18 - .accept_group {  
19 - float: left;  
20 - border: 1px solid #ADA;  
21 - padding: 2px;  
22 - @include border-radius(5px);  
23 - background: #CEB;  
24 -  
25 - .accept_merge_request {  
26 - font-size: 13px;  
27 - float: left;  
28 - }  
29 - .remove_branch_holder {  
30 - margin-left: 20px;  
31 - margin-right: 10px;  
32 - float: left;  
33 - } 14 + .accept-group {
34 label { 15 label {
35 - color: #444;  
36 - text-align: left 16 + margin: 5px;
  17 + margin-left: 20px;
37 } 18 }
38 } 19 }
39 -  
40 -  
41 - .how_to_merge_link {  
42 - @extend .primary;  
43 - }  
44 } 20 }
45 21
46 .merge-request .nav-tabs{ 22 .merge-request .nav-tabs{
@@ -53,11 +29,6 @@ @@ -53,11 +29,6 @@
53 } 29 }
54 } 30 }
55 31
56 -.merge-in-progress {  
57 - @extend .padded;  
58 - @extend .append-bottom-10;  
59 -}  
60 -  
61 .mr_source_commit, 32 .mr_source_commit,
62 .mr_target_commit { 33 .mr_target_commit {
63 .commit { 34 .commit {
@@ -111,12 +82,8 @@ @@ -111,12 +82,8 @@
111 .merge-request-angle { 82 .merge-request-angle {
112 text-align: center; 83 text-align: center;
113 margin: 0 auto; 84 margin: 0 auto;
114 - background: #eee;  
115 - border-radius: 100px;  
116 - width: 60px;  
117 - line-height: 60px;  
118 - color: #777;  
119 - text-shadow: 0 1px 2px #FFF; 85 + font-size: 2em;
  86 + line-height: 1.1;
120 } 87 }
121 88
122 .merge-request-form-info { 89 .merge-request-form-info {
@@ -128,8 +95,7 @@ @@ -128,8 +95,7 @@
128 font-weight: normal !important; 95 font-weight: normal !important;
129 } 96 }
130 97
131 - .chosen-container .chosen-single {  
132 - padding: 2px 0 2px 10px; 98 + .select2-container .select2-single {
133 span { 99 span {
134 font-weight: bold; 100 font-weight: bold;
135 color: #555; 101 color: #555;
app/assets/stylesheets/sections/nav.scss
@@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
6 border-bottom: 1px solid #E1E1E1; 6 border-bottom: 1px solid #E1E1E1;
7 7
8 ul { 8 ul {
  9 + padding: 0;
9 margin: auto; 10 margin: auto;
10 height: 40px; 11 height: 40px;
11 overflow: hidden; 12 overflow: hidden;
app/assets/stylesheets/sections/notes.scss
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 * Notes 2 * Notes
3 */ 3 */
4 4
5 -@-webkit-keyframes target-note { 5 +@-webkit-keyframes targe3-note {
6 from { background:#fffff0; } 6 from { background:#fffff0; }
7 50% { background:#ffffd3; } 7 50% { background:#ffffd3; }
8 to { background:#fffff0; } 8 to { background:#fffff0; }
@@ -119,9 +119,9 @@ ul.notes { @@ -119,9 +119,9 @@ ul.notes {
119 } 119 }
120 120
121 .file .notes_holder { 121 .file .notes_holder {
122 - font-family: $sansFontFamily;  
123 font-size: 13px; 122 font-size: 13px;
124 line-height: 18px; 123 line-height: 18px;
  124 + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
125 125
126 td { 126 td {
127 border: 1px solid #ddd; 127 border: 1px solid #ddd;
@@ -138,7 +138,7 @@ ul.notes { @@ -138,7 +138,7 @@ ul.notes {
138 border-left: 1px solid #ddd !important; 138 border-left: 1px solid #ddd !important;
139 } 139 }
140 &.notes_content { 140 &.notes_content {
141 - background-color: $white; 141 + background-color: #fff;
142 border-width: 1px 0; 142 border-width: 1px 0;
143 padding-top: 0; 143 padding-top: 0;
144 144
@@ -303,7 +303,7 @@ ul.notes { @@ -303,7 +303,7 @@ ul.notes {
303 } 303 }
304 304
305 .note-image-attach { 305 .note-image-attach {
306 - @extend .span4; 306 + @extend .col-md-4;
307 @extend .thumbnail; 307 @extend .thumbnail;
308 margin-left: 45px; 308 margin-left: 45px;
309 } 309 }
app/assets/stylesheets/sections/profile.scss
1 .update-notifications { 1 .update-notifications {
2 - margin-bottom: 0;  
3 - label {  
4 - margin-bottom: 0; 2 + .radio-inline {
  3 + margin-right: 9%;
5 } 4 }
6 } 5 }
7 6
@@ -17,7 +16,7 @@ @@ -17,7 +16,7 @@
17 16
18 legend { 17 legend {
19 border: none; 18 border: none;
20 - margin: 0; 19 + margin-bottom: 10px;
21 } 20 }
22 } 21 }
23 } 22 }
@@ -47,3 +46,62 @@ @@ -47,3 +46,62 @@
47 margin: 10px 0; 46 margin: 10px 0;
48 } 47 }
49 } 48 }
  49 +
  50 +.user-show-username {
  51 + font-weight: 200;
  52 + color: #666;
  53 +}
  54 +
  55 +/*
  56 + * Appearance settings
  57 + *
  58 + */
  59 +.themes_opts {
  60 + label {
  61 + margin-right: 20px;
  62 + text-align: center;
  63 +
  64 + .prev {
  65 + @extend .thumbnail;
  66 + height: 30px;
  67 + width: 175px;
  68 + margin-bottom: 10px;
  69 +
  70 + &.classic {
  71 + background: #31363e;
  72 + }
  73 +
  74 + &.default {
  75 + background: #f1f1f1;
  76 + }
  77 +
  78 + &.modern {
  79 + background: #345;
  80 + }
  81 +
  82 + &.gray {
  83 + background: #373737;
  84 + }
  85 +
  86 + &.violet {
  87 + background: #547;
  88 + }
  89 + }
  90 + }
  91 +}
  92 +
  93 +.code_highlight_opts {
  94 + margin-top: 10px;
  95 +
  96 + label {
  97 + margin-right: 20px;
  98 + text-align: center;
  99 +
  100 + .prev {
  101 + @extend .thumbnail;
  102 + height: 151px;
  103 + width: 220px;
  104 + margin-bottom: 10px;
  105 + }
  106 + }
  107 +}
app/assets/stylesheets/sections/projects.scss
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 16
17 .project-home-panel { 17 .project-home-panel {
18 border-bottom: 1px solid #DDD; 18 border-bottom: 1px solid #DDD;
19 - padding-bottom: 25px; 19 + padding-bottom: 15px;
20 margin-bottom: 30px; 20 margin-bottom: 30px;
21 21
22 &.empty-project { 22 &.empty-project {
@@ -41,24 +41,29 @@ @@ -41,24 +41,29 @@
41 .project-home-desc { 41 .project-home-desc {
42 float: left; 42 float: left;
43 color: #777; 43 color: #777;
  44 + margin-bottom: 10px;
44 } 45 }
45 46
46 .project-home-links { 47 .project-home-links {
47 float: right; 48 float: right;
48 a { 49 a {
49 margin-left: 10px; 50 margin-left: 10px;
  51 + font-weight: 500;
50 } 52 }
51 } 53 }
52 } 54 }
53 55
54 .visibility-level-label { 56 .visibility-level-label {
55 - font-size: 14px; 57 + font-size: 17px;
56 background: #f1f1f1; 58 background: #f1f1f1;
57 - padding: 8px 10px;  
58 border-radius: 4px; 59 border-radius: 4px;
59 - margin-left: 10px;  
60 color: #888; 60 color: #888;
  61 + position: absolute;
  62 + margin-left: -55px;
61 text-shadow: 0 1px 1px #FFF; 63 text-shadow: 0 1px 1px #FFF;
  64 + width: 40px;
  65 + text-align: center;
  66 + padding: 6px;
62 67
63 i { 68 i {
64 color: inherit; 69 color: inherit;
@@ -67,76 +72,53 @@ @@ -67,76 +72,53 @@
67 } 72 }
68 73
69 .git-clone-holder { 74 .git-clone-holder {
70 - float: right;  
71 - border: 1px solid #E1E1E1;  
72 - @include border-radius(4px); 75 + .project-home-dropdown + & {
  76 + margin-right: 45px;
  77 + }
73 78
74 - input[type="text"],  
75 - .btn {  
76 - border: none;  
77 - @include border-radius(0px);  
78 - border-left: 1px solid #E1E1E1; 79 + .btn,
  80 + .form-control {
  81 + border: 1px solid #E1E1E1;
79 box-shadow: none; 82 box-shadow: none;
80 padding: 6px 9px; 83 padding: 6px 9px;
81 } 84 }
82 85
83 .btn { 86 .btn {
84 - float: left;  
85 background: none; 87 background: none;
86 color: #29b; 88 color: #29b;
87 89
88 - &:first-child {  
89 - @include border-radius-left(4px);  
90 - border-left: 0px;  
91 - }  
92 -  
93 &.active { 90 &.active {
94 color: #333; 91 color: #333;
95 font-weight: bold; 92 font-weight: bold;
96 } 93 }
97 } 94 }
98 95
99 - input[type="text"] { 96 + .form-control {
100 cursor: auto; 97 cursor: auto;
101 @extend .monospace; 98 @extend .monospace;
102 background: #FAFAFA; 99 background: #FAFAFA;
  100 + width: 100%;
103 } 101 }
104 } 102 }
105 103
106 .project-visibility-level-holder { 104 .project-visibility-level-holder {
107 - .controls {  
108 - padding-bottom: 9px;  
109 - } 105 + .radio {
  106 + margin-bottom: 10px;
110 107
111 - .controls {  
112 - input {  
113 - float: left; 108 + i {
  109 + margin: 0 3px;
  110 + font-size: 20px;
114 } 111 }
115 - .descr {  
116 - display: block;  
117 - margin-left: 1.5em;  
118 - &.restricted {  
119 - color: #888;  
120 - }  
121 112
122 - label {  
123 - float: none;  
124 - padding: 0;  
125 - margin: 0;  
126 - text-align: left;  
127 - }  
128 - }  
129 - .info {  
130 - display: block;  
131 - margin-top: 5px;  
132 - }  
133 - strong { 113 + .option-title {
  114 + font-weight: bold;
134 display: inline-block; 115 display: inline-block;
135 - width: 4em;  
136 } 116 }
137 - }  
138 - i {  
139 - color: inherit; 117 +
  118 + .option-descr {
  119 + margin-left: 24px;
  120 + color: #666;
  121 + }
140 } 122 }
141 } 123 }
142 124
@@ -218,11 +200,26 @@ ul.nav.nav-projects-tabs { @@ -218,11 +200,26 @@ ul.nav.nav-projects-tabs {
218 .project-side { 200 .project-side {
219 .btn-block { 201 .btn-block {
220 background-image: none; 202 background-image: none;
221 - background-color: #F1f1f1;  
222 - border-color: #EEE;  
223 - &:hover {  
224 - background-color: #eee;  
225 - border-color: #DDD; 203 + .btn,
  204 + &.btn,
  205 + &.btn-group ul.dropdown-menu {
  206 + background-color: #F1f1f1;
  207 + border-color: #EEE;
  208 + &:hover {
  209 + background-color: #eee;
  210 + border-color: #DDD;
  211 + }
  212 + }
  213 + &.btn-group-justified {
  214 + .btn {
  215 + width: 100%;
  216 + }
  217 + .dropdown-toggle {
  218 + width: 26px;
  219 + }
  220 + }
  221 + ul {
  222 + width: 100%;
226 } 223 }
227 } 224 }
228 .project-fork-icon { 225 .project-fork-icon {
@@ -233,46 +230,10 @@ ul.nav.nav-projects-tabs { @@ -233,46 +230,10 @@ ul.nav.nav-projects-tabs {
233 } 230 }
234 } 231 }
235 232
236 -.transfer-project .chosen-container { 233 +.transfer-project .select2-container {
237 min-width: 200px; 234 min-width: 200px;
238 } 235 }
239 236
240 -/** Branch/tag selector **/  
241 -.project-refs-form {  
242 - margin: 0;  
243 - span {  
244 - background:none !important;  
245 - position:static !important;  
246 - width:auto !important;  
247 - height:auto !important;  
248 - }  
249 -}  
250 -.project-refs-select {  
251 - width: 120px;  
252 -}  
253 -  
254 -.project-refs-form .chosen-container {  
255 - position: relative;  
256 - top: 0;  
257 - left: 0;  
258 - margin-right: 10px;  
259 -  
260 - .chosen-single span {  
261 - font-weight: bold;  
262 - color: #555;  
263 - }  
264 -  
265 - &.chosen-container-active {  
266 - .chosen-drop {  
267 - min-width: 400px;  
268 - }  
269 -  
270 - .chosen-results {  
271 - max-height: 400px;  
272 - }  
273 - }  
274 -}  
275 -  
276 .deploy-project-label { 237 .deploy-project-label {
277 margin: 1px; 238 margin: 1px;
278 } 239 }
app/assets/stylesheets/sections/snippets.scss
1 -.snippet.file-holder {  
2 - .file-title {  
3 - .snippet-file-name {  
4 - padding: 4px 10px;  
5 - position: relative;  
6 - top: -4px;  
7 - left: -4px;  
8 - }  
9 - }  
10 -}  
11 -  
12 .my-snippets li:first-child { 1 .my-snippets li:first-child {
13 h4 { margin-top: 0; } 2 h4 { margin-top: 0; }
14 padding-top: 0; 3 padding-top: 0;
app/assets/stylesheets/sections/themes.scss
@@ -1,53 +0,0 @@ @@ -1,53 +0,0 @@
1 -.themes_opts {  
2 - padding-left: 20px;  
3 -  
4 - label {  
5 - width: 175px;  
6 - margin-right: 40px;  
7 -  
8 - .prev {  
9 - @extend .thumbnail;  
10 - height: 30px;  
11 - width: 175px;  
12 - margin-bottom: 10px;  
13 -  
14 - &.classic {  
15 - background: #31363e;  
16 - }  
17 -  
18 - &.default {  
19 - background: #f1f1f1;  
20 - }  
21 -  
22 - &.modern {  
23 - background: #345;  
24 - }  
25 -  
26 - &.gray {  
27 - background: #373737;  
28 - }  
29 -  
30 - &.violet {  
31 - background: #547;  
32 - }  
33 - }  
34 - }  
35 -}  
36 -  
37 -.code_highlight_opts {  
38 - padding-left: 20px;  
39 -  
40 - label {  
41 - width: 220px;  
42 - margin-right: 40px;  
43 -  
44 - .prev {  
45 - @extend .thumbnail;  
46 - height: 151px;  
47 - width: 220px;  
48 - margin-bottom: 10px;  
49 - }  
50 - }  
51 -}  
52 -  
53 -  
app/assets/stylesheets/sections/tree.scss
@@ -24,10 +24,10 @@ @@ -24,10 +24,10 @@
24 th { 24 th {
25 font-weight: normal; 25 font-weight: normal;
26 font-size: 15px; 26 font-size: 15px;
27 - border-bottom: 1px solid #CCC; 27 + border-bottom: 1px solid #CCC !important;
28 } 28 }
29 td { 29 td {
30 - border-color: #F1F1F1; 30 + border-color: #F1F1F1 !important;
31 } 31 }
32 &:hover { 32 &:hover {
33 td { 33 td {
@@ -49,6 +49,7 @@ @@ -49,6 +49,7 @@
49 49
50 .tree-item { 50 .tree-item {
51 .tree-item-file-name { 51 .tree-item-file-name {
  52 + max-width: 320px;
52 vertical-align: middle; 53 vertical-align: middle;
53 a { 54 a {
54 &:hover { 55 &:hover {
@@ -61,6 +62,14 @@ @@ -61,6 +62,14 @@
61 top:-1px; 62 top:-1px;
62 } 63 }
63 } 64 }
  65 +
  66 + .tree_commit {
  67 + max-width: 320px;
  68 + }
  69 +
  70 + .tree_time_ago {
  71 + min-width: 135px;
  72 + }
64 } 73 }
65 74
66 .tree_author { 75 .tree_author {
@@ -111,7 +120,7 @@ @@ -111,7 +120,7 @@
111 120
112 .tree-ref-holder { 121 .tree-ref-holder {
113 float: left; 122 float: left;
114 - margin-top: 5px; 123 + margin-top: 8px;
115 } 124 }
116 125
117 .readme-holder { 126 .readme-holder {
app/assets/stylesheets/sections/votes.scss
@@ -36,3 +36,8 @@ @@ -36,3 +36,8 @@
36 display: inline-block; 36 display: inline-block;
37 margin: 0 8px; 37 margin: 0 8px;
38 } 38 }
  39 +
  40 +.votes-holder {
  41 + float: right;
  42 + width: 250px;
  43 +}
app/assets/stylesheets/sections/wall.scss
1 .wall-page { 1 .wall-page {
2 .wall-note-form { 2 .wall-note-form {
3 - @extend .span12; 3 + @extend .col-md-12;
4 4
5 margin: 0; 5 margin: 0;
6 height: 140px; 6 height: 140px;
app/assets/stylesheets/selects.scss
@@ -1,57 +0,0 @@ @@ -1,57 +0,0 @@
1 -/** Chosen.js selectbox style override **/  
2 -.chosen-container {  
3 - min-width: 100px;  
4 -  
5 - .chosen-single {  
6 - background: #EEE !important;  
7 - border: 1px solid #DDD !important;  
8 - @include box-shadow(none !important);  
9 - @include border-radius(4px !important);  
10 - }  
11 -  
12 - .chosen-results li.highlighted {  
13 - background: #29b;  
14 - }  
15 -  
16 - .chosen-drop {  
17 - margin-top: 10px;  
18 - border: 1px solid #DDD !important;  
19 - @include border-radius(4px !important);  
20 - }  
21 -  
22 - .chosen-search input {  
23 - border: 1px solid #CCC !important;  
24 - @include box-shadow(none !important);  
25 - }  
26 -}  
27 -  
28 -/** Select2 styling **/  
29 -.select2-container .select2-choice {  
30 - @include bg-light-gray-gradient;  
31 -}  
32 -  
33 -.select2-container .select2-choice div {  
34 - border: none;  
35 - background: none;  
36 -}  
37 -  
38 -.select2-drop {  
39 - padding-top: 8px;  
40 -}  
41 -  
42 -.select2-no-results, .select2-searching {  
43 - padding: 7px;  
44 - color: #666;  
45 -}  
46 -  
47 -.chosen-container .chosen-single div b {  
48 - background-position-y: 0px !important;  
49 -}  
50 -  
51 -.chosen-container .chosen-drop .chosen-search input {  
52 - background-position-y: -24px !important;  
53 -}  
54 -  
55 -.chosen-compact {  
56 - max-width: 170px !important;  
57 -}  
app/contexts/base_context.rb
@@ -1,19 +0,0 @@ @@ -1,19 +0,0 @@
1 -class BaseContext  
2 - attr_accessor :project, :current_user, :params  
3 -  
4 - def initialize(project, user, params)  
5 - @project, @current_user, @params = project, user, params.dup  
6 - end  
7 -  
8 - def abilities  
9 - @abilities ||= begin  
10 - abilities = Six.new  
11 - abilities << Ability  
12 - abilities  
13 - end  
14 - end  
15 -  
16 - def can?(object, action, subject)  
17 - abilities.allowed?(object, action, subject)  
18 - end  
19 -end  
app/contexts/commit_load_context.rb
@@ -1,34 +0,0 @@ @@ -1,34 +0,0 @@
1 -class CommitLoadContext < BaseContext  
2 - def execute  
3 - result = {  
4 - commit: nil,  
5 - suppress_diff: false,  
6 - line_notes: [],  
7 - notes_count: 0,  
8 - note: nil,  
9 - status: :ok  
10 - }  
11 -  
12 - commit = project.repository.commit(params[:id])  
13 -  
14 - if commit  
15 - line_notes = project.notes.for_commit_id(commit.id).inline  
16 -  
17 - result[:commit] = commit  
18 - result[:note] = project.build_commit_note(commit)  
19 - result[:line_notes] = line_notes  
20 - result[:notes_count] = project.notes.for_commit_id(commit.id).count  
21 - result[:branches] = project.repository.branch_names_contains(commit.id)  
22 -  
23 - begin  
24 - result[:suppress_diff] = true if commit.diff_suppress? && !params[:force_show_diff]  
25 - result[:force_suppress_diff] = commit.diff_force_suppress?  
26 - rescue Grit::Git::GitTimeout  
27 - result[:suppress_diff] = true  
28 - result[:status] = :huge_commit  
29 - end  
30 - end  
31 -  
32 - result  
33 - end  
34 -end  
app/contexts/files/base_context.rb
@@ -1,31 +0,0 @@ @@ -1,31 +0,0 @@
1 -module Files  
2 - class BaseContext < ::BaseContext  
3 - attr_reader :ref, :path  
4 -  
5 - def initialize(project, user, params, ref, path = nil)  
6 - @project, @current_user, @params = project, user, params.dup  
7 - @ref = ref  
8 - @path = path  
9 - end  
10 -  
11 - private  
12 -  
13 - def error(message)  
14 - {  
15 - error: message,  
16 - status: :error  
17 - }  
18 - end  
19 -  
20 - def success  
21 - {  
22 - error: '',  
23 - status: :success  
24 - }  
25 - end  
26 -  
27 - def repository  
28 - project.repository  
29 - end  
30 - end  
31 -end  
app/contexts/files/create_context.rb
@@ -1,46 +0,0 @@ @@ -1,46 +0,0 @@
1 -require_relative "base_context"  
2 -  
3 -module Files  
4 - class CreateContext < BaseContext  
5 - def execute  
6 - allowed = if project.protected_branch?(ref)  
7 - can?(current_user, :push_code_to_protected_branches, project)  
8 - else  
9 - can?(current_user, :push_code, project)  
10 - end  
11 -  
12 - unless allowed  
13 - return error("You are not allowed to create file in this branch")  
14 - end  
15 -  
16 - unless repository.branch_names.include?(ref)  
17 - return error("You can only create files if you are on top of a branch")  
18 - end  
19 -  
20 - file_name = File.basename(path)  
21 - file_path = path  
22 -  
23 - unless file_name =~ Gitlab::Regex.path_regex  
24 - return error("Your changes could not be committed, because file name contains not allowed characters")  
25 - end  
26 -  
27 - blob = repository.blob_at(ref, file_path)  
28 -  
29 - if blob  
30 - return error("Your changes could not be committed, because file with such name exists")  
31 - end  
32 -  
33 - new_file_action = Gitlab::Satellite::NewFileAction.new(current_user, project, ref, file_path)  
34 - created_successfully = new_file_action.commit!(  
35 - params[:content],  
36 - params[:commit_message]  
37 - )  
38 -  
39 - if created_successfully  
40 - success  
41 - else  
42 - error("Your changes could not be committed, because the file has been changed")  
43 - end  
44 - end  
45 - end  
46 -end  
app/contexts/files/delete_context.rb
@@ -1,40 +0,0 @@ @@ -1,40 +0,0 @@
1 -require_relative "base_context"  
2 -  
3 -module Files  
4 - class DeleteContext < BaseContext  
5 - def execute  
6 - allowed = if project.protected_branch?(ref)  
7 - can?(current_user, :push_code_to_protected_branches, project)  
8 - else  
9 - can?(current_user, :push_code, project)  
10 - end  
11 -  
12 - unless allowed  
13 - return error("You are not allowed to push into this branch")  
14 - end  
15 -  
16 - unless repository.branch_names.include?(ref)  
17 - return error("You can only create files if you are on top of a branch")  
18 - end  
19 -  
20 - blob = repository.blob_at(ref, path)  
21 -  
22 - unless blob  
23 - return error("You can only edit text files")  
24 - end  
25 -  
26 - delete_file_action = Gitlab::Satellite::DeleteFileAction.new(current_user, project, ref, path)  
27 -  
28 - deleted_successfully = delete_file_action.commit!(  
29 - nil,  
30 - params[:commit_message]  
31 - )  
32 -  
33 - if deleted_successfully  
34 - success  
35 - else  
36 - error("Your changes could not be committed, because the file has been changed")  
37 - end  
38 - end  
39 - end  
40 -end  
app/contexts/files/update_context.rb
@@ -1,39 +0,0 @@ @@ -1,39 +0,0 @@
1 -require_relative "base_context"  
2 -  
3 -module Files  
4 - class UpdateContext < BaseContext  
5 - def execute  
6 - allowed = if project.protected_branch?(ref)  
7 - can?(current_user, :push_code_to_protected_branches, project)  
8 - else  
9 - can?(current_user, :push_code, project)  
10 - end  
11 -  
12 - unless allowed  
13 - return error("You are not allowed to push into this branch")  
14 - end  
15 -  
16 - unless repository.branch_names.include?(ref)  
17 - return error("You can only create files if you are on top of a branch")  
18 - end  
19 -  
20 - blob = repository.blob_at(ref, path)  
21 -  
22 - unless blob  
23 - return error("You can only edit text files")  
24 - end  
25 -  
26 - new_file_action = Gitlab::Satellite::EditFileAction.new(current_user, project, ref, path)  
27 - created_successfully = new_file_action.commit!(  
28 - params[:content],  
29 - params[:commit_message]  
30 - )  
31 -  
32 - if created_successfully  
33 - success  
34 - else  
35 - error("Your changes could not be committed, because the file has been changed")  
36 - end  
37 - end  
38 - end  
39 -end  
app/contexts/filter_context.rb
@@ -1,58 +0,0 @@ @@ -1,58 +0,0 @@
1 -class FilterContext  
2 - attr_accessor :klass, :current_user, :params  
3 -  
4 - def initialize(klass, current_user, params)  
5 - @klass = klass  
6 - @current_user = current_user  
7 - @params = params  
8 - end  
9 -  
10 - def execute  
11 - items = by_scope  
12 - items = by_state(items)  
13 - items = by_project(items)  
14 - items = by_search(items)  
15 - end  
16 -  
17 - private  
18 -  
19 - def by_scope  
20 - table_name = klass.table_name  
21 -  
22 - case params[:scope]  
23 - when 'authored' then  
24 - current_user.send(table_name)  
25 - when 'all' then  
26 - klass.of_projects(current_user.authorized_projects.pluck(:id))  
27 - else  
28 - current_user.send("assigned_#{table_name}")  
29 - end  
30 - end  
31 -  
32 - def by_state(items)  
33 - case params[:status]  
34 - when 'closed'  
35 - items.closed  
36 - when 'all'  
37 - items  
38 - else  
39 - items.opened  
40 - end  
41 - end  
42 -  
43 - def by_project(items)  
44 - if params[:project_id].present?  
45 - items = items.of_projects(params[:project_id])  
46 - end  
47 -  
48 - items  
49 - end  
50 -  
51 - def by_search(items)  
52 - if params[:search].present?  
53 - items = items.search(params[:search])  
54 - end  
55 -  
56 - items  
57 - end  
58 -end  
app/contexts/issues/bulk_update_context.rb
@@ -1,39 +0,0 @@ @@ -1,39 +0,0 @@
1 -module Issues  
2 - class BulkUpdateContext < BaseContext  
3 - def execute  
4 - update_data = params[:update]  
5 -  
6 - issues_ids = update_data[:issues_ids].split(",")  
7 - milestone_id = update_data[:milestone_id]  
8 - assignee_id = update_data[:assignee_id]  
9 - status = update_data[:status]  
10 -  
11 - new_state = nil  
12 -  
13 - if status.present?  
14 - if status == 'closed'  
15 - new_state = :close  
16 - else  
17 - new_state = :reopen  
18 - end  
19 - end  
20 -  
21 - opts = {}  
22 - opts[:milestone_id] = milestone_id if milestone_id.present?  
23 - opts[:assignee_id] = assignee_id if assignee_id.present?  
24 -  
25 - issues = Issue.where(id: issues_ids)  
26 - issues = issues.select { |issue| can?(current_user, :modify_issue, issue) }  
27 -  
28 - issues.each do |issue|  
29 - issue.update_attributes(opts)  
30 - issue.send new_state if new_state  
31 - end  
32 -  
33 - {  
34 - count: issues.count,  
35 - success: !issues.count.zero?  
36 - }  
37 - end  
38 - end  
39 -end  
app/contexts/issues/list_context.rb
@@ -1,53 +0,0 @@ @@ -1,53 +0,0 @@
1 -module Issues  
2 - class ListContext < BaseContext  
3 - attr_accessor :issues  
4 -  
5 - def execute  
6 - @issues = @project.issues  
7 -  
8 - @issues = case params[:state]  
9 - when 'all' then @issues  
10 - when 'closed' then @issues.closed  
11 - else @issues.opened  
12 - end  
13 -  
14 - @issues = case params[:scope]  
15 - when 'assigned-to-me' then @issues.assigned_to(current_user)  
16 - when 'created-by-me' then @issues.authored(current_user)  
17 - else @issues  
18 - end  
19 -  
20 - @issues = @issues.tagged_with(params[:label_name]) if params[:label_name].present?  
21 - @issues = @issues.includes(:author, :project)  
22 -  
23 - # Filter by specific assignee_id (or lack thereof)?  
24 - if params[:assignee_id].present?  
25 - @issues = @issues.where(assignee_id: (params[:assignee_id] == '0' ? nil : params[:assignee_id]))  
26 - end  
27 -  
28 - # Filter by specific milestone_id (or lack thereof)?  
29 - if params[:milestone_id].present?  
30 - @issues = @issues.where(milestone_id: (params[:milestone_id] == '0' ? nil : params[:milestone_id]))  
31 - end  
32 -  
33 - # Sort by :sort param  
34 - @issues = sort(@issues, params[:sort])  
35 -  
36 - @issues  
37 - end  
38 -  
39 - private  
40 -  
41 - def sort(issues, condition)  
42 - case condition  
43 - when 'newest' then issues.except(:order).order('created_at DESC')  
44 - when 'oldest' then issues.except(:order).order('created_at ASC')  
45 - when 'recently_updated' then issues.except(:order).order('updated_at DESC')  
46 - when 'last_updated' then issues.except(:order).order('updated_at ASC')  
47 - when 'milestone_due_soon' then issues.except(:order).joins(:milestone).order("milestones.due_date ASC")  
48 - when 'milestone_due_later' then issues.except(:order).joins(:milestone).order("milestones.due_date DESC")  
49 - else issues  
50 - end  
51 - end  
52 - end  
53 -end  
app/contexts/merge_requests_load_context.rb
@@ -1,35 +0,0 @@ @@ -1,35 +0,0 @@
1 -# Build collection of Merge Requests  
2 -# based on filtering passed via params for @project  
3 -class MergeRequestsLoadContext < BaseContext  
4 - def execute  
5 - merge_requests = @project.merge_requests  
6 -  
7 - merge_requests = case params[:state]  
8 - when 'all' then merge_requests  
9 - when 'closed' then merge_requests.closed  
10 - else merge_requests.opened  
11 - end  
12 -  
13 - merge_requests = case params[:scope]  
14 - when 'assigned-to-me' then merge_requests.assigned_to(current_user)  
15 - when 'created-by-me' then merge_requests.authored(current_user)  
16 - else merge_requests  
17 - end  
18 -  
19 -  
20 - merge_requests = merge_requests.page(params[:page]).per(20)  
21 - merge_requests = merge_requests.includes(:author, :source_project, :target_project).order("created_at desc")  
22 -  
23 - # Filter by specific assignee_id (or lack thereof)?  
24 - if params[:assignee_id].present?  
25 - merge_requests = merge_requests.where(assignee_id: (params[:assignee_id] == '0' ? nil : params[:assignee_id]))  
26 - end  
27 -  
28 - # Filter by specific milestone_id (or lack thereof)?  
29 - if params[:milestone_id].present?  
30 - merge_requests = merge_requests.where(milestone_id: (params[:milestone_id] == '0' ? nil : params[:milestone_id]))  
31 - end  
32 -  
33 - merge_requests  
34 - end  
35 -end  
app/contexts/notes/create_context.rb
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -module Notes  
2 - class CreateContext < BaseContext  
3 - def execute  
4 - note = project.notes.new(params[:note])  
5 - note.author = current_user  
6 - note.save  
7 - note  
8 - end  
9 - end  
10 -end  
app/contexts/notes/load_context.rb
@@ -1,20 +0,0 @@ @@ -1,20 +0,0 @@
1 -module Notes  
2 - class LoadContext < BaseContext  
3 - def execute  
4 - target_type = params[:target_type]  
5 - target_id = params[:target_id]  
6 -  
7 -  
8 - @notes = case target_type  
9 - when "commit"  
10 - project.notes.for_commit_id(target_id).not_inline.fresh  
11 - when "issue"  
12 - project.issues.find(target_id).notes.inc_author.fresh  
13 - when "merge_request"  
14 - project.merge_requests.find(target_id).mr_and_commit_notes.inc_author.fresh  
15 - when "snippet"  
16 - project.snippets.find(target_id).notes.fresh  
17 - end  
18 - end  
19 - end  
20 -end  
app/contexts/projects/create_context.rb
@@ -1,80 +0,0 @@ @@ -1,80 +0,0 @@
1 -module Projects  
2 - class CreateContext < BaseContext  
3 - def initialize(user, params)  
4 - @current_user, @params = user, params.dup  
5 - end  
6 -  
7 - def execute  
8 - # get namespace id  
9 - namespace_id = params.delete(:namespace_id)  
10 -  
11 - # check that user is allowed to set specified visibility_level  
12 - unless Gitlab::VisibilityLevel.allowed_for?(current_user, params[:visibility_level])  
13 - params.delete(:visibility_level)  
14 - end  
15 -  
16 - # Load default feature settings  
17 - default_features = Gitlab.config.gitlab.default_projects_features  
18 -  
19 - default_opts = {  
20 - issues_enabled: default_features.issues,  
21 - wiki_enabled: default_features.wiki,  
22 - wall_enabled: default_features.wall,  
23 - snippets_enabled: default_features.snippets,  
24 - merge_requests_enabled: default_features.merge_requests,  
25 - visibility_level: default_features.visibility_level  
26 - }.stringify_keys  
27 -  
28 - @project = Project.new(default_opts.merge(params))  
29 -  
30 - # Parametrize path for project  
31 - #  
32 - # Ex.  
33 - # 'GitLab HQ'.parameterize => "gitlab-hq"  
34 - #  
35 - @project.path = @project.name.dup.parameterize unless @project.path.present?  
36 -  
37 -  
38 - if namespace_id  
39 - # Find matching namespace and check if it allowed  
40 - # for current user if namespace_id passed.  
41 - if allowed_namespace?(current_user, namespace_id)  
42 - @project.namespace_id = namespace_id  
43 - else  
44 - deny_namespace  
45 - return @project  
46 - end  
47 - else  
48 - # Set current user namespace if namespace_id is nil  
49 - @project.namespace_id = current_user.namespace_id  
50 - end  
51 -  
52 - @project.creator = current_user  
53 -  
54 - if @project.save  
55 - unless @project.group  
56 - @project.users_projects.create(  
57 - project_access: UsersProject::MASTER,  
58 - user: current_user  
59 - )  
60 - end  
61 - end  
62 -  
63 - @project  
64 - rescue => ex  
65 - @project.errors.add(:base, "Can't save project. Please try again later")  
66 - @project  
67 - end  
68 -  
69 - protected  
70 -  
71 - def deny_namespace  
72 - @project.errors.add(:namespace, "is not valid")  
73 - end  
74 -  
75 - def allowed_namespace?(user, namespace_id)  
76 - namespace = Namespace.find_by_id(namespace_id)  
77 - current_user.can?(:manage_namespace, namespace)  
78 - end  
79 - end  
80 -end  
app/contexts/projects/fork_context.rb
@@ -1,44 +0,0 @@ @@ -1,44 +0,0 @@
1 -module Projects  
2 - class ForkContext < BaseContext  
3 - include Gitlab::ShellAdapter  
4 -  
5 - def initialize(project, user)  
6 - @from_project, @current_user = project, user  
7 - end  
8 -  
9 - def execute  
10 - project = @from_project.dup  
11 - project.name = @from_project.name  
12 - project.path = @from_project.path  
13 - project.namespace = current_user.namespace  
14 - project.creator = current_user  
15 -  
16 - # If the project cannot save, we do not want to trigger the project destroy  
17 - # as this can have the side effect of deleting a repo attached to an existing  
18 - # project with the same name and namespace  
19 - if project.valid?  
20 - begin  
21 - Project.transaction do  
22 - #First save the DB entries as they can be rolled back if the repo fork fails  
23 - project.build_forked_project_link(forked_to_project_id: project.id, forked_from_project_id: @from_project.id)  
24 - if project.save  
25 - project.users_projects.create(project_access: UsersProject::MASTER, user: current_user)  
26 - end  
27 - #Now fork the repo  
28 - unless gitlab_shell.fork_repository(@from_project.path_with_namespace, project.namespace.path)  
29 - raise "forking failed in gitlab-shell"  
30 - end  
31 - project.ensure_satellite_exists  
32 - end  
33 - rescue => ex  
34 - project.errors.add(:base, "Fork transaction failed.")  
35 - project.destroy  
36 - end  
37 - else  
38 - project.errors.add(:base, "Invalid fork destination")  
39 - end  
40 - project  
41 -  
42 - end  
43 - end  
44 -end  
app/contexts/projects/transfer_context.rb
@@ -1,22 +0,0 @@ @@ -1,22 +0,0 @@
1 -module Projects  
2 - class TransferContext < BaseContext  
3 - def execute(role = :default)  
4 - namespace_id = params[:project].delete(:namespace_id)  
5 - allowed_transfer = can?(current_user, :change_namespace, project) || role == :admin  
6 -  
7 - if allowed_transfer && namespace_id.present?  
8 - if namespace_id.to_i != project.namespace_id  
9 - # Transfer to someone namespace  
10 - namespace = Namespace.find(namespace_id)  
11 - project.transfer(namespace)  
12 - end  
13 - end  
14 -  
15 - rescue ProjectTransferService::TransferError => ex  
16 - project.reload  
17 - project.errors.add(:namespace_id, ex.message)  
18 - false  
19 - end  
20 - end  
21 -end  
22 -  
app/contexts/projects/update_context.rb
@@ -1,19 +0,0 @@ @@ -1,19 +0,0 @@
1 -module Projects  
2 - class UpdateContext < BaseContext  
3 - def execute(role = :default)  
4 - params[:project].delete(:namespace_id)  
5 - # check that user is allowed to set specified visibility_level  
6 - unless can?(current_user, :change_visibility_level, project) && Gitlab::VisibilityLevel.allowed_for?(current_user, params[:project][:visibility_level])  
7 - params[:project].delete(:visibility_level)  
8 - end  
9 -  
10 - new_branch = params[:project].delete(:default_branch)  
11 -  
12 - if project.repository.exists? && new_branch && new_branch != project.default_branch  
13 - project.change_head(new_branch)  
14 - end  
15 -  
16 - project.update_attributes(params[:project], as: role)  
17 - end  
18 - end  
19 -end  
app/contexts/search_context.rb
@@ -1,42 +0,0 @@ @@ -1,42 +0,0 @@
1 -class SearchContext  
2 - attr_accessor :project_ids, :current_user, :params  
3 -  
4 - def initialize(project_ids, user, params)  
5 - @project_ids, @current_user, @params = project_ids, user, params.dup  
6 - end  
7 -  
8 - def execute  
9 - query = params[:search]  
10 - query = Shellwords.shellescape(query) if query.present?  
11 -  
12 - return result unless query.present?  
13 - visibility_levels = @current_user ? [ Gitlab::VisibilityLevel::INTERNAL, Gitlab::VisibilityLevel::PUBLIC ] : [ Gitlab::VisibilityLevel::PUBLIC ]  
14 - result[:projects] = Project.where("projects.id in (?) OR projects.visibility_level in (?)", project_ids, visibility_levels).search(query).limit(20)  
15 -  
16 - # Search inside single project  
17 - single_project_search(Project.where(id: project_ids), query)  
18 - result  
19 - end  
20 -  
21 - def single_project_search(projects, query)  
22 - project = projects.first if projects.length == 1  
23 -  
24 - if params[:search_code].present?  
25 - result[:blobs] = project.repository.search_files(query, params[:repository_ref]) unless project.empty_repo?  
26 - else  
27 - result[:merge_requests] = MergeRequest.in_projects(project_ids).search(query).order('updated_at DESC').limit(20)  
28 - result[:issues] = Issue.where(project_id: project_ids).search(query).order('updated_at DESC').limit(20)  
29 - result[:wiki_pages] = []  
30 - end  
31 - end  
32 -  
33 - def result  
34 - @result ||= {  
35 - projects: [],  
36 - merge_requests: [],  
37 - issues: [],  
38 - wiki_pages: [],  
39 - blobs: []  
40 - }  
41 - end  
42 -end  
app/contexts/test_hook_context.rb
@@ -1,7 +0,0 @@ @@ -1,7 +0,0 @@
1 -class TestHookContext < BaseContext  
2 - def execute  
3 - hook = project.hooks.find(params[:id])  
4 - data = GitPushService.new.sample_data(project, current_user)  
5 - hook.execute(data)  
6 - end  
7 -end  
app/controllers/admin/groups_controller.rb
@@ -52,6 +52,6 @@ class Admin::GroupsController &lt; Admin::ApplicationController @@ -52,6 +52,6 @@ class Admin::GroupsController &lt; Admin::ApplicationController
52 private 52 private
53 53
54 def group 54 def group
55 - @group = Group.find_by_path(params[:id]) 55 + @group = Group.find_by(path: params[:id])
56 end 56 end
57 end 57 end
app/controllers/admin/projects_controller.rb
@@ -5,7 +5,7 @@ class Admin::ProjectsController &lt; Admin::ApplicationController @@ -5,7 +5,7 @@ class Admin::ProjectsController &lt; Admin::ApplicationController
5 5
6 def index 6 def index
7 owner_id = params[:owner_id] 7 owner_id = params[:owner_id]
8 - user = User.find_by_id(owner_id) 8 + user = User.find_by(id: owner_id)
9 9
10 @projects = user ? user.owned_projects : Project.all 10 @projects = user ? user.owned_projects : Project.all
11 @projects = @projects.where("visibility_level IN (?)", params[:visibility_levels]) if params[:visibility_levels].present? 11 @projects = @projects.where("visibility_level IN (?)", params[:visibility_levels]) if params[:visibility_levels].present?
@@ -19,7 +19,7 @@ class Admin::ProjectsController &lt; Admin::ApplicationController @@ -19,7 +19,7 @@ class Admin::ProjectsController &lt; Admin::ApplicationController
19 end 19 end
20 20
21 def transfer 21 def transfer
22 - result = ::Projects::TransferContext.new(@project, current_user, project: params).execute(:admin) 22 + result = ::Projects::TransferService.new(@project, current_user, project: params).execute(:admin)
23 23
24 if result 24 if result
25 redirect_to [:admin, @project] 25 redirect_to [:admin, @project]
app/controllers/admin/users_controller.rb
@@ -100,6 +100,6 @@ class Admin::UsersController &lt; Admin::ApplicationController @@ -100,6 +100,6 @@ class Admin::UsersController &lt; Admin::ApplicationController
100 protected 100 protected
101 101
102 def user 102 def user
103 - @user ||= User.find_by_username!(params[:id]) 103 + @user ||= User.find_by!(username: params[:id])
104 end 104 end
105 end 105 end
app/controllers/application_controller.rb
@@ -161,6 +161,8 @@ class ApplicationController &lt; ActionController::Base @@ -161,6 +161,8 @@ class ApplicationController &lt; ActionController::Base
161 headers['X-Frame-Options'] = 'DENY' 161 headers['X-Frame-Options'] = 'DENY'
162 headers['X-XSS-Protection'] = '1; mode=block' 162 headers['X-XSS-Protection'] = '1; mode=block'
163 headers['X-UA-Compatible'] = 'IE=edge' 163 headers['X-UA-Compatible'] = 'IE=edge'
  164 + headers['X-Content-Type-Options'] = 'nosniff'
  165 + headers['Strict-Transport-Security'] = 'max-age=31536000' if Gitlab.config.gitlab.https
164 end 166 end
165 167
166 def add_gon_variables 168 def add_gon_variables
@@ -205,7 +207,7 @@ class ApplicationController &lt; ActionController::Base @@ -205,7 +207,7 @@ class ApplicationController &lt; ActionController::Base
205 end 207 end
206 208
207 def configure_permitted_parameters 209 def configure_permitted_parameters
208 - devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :email, :password) } 210 + devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :email, :password, :login, :remember_me) }
209 devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :name, :password, :password_confirmation) } 211 devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :name, :password, :password_confirmation) }
210 end 212 end
211 end 213 end
app/controllers/dashboard_controller.rb
@@ -3,6 +3,8 @@ class DashboardController &lt; ApplicationController @@ -3,6 +3,8 @@ class DashboardController &lt; ApplicationController
3 3
4 before_filter :load_projects, except: [:projects] 4 before_filter :load_projects, except: [:projects]
5 before_filter :event_filter, only: :show 5 before_filter :event_filter, only: :show
  6 + before_filter :default_filter, only: [:issues, :merge_requests]
  7 +
6 8
7 def show 9 def show
8 # Fetch only 30 projects. 10 # Fetch only 30 projects.
@@ -39,7 +41,7 @@ class DashboardController &lt; ApplicationController @@ -39,7 +41,7 @@ class DashboardController &lt; ApplicationController
39 current_user.authorized_projects 41 current_user.authorized_projects
40 end 42 end
41 43
42 - @projects = @projects.where(namespace_id: Group.find_by_name(params[:group])) if params[:group].present? 44 + @projects = @projects.where(namespace_id: Group.find_by(name: params[:group])) if params[:group].present?
43 @projects = @projects.where(visibility_level: params[:visibility_level]) if params[:visibility_level].present? 45 @projects = @projects.where(visibility_level: params[:visibility_level]) if params[:visibility_level].present?
44 @projects = @projects.includes(:namespace) 46 @projects = @projects.includes(:namespace)
45 @projects = @projects.tagged_with(params[:label]) if params[:label].present? 47 @projects = @projects.tagged_with(params[:label]) if params[:label].present?
@@ -51,12 +53,12 @@ class DashboardController &lt; ApplicationController @@ -51,12 +53,12 @@ class DashboardController &lt; ApplicationController
51 end 53 end
52 54
53 def merge_requests 55 def merge_requests
54 - @merge_requests = FilterContext.new(MergeRequest, current_user, params).execute 56 + @merge_requests = FilteringService.new.execute(MergeRequest, current_user, params)
55 @merge_requests = @merge_requests.recent.page(params[:page]).per(20) 57 @merge_requests = @merge_requests.recent.page(params[:page]).per(20)
56 end 58 end
57 59
58 def issues 60 def issues
59 - @issues = FilterContext.new(Issue, current_user, params).execute 61 + @issues = FilteringService.new.execute(Issue, current_user, params)
60 @issues = @issues.recent.page(params[:page]).per(20) 62 @issues = @issues.recent.page(params[:page]).per(20)
61 @issues = @issues.includes(:author, :project) 63 @issues = @issues.includes(:author, :project)
62 64
@@ -71,4 +73,9 @@ class DashboardController &lt; ApplicationController @@ -71,4 +73,9 @@ class DashboardController &lt; ApplicationController
71 def load_projects 73 def load_projects
72 @projects = current_user.authorized_projects.sorted_by_activity.non_archived 74 @projects = current_user.authorized_projects.sorted_by_activity.non_archived
73 end 75 end
  76 +
  77 + def default_filter
  78 + params[:scope] = 'assigned-to-me' if params[:scope].blank?
  79 + params[:state] = 'opened' if params[:state].blank?
  80 + end
74 end 81 end
app/controllers/groups_controller.rb
@@ -10,6 +10,8 @@ class GroupsController &lt; ApplicationController @@ -10,6 +10,8 @@ class GroupsController &lt; ApplicationController
10 # Load group projects 10 # Load group projects
11 before_filter :projects, except: [:new, :create] 11 before_filter :projects, except: [:new, :create]
12 12
  13 + before_filter :default_filter, only: [:issues, :merge_requests]
  14 +
13 layout :determine_layout 15 layout :determine_layout
14 16
15 before_filter :set_title, only: [:new, :create] 17 before_filter :set_title, only: [:new, :create]
@@ -43,18 +45,14 @@ class GroupsController &lt; ApplicationController @@ -43,18 +45,14 @@ class GroupsController &lt; ApplicationController
43 end 45 end
44 end 46 end
45 47
46 - # Get authored or assigned open merge requests  
47 def merge_requests 48 def merge_requests
48 - @merge_requests = FilterContext.new(MergeRequest, current_user, params).execute  
49 - @merge_requests = @merge_requests.of_group(@group)  
50 - @merge_requests = @merge_requests.recent.page(params[:page]).per(20) 49 + @merge_requests = FilteringService.new.execute(MergeRequest, current_user, params)
  50 + @merge_requests = @merge_requests.page(params[:page]).per(20)
51 end 51 end
52 52
53 - # Get only assigned issues  
54 def issues 53 def issues
55 - @issues = FilterContext.new(Issue, current_user, params).execute  
56 - @issues = @issues.of_group(@group)  
57 - @issues = @issues.recent.page(params[:page]).per(20) 54 + @issues = FilteringService.new.execute(Issue, current_user, params)
  55 + @issues = @issues.page(params[:page]).per(20)
58 @issues = @issues.includes(:author, :project) 56 @issues = @issues.includes(:author, :project)
59 57
60 respond_to do |format| 58 respond_to do |format|
@@ -89,7 +87,7 @@ class GroupsController &lt; ApplicationController @@ -89,7 +87,7 @@ class GroupsController &lt; ApplicationController
89 protected 87 protected
90 88
91 def group 89 def group
92 - @group ||= Group.find_by_path(params[:id]) 90 + @group ||= Group.find_by(path: params[:id])
93 end 91 end
94 92
95 def projects 93 def projects
@@ -130,4 +128,10 @@ class GroupsController &lt; ApplicationController @@ -130,4 +128,10 @@ class GroupsController &lt; ApplicationController
130 'group' 128 'group'
131 end 129 end
132 end 130 end
  131 +
  132 + def default_filter
  133 + params[:scope] = 'assigned-to-me' if params[:scope].blank?
  134 + params[:state] = 'opened' if params[:state].blank?
  135 + params[:group_id] = @group.id
  136 + end
133 end 137 end
app/controllers/profiles/groups_controller.rb
@@ -19,6 +19,6 @@ class Profiles::GroupsController &lt; ApplicationController @@ -19,6 +19,6 @@ class Profiles::GroupsController &lt; ApplicationController
19 private 19 private
20 20
21 def group 21 def group
22 - @group ||= Group.find_by_path(params[:id]) 22 + @group ||= Group.find_by(path: params[:id])
23 end 23 end
24 end 24 end
app/controllers/projects/blob_controller.rb
@@ -13,7 +13,7 @@ class Projects::BlobController &lt; Projects::ApplicationController @@ -13,7 +13,7 @@ class Projects::BlobController &lt; Projects::ApplicationController
13 end 13 end
14 14
15 def destroy 15 def destroy
16 - result = Files::DeleteContext.new(@project, current_user, params, @ref, @path).execute 16 + result = Files::DeleteService.new(@project, current_user, params, @ref, @path).execute
17 17
18 if result[:status] == :success 18 if result[:status] == :success
19 flash[:notice] = "Your changes have been successfully committed" 19 flash[:notice] = "Your changes have been successfully committed"
app/controllers/projects/commit_controller.rb
@@ -6,34 +6,35 @@ class Projects::CommitController &lt; Projects::ApplicationController @@ -6,34 +6,35 @@ class Projects::CommitController &lt; Projects::ApplicationController
6 before_filter :authorize_read_project! 6 before_filter :authorize_read_project!
7 before_filter :authorize_code_access! 7 before_filter :authorize_code_access!
8 before_filter :require_non_empty_project 8 before_filter :require_non_empty_project
  9 + before_filter :commit
9 10
10 def show 11 def show
11 - result = CommitLoadContext.new(project, current_user, params).execute 12 + return git_not_found! unless @commit
12 13
13 - @commit = result[:commit] 14 + @line_notes = project.notes.for_commit_id(commit.id).inline
  15 + @branches = project.repository.branch_names_contains(commit.id)
14 16
15 - if @commit.nil?  
16 - git_not_found!  
17 - return 17 + begin
  18 + @suppress_diff = true if commit.diff_suppress? && !params[:force_show_diff]
  19 + @force_suppress_diff = commit.diff_force_suppress?
  20 + rescue Grit::Git::GitTimeout
  21 + @suppress_diff = true
  22 + @status = :huge_commit
18 end 23 end
19 24
20 - @suppress_diff = result[:suppress_diff]  
21 - @force_suppress_diff = result[:force_suppress_diff]  
22 -  
23 - @note = result[:note]  
24 - @line_notes = result[:line_notes]  
25 - @branches = result[:branches]  
26 - @notes_count = result[:notes_count] 25 + @note = project.build_commit_note(commit)
  26 + @notes_count = project.notes.for_commit_id(commit.id).count
27 @notes = project.notes.for_commit_id(@commit.id).not_inline.fresh 27 @notes = project.notes.for_commit_id(@commit.id).not_inline.fresh
28 @noteable = @commit 28 @noteable = @commit
29 -  
30 @comments_allowed = @reply_allowed = true 29 @comments_allowed = @reply_allowed = true
31 - @comments_target = { noteable_type: 'Commit',  
32 - commit_id: @commit.id } 30 + @comments_target = {
  31 + noteable_type: 'Commit',
  32 + commit_id: @commit.id
  33 + }
33 34
34 respond_to do |format| 35 respond_to do |format|
35 format.html do 36 format.html do
36 - if result[:status] == :huge_commit 37 + if @status == :huge_commit
37 render "huge_commit" and return 38 render "huge_commit" and return
38 end 39 end
39 end 40 end
@@ -42,4 +43,8 @@ class Projects::CommitController &lt; Projects::ApplicationController @@ -42,4 +43,8 @@ class Projects::CommitController &lt; Projects::ApplicationController
42 format.patch { render text: @commit.to_patch } 43 format.patch { render text: @commit.to_patch }
43 end 44 end
44 end 45 end
  46 +
  47 + def commit
  48 + @commit ||= project.repository.commit(params[:id])
  49 + end
45 end 50 end
app/controllers/projects/edit_tree_controller.rb
@@ -7,7 +7,7 @@ class Projects::EditTreeController &lt; Projects::BaseTreeController @@ -7,7 +7,7 @@ class Projects::EditTreeController &lt; Projects::BaseTreeController
7 end 7 end
8 8
9 def update 9 def update
10 - result = Files::UpdateContext.new(@project, current_user, params, @ref, @path).execute 10 + result = Files::UpdateService.new(@project, current_user, params, @ref, @path).execute
11 11
12 if result[:status] == :success 12 if result[:status] == :success
13 flash[:notice] = "Your changes have been successfully committed" 13 flash[:notice] = "Your changes have been successfully committed"
app/controllers/projects/hooks_controller.rb
@@ -24,15 +24,20 @@ class Projects::HooksController &lt; Projects::ApplicationController @@ -24,15 +24,20 @@ class Projects::HooksController &lt; Projects::ApplicationController
24 end 24 end
25 25
26 def test 26 def test
27 - TestHookContext.new(project, current_user, params).execute 27 + TestHookService.new.execute(hook, current_user)
28 28
29 redirect_to :back 29 redirect_to :back
30 end 30 end
31 31
32 def destroy 32 def destroy
33 - @hook = @project.hooks.find(params[:id])  
34 - @hook.destroy 33 + hook.destroy
35 34
36 redirect_to project_hooks_path(@project) 35 redirect_to project_hooks_path(@project)
37 end 36 end
  37 +
  38 + private
  39 +
  40 + def hook
  41 + @hook ||= @project.hooks.find(params[:id])
  42 + end
38 end 43 end
app/controllers/projects/issues_controller.rb
@@ -89,7 +89,7 @@ class Projects::IssuesController &lt; Projects::ApplicationController @@ -89,7 +89,7 @@ class Projects::IssuesController &lt; Projects::ApplicationController
89 end 89 end
90 90
91 def bulk_update 91 def bulk_update
92 - result = Issues::BulkUpdateContext.new(project, current_user, params).execute 92 + result = Issues::BulkUpdateService.new(project, current_user, params).execute
93 redirect_to :back, notice: "#{result[:count]} issues updated" 93 redirect_to :back, notice: "#{result[:count]} issues updated"
94 end 94 end
95 95
@@ -97,7 +97,7 @@ class Projects::IssuesController &lt; Projects::ApplicationController @@ -97,7 +97,7 @@ class Projects::IssuesController &lt; Projects::ApplicationController
97 97
98 def issue 98 def issue
99 @issue ||= begin 99 @issue ||= begin
100 - @project.issues.find_by_iid!(params[:id]) 100 + @project.issues.find_by!(iid: params[:id])
101 rescue ActiveRecord::RecordNotFound 101 rescue ActiveRecord::RecordNotFound
102 redirect_old 102 redirect_old
103 end 103 end
@@ -116,7 +116,9 @@ class Projects::IssuesController &lt; Projects::ApplicationController @@ -116,7 +116,9 @@ class Projects::IssuesController &lt; Projects::ApplicationController
116 end 116 end
117 117
118 def issues_filtered 118 def issues_filtered
119 - @issues = Issues::ListContext.new(project, current_user, params).execute 119 + params[:scope] = 'all' if params[:scope].blank?
  120 + params[:state] = 'opened' if params[:state].blank?
  121 + @issues = FilteringService.new.execute(Issue, current_user, params.merge(project_id: @project.id))
120 end 122 end
121 123
122 # Since iids are implemented only in 6.1 124 # Since iids are implemented only in 6.1
@@ -125,7 +127,7 @@ class Projects::IssuesController &lt; Projects::ApplicationController @@ -125,7 +127,7 @@ class Projects::IssuesController &lt; Projects::ApplicationController
125 # To prevent 404 errors we provide a redirect to correct iids until 7.0 release 127 # To prevent 404 errors we provide a redirect to correct iids until 7.0 release
126 # 128 #
127 def redirect_old 129 def redirect_old
128 - issue = @project.issues.find_by_id(params[:id]) 130 + issue = @project.issues.find_by(id: params[:id])
129 131
130 if issue 132 if issue
131 redirect_to project_issue_path(@project, issue) 133 redirect_to project_issue_path(@project, issue)