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