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.

.gitignore
... ... @@ -34,3 +34,4 @@ doc/code/*
34 34 .secret
35 35 *.log
36 36 public/uploads.*
  37 +public/assets/
... ...
CHANGELOG
  1 +v 6.5.1
  2 + - Fix branch selectbox when create merge request from fork
  3 +
1 4 v 6.5.0
2 5 - Dropdown menus on issue#show page for assignee and milestone (Jason Blanchard)
3 6 - Add color custimization and previewing to broadcast messages
4 7 - Fixed notes anchors
5 8 - Load new comments in issues dynamically
6 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 11 - Add project visibility icons to dashboard
9 12 - Enable secure cookies if https used
10 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 27 v6.4.3
13 28 - Don't use unicorn worker killer if PhusionPassenger is defined
... ...
CONTRIBUTING.md
1 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 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 12  
18 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 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 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 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 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 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 39 3. **Expected behavior:** Describe your issue in detail
45 40 4. **Observed behavior**
46 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 46 * Describe your setup (use relevant parts from `sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production`)
52 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 58 1. Create a feature branch
64 59 1. Write [tests](README.md#run-the-tests) and code
65 60 1. Add your changes to the [CHANGELOG](CHANGELOG)
66 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 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).
... ...
Gemfile
... ... @@ -14,7 +14,6 @@ gem "protected_attributes"
14 14 gem 'rails-observers'
15 15 gem 'actionpack-page_caching'
16 16 gem 'actionpack-action_caching'
17   -gem 'activerecord-deprecated_finders'
18 17  
19 18 # Supported DBs
20 19 gem "mysql2", group: :mysql
... ... @@ -52,6 +51,9 @@ gem "grape", "~> 0.6.1"
52 51 gem "grape-entity", "~> 0.3.0"
53 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 57 # Format dates and times
56 58 # based on human-friendly examples
57 59 gem "stamp"
... ... @@ -60,7 +62,7 @@ gem "stamp"
60 62 gem 'enumerize'
61 63  
62 64 # Pagination
63   -gem "kaminari", "~> 0.14.1"
  65 +gem "kaminari", "~> 0.15.1"
64 66  
65 67 # HAML
66 68 gem "haml-rails"
... ... @@ -120,7 +122,7 @@ gem "redis-rails"
120 122 gem 'tinder', '~> 1.9.2'
121 123  
122 124 # HipChat integration
123   -gem "hipchat", "~> 0.9.0"
  125 +gem "hipchat", "~> 0.14.0"
124 126  
125 127 # Flowdock integration
126 128 gem "gitlab-flowdock-git-hook", "~> 0.4.2"
... ... @@ -144,17 +146,16 @@ gem "therubyracer"
144 146 gem 'turbolinks'
145 147 gem 'jquery-turbolinks'
146 148  
147   -gem 'chosen-rails', "1.0.1"
148 149 gem 'select2-rails'
149 150 gem 'jquery-atwho-rails', "~> 0.3.3"
150 151 gem "jquery-rails", "2.1.3"
151 152 gem "jquery-ui-rails", "2.0.2"
152 153 gem "modernizr", "2.6.2"
153 154 gem "raphael-rails", "~> 2.1.2"
154   -gem 'bootstrap-sass', '~> 2.3'
  155 +gem 'bootstrap-sass', '~> 3.0'
155 156 gem "font-awesome-rails", '~> 3.2'
156 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 160 group :development do
160 161 gem "annotate", "~> 2.6.0.beta2"
... ...
Gemfile.lock
1 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 2 remote: https://github.com/gitlabhq/markup.git
12 3 revision: 61ade389c1e1c159359338f570d18464a44ddbc4
13 4 ref: 61ade389c1e1c159359338f570d18464a44ddbc4
... ... @@ -64,7 +55,7 @@ GEM
64 55 erubis (>= 2.6.6)
65 56 binding_of_caller (0.7.2)
66 57 debug_inspector (>= 0.0.1)
67   - bootstrap-sass (2.3.2.2)
  58 + bootstrap-sass (3.0.3.0)
68 59 sass (~> 3.2)
69 60 builder (3.1.4)
70 61 capybara (2.1.0)
... ... @@ -80,12 +71,6 @@ GEM
80 71 celluloid (0.15.2)
81 72 timers (~> 1.1.0)
82 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 74 cliver (0.2.2)
90 75 code_analyzer (0.4.3)
91 76 sexp_processor
... ... @@ -101,12 +86,6 @@ GEM
101 86 coffee-script-source (1.6.3)
102 87 colored (1.2)
103 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 89 connection_pool (1.2.0)
111 90 coveralls (0.7.0)
112 91 multi_json (~> 1.3)
... ... @@ -135,6 +114,8 @@ GEM
135 114 email_spec (1.5.0)
136 115 launchy (~> 2.1)
137 116 mail (~> 2.2)
  117 + email_validator (1.4.0)
  118 + activemodel
138 119 enumerize (0.7.0)
139 120 activesupport (>= 3.2)
140 121 equalizer (0.0.8)
... ... @@ -170,7 +151,6 @@ GEM
170 151 dotenv (>= 0.7)
171 152 thor (>= 0.13.6)
172 153 formatador (0.2.4)
173   - fssm (0.2.10)
174 154 gemoji (1.3.1)
175 155 gherkin-ruby (0.3.1)
176 156 racc
... ... @@ -212,6 +192,9 @@ GEM
212 192 omniauth (~> 1.0)
213 193 pyu-ruby-sasl (~> 0.0.3.1)
214 194 rubyntlm (~> 0.1.1)
  195 + gon (5.0.1)
  196 + actionpack (>= 2.3.0)
  197 + json
215 198 grape (0.6.1)
216 199 activesupport
217 200 builder
... ... @@ -247,7 +230,7 @@ GEM
247 230 railties (~> 4.0.0)
248 231 hashie (2.0.5)
249 232 hike (1.2.3)
250   - hipchat (0.9.0)
  233 + hipchat (0.14.0)
251 234 httparty
252 235 httparty
253 236 http_parser.rb (0.5.3)
... ... @@ -276,7 +259,7 @@ GEM
276 259 json (1.8.1)
277 260 jwt (0.1.8)
278 261 multi_json (>= 1.5)
279   - kaminari (0.14.1)
  262 + kaminari (0.15.1)
280 263 actionpack (>= 3.0.0)
281 264 activesupport (>= 3.0.0)
282 265 kgio (2.8.1)
... ... @@ -298,7 +281,7 @@ GEM
298 281 minitest (4.7.5)
299 282 modernizr (2.6.2)
300 283 sprockets (~> 2.0)
301   - multi_json (1.8.2)
  284 + multi_json (1.8.4)
302 285 multi_xml (0.5.5)
303 286 multipart-post (1.2.0)
304 287 mysql2 (0.3.11)
... ... @@ -568,17 +551,15 @@ PLATFORMS
568 551 DEPENDENCIES
569 552 actionpack-action_caching
570 553 actionpack-page_caching
571   - activerecord-deprecated_finders
572 554 acts-as-taggable-on
573 555 annotate (~> 2.6.0.beta2)
574 556 asciidoctor
575 557 awesome_print
576 558 better_errors
577 559 binding_of_caller
578   - bootstrap-sass (~> 2.3)
  560 + bootstrap-sass (~> 3.0)
579 561 capybara
580 562 carrierwave
581   - chosen-rails (= 1.0.1)
582 563 coffee-rails
583 564 colored
584 565 coveralls
... ... @@ -587,6 +568,7 @@ DEPENDENCIES
587 568 devise (= 3.0.4)
588 569 devise-async (= 0.8.0)
589 570 email_spec
  571 + email_validator (~> 1.4.0)
590 572 enumerize
591 573 factory_girl_rails
592 574 ffaker
... ... @@ -603,21 +585,21 @@ DEPENDENCIES
603 585 gitlab_git (~> 4.0.0)
604 586 gitlab_meta (= 6.0)
605 587 gitlab_omniauth-ldap (= 1.0.3)
606   - gon!
  588 + gon (~> 5.0.0)
607 589 grape (~> 0.6.1)
608 590 grape-entity (~> 0.3.0)
609 591 growl
610 592 guard-rspec
611 593 guard-spinach
612 594 haml-rails
613   - hipchat (~> 0.9.0)
  595 + hipchat (~> 0.14.0)
614 596 httparty
615 597 jasmine (= 2.0.0.rc5)
616 598 jquery-atwho-rails (~> 0.3.3)
617 599 jquery-rails (= 2.1.3)
618 600 jquery-turbolinks
619 601 jquery-ui-rails (= 2.0.2)
620   - kaminari (~> 0.14.1)
  602 + kaminari (~> 0.15.1)
621 603 launchy
622 604 letter_opener
623 605 minitest (~> 4.7.0)
... ...
PROCESS.md
... ... @@ -8,25 +8,25 @@ Below we describe the contributing process to GitLab for two reasons. So that co
8 8  
9 9 ### Issue team
10 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 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 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 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 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 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 26 - Close fixed issues (via commit messages or manually)
27 27 - Codes [new features](http://feedback.gitlab.com/forums/176466-general/filters/top)!
28 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 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 45  
46 46 - _Awaiting feedback_: Feedback pending from the reporter
47 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 50 - _Awaiting developer action/feedback_: Issue needs to be fixed or clarified by a developer
51 51  
52 52 ## Functional labels
... ... @@ -59,7 +59,7 @@ If an issue is complex and needs the attention of a specific person, assignment
59 59  
60 60 ## Label colors
61 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 63 - Light blue `#82C5FF`: functional labels
64 64 - Green labels `#009800`: issues that can generally be ignored. For example, issues given the following labels normally can be closed immediately:
65 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 69  
70 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 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 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 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 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 89  
90 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 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  
... ...
README.md
1 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 5 ![animated-screenshots](https://gist.github.com/fnkr/2f9badd56bfe0ed04ee7/raw/4f48806fbae97f556c2f78d8c2d299c04500cb0d/compiled.gif)
6 6  
... ... @@ -34,7 +34,7 @@
34 34  
35 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 39 ### Requirements
40 40  
... ... @@ -62,7 +62,7 @@
62 62  
63 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 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 145  
146 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 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 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 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  
... ...
VERSION
1   -6.5.0.pre
  1 +6.5.1
... ...
app/assets/javascripts/application.js
... ... @@ -19,7 +19,6 @@
19 19 //= require jquery.turbolinks
20 20 //= require bootstrap
21 21 //= require modernizr
22   -//= require chosen-jquery
23 22 //= require select2
24 23 //= require raphael
25 24 //= require g.raphael-min
... ...
app/assets/javascripts/behaviors/toggler_behavior.coffee
... ... @@ -3,7 +3,7 @@ $ ->
3 3 container = $(@).closest(".js-toggler-container")
4 4  
5 5 container.toggleClass("on")
6   -
  6 +
7 7 $("body").on "click", ".js-toggle-visibility-link", (e) ->
8 8 $(@).find('i').
9 9 toggleClass('icon-chevron-down').
... ... @@ -11,7 +11,7 @@ $ ->
11 11 container = $(".js-toggle-visibility-container")
12 12 container.toggleClass("hide")
13 13 e.preventDefault()
14   -
  14 +
15 15 $("body").on "click", ".js-toggle-button", (e) ->
16 16 $(@).closest(".js-toggle-container").find(".js-toggle-content").toggle()
17 17 e.preventDefault()
... ...
app/assets/javascripts/branch-graph.js.coffee
... ... @@ -194,11 +194,14 @@ class BranchGraph
194 194 fill: @colors[commit.space]
195 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 201 stroke: @colors[commit.space]
200 202 "stroke-width": 2
201 203 )
  204 + r.image(commit.author.icon, avatar_box_x, avatar_box_y, 20, 20)
202 205 r.text(@offsetX + @unitSpace * @mspace + 35, y, commit.message.split("\n")[0]).attr(
203 206 "text-anchor": "start"
204 207 font: "14px Monaco, monospace"
... ...
app/assets/javascripts/dispatcher.js.coffee
... ... @@ -47,5 +47,9 @@ class Dispatcher
47 47  
48 48  
49 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 29 $('#filter_issue_search').val($('#issue_search').val())
30 30  
31 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 36 $("#milestone_id, #assignee_id, #label_name").on "change", ->
39 37 $(this).closest("form").submit()
40 38  
... ...
app/assets/javascripts/main.js.coffee
... ... @@ -67,8 +67,8 @@ $ ->
67 67 $('.appear-data').fadeIn()
68 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 73 # Initialize tooltips
74 74 $('.has_tooltip').tooltip()
... ... @@ -81,6 +81,7 @@ $ ->
81 81 $(@).parents('form').submit()
82 82  
83 83 $("abbr.timeago").timeago()
  84 + $('.js-timeago').timeago()
84 85  
85 86 # Flash
86 87 if (flash = $(".flash-container")).length > 0
... ... @@ -125,12 +126,6 @@ $ ->
125 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 129 # Disable an element and add the 'disabled' Bootstrap class
135 130 $.fn.extend disable: ->
136 131 $(@).attr('disabled', 'disabled').addClass('disabled')
... ...
app/assets/javascripts/merge_requests.js.coffee
... ... @@ -2,8 +2,8 @@
2 2 # * Filter merge requests
3 3 #
4 4 @merge_requestsPage = ->
5   - $('#assignee_id').chosen()
6   - $('#milestone_id').chosen()
  5 + $('#assignee_id').select2()
  6 + $('#milestone_id').select2()
7 7 $('#milestone_id, #assignee_id').on 'change', ->
8 8 $(this).closest('form').submit()
9 9  
... ... @@ -24,6 +24,8 @@ class MergeRequest
24 24  
25 25 modal = $('#modal_merge_info').modal(show: false)
26 26  
  27 + disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request'
  28 +
27 29 # Local jQuery finder
28 30 $: (selector) ->
29 31 this.$el.find(selector)
... ...
app/assets/javascripts/notes.js.coffee
... ... @@ -37,6 +37,9 @@ class Notes
37 37 # attachment button
38 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 43 # reply to diff/discussion notes
41 44 $(document).on "click", ".js-discussion-reply-button", @replyToDiscussionNote
42 45  
... ... @@ -429,4 +432,16 @@ class Notes
429 432 updateVotes: ->
430 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 447 @Notes = Notes
... ...
app/assets/javascripts/project.js.coffee
... ... @@ -35,7 +35,7 @@ $ ->
35 35 $('a, button', scope).removeClass 'active'
36 36 $(@).addClass 'active'
37 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 40 # Ref switcher
41 41 $('.project-refs-select').on 'change', ->
... ...
app/assets/javascripts/search_autocomplete.js.coffee
1 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 7 $("#search").autocomplete
4   - source: json
  8 + source: search_autocomplete_path + query
  9 + minLength: 1
5 10 select: (event, ui) ->
6 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 46  
47 47 class window.ContributorsMasterGraph extends ContributorsGraph
48 48 constructor: (@data) ->
49   - if $(window).width() > 1214
50   - @width = 1100
51   - else
52   - @width = 870
53   -
  49 + @width = $('.container').width() - 70
54 50 @height = 200
55 51 @x = null
56 52 @y = null
... ... @@ -88,7 +84,6 @@ class window.ContributorsMasterGraph extends ContributorsGraph
88 84 x(d.date)
89 85 ).y0(@height).y1((d) ->
90 86 xa = d.commits = d.commits ? d.additions ? d.deletions
91   - console.log(xa)
92 87 y(xa)
93 88 ).interpolate("basis")
94 89 create_brush: ->
... ... @@ -124,11 +119,7 @@ class window.ContributorsMasterGraph extends ContributorsGraph
124 119  
125 120 class window.ContributorsAuthorGraph extends ContributorsGraph
126 121 constructor: (@data) ->
127   - if $(window).width() > 1214
128   - @width = 490
129   - else
130   - @width = 380
131   -
  122 + @width = $('.container').width()/2 - 100
132 123 @height = 200
133 124 @x = null
134 125 @y = null
... ...
app/assets/stylesheets/application.scss
... ... @@ -4,19 +4,44 @@
4 4 * the top of the compiled file, but it's generally better to create a new file per style scope.
5 5 *= require jquery.ui.gitlab
6 6 *= require jquery.atwho
7   - *= require chosen
8 7 *= require select2
9 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 45 @import "sections/header.scss";
21 46 @import "sections/nav.scss";
22 47 @import "sections/commits.scss";
... ... @@ -39,6 +64,9 @@
39 64 @import "sections/dashboard.scss";
40 65 @import "sections/stat_graph.scss";
41 66  
  67 +/**
  68 + * Code ighlight
  69 + */
42 70 @import "highlight/white.scss";
43 71 @import "highlight/dark.scss";
44 72 @import "highlight/solarized_dark.scss";
... ... @@ -57,4 +85,3 @@
57 85 * Styles for JS behaviors.
58 86 */
59 87 @import "behaviors.scss";
60   -
... ...
app/assets/stylesheets/common.scss
... ... @@ -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 @@
  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 @@
  1 +.light-well {
  2 + background: #f9f9f9;
  3 + padding: 15px;
  4 +}
... ...
app/assets/stylesheets/generic/buttons.scss 0 → 100644
... ... @@ -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 @@
  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 @@
  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 @@
  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 @@
  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 @@
  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 @@
  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 @@
  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 @@
  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   -/** 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   -.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   -.light-well {
2   - background: #f9f9f9;
3   - padding: 15px;
4   -}
app/assets/stylesheets/gitlab_bootstrap/buttons.scss
... ... @@ -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   -/** 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   -/**
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   -/** 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   -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   -/**
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   -/**
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   -/**
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   -/**
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   -/**
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   -/**
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   -/**
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 @@
  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 @@
  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 @@
  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 @@
  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 @@
  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 80 border-right: 1px solid #ccc;
81 81 text-align: right;
82 82 min-width: 35px;
83   - max-width: 35px;
  83 + max-width: 50px;
84 84 width: 35px;
85 85 @include user-select(none);
86 86 a {
... ... @@ -399,8 +399,8 @@
399 399  
400 400 .commits-compare-switch{
401 401 background: url("switch_icon.png") no-repeat center center;
402   - width: 22px;
403   - height: 22px;
  402 + width: 32px;
  403 + height: 32px;
404 404 text-indent: -9999px;
405 405 float: left;
406 406 margin-right: 9px;
... ... @@ -481,6 +481,10 @@ li.commit {
481 481 font-family: $monospace_font;
482 482 }
483 483  
  484 + .str-truncated {
  485 + max-width: 70%;
  486 + }
  487 +
484 488 .commit-row-message {
485 489 color: #333;
486 490 font-weight: 500;
... ...
app/assets/stylesheets/sections/dashboard.scss
1 1 .dashboard {
2   - @extend .row;
3   - .activities {
4   - }
5   -
6 2 .side {
7   - @extend .pull-right;
8   -
9 3 .ui-box {
10 4 margin: 0px;
11 5 box-shadow: none;
... ... @@ -20,7 +14,7 @@
20 14  
21 15 .search-text-input {
22 16 float:left;
23   - @extend .span2;
  17 + @extend .col-md-2;
24 18 }
25 19 .btn {
26 20 margin-left: 5px;
... ... @@ -32,14 +26,15 @@
32 26 .dash-filter {
33 27 margin: 7px 0;
34 28 padding: 4px 6px;
35   - width: 202px;
  29 + width: 220px;
36 30 float: left;
  31 + height: inherit;
37 32 }
38 33 }
39 34  
40 35 @media (max-width: 1200px) {
41 36 .dashboard .dash-filter {
42   - width: 132px;
  37 + width: 150px;
43 38 }
44 39 }
45 40  
... ... @@ -107,7 +102,6 @@
107 102 padding: 8px 12px;
108 103 border-radius: 50px;
109 104 background: #f5f5f5;
110   - width: 16px;
111 105 text-align: center;
112 106  
113 107 i {
... ...
app/assets/stylesheets/sections/editor.scss
... ... @@ -34,15 +34,4 @@
34 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 75 margin-top: 4px;
76 76 margin-left: 0px;
77 77 max-width: 200px;
  78 + float: none;
78 79 }
79 80  
80 81 p:last-child {
... ... @@ -147,7 +148,7 @@
147 148 float: left;
148 149 padding: 9px 6px;
149 150 font-size: 18px;
150   - width: 26px;
  151 + width: 40px;
151 152 @include border-radius(3px);
152 153 }
153 154  
... ...
app/assets/stylesheets/sections/header.scss
... ... @@ -4,17 +4,24 @@
4 4 */
5 5 header {
6 6 &.navbar-gitlab {
  7 + margin-bottom: 0;
  8 + min-height: 40px;
  9 +
7 10 .navbar-inner {
8   - height: 40px;
9   - padding: 3px;
10 11 background: #F1F1F1;
  12 + border-bottom: 1px solid #DDD;
11 13 filter: none;
12 14  
13 15 .nav > li > a {
14 16 color: $style_color;
15 17 text-shadow: 0 1px 0 #fff;
16 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 27 /** NAV block with links and profile **/
... ... @@ -35,9 +42,6 @@ header {
35 42 .app_logo {
36 43 float: left;
37 44 margin-right: 9px;
38   - position: relative;
39   - top: -3px;
40   - padding-top: 3px;
41 45  
42 46 a {
43 47 float: left;
... ... @@ -49,7 +53,7 @@ header {
49 53 background: url('logo-black.png') no-repeat center center;
50 54 background-size: 32px;
51 55 float: left;
52   - height: 40px;
  56 + height: 46px;
53 57 width: 40px;
54 58 @include header-font;
55 59 text-indent: -9999px;
... ... @@ -75,7 +79,7 @@ header {
75 79  
76 80 .profile-pic {
77 81 position: relative;
78   - top: -4px;
  82 + top: -1px;
79 83 img {
80 84 width: 26px;
81 85 height: 26px;
... ... @@ -91,21 +95,25 @@ header {
91 95 .search {
92 96 margin-right: 10px;
93 97 margin-left: 10px;
  98 + margin-top: 8px;
  99 +
  100 + form {
  101 + margin: 0;
  102 + padding: 0;
  103 + }
94 104  
95 105 .search-input {
96   - @extend .span3;
97 106 background-image: url("icon-search.png");
98 107 background-repeat: no-repeat;
99 108 background-position: 10px;
  109 + height: inherit;
  110 + padding: 4px 6px;
100 111 padding-left: 25px;
101 112 font-size: 13px;
102 113 @include border-radius(3px);
103 114 border: 1px solid #c6c6c6;
104 115 box-shadow: none;
105 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 189 .separator {
182 190 float: left;
183 191 height: 46px;
184   - width: 1px;
  192 + width: 2px;
185 193 background: white;
186 194 border-left: 1px solid #DDD;
187   - margin-top: -3px;
188 195 margin-left: 10px;
189 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 77 @media (min-width: 800px) { .issues_filters select { width: 160px; } }
78 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 83 .issues-holder {
84 84 .issues_filters {
... ... @@ -105,7 +105,7 @@ input.check_all_issues {
105 105 }
106 106  
107 107 .issues_bulk_update {
108   - .chosen-container {
  108 + .select2-container {
109 109 text-shadow: none;
110 110 }
111 111 }
... ... @@ -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 123 .issue-show-labels .label {
129 124 padding: 6px 10px;
130 125 }
... ...
app/assets/stylesheets/sections/login.scss
1 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 4 *
5 5 */
6 6 .automerge_widget {
7   - &.can_be_merged {
8   - background: #DFF0D8;
9   - }
10   -
11 7 form {
12 8 margin-bottom: 0;
13 9 .clearfix {
... ... @@ -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 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 22 .merge-request .nav-tabs{
... ... @@ -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 32 .mr_source_commit,
62 33 .mr_target_commit {
63 34 .commit {
... ... @@ -111,12 +82,8 @@
111 82 .merge-request-angle {
112 83 text-align: center;
113 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 89 .merge-request-form-info {
... ... @@ -128,8 +95,7 @@
128 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 99 span {
134 100 font-weight: bold;
135 101 color: #555;
... ...
app/assets/stylesheets/sections/nav.scss
... ... @@ -6,6 +6,7 @@
6 6 border-bottom: 1px solid #E1E1E1;
7 7  
8 8 ul {
  9 + padding: 0;
9 10 margin: auto;
10 11 height: 40px;
11 12 overflow: hidden;
... ...
app/assets/stylesheets/sections/notes.scss
... ... @@ -2,7 +2,7 @@
2 2 * Notes
3 3 */
4 4  
5   -@-webkit-keyframes target-note {
  5 +@-webkit-keyframes targe3-note {
6 6 from { background:#fffff0; }
7 7 50% { background:#ffffd3; }
8 8 to { background:#fffff0; }
... ... @@ -119,9 +119,9 @@ ul.notes {
119 119 }
120 120  
121 121 .file .notes_holder {
122   - font-family: $sansFontFamily;
123 122 font-size: 13px;
124 123 line-height: 18px;
  124 + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
125 125  
126 126 td {
127 127 border: 1px solid #ddd;
... ... @@ -138,7 +138,7 @@ ul.notes {
138 138 border-left: 1px solid #ddd !important;
139 139 }
140 140 &.notes_content {
141   - background-color: $white;
  141 + background-color: #fff;
142 142 border-width: 1px 0;
143 143 padding-top: 0;
144 144  
... ... @@ -303,7 +303,7 @@ ul.notes {
303 303 }
304 304  
305 305 .note-image-attach {
306   - @extend .span4;
  306 + @extend .col-md-4;
307 307 @extend .thumbnail;
308 308 margin-left: 45px;
309 309 }
... ...
app/assets/stylesheets/sections/profile.scss
1 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 16  
18 17 legend {
19 18 border: none;
20   - margin: 0;
  19 + margin-bottom: 10px;
21 20 }
22 21 }
23 22 }
... ... @@ -47,3 +46,62 @@
47 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 16  
17 17 .project-home-panel {
18 18 border-bottom: 1px solid #DDD;
19   - padding-bottom: 25px;
  19 + padding-bottom: 15px;
20 20 margin-bottom: 30px;
21 21  
22 22 &.empty-project {
... ... @@ -41,24 +41,29 @@
41 41 .project-home-desc {
42 42 float: left;
43 43 color: #777;
  44 + margin-bottom: 10px;
44 45 }
45 46  
46 47 .project-home-links {
47 48 float: right;
48 49 a {
49 50 margin-left: 10px;
  51 + font-weight: 500;
50 52 }
51 53 }
52 54 }
53 55  
54 56 .visibility-level-label {
55   - font-size: 14px;
  57 + font-size: 17px;
56 58 background: #f1f1f1;
57   - padding: 8px 10px;
58 59 border-radius: 4px;
59   - margin-left: 10px;
60 60 color: #888;
  61 + position: absolute;
  62 + margin-left: -55px;
61 63 text-shadow: 0 1px 1px #FFF;
  64 + width: 40px;
  65 + text-align: center;
  66 + padding: 6px;
62 67  
63 68 i {
64 69 color: inherit;
... ... @@ -67,76 +72,53 @@
67 72 }
68 73  
69 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 82 box-shadow: none;
80 83 padding: 6px 9px;
81 84 }
82 85  
83 86 .btn {
84   - float: left;
85 87 background: none;
86 88 color: #29b;
87 89  
88   - &:first-child {
89   - @include border-radius-left(4px);
90   - border-left: 0px;
91   - }
92   -
93 90 &.active {
94 91 color: #333;
95 92 font-weight: bold;
96 93 }
97 94 }
98 95  
99   - input[type="text"] {
  96 + .form-control {
100 97 cursor: auto;
101 98 @extend .monospace;
102 99 background: #FAFAFA;
  100 + width: 100%;
103 101 }
104 102 }
105 103  
106 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 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 200 .project-side {
219 201 .btn-block {
220 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 225 .project-fork-icon {
... ... @@ -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 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 237 .deploy-project-label {
277 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 1 .my-snippets li:first-child {
13 2 h4 { margin-top: 0; }
14 3 padding-top: 0;
... ...
app/assets/stylesheets/sections/themes.scss
... ... @@ -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 24 th {
25 25 font-weight: normal;
26 26 font-size: 15px;
27   - border-bottom: 1px solid #CCC;
  27 + border-bottom: 1px solid #CCC !important;
28 28 }
29 29 td {
30   - border-color: #F1F1F1;
  30 + border-color: #F1F1F1 !important;
31 31 }
32 32 &:hover {
33 33 td {
... ... @@ -49,6 +49,7 @@
49 49  
50 50 .tree-item {
51 51 .tree-item-file-name {
  52 + max-width: 320px;
52 53 vertical-align: middle;
53 54 a {
54 55 &:hover {
... ... @@ -61,6 +62,14 @@
61 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 75 .tree_author {
... ... @@ -111,7 +120,7 @@
111 120  
112 121 .tree-ref-holder {
113 122 float: left;
114   - margin-top: 5px;
  123 + margin-top: 8px;
115 124 }
116 125  
117 126 .readme-holder {
... ...
app/assets/stylesheets/sections/votes.scss
... ... @@ -36,3 +36,8 @@
36 36 display: inline-block;
37 37 margin: 0 8px;
38 38 }
  39 +
  40 +.votes-holder {
  41 + float: right;
  42 + width: 250px;
  43 +}
... ...
app/assets/stylesheets/sections/wall.scss
1 1 .wall-page {
2 2 .wall-note-form {
3   - @extend .span12;
  3 + @extend .col-md-12;
4 4  
5 5 margin: 0;
6 6 height: 140px;
... ...
app/assets/stylesheets/selects.scss
... ... @@ -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   -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   -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   -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   -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   -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   -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   -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   -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   -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   -# 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   -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   -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   -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   -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   -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   -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   -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   -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 52 private
53 53  
54 54 def group
55   - @group = Group.find_by_path(params[:id])
  55 + @group = Group.find_by(path: params[:id])
56 56 end
57 57 end
... ...
app/controllers/admin/projects_controller.rb
... ... @@ -5,7 +5,7 @@ class Admin::ProjectsController &lt; Admin::ApplicationController
5 5  
6 6 def index
7 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 10 @projects = user ? user.owned_projects : Project.all
11 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 19 end
20 20  
21 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 24 if result
25 25 redirect_to [:admin, @project]
... ...
app/controllers/admin/users_controller.rb
... ... @@ -100,6 +100,6 @@ class Admin::UsersController &lt; Admin::ApplicationController
100 100 protected
101 101  
102 102 def user
103   - @user ||= User.find_by_username!(params[:id])
  103 + @user ||= User.find_by!(username: params[:id])
104 104 end
105 105 end
... ...
app/controllers/application_controller.rb
... ... @@ -161,6 +161,8 @@ class ApplicationController &lt; ActionController::Base
161 161 headers['X-Frame-Options'] = 'DENY'
162 162 headers['X-XSS-Protection'] = '1; mode=block'
163 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 166 end
165 167  
166 168 def add_gon_variables
... ... @@ -205,7 +207,7 @@ class ApplicationController &lt; ActionController::Base
205 207 end
206 208  
207 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 211 devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :name, :password, :password_confirmation) }
210 212 end
211 213 end
... ...
app/controllers/dashboard_controller.rb
... ... @@ -3,6 +3,8 @@ class DashboardController &lt; ApplicationController
3 3  
4 4 before_filter :load_projects, except: [:projects]
5 5 before_filter :event_filter, only: :show
  6 + before_filter :default_filter, only: [:issues, :merge_requests]
  7 +
6 8  
7 9 def show
8 10 # Fetch only 30 projects.
... ... @@ -39,7 +41,7 @@ class DashboardController &lt; ApplicationController
39 41 current_user.authorized_projects
40 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 45 @projects = @projects.where(visibility_level: params[:visibility_level]) if params[:visibility_level].present?
44 46 @projects = @projects.includes(:namespace)
45 47 @projects = @projects.tagged_with(params[:label]) if params[:label].present?
... ... @@ -51,12 +53,12 @@ class DashboardController &lt; ApplicationController
51 53 end
52 54  
53 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 57 @merge_requests = @merge_requests.recent.page(params[:page]).per(20)
56 58 end
57 59  
58 60 def issues
59   - @issues = FilterContext.new(Issue, current_user, params).execute
  61 + @issues = FilteringService.new.execute(Issue, current_user, params)
60 62 @issues = @issues.recent.page(params[:page]).per(20)
61 63 @issues = @issues.includes(:author, :project)
62 64  
... ... @@ -71,4 +73,9 @@ class DashboardController &lt; ApplicationController
71 73 def load_projects
72 74 @projects = current_user.authorized_projects.sorted_by_activity.non_archived
73 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 81 end
... ...
app/controllers/groups_controller.rb
... ... @@ -10,6 +10,8 @@ class GroupsController &lt; ApplicationController
10 10 # Load group projects
11 11 before_filter :projects, except: [:new, :create]
12 12  
  13 + before_filter :default_filter, only: [:issues, :merge_requests]
  14 +
13 15 layout :determine_layout
14 16  
15 17 before_filter :set_title, only: [:new, :create]
... ... @@ -43,18 +45,14 @@ class GroupsController &lt; ApplicationController
43 45 end
44 46 end
45 47  
46   - # Get authored or assigned open merge requests
47 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 51 end
52 52  
53   - # Get only assigned issues
54 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 56 @issues = @issues.includes(:author, :project)
59 57  
60 58 respond_to do |format|
... ... @@ -89,7 +87,7 @@ class GroupsController &lt; ApplicationController
89 87 protected
90 88  
91 89 def group
92   - @group ||= Group.find_by_path(params[:id])
  90 + @group ||= Group.find_by(path: params[:id])
93 91 end
94 92  
95 93 def projects
... ... @@ -130,4 +128,10 @@ class GroupsController &lt; ApplicationController
130 128 'group'
131 129 end
132 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 137 end
... ...
app/controllers/profiles/groups_controller.rb
... ... @@ -19,6 +19,6 @@ class Profiles::GroupsController &lt; ApplicationController
19 19 private
20 20  
21 21 def group
22   - @group ||= Group.find_by_path(params[:id])
  22 + @group ||= Group.find_by(path: params[:id])
23 23 end
24 24 end
... ...
app/controllers/projects/blob_controller.rb
... ... @@ -13,7 +13,7 @@ class Projects::BlobController &lt; Projects::ApplicationController
13 13 end
14 14  
15 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 18 if result[:status] == :success
19 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 6 before_filter :authorize_read_project!
7 7 before_filter :authorize_code_access!
8 8 before_filter :require_non_empty_project
  9 + before_filter :commit
9 10  
10 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 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 27 @notes = project.notes.for_commit_id(@commit.id).not_inline.fresh
28 28 @noteable = @commit
29   -
30 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 35 respond_to do |format|
35 36 format.html do
36   - if result[:status] == :huge_commit
  37 + if @status == :huge_commit
37 38 render "huge_commit" and return
38 39 end
39 40 end
... ... @@ -42,4 +43,8 @@ class Projects::CommitController &lt; Projects::ApplicationController
42 43 format.patch { render text: @commit.to_patch }
43 44 end
44 45 end
  46 +
  47 + def commit
  48 + @commit ||= project.repository.commit(params[:id])
  49 + end
45 50 end
... ...
app/controllers/projects/edit_tree_controller.rb
... ... @@ -7,7 +7,7 @@ class Projects::EditTreeController &lt; Projects::BaseTreeController
7 7 end
8 8  
9 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 12 if result[:status] == :success
13 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 24 end
25 25  
26 26 def test
27   - TestHookContext.new(project, current_user, params).execute
  27 + TestHookService.new.execute(hook, current_user)
28 28  
29 29 redirect_to :back
30 30 end
31 31  
32 32 def destroy
33   - @hook = @project.hooks.find(params[:id])
34   - @hook.destroy
  33 + hook.destroy
35 34  
36 35 redirect_to project_hooks_path(@project)
37 36 end
  37 +
  38 + private
  39 +
  40 + def hook
  41 + @hook ||= @project.hooks.find(params[:id])
  42 + end
38 43 end
... ...
app/controllers/projects/issues_controller.rb
... ... @@ -89,7 +89,7 @@ class Projects::IssuesController &lt; Projects::ApplicationController
89 89 end
90 90  
91 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 93 redirect_to :back, notice: "#{result[:count]} issues updated"
94 94 end
95 95  
... ... @@ -97,7 +97,7 @@ class Projects::IssuesController &lt; Projects::ApplicationController
97 97  
98 98 def issue
99 99 @issue ||= begin
100   - @project.issues.find_by_iid!(params[:id])
  100 + @project.issues.find_by!(iid: params[:id])
101 101 rescue ActiveRecord::RecordNotFound
102 102 redirect_old
103 103 end
... ... @@ -116,7 +116,9 @@ class Projects::IssuesController &lt; Projects::ApplicationController
116 116 end
117 117  
118 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 122 end
121 123  
122 124 # Since iids are implemented only in 6.1
... ... @@ -125,7 +127,7 @@ class Projects::IssuesController &lt; Projects::ApplicationController
125 127 # To prevent 404 errors we provide a redirect to correct iids until 7.0 release
126 128 #
127 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 132 if issue
131 133 redirect_to project_issue_path(@project, issue)
... ...