Commit b61f80babb10d0583d3199d557b4e8234d981a33
Exists in
spb-stable
and in
2 other branches
Merge remote-tracking branch 'upstream/master' into fix-4305
Showing
824 changed files
with
11416 additions
and
169127 deletions
Show diff stats
Too many changes.
To preserve performance only 100 of 824 files displayed.
.gitignore
.travis.yml
1 | language: ruby | 1 | language: ruby |
2 | env: | 2 | env: |
3 | global: | 3 | global: |
4 | - - DB=mysql | ||
5 | - TRAVIS=true | 4 | - TRAVIS=true |
6 | matrix: | 5 | matrix: |
7 | - - TASK=spinach | ||
8 | - - TASK=spec | ||
9 | - - TASK=jasmine:ci | 6 | + - TASK=spinach DB=mysql |
7 | + - TASK=spec DB=mysql | ||
8 | + - TASK=jasmine:ci DB=mysql | ||
9 | + - TASK=spinach DB=postgresql | ||
10 | + - TASK=spec DB=postgresql | ||
11 | + - TASK=jasmine:ci DB=postgresql | ||
10 | before_install: | 12 | before_install: |
11 | - sudo apt-get install libicu-dev -y | 13 | - sudo apt-get install libicu-dev -y |
12 | branches: | 14 | branches: |
@@ -15,7 +17,6 @@ branches: | @@ -15,7 +17,6 @@ branches: | ||
15 | rvm: | 17 | rvm: |
16 | - 2.0.0 | 18 | - 2.0.0 |
17 | services: | 19 | services: |
18 | - - mysql | ||
19 | - redis-server | 20 | - redis-server |
20 | before_script: | 21 | before_script: |
21 | - "cp config/database.yml.$DB config/database.yml" | 22 | - "cp config/database.yml.$DB config/database.yml" |
CHANGELOG
1 | +v 6.7.0 | ||
2 | + - Add support for Gemnasium as a Project Service (Olivier Gonzalez) | ||
3 | + - Add edit file button to MergeRequest diff | ||
4 | + - Public groups (Jason Hollingsworth) | ||
5 | + - Cleaner headers in Notification Emails (Pierre de La Morinerie) | ||
6 | + - Blob and tree gfm links to anchors work | ||
7 | + - Piwik Integration (Sebastian Winkler) | ||
8 | + - Show contribution guide link for new issue form (Jeroen van Baarsen) | ||
9 | + - Fix CI status for merge requests from fork | ||
10 | + - Added option to remove issue assignee on project issue page and issue edit page (Jason Blanchard) | ||
11 | + | ||
12 | +v 6.6.2 | ||
13 | + - Fix 500 error on branch/tag create or remove via UI | ||
14 | + | ||
15 | +v 6.6.1 | ||
16 | + - Fix 500 error on files tab if submodules presents | ||
17 | + | ||
18 | +v 6.6.0 | ||
19 | + - Retrieving user ssh keys publically(github style): http://__HOST__/__USERNAME__.keys | ||
20 | + - Permissions: Developer now can manage issue tracker (modify any issue) | ||
21 | + - Improve Code Compare page performance | ||
22 | + - Group avatar | ||
23 | + - Pygments.rb replaced with highlight.js | ||
24 | + - Improve Merge request diff store logic | ||
25 | + - Improve render performnace for MR show page | ||
26 | + - Fixed Assembla hardcoded project name | ||
27 | + - Jira integration documentation | ||
28 | + - Refactored app/services | ||
29 | + - Remove snippet expiration | ||
30 | + - Mobile UI improvements (Drew Blessing) | ||
31 | + - Fix block/remove UI for admin::users#show page | ||
32 | + - Show users' group membership on users' activity page (Robert Djurasaj) | ||
33 | + - User pages are visible without login if user is authorized to a public project | ||
34 | + - Markdown rendered headers have id derived from their name and link to their id | ||
35 | + - Improve application to work faster with large groups (100+ members) | ||
36 | + - Multiple emails per user | ||
37 | + - Show last commit for file when view file source | ||
38 | + - Restyle Issue#show page and MR#show page | ||
39 | + - Ability to filter by multiple labels for Issues page | ||
40 | + - Rails version to 4.0.3 | ||
41 | + - Fixed attachment identifier displaying underneath note text (Jason Blanchard) | ||
42 | + | ||
43 | +v 6.5.1 | ||
44 | + - Fix branch selectbox when create merge request from fork | ||
45 | + | ||
1 | v 6.5.0 | 46 | v 6.5.0 |
2 | - Dropdown menus on issue#show page for assignee and milestone (Jason Blanchard) | 47 | - Dropdown menus on issue#show page for assignee and milestone (Jason Blanchard) |
3 | - Add color custimization and previewing to broadcast messages | 48 | - Add color custimization and previewing to broadcast messages |
4 | - Fixed notes anchors | 49 | - Fixed notes anchors |
5 | - Load new comments in issues dynamically | 50 | - Load new comments in issues dynamically |
6 | - Added sort options to Public page | 51 | - Added sort options to Public page |
7 | - - Added new filters(assigned/authored/all) to Dashboard#issues, Dashboard#merge_request pages | 52 | + - New filters (assigned/authored/all) for Dashboard#issues/merge_requests (sponsored by Say Media) |
8 | - Add project visibility icons to dashboard | 53 | - Add project visibility icons to dashboard |
9 | - Enable secure cookies if https used | 54 | - Enable secure cookies if https used |
10 | - Protect users/confirmation with rack_attack | 55 | - Protect users/confirmation with rack_attack |
@@ -15,6 +60,11 @@ v 6.5.0 | @@ -15,6 +60,11 @@ v 6.5.0 | ||
15 | - SCSS refactored | 60 | - SCSS refactored |
16 | - Use jquery timeago plugin | 61 | - Use jquery timeago plugin |
17 | - Fix 500 error for rdoc files | 62 | - Fix 500 error for rdoc files |
63 | + - Ability to customize merge commit message (sponsored by Say Media) | ||
64 | + - Search autocomplete via ajax | ||
65 | + - Add website url to user profile | ||
66 | + - Files API supports base64 encoded content (sponsored by O'Reilly Media) | ||
67 | + - Added support for Go's repository retrieval (Bruno Albuquerque) | ||
18 | 68 | ||
19 | v6.4.3 | 69 | v6.4.3 |
20 | - Don't use unicorn worker killer if PhusionPassenger is defined | 70 | - Don't use unicorn worker killer if PhusionPassenger is defined |
@@ -22,7 +72,7 @@ v6.4.3 | @@ -22,7 +72,7 @@ v6.4.3 | ||
22 | v6.4.2 | 72 | v6.4.2 |
23 | - Fixed wrong behaviour of script/upgrade.rb | 73 | - Fixed wrong behaviour of script/upgrade.rb |
24 | 74 | ||
25 | -v6.4.1 | 75 | +v6.4.1 |
26 | - Fixed bug with repository rename | 76 | - Fixed bug with repository rename |
27 | - Fixed bug with project transfer | 77 | - Fixed bug with project transfer |
28 | 78 | ||
@@ -615,4 +665,4 @@ v 0.8.0 | @@ -615,4 +665,4 @@ v 0.8.0 | ||
615 | - stability | 665 | - stability |
616 | - security fixes | 666 | - security fixes |
617 | - increased test coverage | 667 | - increased test coverage |
618 | - - email notification | ||
619 | \ No newline at end of file | 668 | \ No newline at end of file |
669 | + - email notification |
CONTRIBUTING.md
@@ -48,7 +48,7 @@ Please send a merge request with a tested solution or a merge request with a fai | @@ -48,7 +48,7 @@ Please send a merge request with a tested solution or a merge request with a fai | ||
48 | 48 | ||
49 | ## Merge requests | 49 | ## Merge requests |
50 | 50 | ||
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. | 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 requests' on our feedback forum](http://feedback.gitlab.com/forums/176466-general/status/796455) but other improvements are also welcome. If you want to add a new feature that is not marked it is best to first create a feedback issue (if there isn't one already) and leave a comment asking for it to be marked accepting merge requests. Please include screenshots or wireframes if the feature will also change the UI. |
52 | 52 | ||
53 | ### Merge request guidelines | 53 | ### Merge request guidelines |
54 | 54 | ||
@@ -66,19 +66,30 @@ If you can, please submit a merge request with the fix or improvements including | @@ -66,19 +66,30 @@ If you can, please submit a merge request with the fix or improvements including | ||
66 | 1. If the MR changes the UI it should include before and after screenshots | 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 | 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 | 68 | 1. Be prepared to answer questions and incorporate feedback even if requests for this arrive weeks or months after your MR submittion |
69 | +1. If your MR touches code that executes shell commands, make sure it adheres to the [shell command guidelines]( doc/development/shell_commands.md). | ||
69 | 70 | ||
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 | +The **official merge window** is in the beginning of the month from the 1st to the 7th day of the month. The best time to submit a MR and get feedback fast. Before this time the GitLab.com team is still dealing with work that is created by the monthly release such as assisting subscribers with upgrade issues, the release of Enterprise Edition and the upgrade of GitLab Cloud. After the 7th it is already getting closer to the release date of the next version. This means there is less time to fix the issues created by merging large new features. |
71 | 72 | ||
72 | -We will accept a merge requests if it: | 73 | +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. |
73 | 74 | ||
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) | 75 | +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). Please ensure that your merge request meets the following contribution acceptance criteria. |
83 | 76 | ||
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). | 77 | +## Contribution acceptance criteria |
78 | + | ||
79 | +1. The change is as small as possible (see the above paragraph for details) | ||
80 | +1. Include proper tests and make all tests pass (unless it contains a test exposing a bug in existing code) | ||
81 | +1. Can merge without problems (if not please use: `git rebase master`) | ||
82 | +1. Does not break any existing functionality | ||
83 | +1. Fixes one specific issue or implements one specific feature (do not combine things, send separate merge requests if needed) | ||
84 | +1. Keeps the GitLab code base clean and well structured | ||
85 | +1. Contains functionality we think other users will benefit from too | ||
86 | +1. Doesn't add configuration options since they complicate future changes | ||
87 | +1. Contains a single commit (please use `git rebase -i` to squash commits) | ||
88 | +1. It conforms to the following style guides | ||
89 | + | ||
90 | +## Style guides | ||
91 | + | ||
92 | +1. [Ruby style guide](https://github.com/bbatsov/ruby-style-guide) | ||
93 | +1. [Rails style guide](https://github.com/bbatsov/rails-style-guide) | ||
94 | +1. [CoffeeScript style guide](https://github.com/polarmobile/coffeescript-style-guide) | ||
95 | +1. [Shell command guidelines](doc/development/shell_commands.md) |
Gemfile
@@ -14,7 +14,9 @@ gem "protected_attributes" | @@ -14,7 +14,9 @@ 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' | 17 | + |
18 | +# Default values for AR models | ||
19 | +gem "default_value_for", "~> 3.0.0" | ||
18 | 20 | ||
19 | # Supported DBs | 21 | # Supported DBs |
20 | gem "mysql2", group: :mysql | 22 | gem "mysql2", group: :mysql |
@@ -30,28 +32,28 @@ gem 'omniauth-github' | @@ -30,28 +32,28 @@ gem 'omniauth-github' | ||
30 | 32 | ||
31 | # Extracting information from a git repository | 33 | # Extracting information from a git repository |
32 | # Provide access to Gitlab::Git library | 34 | # Provide access to Gitlab::Git library |
33 | -gem "gitlab_git", "~> 4.0.0" | 35 | +gem "gitlab_git", '~> 5.6.0' |
34 | 36 | ||
35 | # Ruby/Rack Git Smart-HTTP Server Handler | 37 | # Ruby/Rack Git Smart-HTTP Server Handler |
36 | gem 'gitlab-grack', '~> 2.0.0.pre', require: 'grack' | 38 | gem 'gitlab-grack', '~> 2.0.0.pre', require: 'grack' |
37 | 39 | ||
38 | # LDAP Auth | 40 | # LDAP Auth |
39 | -gem 'gitlab_omniauth-ldap', '1.0.3', require: "omniauth-ldap" | ||
40 | - | ||
41 | -# Syntax highlighter | ||
42 | -gem "gitlab-pygments.rb", '~> 0.5.4', require: 'pygments.rb' | 41 | +gem 'gitlab_omniauth-ldap', '1.0.4', require: "omniauth-ldap" |
43 | 42 | ||
44 | # Git Wiki | 43 | # Git Wiki |
45 | -gem "gitlab-gollum-lib", "~> 1.0.2", require: 'gollum-lib' | 44 | +gem "gitlab-gollum-lib", "~> 1.1.0", require: 'gollum-lib' |
46 | 45 | ||
47 | # Language detection | 46 | # Language detection |
48 | -gem "gitlab-linguist", "~> 2.9.6", require: "linguist" | 47 | +gem "gitlab-linguist", "~> 3.0.0", require: "linguist" |
49 | 48 | ||
50 | # API | 49 | # API |
51 | gem "grape", "~> 0.6.1" | 50 | 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" |
@@ -125,6 +127,9 @@ gem "hipchat", "~> 0.14.0" | @@ -125,6 +127,9 @@ gem "hipchat", "~> 0.14.0" | ||
125 | # Flowdock integration | 127 | # Flowdock integration |
126 | gem "gitlab-flowdock-git-hook", "~> 0.4.2" | 128 | gem "gitlab-flowdock-git-hook", "~> 0.4.2" |
127 | 129 | ||
130 | +# Gemnasium integration | ||
131 | +gem "gemnasium-gitlab-service", "~> 0.2" | ||
132 | + | ||
128 | # d3 | 133 | # d3 |
129 | gem "d3_rails", "~> 3.1.4" | 134 | gem "d3_rails", "~> 3.1.4" |
130 | 135 | ||
@@ -137,6 +142,9 @@ gem "sanitize" | @@ -137,6 +142,9 @@ gem "sanitize" | ||
137 | # Protect against bruteforcing | 142 | # Protect against bruteforcing |
138 | gem "rack-attack" | 143 | gem "rack-attack" |
139 | 144 | ||
145 | +# Ace editor | ||
146 | +gem 'ace-rails-ap' | ||
147 | + | ||
140 | gem "sass-rails" | 148 | gem "sass-rails" |
141 | gem "coffee-rails" | 149 | gem "coffee-rails" |
142 | gem "uglifier" | 150 | gem "uglifier" |
@@ -159,7 +167,7 @@ group :development do | @@ -159,7 +167,7 @@ group :development do | ||
159 | gem "annotate", "~> 2.6.0.beta2" | 167 | gem "annotate", "~> 2.6.0.beta2" |
160 | gem "letter_opener" | 168 | gem "letter_opener" |
161 | gem 'quiet_assets', '~> 1.0.1' | 169 | gem 'quiet_assets', '~> 1.0.1' |
162 | - gem 'rack-mini-profiler' | 170 | + gem 'rack-mini-profiler', require: false |
163 | 171 | ||
164 | # Better errors handler | 172 | # Better errors handler |
165 | gem 'better_errors' | 173 | gem 'better_errors' |
@@ -206,6 +214,10 @@ group :development, :test do | @@ -206,6 +214,10 @@ group :development, :test do | ||
206 | 214 | ||
207 | gem 'spork', '~> 1.0rc' | 215 | gem 'spork', '~> 1.0rc' |
208 | gem 'jasmine', '2.0.0.rc5' | 216 | gem 'jasmine', '2.0.0.rc5' |
217 | + | ||
218 | + gem "spring", '1.1.1' | ||
219 | + gem "spring-commands-rspec", '1.0.1' | ||
220 | + gem "spring-commands-spinach", '1.0.0' | ||
209 | end | 221 | end |
210 | 222 | ||
211 | group :test do | 223 | group :test do |
Gemfile.lock
@@ -8,11 +8,12 @@ GIT | @@ -8,11 +8,12 @@ GIT | ||
8 | GEM | 8 | GEM |
9 | remote: https://rubygems.org/ | 9 | remote: https://rubygems.org/ |
10 | specs: | 10 | specs: |
11 | - actionmailer (4.0.2) | ||
12 | - actionpack (= 4.0.2) | 11 | + ace-rails-ap (2.0.1) |
12 | + actionmailer (4.0.3) | ||
13 | + actionpack (= 4.0.3) | ||
13 | mail (~> 2.5.4) | 14 | mail (~> 2.5.4) |
14 | - actionpack (4.0.2) | ||
15 | - activesupport (= 4.0.2) | 15 | + actionpack (4.0.3) |
16 | + activesupport (= 4.0.3) | ||
16 | builder (~> 3.1.0) | 17 | builder (~> 3.1.0) |
17 | erubis (~> 2.7.0) | 18 | erubis (~> 2.7.0) |
18 | rack (~> 1.5.2) | 19 | rack (~> 1.5.2) |
@@ -21,16 +22,16 @@ GEM | @@ -21,16 +22,16 @@ GEM | ||
21 | actionpack (>= 4.0.0, < 5.0) | 22 | actionpack (>= 4.0.0, < 5.0) |
22 | actionpack-page_caching (1.0.2) | 23 | actionpack-page_caching (1.0.2) |
23 | actionpack (>= 4.0.0, < 5) | 24 | actionpack (>= 4.0.0, < 5) |
24 | - activemodel (4.0.2) | ||
25 | - activesupport (= 4.0.2) | 25 | + activemodel (4.0.3) |
26 | + activesupport (= 4.0.3) | ||
26 | builder (~> 3.1.0) | 27 | builder (~> 3.1.0) |
27 | - activerecord (4.0.2) | ||
28 | - activemodel (= 4.0.2) | 28 | + activerecord (4.0.3) |
29 | + activemodel (= 4.0.3) | ||
29 | activerecord-deprecated_finders (~> 1.0.2) | 30 | activerecord-deprecated_finders (~> 1.0.2) |
30 | - activesupport (= 4.0.2) | 31 | + activesupport (= 4.0.3) |
31 | arel (~> 4.0.0) | 32 | arel (~> 4.0.0) |
32 | activerecord-deprecated_finders (1.0.3) | 33 | activerecord-deprecated_finders (1.0.3) |
33 | - activesupport (4.0.2) | 34 | + activesupport (4.0.3) |
34 | i18n (~> 0.6, >= 0.6.4) | 35 | i18n (~> 0.6, >= 0.6.4) |
35 | minitest (~> 4.2) | 36 | minitest (~> 4.2) |
36 | multi_json (~> 1.3) | 37 | multi_json (~> 1.3) |
@@ -42,7 +43,7 @@ GEM | @@ -42,7 +43,7 @@ GEM | ||
42 | annotate (2.6.0) | 43 | annotate (2.6.0) |
43 | activerecord (>= 2.3.0) | 44 | activerecord (>= 2.3.0) |
44 | rake (>= 0.8.7) | 45 | rake (>= 0.8.7) |
45 | - arel (4.0.1) | 46 | + arel (4.0.2) |
46 | asciidoctor (0.1.4) | 47 | asciidoctor (0.1.4) |
47 | atomic (1.1.14) | 48 | atomic (1.1.14) |
48 | awesome_print (1.2.0) | 49 | awesome_print (1.2.0) |
@@ -100,6 +101,8 @@ GEM | @@ -100,6 +101,8 @@ GEM | ||
100 | daemons (1.1.9) | 101 | daemons (1.1.9) |
101 | database_cleaner (1.2.0) | 102 | database_cleaner (1.2.0) |
102 | debug_inspector (0.0.2) | 103 | debug_inspector (0.0.2) |
104 | + default_value_for (3.0.0) | ||
105 | + activerecord (>= 3.2.0, < 5.0) | ||
103 | descendants_tracker (0.0.3) | 106 | descendants_tracker (0.0.3) |
104 | devise (3.0.4) | 107 | devise (3.0.4) |
105 | bcrypt-ruby (~> 3.0) | 108 | bcrypt-ruby (~> 3.0) |
@@ -114,6 +117,8 @@ GEM | @@ -114,6 +117,8 @@ GEM | ||
114 | email_spec (1.5.0) | 117 | email_spec (1.5.0) |
115 | launchy (~> 2.1) | 118 | launchy (~> 2.1) |
116 | mail (~> 2.2) | 119 | mail (~> 2.2) |
120 | + email_validator (1.4.0) | ||
121 | + activemodel | ||
117 | enumerize (0.7.0) | 122 | enumerize (0.7.0) |
118 | activesupport (>= 3.2) | 123 | activesupport (>= 3.2) |
119 | equalizer (0.0.8) | 124 | equalizer (0.0.8) |
@@ -149,6 +154,8 @@ GEM | @@ -149,6 +154,8 @@ GEM | ||
149 | dotenv (>= 0.7) | 154 | dotenv (>= 0.7) |
150 | thor (>= 0.13.6) | 155 | thor (>= 0.13.6) |
151 | formatador (0.2.4) | 156 | formatador (0.2.4) |
157 | + gemnasium-gitlab-service (0.2.1) | ||
158 | + rugged (~> 0.19) | ||
152 | gemoji (1.3.1) | 159 | gemoji (1.3.1) |
153 | gherkin-ruby (0.3.1) | 160 | gherkin-ruby (0.3.1) |
154 | racc | 161 | racc |
@@ -156,36 +163,32 @@ GEM | @@ -156,36 +163,32 @@ GEM | ||
156 | gitlab-flowdock-git-hook (0.4.2.2) | 163 | gitlab-flowdock-git-hook (0.4.2.2) |
157 | gitlab-grit (>= 2.4.1) | 164 | gitlab-grit (>= 2.4.1) |
158 | multi_json | 165 | multi_json |
159 | - gitlab-gollum-lib (1.0.2) | 166 | + gitlab-gollum-lib (1.1.0) |
160 | github-markdown (~> 0.5.3) | 167 | github-markdown (~> 0.5.3) |
161 | github-markup (>= 0.7.5, < 1.0.0) | 168 | github-markup (>= 0.7.5, < 1.0.0) |
162 | gitlab-grit (~> 2.6.1) | 169 | gitlab-grit (~> 2.6.1) |
163 | - gitlab-pygments.rb (~> 0.5.4) | ||
164 | nokogiri (~> 1.5.9) | 170 | nokogiri (~> 1.5.9) |
165 | sanitize (~> 2.0.3) | 171 | sanitize (~> 2.0.3) |
166 | stringex (~> 1.5.1) | 172 | stringex (~> 1.5.1) |
167 | gitlab-grack (2.0.0.pre) | 173 | gitlab-grack (2.0.0.pre) |
168 | rack (~> 1.5.1) | 174 | rack (~> 1.5.1) |
169 | - gitlab-grit (2.6.3) | 175 | + gitlab-grit (2.6.4) |
170 | charlock_holmes (~> 0.6.9) | 176 | charlock_holmes (~> 0.6.9) |
171 | diff-lcs (~> 1.1) | 177 | diff-lcs (~> 1.1) |
172 | mime-types (~> 1.15) | 178 | mime-types (~> 1.15) |
173 | posix-spawn (~> 0.3.6) | 179 | posix-spawn (~> 0.3.6) |
174 | - gitlab-linguist (2.9.6) | 180 | + gitlab-linguist (3.0.0) |
175 | charlock_holmes (~> 0.6.6) | 181 | charlock_holmes (~> 0.6.6) |
176 | escape_utils (~> 0.2.4) | 182 | escape_utils (~> 0.2.4) |
177 | - gitlab-pygments.rb (~> 0.5.4) | ||
178 | mime-types (~> 1.19) | 183 | mime-types (~> 1.19) |
179 | - gitlab-pygments.rb (0.5.4) | ||
180 | - posix-spawn (~> 0.3.6) | ||
181 | - yajl-ruby (~> 1.1.0) | ||
182 | - gitlab_git (4.0.0) | 184 | + gitlab_git (5.6.0) |
183 | activesupport (~> 4.0.0) | 185 | activesupport (~> 4.0.0) |
186 | + charlock_holmes (~> 0.6.9) | ||
184 | gitlab-grit (~> 2.6.1) | 187 | gitlab-grit (~> 2.6.1) |
185 | - gitlab-linguist (~> 2.9.5) | ||
186 | - gitlab-pygments.rb (~> 0.5.4) | 188 | + gitlab-linguist (~> 3.0.0) |
189 | + rugged (~> 0.19.0) | ||
187 | gitlab_meta (6.0) | 190 | gitlab_meta (6.0) |
188 | - gitlab_omniauth-ldap (1.0.3) | 191 | + gitlab_omniauth-ldap (1.0.4) |
189 | net-ldap (~> 0.3.1) | 192 | net-ldap (~> 0.3.1) |
190 | omniauth (~> 1.0) | 193 | omniauth (~> 1.0) |
191 | pyu-ruby-sasl (~> 0.0.3.1) | 194 | pyu-ruby-sasl (~> 0.0.3.1) |
@@ -257,7 +260,7 @@ GEM | @@ -257,7 +260,7 @@ GEM | ||
257 | json (1.8.1) | 260 | json (1.8.1) |
258 | jwt (0.1.8) | 261 | jwt (0.1.8) |
259 | multi_json (>= 1.5) | 262 | multi_json (>= 1.5) |
260 | - kaminari (0.14.1) | 263 | + kaminari (0.15.1) |
261 | actionpack (>= 3.0.0) | 264 | actionpack (>= 3.0.0) |
262 | activesupport (>= 3.0.0) | 265 | activesupport (>= 3.0.0) |
263 | kgio (2.8.1) | 266 | kgio (2.8.1) |
@@ -279,7 +282,7 @@ GEM | @@ -279,7 +282,7 @@ GEM | ||
279 | minitest (4.7.5) | 282 | minitest (4.7.5) |
280 | modernizr (2.6.2) | 283 | modernizr (2.6.2) |
281 | sprockets (~> 2.0) | 284 | sprockets (~> 2.0) |
282 | - multi_json (1.8.2) | 285 | + multi_json (1.8.4) |
283 | multi_xml (0.5.5) | 286 | multi_xml (0.5.5) |
284 | multipart-post (1.2.0) | 287 | multipart-post (1.2.0) |
285 | mysql2 (0.3.11) | 288 | mysql2 (0.3.11) |
@@ -321,8 +324,8 @@ GEM | @@ -321,8 +324,8 @@ GEM | ||
321 | cliver (~> 0.2.1) | 324 | cliver (~> 0.2.1) |
322 | multi_json (~> 1.0) | 325 | multi_json (~> 1.0) |
323 | websocket-driver (>= 0.2.0) | 326 | websocket-driver (>= 0.2.0) |
324 | - polyglot (0.3.3) | ||
325 | - posix-spawn (0.3.6) | 327 | + polyglot (0.3.4) |
328 | + posix-spawn (0.3.8) | ||
326 | protected_attributes (1.0.5) | 329 | protected_attributes (1.0.5) |
327 | activemodel (>= 4.0.1, < 5.0) | 330 | activemodel (>= 4.0.1, < 5.0) |
328 | pry (0.9.12.4) | 331 | pry (0.9.12.4) |
@@ -339,7 +342,7 @@ GEM | @@ -339,7 +342,7 @@ GEM | ||
339 | rack-attack (2.3.0) | 342 | rack-attack (2.3.0) |
340 | rack | 343 | rack |
341 | rack-cors (0.2.9) | 344 | rack-cors (0.2.9) |
342 | - rack-mini-profiler (0.1.31) | 345 | + rack-mini-profiler (0.9.0) |
343 | rack (>= 1.1.3) | 346 | rack (>= 1.1.3) |
344 | rack-mount (0.8.3) | 347 | rack-mount (0.8.3) |
345 | rack (>= 1.0.0) | 348 | rack (>= 1.0.0) |
@@ -347,13 +350,13 @@ GEM | @@ -347,13 +350,13 @@ GEM | ||
347 | rack | 350 | rack |
348 | rack-test (0.6.2) | 351 | rack-test (0.6.2) |
349 | rack (>= 1.0) | 352 | rack (>= 1.0) |
350 | - rails (4.0.2) | ||
351 | - actionmailer (= 4.0.2) | ||
352 | - actionpack (= 4.0.2) | ||
353 | - activerecord (= 4.0.2) | ||
354 | - activesupport (= 4.0.2) | 353 | + rails (4.0.3) |
354 | + actionmailer (= 4.0.3) | ||
355 | + actionpack (= 4.0.3) | ||
356 | + activerecord (= 4.0.3) | ||
357 | + activesupport (= 4.0.3) | ||
355 | bundler (>= 1.3.0, < 2.0) | 358 | bundler (>= 1.3.0, < 2.0) |
356 | - railties (= 4.0.2) | 359 | + railties (= 4.0.3) |
357 | sprockets-rails (~> 2.0.0) | 360 | sprockets-rails (~> 2.0.0) |
358 | rails-observers (0.1.2) | 361 | rails-observers (0.1.2) |
359 | activemodel (~> 4.0) | 362 | activemodel (~> 4.0) |
@@ -366,13 +369,13 @@ GEM | @@ -366,13 +369,13 @@ GEM | ||
366 | i18n | 369 | i18n |
367 | require_all | 370 | require_all |
368 | ruby-progressbar | 371 | ruby-progressbar |
369 | - railties (4.0.2) | ||
370 | - actionpack (= 4.0.2) | ||
371 | - activesupport (= 4.0.2) | 372 | + railties (4.0.3) |
373 | + actionpack (= 4.0.3) | ||
374 | + activesupport (= 4.0.3) | ||
372 | rake (>= 0.8.7) | 375 | rake (>= 0.8.7) |
373 | thor (>= 0.18.1, < 2.0) | 376 | thor (>= 0.18.1, < 2.0) |
374 | raindrops (0.12.0) | 377 | raindrops (0.12.0) |
375 | - rake (10.1.0) | 378 | + rake (10.1.1) |
376 | raphael-rails (2.1.2) | 379 | raphael-rails (2.1.2) |
377 | rb-fsevent (0.9.3) | 380 | rb-fsevent (0.9.3) |
378 | rb-inotify (0.9.2) | 381 | rb-inotify (0.9.2) |
@@ -421,6 +424,7 @@ GEM | @@ -421,6 +424,7 @@ GEM | ||
421 | ruby-hmac (0.4.0) | 424 | ruby-hmac (0.4.0) |
422 | ruby-progressbar (1.2.0) | 425 | ruby-progressbar (1.2.0) |
423 | rubyntlm (0.1.1) | 426 | rubyntlm (0.1.1) |
427 | + rugged (0.19.0) | ||
424 | safe_yaml (0.9.7) | 428 | safe_yaml (0.9.7) |
425 | sanitize (2.0.6) | 429 | sanitize (2.0.6) |
426 | nokogiri (>= 1.4.4) | 430 | nokogiri (>= 1.4.4) |
@@ -470,6 +474,11 @@ GEM | @@ -470,6 +474,11 @@ GEM | ||
470 | railties (>= 3) | 474 | railties (>= 3) |
471 | spinach (>= 0.4) | 475 | spinach (>= 0.4) |
472 | spork (1.0.0rc4) | 476 | spork (1.0.0rc4) |
477 | + spring (1.1.1) | ||
478 | + spring-commands-rspec (1.0.1) | ||
479 | + spring (>= 0.9.1) | ||
480 | + spring-commands-spinach (1.0.0) | ||
481 | + spring (>= 0.9.1) | ||
473 | sprockets (2.10.1) | 482 | sprockets (2.10.1) |
474 | hike (~> 1.2) | 483 | hike (~> 1.2) |
475 | multi_json (~> 1.0) | 484 | multi_json (~> 1.0) |
@@ -541,15 +550,14 @@ GEM | @@ -541,15 +550,14 @@ GEM | ||
541 | websocket-driver (0.3.1) | 550 | websocket-driver (0.3.1) |
542 | xpath (2.0.0) | 551 | xpath (2.0.0) |
543 | nokogiri (~> 1.3) | 552 | nokogiri (~> 1.3) |
544 | - yajl-ruby (1.1.0) | ||
545 | 553 | ||
546 | PLATFORMS | 554 | PLATFORMS |
547 | ruby | 555 | ruby |
548 | 556 | ||
549 | DEPENDENCIES | 557 | DEPENDENCIES |
558 | + ace-rails-ap | ||
550 | actionpack-action_caching | 559 | actionpack-action_caching |
551 | actionpack-page_caching | 560 | actionpack-page_caching |
552 | - activerecord-deprecated_finders | ||
553 | acts-as-taggable-on | 561 | acts-as-taggable-on |
554 | annotate (~> 2.6.0.beta2) | 562 | annotate (~> 2.6.0.beta2) |
555 | asciidoctor | 563 | asciidoctor |
@@ -564,25 +572,27 @@ DEPENDENCIES | @@ -564,25 +572,27 @@ DEPENDENCIES | ||
564 | coveralls | 572 | coveralls |
565 | d3_rails (~> 3.1.4) | 573 | d3_rails (~> 3.1.4) |
566 | database_cleaner | 574 | database_cleaner |
575 | + default_value_for (~> 3.0.0) | ||
567 | devise (= 3.0.4) | 576 | devise (= 3.0.4) |
568 | devise-async (= 0.8.0) | 577 | devise-async (= 0.8.0) |
569 | email_spec | 578 | email_spec |
579 | + email_validator (~> 1.4.0) | ||
570 | enumerize | 580 | enumerize |
571 | factory_girl_rails | 581 | factory_girl_rails |
572 | ffaker | 582 | ffaker |
573 | fog (~> 1.3.1) | 583 | fog (~> 1.3.1) |
574 | font-awesome-rails (~> 3.2) | 584 | font-awesome-rails (~> 3.2) |
575 | foreman | 585 | foreman |
586 | + gemnasium-gitlab-service (~> 0.2) | ||
576 | gemoji (~> 1.3.0) | 587 | gemoji (~> 1.3.0) |
577 | github-markup (~> 0.7.4)! | 588 | github-markup (~> 0.7.4)! |
578 | gitlab-flowdock-git-hook (~> 0.4.2) | 589 | gitlab-flowdock-git-hook (~> 0.4.2) |
579 | - gitlab-gollum-lib (~> 1.0.2) | 590 | + gitlab-gollum-lib (~> 1.1.0) |
580 | gitlab-grack (~> 2.0.0.pre) | 591 | gitlab-grack (~> 2.0.0.pre) |
581 | - gitlab-linguist (~> 2.9.6) | ||
582 | - gitlab-pygments.rb (~> 0.5.4) | ||
583 | - gitlab_git (~> 4.0.0) | 592 | + gitlab-linguist (~> 3.0.0) |
593 | + gitlab_git (~> 5.6.0) | ||
584 | gitlab_meta (= 6.0) | 594 | gitlab_meta (= 6.0) |
585 | - gitlab_omniauth-ldap (= 1.0.3) | 595 | + gitlab_omniauth-ldap (= 1.0.4) |
586 | gon (~> 5.0.0) | 596 | gon (~> 5.0.0) |
587 | grape (~> 0.6.1) | 597 | grape (~> 0.6.1) |
588 | grape-entity (~> 0.3.0) | 598 | grape-entity (~> 0.3.0) |
@@ -597,7 +607,7 @@ DEPENDENCIES | @@ -597,7 +607,7 @@ DEPENDENCIES | ||
597 | jquery-rails (= 2.1.3) | 607 | jquery-rails (= 2.1.3) |
598 | jquery-turbolinks | 608 | jquery-turbolinks |
599 | jquery-ui-rails (= 2.0.2) | 609 | jquery-ui-rails (= 2.0.2) |
600 | - kaminari (~> 0.14.1) | 610 | + kaminari (~> 0.15.1) |
601 | launchy | 611 | launchy |
602 | letter_opener | 612 | letter_opener |
603 | minitest (~> 4.7.0) | 613 | minitest (~> 4.7.0) |
@@ -638,6 +648,9 @@ DEPENDENCIES | @@ -638,6 +648,9 @@ DEPENDENCIES | ||
638 | slim | 648 | slim |
639 | spinach-rails | 649 | spinach-rails |
640 | spork (~> 1.0rc) | 650 | spork (~> 1.0rc) |
651 | + spring (= 1.1.1) | ||
652 | + spring-commands-rspec (= 1.0.1) | ||
653 | + spring-commands-spinach (= 1.0.0) | ||
641 | stamp | 654 | stamp |
642 | state_machine | 655 | state_machine |
643 | test_after_commit | 656 | test_after_commit |
LICENSE
1 | -Copyright (c) 2011 Dmitriy Zaporozhets | 1 | +Copyright (c) 2011-2014 Dmitriy Zaporozhets |
2 | 2 | ||
3 | Permission is hereby granted, free of charge, to any person obtaining a copy | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy |
4 | of this software and associated documentation files (the "Software"), to deal | 4 | of this software and associated documentation files (the "Software"), to deal |
MAINTENANCE.md
@@ -21,3 +21,5 @@ release where the minor version is increased numerically by increments of one | @@ -21,3 +21,5 @@ release where the minor version is increased numerically by increments of one | ||
21 | (eg. `5.0 -> 5.1`). | 21 | (eg. `5.0 -> 5.1`). |
22 | 22 | ||
23 | We encourage everyone to run the latest stable release to ensure that you can easily upgrade to the most secure and feature rich GitLab experience. In order to make sure you can easily run the most recent stable release, we are working hard to keep the update process simple and reliable. | 23 | We encourage everyone to run the latest stable release to ensure that you can easily upgrade to the most secure and feature rich GitLab experience. In order to make sure you can easily run the most recent stable release, we are working hard to keep the update process simple and reliable. |
24 | + | ||
25 | +More information about the release procedures can be found in the doc/release directory. |
PROCESS.md
@@ -73,7 +73,7 @@ Thanks for the issue report. Please reformat your issue to conform to the issue | @@ -73,7 +73,7 @@ Thanks for the issue report. Please reformat your issue to conform to the issue | ||
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 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. | 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 | ||
@@ -81,7 +81,7 @@ Thanks for the issue report but we only support issues for the latest stable ver | @@ -81,7 +81,7 @@ Thanks for the issue report but we only support issues for the latest stable ver | ||
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://gitlab.com/gitlab-org/gitlab-ce/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 |
README.md
@@ -4,26 +4,21 @@ | @@ -4,26 +4,21 @@ | ||
4 | 4 | ||
5 |  | 5 |  |
6 | 6 | ||
7 | -### GitLab allows you to | ||
8 | - * keep your code secure on your own server | ||
9 | - * manage repositories, users and access permissions | ||
10 | - * communicate through issues, line-comments and wiki pages | ||
11 | - * perform code review with merge requests | 7 | +### Gitlab is open source software to collaborate on code |
12 | 8 | ||
13 | -### GitLab is | ||
14 | - | ||
15 | -* powered by Ruby on Rails | ||
16 | -* completely free and open source (MIT license) | ||
17 | -* used by more than 25.000 organizations to keep their code secure | 9 | +* Manage git repositories with fine grained access controls that keep your code secure |
10 | +* Perform code reviews and enhance collaboration with merge requests | ||
11 | +* Each project can also have an issue tracker and a wiki | ||
12 | +* Used by more than 50,000 organizations, GitLab is the most popular solution to manage git repositories on-premises | ||
13 | +* Completely free and open source (MIT Expat license) | ||
14 | +* Powered by Ruby on Rails | ||
18 | 15 | ||
19 | ### Code status | 16 | ### Code status |
20 | 17 | ||
21 | -* [](http://ci.gitlab.org/projects/1?ref=master) on ci.gitlab.org (master branch) | 18 | +* [](https://ci.gitlab.org/projects/1?ref=master) on ci.gitlab.org (master branch) |
22 | 19 | ||
23 | * [](https://codeclimate.com/github/gitlabhq/gitlabhq) | 20 | * [](https://codeclimate.com/github/gitlabhq/gitlabhq) |
24 | 21 | ||
25 | -* [](https://gemnasium.com/gitlabhq/gitlabhq) this button can be yellow (small updates are available) but must not be red (a security fix or an important update is available), gems are updated in major releases of GitLab. | ||
26 | - | ||
27 | * [](https://coveralls.io/r/gitlabhq/gitlabhq) | 22 | * [](https://coveralls.io/r/gitlabhq/gitlabhq) |
28 | 23 | ||
29 | ### Resources | 24 | ### Resources |
@@ -36,6 +31,8 @@ | @@ -36,6 +31,8 @@ | ||
36 | 31 | ||
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. | 32 | * [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 | 33 | ||
34 | +* Unofficial third-party [iPhone app](http://gitlabcontrol.com/) and [Android app](https://play.google.com/store/apps/details?id=com.bd.gitlab&hl=en) for GitLab | ||
35 | + | ||
39 | ### Requirements | 36 | ### Requirements |
40 | 37 | ||
41 | * Ubuntu/Debian** | 38 | * Ubuntu/Debian** |
@@ -50,13 +47,17 @@ | @@ -50,13 +47,17 @@ | ||
50 | 47 | ||
51 | #### Official installation methods | 48 | #### Official installation methods |
52 | 49 | ||
53 | -* [Manual installation guide for a production server](doc/install/installation.md) | 50 | +* [GitLab packages (beta)](https://www.gitlab.com/downloads/) These packages contain GitLab and all its depencies (PostgreSQL, Redis, Nginx, Unicorn, etc.). They are made with [omnibus-gitlab](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md) that also contains the installation instructions. These packages currently support a reduced selection of GitLab's normal features. For instance, it is not yet possible to create/restore application backups or to use HTTPS. |
51 | + | ||
52 | +* [GitLab virtual machine images](https://www.gitlab.com/downloads/) contain an operating system and a preinstalled GitLab. They are made with [GitLab Packer](https://gitlab.com/gitlab-org/gitlab-packer/blob/master/README.md) that also contains the installation instructions. | ||
54 | 53 | ||
55 | * [GitLab Chef Cookbook](https://gitlab.com/gitlab-org/cookbook-gitlab/blob/master/README.md) This cookbook can be used both for development installations and production installations. If you want to [contribute](CONTRIBUTE.md) to GitLab we suggest you follow the [development installation on a virtual machine with Vagrant](https://gitlab.com/gitlab-org/cookbook-gitlab/blob/master/doc/development.md) instructions to install all testing dependencies. | 54 | * [GitLab Chef Cookbook](https://gitlab.com/gitlab-org/cookbook-gitlab/blob/master/README.md) This cookbook can be used both for development installations and production installations. If you want to [contribute](CONTRIBUTE.md) to GitLab we suggest you follow the [development installation on a virtual machine with Vagrant](https://gitlab.com/gitlab-org/cookbook-gitlab/blob/master/doc/development.md) instructions to install all testing dependencies. |
56 | 55 | ||
56 | +* [Manual installation guide](doc/install/installation.md) This guide to set up a production server offers detailed and complete step-by-step instructions. | ||
57 | + | ||
57 | #### Third party one-click installers | 58 | #### Third party one-click installers |
58 | 59 | ||
59 | -* [Digital Ocean 1-Click Application Install](https://www.digitalocean.com/blog_posts/host-your-git-repositories-in-55-seconds-with-gitlab) Have a new server up in 55 seconds. Digital Ocean uses SSD disks which is great for an IO intensive app such as GitLab. | 60 | +* [Digital Ocean 1-Click Application Install](https://www.digitalocean.com/blog_posts/host-your-git-repositories-in-55-seconds-with-gitlab) Have a new server up in 55 seconds. Digital Ocean uses SSD disks which is great for an IO intensive app such as GitLab. We recommend selecting a droplet with [1GB of memory](https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/requirements.md). |
60 | 61 | ||
61 | * [BitNami one-click installers](http://bitnami.com/stack/gitlab) This package contains both GitLab and GitLab CI. It is available as installer, virtual machine or for cloud hosting providers (Amazon Web Services/Azure/etc.). | 62 | * [BitNami one-click installers](http://bitnami.com/stack/gitlab) This package contains both GitLab and GitLab CI. It is available as installer, virtual machine or for cloud hosting providers (Amazon Web Services/Azure/etc.). |
62 | 63 | ||
@@ -68,11 +69,9 @@ | @@ -68,11 +69,9 @@ | ||
68 | 69 | ||
69 | ### New versions and upgrading | 70 | ### New versions and upgrading |
70 | 71 | ||
71 | -Since 2011 GitLab is released on the 22nd of every month. Every new release includes an upgrade guide. | ||
72 | - | ||
73 | -* [Upgrade guides](doc/update) | 72 | +Since 2011 GitLab is released on the 22nd of every month. Every new release includes an [upgrade guide](doc/update) and new features are detailed in the [Changelog](CHANGELOG). |
74 | 73 | ||
75 | -* [Changelog](CHANGELOG) | 74 | +It is recommended to follow a monthly upgrade schedule. Security releases come out when needed. For more information about the release process see the documentation for [monthly](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/release/monthly.md) and [security](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/release/security.md) releases. |
76 | 75 | ||
77 | * Features that will be in the next releases are listed on [the feedback and suggestions forum](http://feedback.gitlab.com/forums/176466-general) with the status [started](http://feedback.gitlab.com/forums/176466-general/status/796456) and [completed](http://feedback.gitlab.com/forums/176466-general/status/796457). | 76 | * Features that will be in the next releases are listed on [the feedback and suggestions forum](http://feedback.gitlab.com/forums/176466-general) with the status [started](http://feedback.gitlab.com/forums/176466-general/status/796456) and [completed](http://feedback.gitlab.com/forums/176466-general/status/796457). |
78 | 77 | ||
@@ -145,16 +144,18 @@ or start each component separately | @@ -145,16 +144,18 @@ or start each component separately | ||
145 | 144 | ||
146 | * [Feedback and suggestions forum](http://feedback.gitlab.com) is the place to propose and discuss new features for GitLab. | 145 | * [Feedback and suggestions forum](http://feedback.gitlab.com) is the place to propose and discuss new features for GitLab. |
147 | 146 | ||
148 | -* [Contributing guide](https://gitlab.com/gitlab-org/gitlab-ce/blob/masterCONTRIBUTING.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. | 147 | +* [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 | 148 | ||
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. | 149 | * [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 | 150 | ||
152 | * [Consultancy](http://www.gitlab.com/consultancy/) from the GitLab experts for installations, upgrades and customizations. | 151 | * [Consultancy](http://www.gitlab.com/consultancy/) from the GitLab experts for installations, upgrades and customizations. |
153 | 152 | ||
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 | 153 | +* [#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 | 154 | ||
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. | 155 | * [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 | 156 | ||
157 | +* [Gitter chat room](https://gitter.im/gitlabhq/gitlabhq#) here you can ask questions when you need help. | ||
158 | + | ||
158 | 159 | ||
159 | ### Getting in touch | 160 | ### Getting in touch |
160 | 161 |
VERSION
app/assets/images/ajax_loader.gif
7.74 KB
app/assets/images/ajax_loader_gray.gif
8.17 KB
app/assets/images/ajax_loader_tree.gif
6.38 KB
app/assets/images/bg-header.png
app/assets/images/dark-scheme-preview.png
app/assets/images/file_txt.png
1019 Bytes
app/assets/images/icon-search.png
app/assets/images/images.png
app/assets/images/logo-black.png
app/assets/images/logo-white.png
app/assets/images/monokai-scheme-preview.png
app/assets/images/no_avatar.png
4.77 KB
app/assets/images/onion_skin_sprites.gif
app/assets/images/solarized-dark-scheme-preview.png
app/assets/images/swipemode_sprites.gif
app/assets/images/switch_icon.png
app/assets/images/trans_bg.gif
app/assets/images/white-scheme-preview.png
app/assets/javascripts/api.js.coffee
@@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
3 | user_path: "/api/:version/users/:id.json" | 3 | user_path: "/api/:version/users/:id.json" |
4 | notes_path: "/api/:version/projects/:id/notes.json" | 4 | notes_path: "/api/:version/projects/:id/notes.json" |
5 | namespaces_path: "/api/:version/namespaces.json" | 5 | namespaces_path: "/api/:version/namespaces.json" |
6 | + project_users_path: "/api/:version/projects/:id/users.json" | ||
6 | 7 | ||
7 | # Get 20 (depends on api) recent notes | 8 | # Get 20 (depends on api) recent notes |
8 | # and sort the ascending from oldest to newest | 9 | # and sort the ascending from oldest to newest |
@@ -50,6 +51,23 @@ | @@ -50,6 +51,23 @@ | ||
50 | ).done (users) -> | 51 | ).done (users) -> |
51 | callback(users) | 52 | callback(users) |
52 | 53 | ||
54 | + # Return project users list. Filtered by query | ||
55 | + # Only active users retrieved | ||
56 | + projectUsers: (project_id, query, callback) -> | ||
57 | + url = Api.buildUrl(Api.project_users_path) | ||
58 | + url = url.replace(':id', project_id) | ||
59 | + | ||
60 | + $.ajax( | ||
61 | + url: url | ||
62 | + data: | ||
63 | + private_token: gon.api_token | ||
64 | + search: query | ||
65 | + per_page: 20 | ||
66 | + active: true | ||
67 | + dataType: "json" | ||
68 | + ).done (users) -> | ||
69 | + callback(users) | ||
70 | + | ||
53 | # Return namespaces list. Filtered by query | 71 | # Return namespaces list. Filtered by query |
54 | namespaces: (query, callback) -> | 72 | namespaces: (query, callback) -> |
55 | url = Api.buildUrl(Api.namespaces_path) | 73 | url = Api.buildUrl(Api.namespaces_path) |
app/assets/javascripts/application.js
@@ -24,7 +24,8 @@ | @@ -24,7 +24,8 @@ | ||
24 | //= require g.raphael-min | 24 | //= require g.raphael-min |
25 | //= require g.bar-min | 25 | //= require g.bar-min |
26 | //= require branch-graph | 26 | //= require branch-graph |
27 | -//= require ace-src-noconflict/ace | 27 | +//= require highlightjs.min |
28 | +//= require ace/ace | ||
28 | //= require_tree . | 29 | //= require_tree . |
29 | //= require d3 | 30 | //= require d3 |
30 | //= require underscore | 31 | //= require underscore |
app/assets/javascripts/blob.js.coffee
@@ -17,7 +17,7 @@ class BlobView | @@ -17,7 +17,7 @@ class BlobView | ||
17 | 17 | ||
18 | setHash(hash) | 18 | setHash(hash) |
19 | e.preventDefault() | 19 | e.preventDefault() |
20 | - | 20 | + |
21 | # See if there are lines selected | 21 | # See if there are lines selected |
22 | # "#L12" and "#L34-56" supported | 22 | # "#L12" and "#L34-56" supported |
23 | highlightBlobLines = (e) -> | 23 | highlightBlobLines = (e) -> |
@@ -64,7 +64,7 @@ class BlobView | @@ -64,7 +64,7 @@ class BlobView | ||
64 | nodes.attr("id", hash) | 64 | nodes.attr("id", hash) |
65 | 65 | ||
66 | # initialize multi-line select | 66 | # initialize multi-line select |
67 | - $("#tree-content-holder .line_numbers a[id^=L]").on("click", handleMultiSelect) | 67 | + $("#tree-content-holder .line-numbers a[id^=L]").on("click", handleMultiSelect) |
68 | 68 | ||
69 | # Highlight the correct lines on load | 69 | # Highlight the correct lines on load |
70 | highlightBlobLines() | 70 | highlightBlobLines() |
app/assets/javascripts/commit.js.coffee
app/assets/javascripts/dispatcher.js.coffee
@@ -4,6 +4,7 @@ $ -> | @@ -4,6 +4,7 @@ $ -> | ||
4 | class Dispatcher | 4 | class Dispatcher |
5 | constructor: () -> | 5 | constructor: () -> |
6 | @initSearch() | 6 | @initSearch() |
7 | + @initHighlight() | ||
7 | @initPageScripts() | 8 | @initPageScripts() |
8 | 9 | ||
9 | initPageScripts: -> | 10 | initPageScripts: -> |
@@ -18,6 +19,8 @@ class Dispatcher | @@ -18,6 +19,8 @@ class Dispatcher | ||
18 | switch page | 19 | switch page |
19 | when 'projects:issues:index' | 20 | when 'projects:issues:index' |
20 | Issues.init() | 21 | Issues.init() |
22 | + when 'projects:issues:show' | ||
23 | + new Issue() | ||
21 | when 'projects:issues:new', 'projects:merge_requests:new' | 24 | when 'projects:issues:new', 'projects:merge_requests:new' |
22 | GitLab.GfmAutoComplete.setup() | 25 | GitLab.GfmAutoComplete.setup() |
23 | when 'dashboard:show' | 26 | when 'dashboard:show' |
@@ -47,5 +50,16 @@ class Dispatcher | @@ -47,5 +50,16 @@ class Dispatcher | ||
47 | 50 | ||
48 | 51 | ||
49 | initSearch: -> | 52 | initSearch: -> |
50 | - autocomplete_json = $('.search-autocomplete-json').data('autocomplete-opts') | ||
51 | - new SearchAutocomplete(autocomplete_json) | 53 | + opts = $('.search-autocomplete-opts') |
54 | + path = opts.data('autocomplete-path') | ||
55 | + project_id = opts.data('autocomplete-project-id') | ||
56 | + project_ref = opts.data('autocomplete-project-ref') | ||
57 | + | ||
58 | + new SearchAutocomplete(path, project_id, project_ref) | ||
59 | + | ||
60 | + initHighlight: -> | ||
61 | + $('.highlight pre code').each (i, e) -> | ||
62 | + hljs.highlightBlock(e) | ||
63 | + $(e).html($.map($(e).html().split("\n"), (line, i) -> | ||
64 | + "<div class='line' id='LC" + (i + 1) + "'>" + line + "</div>" | ||
65 | + ).join("\n")) |
app/assets/javascripts/groups.js.coffee
@@ -4,3 +4,14 @@ class GroupMembers | @@ -4,3 +4,14 @@ class GroupMembers | ||
4 | $(this).fadeOut() | 4 | $(this).fadeOut() |
5 | 5 | ||
6 | @GroupMembers = GroupMembers | 6 | @GroupMembers = GroupMembers |
7 | + | ||
8 | +$ -> | ||
9 | + # avatar | ||
10 | + $('.js-choose-group-avatar-button').bind "click", -> | ||
11 | + form = $(this).closest("form") | ||
12 | + form.find(".js-group-avatar-input").click() | ||
13 | + | ||
14 | + $('.js-group-avatar-input').bind "change", -> | ||
15 | + form = $(this).closest("form") | ||
16 | + filename = $(this).val().replace(/^.*[\\\/]/, '') | ||
17 | + form.find(".js-avatar-filename").text(filename) | ||
7 | \ No newline at end of file | 18 | \ No newline at end of file |
@@ -0,0 +1,9 @@ | @@ -0,0 +1,9 @@ | ||
1 | +class Issue | ||
2 | + constructor: -> | ||
3 | + $('.edit-issue.inline-update input[type="submit"]').hide() | ||
4 | + $(".issue-box .inline-update").on "change", "select", -> | ||
5 | + $(this).submit() | ||
6 | + $(".issue-box .inline-update").on "change", "#issue_assignee_id", -> | ||
7 | + $(this).submit() | ||
8 | + | ||
9 | +@Issue = Issue |
app/assets/javascripts/issues.js.coffee
@@ -29,10 +29,10 @@ | @@ -29,10 +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 | - $("select#update_status").select2() | ||
33 | - $("select#update_assignee_id").select2() | ||
34 | - $("select#update_milestone_id").select2() | ||
35 | - $("select#label_name").select2() | 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) | ||
36 | $("#milestone_id, #assignee_id, #label_name").on "change", -> | 36 | $("#milestone_id, #assignee_id, #label_name").on "change", -> |
37 | $(this).closest("form").submit() | 37 | $(this).closest("form").submit() |
38 | 38 | ||
@@ -77,9 +77,3 @@ | @@ -77,9 +77,3 @@ | ||
77 | $("#update_issues_ids").val [] | 77 | $("#update_issues_ids").val [] |
78 | $(".issues_bulk_update").hide() | 78 | $(".issues_bulk_update").hide() |
79 | $(".issues-filters").show() | 79 | $(".issues-filters").show() |
80 | - | ||
81 | -$ -> | ||
82 | - $('.edit-issue.inline-update input[type="submit"]').hide(); | ||
83 | - $("body").on "change", ".edit-issue.inline-update select", -> | ||
84 | - $(this).submit() | ||
85 | - |
app/assets/javascripts/main.js.coffee
@@ -117,11 +117,11 @@ $ -> | @@ -117,11 +117,11 @@ $ -> | ||
117 | 117 | ||
118 | 118 | ||
119 | # Commit show suppressed diff | 119 | # Commit show suppressed diff |
120 | - $(".content").on "click", ".supp_diff_link", -> | 120 | + $(".diff-content").on "click", ".supp_diff_link", -> |
121 | $(@).next('table').show() | 121 | $(@).next('table').show() |
122 | $(@).remove() | 122 | $(@).remove() |
123 | 123 | ||
124 | - $(".content").on "click", ".js-details-expand", -> | 124 | + $(".diff-content").on "click", ".js-details-expand", -> |
125 | $(@).next('.js-details-contain').removeClass("hide") | 125 | $(@).next('.js-details-contain').removeClass("hide") |
126 | $(@).remove() | 126 | $(@).remove() |
127 | 127 |
@@ -0,0 +1,103 @@ | @@ -0,0 +1,103 @@ | ||
1 | +class MergeRequest | ||
2 | + constructor: (@opts) -> | ||
3 | + @initContextWidget() | ||
4 | + this.$el = $('.merge-request') | ||
5 | + @diffs_loaded = if @opts.action == 'diffs' then true else false | ||
6 | + @commits_loaded = false | ||
7 | + | ||
8 | + this.activateTab(@opts.action) | ||
9 | + | ||
10 | + this.bindEvents() | ||
11 | + | ||
12 | + this.initMergeWidget() | ||
13 | + this.$('.show-all-commits').on 'click', => | ||
14 | + this.showAllCommits() | ||
15 | + | ||
16 | + modal = $('#modal_merge_info').modal(show: false) | ||
17 | + | ||
18 | + disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request' | ||
19 | + | ||
20 | + | ||
21 | + # Local jQuery finder | ||
22 | + $: (selector) -> | ||
23 | + this.$el.find(selector) | ||
24 | + | ||
25 | + initContextWidget: -> | ||
26 | + $('.edit-merge_request.inline-update input[type="submit"]').hide() | ||
27 | + $(".issue-box .inline-update").on "change", "select", -> | ||
28 | + $(this).submit() | ||
29 | + $(".issue-box .inline-update").on "change", "#merge_request_assignee_id", -> | ||
30 | + $(this).submit() | ||
31 | + | ||
32 | + initMergeWidget: -> | ||
33 | + this.showState( @opts.current_status ) | ||
34 | + | ||
35 | + if this.$('.automerge_widget').length and @opts.check_enable | ||
36 | + $.get @opts.url_to_automerge_check, (data) => | ||
37 | + this.showState( data.merge_status ) | ||
38 | + , 'json' | ||
39 | + | ||
40 | + if @opts.ci_enable | ||
41 | + $.get @opts.url_to_ci_check, (data) => | ||
42 | + this.showCiState data.status | ||
43 | + , 'json' | ||
44 | + | ||
45 | + bindEvents: -> | ||
46 | + this.$('.nav-tabs').on 'click', 'a', (event) => | ||
47 | + a = $(event.currentTarget) | ||
48 | + | ||
49 | + href = a.attr('href') | ||
50 | + History.replaceState {path: href}, document.title, href | ||
51 | + | ||
52 | + event.preventDefault() | ||
53 | + | ||
54 | + this.$('.nav-tabs').on 'click', 'li', (event) => | ||
55 | + this.activateTab($(event.currentTarget).data('action')) | ||
56 | + | ||
57 | + this.$('.accept_merge_request').on 'click', -> | ||
58 | + $('.automerge_widget.can_be_merged').hide() | ||
59 | + $('.merge-in-progress').show() | ||
60 | + | ||
61 | + activateTab: (action) -> | ||
62 | + this.$('.nav-tabs li').removeClass 'active' | ||
63 | + this.$('.tab-content').hide() | ||
64 | + switch action | ||
65 | + when 'diffs' | ||
66 | + this.$('.nav-tabs .diffs-tab').addClass 'active' | ||
67 | + this.loadDiff() unless @diffs_loaded | ||
68 | + this.$('.diffs').show() | ||
69 | + else | ||
70 | + this.$('.nav-tabs .notes-tab').addClass 'active' | ||
71 | + this.$('.notes').show() | ||
72 | + | ||
73 | + showState: (state) -> | ||
74 | + $('.automerge_widget').hide() | ||
75 | + $('.automerge_widget.' + state).show() | ||
76 | + | ||
77 | + showCiState: (state) -> | ||
78 | + $('.ci_widget').hide() | ||
79 | + $('.ci_widget.ci-' + state).show() | ||
80 | + | ||
81 | + loadDiff: (event) -> | ||
82 | + $.ajax | ||
83 | + type: 'GET' | ||
84 | + url: this.$('.nav-tabs .diffs-tab a').attr('href') | ||
85 | + beforeSend: => | ||
86 | + this.$('.status').addClass 'loading' | ||
87 | + complete: => | ||
88 | + @diffs_loaded = true | ||
89 | + this.$('.status').removeClass 'loading' | ||
90 | + success: (data) => | ||
91 | + this.$(".diffs").html(data.html) | ||
92 | + dataType: 'json' | ||
93 | + | ||
94 | + showAllCommits: -> | ||
95 | + this.$('.first-commits').remove() | ||
96 | + this.$('.all-commits').removeClass 'hide' | ||
97 | + | ||
98 | + alreadyOrCannotBeMerged: -> | ||
99 | + this.$('.automerge_widget').hide() | ||
100 | + this.$('.merge-in-progress').hide() | ||
101 | + this.$('.automerge_widget.already_cannot_be_merged').show() | ||
102 | + | ||
103 | +this.MergeRequest = MergeRequest |
app/assets/javascripts/merge_requests.js.coffee
@@ -6,97 +6,3 @@ | @@ -6,97 +6,3 @@ | ||
6 | $('#milestone_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 | - | ||
10 | -class MergeRequest | ||
11 | - | ||
12 | - constructor: (@opts) -> | ||
13 | - this.$el = $('.merge-request') | ||
14 | - @diffs_loaded = if @opts.action == 'diffs' then true else false | ||
15 | - @commits_loaded = false | ||
16 | - | ||
17 | - this.activateTab(@opts.action) | ||
18 | - | ||
19 | - this.bindEvents() | ||
20 | - | ||
21 | - this.initMergeWidget() | ||
22 | - this.$('.show-all-commits').on 'click', => | ||
23 | - this.showAllCommits() | ||
24 | - | ||
25 | - modal = $('#modal_merge_info').modal(show: false) | ||
26 | - | ||
27 | - # Local jQuery finder | ||
28 | - $: (selector) -> | ||
29 | - this.$el.find(selector) | ||
30 | - | ||
31 | - initMergeWidget: -> | ||
32 | - this.showState( @opts.current_status ) | ||
33 | - | ||
34 | - if this.$('.automerge_widget').length and @opts.check_enable | ||
35 | - $.get @opts.url_to_automerge_check, (data) => | ||
36 | - this.showState( data.merge_status ) | ||
37 | - , 'json' | ||
38 | - | ||
39 | - if @opts.ci_enable | ||
40 | - $.get @opts.url_to_ci_check, (data) => | ||
41 | - this.showCiState data.status | ||
42 | - , 'json' | ||
43 | - | ||
44 | - bindEvents: -> | ||
45 | - this.$('.nav-tabs').on 'click', 'a', (event) => | ||
46 | - a = $(event.currentTarget) | ||
47 | - | ||
48 | - href = a.attr('href') | ||
49 | - History.replaceState {path: href}, document.title, href | ||
50 | - | ||
51 | - event.preventDefault() | ||
52 | - | ||
53 | - this.$('.nav-tabs').on 'click', 'li', (event) => | ||
54 | - this.activateTab($(event.currentTarget).data('action')) | ||
55 | - | ||
56 | - this.$('.accept_merge_request').on 'click', -> | ||
57 | - $('.automerge_widget.can_be_merged').hide() | ||
58 | - $('.merge-in-progress').show() | ||
59 | - | ||
60 | - activateTab: (action) -> | ||
61 | - this.$('.nav-tabs li').removeClass 'active' | ||
62 | - this.$('.tab-content').hide() | ||
63 | - switch action | ||
64 | - when 'diffs' | ||
65 | - this.$('.nav-tabs .diffs-tab').addClass 'active' | ||
66 | - this.loadDiff() unless @diffs_loaded | ||
67 | - this.$('.diffs').show() | ||
68 | - else | ||
69 | - this.$('.nav-tabs .notes-tab').addClass 'active' | ||
70 | - this.$('.notes').show() | ||
71 | - | ||
72 | - showState: (state) -> | ||
73 | - $('.automerge_widget').hide() | ||
74 | - $('.automerge_widget.' + state).show() | ||
75 | - | ||
76 | - showCiState: (state) -> | ||
77 | - $('.ci_widget').hide() | ||
78 | - $('.ci_widget.ci-' + state).show() | ||
79 | - | ||
80 | - loadDiff: (event) -> | ||
81 | - $.ajax | ||
82 | - type: 'GET' | ||
83 | - url: this.$('.nav-tabs .diffs-tab a').attr('href') | ||
84 | - beforeSend: => | ||
85 | - this.$('.status').addClass 'loading' | ||
86 | - complete: => | ||
87 | - @diffs_loaded = true | ||
88 | - this.$('.status').removeClass 'loading' | ||
89 | - success: (data) => | ||
90 | - this.$(".diffs").html(data.html) | ||
91 | - dataType: 'json' | ||
92 | - | ||
93 | - showAllCommits: -> | ||
94 | - this.$('.first-commits').remove() | ||
95 | - this.$('.all-commits').removeClass 'hide' | ||
96 | - | ||
97 | - alreadyOrCannotBeMerged: -> | ||
98 | - this.$('.automerge_widget').hide() | ||
99 | - this.$('.merge-in-progress').hide() | ||
100 | - this.$('.automerge_widget.already_cannot_be_merged').show() | ||
101 | - | ||
102 | -this.MergeRequest = MergeRequest |
app/assets/javascripts/notes.js.coffee
@@ -94,6 +94,9 @@ class Notes | @@ -94,6 +94,9 @@ class Notes | ||
94 | if @isNewNote(note) | 94 | if @isNewNote(note) |
95 | @note_ids.push(note.id) | 95 | @note_ids.push(note.id) |
96 | $('ul.main-notes-list').append(note.html) | 96 | $('ul.main-notes-list').append(note.html) |
97 | + code = "#note_" + note.id + " .highlight pre code" | ||
98 | + $(code).each (i, e) -> | ||
99 | + hljs.highlightBlock(e) | ||
97 | 100 | ||
98 | 101 | ||
99 | ### | 102 | ### |
@@ -253,6 +256,9 @@ class Notes | @@ -253,6 +256,9 @@ class Notes | ||
253 | updateNote: (xhr, note, status) => | 256 | updateNote: (xhr, note, status) => |
254 | note_li = $("#note_" + note.id) | 257 | note_li = $("#note_" + note.id) |
255 | note_li.replaceWith(note.html) | 258 | note_li.replaceWith(note.html) |
259 | + code = "#note_" + note.id + " .highlight pre code" | ||
260 | + $(code).each (i, e) -> | ||
261 | + hljs.highlightBlock(e) | ||
256 | 262 | ||
257 | ### | 263 | ### |
258 | Called in response to clicking the edit note link | 264 | Called in response to clicking the edit note link |
app/assets/javascripts/profile.js.coffee
@@ -26,3 +26,5 @@ $ -> | @@ -26,3 +26,5 @@ $ -> | ||
26 | form = $(this).closest("form") | 26 | form = $(this).closest("form") |
27 | filename = $(this).val().replace(/^.*[\\\/]/, '') | 27 | filename = $(this).val().replace(/^.*[\\\/]/, '') |
28 | form.find(".js-avatar-filename").text(filename) | 28 | form.find(".js-avatar-filename").text(filename) |
29 | + | ||
30 | + $('.profile-groups-avatars').tooltip("placement": "top") | ||
29 | \ No newline at end of file | 31 | \ No newline at end of file |
@@ -0,0 +1,63 @@ | @@ -0,0 +1,63 @@ | ||
1 | +@projectUsersSelect = | ||
2 | + init: -> | ||
3 | + $('.ajax-project-users-select').each (i, select) -> | ||
4 | + project_id = $('body').data('project-id') | ||
5 | + | ||
6 | + $(select).select2 | ||
7 | + placeholder: $(select).data('placeholder') || "Search for a user" | ||
8 | + multiple: $(select).hasClass('multiselect') | ||
9 | + minimumInputLength: 0 | ||
10 | + query: (query) -> | ||
11 | + Api.projectUsers project_id, query.term, (users) -> | ||
12 | + data = { results: users } | ||
13 | + | ||
14 | + nullUser = { | ||
15 | + name: 'Unassigned', | ||
16 | + avatar: null, | ||
17 | + username: 'none', | ||
18 | + id: '' | ||
19 | + } | ||
20 | + | ||
21 | + data.results.unshift(nullUser) | ||
22 | + | ||
23 | + query.callback(data) | ||
24 | + | ||
25 | + initSelection: (element, callback) -> | ||
26 | + id = $(element).val() | ||
27 | + if id isnt "" | ||
28 | + Api.user(id, callback) | ||
29 | + | ||
30 | + | ||
31 | + formatResult: projectUsersSelect.projectUserFormatResult | ||
32 | + formatSelection: projectUsersSelect.projectUserFormatSelection | ||
33 | + dropdownCssClass: "ajax-project-users-dropdown" | ||
34 | + dropdownAutoWidth: true | ||
35 | + escapeMarkup: (m) -> # we do not want to escape markup since we are displaying html in results | ||
36 | + m | ||
37 | + | ||
38 | + projectUserFormatResult: (user) -> | ||
39 | + if user.avatar_url | ||
40 | + avatar = user.avatar_url | ||
41 | + else if gon.gravatar_enabled | ||
42 | + avatar = gon.gravatar_url | ||
43 | + avatar = avatar.replace('%{hash}', md5(user.email)) | ||
44 | + avatar = avatar.replace('%{size}', '24') | ||
45 | + else | ||
46 | + avatar = gon.relative_url_root + "/assets/no_avatar.png" | ||
47 | + | ||
48 | + if user.id == '' | ||
49 | + avatarMarkup = '' | ||
50 | + else | ||
51 | + avatarMarkup = "<div class='user-image'><img class='avatar s24' src='#{avatar}'></div>" | ||
52 | + | ||
53 | + "<div class='user-result'> | ||
54 | + #{avatarMarkup} | ||
55 | + <div class='user-name'>#{user.name}</div> | ||
56 | + <div class='user-username'>#{user.username}</div> | ||
57 | + </div>" | ||
58 | + | ||
59 | + projectUserFormatSelection: (user) -> | ||
60 | + user.name | ||
61 | + | ||
62 | +$ -> | ||
63 | + projectUsersSelect.init() |
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/users_select.js.coffee
1 | $ -> | 1 | $ -> |
2 | userFormatResult = (user) -> | 2 | userFormatResult = (user) -> |
3 | - if user.avatar | ||
4 | - avatar = user.avatar.url | ||
5 | - else | 3 | + if user.avatar_url |
4 | + avatar = user.avatar_url | ||
5 | + else if gon.gravatar_enabled | ||
6 | avatar = gon.gravatar_url | 6 | avatar = gon.gravatar_url |
7 | avatar = avatar.replace('%{hash}', md5(user.email)) | 7 | avatar = avatar.replace('%{hash}', md5(user.email)) |
8 | avatar = avatar.replace('%{size}', '24') | 8 | avatar = avatar.replace('%{size}', '24') |
9 | + else | ||
10 | + avatar = gon.relative_url_root + "/assets/no_avatar.png" | ||
9 | 11 | ||
10 | "<div class='user-result'> | 12 | "<div class='user-result'> |
11 | <div class='user-image'><img class='avatar s24' src='#{avatar}'></div> | 13 | <div class='user-image'><img class='avatar s24' src='#{avatar}'></div> |
app/assets/stylesheets/application.scss
@@ -5,6 +5,7 @@ | @@ -5,6 +5,7 @@ | ||
5 | *= require jquery.ui.gitlab | 5 | *= require jquery.ui.gitlab |
6 | *= require jquery.atwho | 6 | *= require jquery.atwho |
7 | *= require select2 | 7 | *= require select2 |
8 | + *= require highlightjs.min | ||
8 | *= require_self | 9 | *= require_self |
9 | */ | 10 | */ |
10 | 11 | ||
@@ -36,8 +37,10 @@ | @@ -36,8 +37,10 @@ | ||
36 | @import "generic/issue_box.scss"; | 37 | @import "generic/issue_box.scss"; |
37 | @import "generic/files.scss"; | 38 | @import "generic/files.scss"; |
38 | @import "generic/lists.scss"; | 39 | @import "generic/lists.scss"; |
40 | +@import "generic/flash.scss"; | ||
39 | @import "generic/forms.scss"; | 41 | @import "generic/forms.scss"; |
40 | @import "generic/selects.scss"; | 42 | @import "generic/selects.scss"; |
43 | +@import "generic/highlight.scss"; | ||
41 | 44 | ||
42 | /** | 45 | /** |
43 | * Page specific styles (issues, projects etc): | 46 | * Page specific styles (issues, projects etc): |
@@ -45,6 +48,7 @@ | @@ -45,6 +48,7 @@ | ||
45 | @import "sections/header.scss"; | 48 | @import "sections/header.scss"; |
46 | @import "sections/nav.scss"; | 49 | @import "sections/nav.scss"; |
47 | @import "sections/commits.scss"; | 50 | @import "sections/commits.scss"; |
51 | +@import "sections/diff.scss"; | ||
48 | @import "sections/issues.scss"; | 52 | @import "sections/issues.scss"; |
49 | @import "sections/projects.scss"; | 53 | @import "sections/projects.scss"; |
50 | @import "sections/snippets.scss"; | 54 | @import "sections/snippets.scss"; |
@@ -63,9 +67,10 @@ | @@ -63,9 +67,10 @@ | ||
63 | @import "sections/wall.scss"; | 67 | @import "sections/wall.scss"; |
64 | @import "sections/dashboard.scss"; | 68 | @import "sections/dashboard.scss"; |
65 | @import "sections/stat_graph.scss"; | 69 | @import "sections/stat_graph.scss"; |
70 | +@import "sections/groups.scss"; | ||
66 | 71 | ||
67 | /** | 72 | /** |
68 | - * Code ighlight | 73 | + * Code highlight |
69 | */ | 74 | */ |
70 | @import "highlight/white.scss"; | 75 | @import "highlight/white.scss"; |
71 | @import "highlight/dark.scss"; | 76 | @import "highlight/dark.scss"; |
app/assets/stylesheets/generic/blocks.scss
@@ -2,3 +2,18 @@ | @@ -2,3 +2,18 @@ | ||
2 | background: #f9f9f9; | 2 | background: #f9f9f9; |
3 | padding: 15px; | 3 | padding: 15px; |
4 | } | 4 | } |
5 | + | ||
6 | +.centered-light-block { | ||
7 | + text-align: center; | ||
8 | + color: #888; | ||
9 | + margin: 20px; | ||
10 | +} | ||
11 | + | ||
12 | +.nothing-here-block { | ||
13 | + text-align: center; | ||
14 | + padding: 20px; | ||
15 | + color: #666; | ||
16 | + font-weight: normal; | ||
17 | + font-size: 16px; | ||
18 | + line-height: 36px; | ||
19 | +} |
app/assets/stylesheets/generic/buttons.scss
@@ -118,7 +118,6 @@ | @@ -118,7 +118,6 @@ | ||
118 | @extend .btn-primary; | 118 | @extend .btn-primary; |
119 | } | 119 | } |
120 | 120 | ||
121 | - &.btn-close, | ||
122 | &.btn-remove { | 121 | &.btn-remove { |
123 | @extend .btn-danger; | 122 | @extend .btn-danger; |
124 | } | 123 | } |
@@ -143,6 +142,30 @@ | @@ -143,6 +142,30 @@ | ||
143 | line-height: 16px; | 142 | line-height: 16px; |
144 | margin: 2px; | 143 | margin: 2px; |
145 | } | 144 | } |
145 | + | ||
146 | + &.btn-close { | ||
147 | + color: #B94A48; | ||
148 | + font-weight: bold; | ||
149 | + &:hover { | ||
150 | + color: #B94A48; | ||
151 | + } | ||
152 | + } | ||
153 | + | ||
154 | + &.btn-reopen { | ||
155 | + color: #468847; | ||
156 | + font-weight: bold; | ||
157 | + &:hover { | ||
158 | + color: #468847; | ||
159 | + } | ||
160 | + } | ||
161 | + | ||
162 | + &.btn-grouped { | ||
163 | + margin-right: 7px; | ||
164 | + float: left; | ||
165 | + &:last-child { | ||
166 | + margin-right: 0px; | ||
167 | + } | ||
168 | + } | ||
146 | } | 169 | } |
147 | 170 | ||
148 | .btn-block { | 171 | .btn-block { |
@@ -154,9 +177,8 @@ | @@ -154,9 +177,8 @@ | ||
154 | } | 177 | } |
155 | } | 178 | } |
156 | 179 | ||
157 | -.btn, | ||
158 | .btn-group { | 180 | .btn-group { |
159 | - &.grouped { | 181 | + &.btn-grouped { |
160 | margin-right: 7px; | 182 | margin-right: 7px; |
161 | float: left; | 183 | float: left; |
162 | &:last-child { | 184 | &:last-child { |
app/assets/stylesheets/generic/common.scss
@@ -11,8 +11,6 @@ | @@ -11,8 +11,6 @@ | ||
11 | .bgred { background: #F2DEDE!important } | 11 | .bgred { background: #F2DEDE!important } |
12 | 12 | ||
13 | /** COMMON CLASSES **/ | 13 | /** COMMON CLASSES **/ |
14 | -.left { float:left } | ||
15 | - | ||
16 | .prepend-top-10 { margin-top:10px } | 14 | .prepend-top-10 { margin-top:10px } |
17 | .prepend-top-20 { margin-top:20px } | 15 | .prepend-top-20 { margin-top:20px } |
18 | .prepend-left-10 { margin-left:10px } | 16 | .prepend-left-10 { margin-left:10px } |
@@ -24,32 +22,9 @@ | @@ -24,32 +22,9 @@ | ||
24 | .append-bottom-20 { margin-bottom:20px } | 22 | .append-bottom-20 { margin-bottom:20px } |
25 | .inline { display: inline-block } | 23 | .inline { display: inline-block } |
26 | 24 | ||
27 | -.padded { padding:20px } | ||
28 | -.ipadded { padding:20px!important } | ||
29 | -.lborder { border-left:1px solid #eee } | ||
30 | -.underlined_link { text-decoration: underline; } | 25 | +.underlined-link { text-decoration: underline; } |
31 | .hint { font-style: italic; color: #999; } | 26 | .hint { font-style: italic; color: #999; } |
32 | .light { color: #888 } | 27 | .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 | 28 | ||
54 | .slead { | 29 | .slead { |
55 | color: #666; | 30 | color: #666; |
@@ -59,49 +34,23 @@ | @@ -59,49 +34,23 @@ | ||
59 | line-height: 24px; | 34 | line-height: 24px; |
60 | } | 35 | } |
61 | 36 | ||
62 | - | ||
63 | .tab-content { | 37 | .tab-content { |
64 | overflow: visible; | 38 | overflow: visible; |
65 | } | 39 | } |
66 | 40 | ||
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; | 41 | +pre { |
42 | + &.clean { | ||
43 | + background: none; | ||
44 | + border: none; | ||
45 | + margin: 0; | ||
46 | + padding: 0; | ||
100 | } | 47 | } |
101 | 48 | ||
102 | - &.state-label-red { | ||
103 | - background: #DA4E49; | ||
104 | - color: #FFF; | 49 | + &.well-pre { |
50 | + border: 1px solid #EEE; | ||
51 | + background: #f9f9f9; | ||
52 | + border-radius: 0; | ||
53 | + color: #555; | ||
105 | } | 54 | } |
106 | } | 55 | } |
107 | 56 | ||
@@ -112,6 +61,7 @@ pre.well-pre { | @@ -112,6 +61,7 @@ pre.well-pre { | ||
112 | .dropdown-menu > li > a:hover, | 61 | .dropdown-menu > li > a:hover, |
113 | .dropdown-menu > li > a:focus { | 62 | .dropdown-menu > li > a:focus { |
114 | background: #29b; | 63 | background: #29b; |
64 | + color: #FFF | ||
115 | } | 65 | } |
116 | 66 | ||
117 | .breadcrumb > li + li:before { | 67 | .breadcrumb > li + li:before { |
@@ -130,31 +80,6 @@ pre.well-pre { | @@ -130,31 +80,6 @@ pre.well-pre { | ||
130 | } | 80 | } |
131 | 81 | ||
132 | /** FLASH message **/ | 82 | /** 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 { | 83 | .author_link { |
159 | color: $link_color; | 84 | color: $link_color; |
160 | } | 85 | } |
@@ -173,12 +98,10 @@ table a code { | @@ -173,12 +98,10 @@ table a code { | ||
173 | 98 | ||
174 | .loading { | 99 | .loading { |
175 | margin: 20px auto; | 100 | margin: 20px auto; |
176 | - background: url(ajax_loader.gif) no-repeat center center; | ||
177 | - width: 40px; | ||
178 | height: 40px; | 101 | height: 40px; |
179 | - &.loading-gray { | ||
180 | - background: url(ajax_loader_gray.gif) no-repeat center center; | ||
181 | - } | 102 | + color: #555; |
103 | + font-size: 32px; | ||
104 | + text-align: center; | ||
182 | } | 105 | } |
183 | 106 | ||
184 | span.update-author { | 107 | span.update-author { |
@@ -276,22 +199,6 @@ li.note { | @@ -276,22 +199,6 @@ li.note { | ||
276 | cursor: pointer; | 199 | cursor: pointer; |
277 | } | 200 | } |
278 | 201 | ||
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 { | 202 | .git_error_tips { |
296 | @extend .col-md-6; | 203 | @extend .col-md-6; |
297 | text-align: left; | 204 | text-align: left; |
@@ -327,6 +234,12 @@ li.note { | @@ -327,6 +234,12 @@ li.note { | ||
327 | color: #fff; | 234 | color: #fff; |
328 | text-decoration: underline; | 235 | text-decoration: underline; |
329 | } | 236 | } |
237 | + | ||
238 | + .links-xs { | ||
239 | + text-align: center; | ||
240 | + font-size: 16px; | ||
241 | + padding: 5px; | ||
242 | + } | ||
330 | } | 243 | } |
331 | 244 | ||
332 | .warning_message { | 245 | .warning_message { |
@@ -349,15 +262,6 @@ li.note { | @@ -349,15 +262,6 @@ li.note { | ||
349 | } | 262 | } |
350 | } | 263 | } |
351 | 264 | ||
352 | -pre { | ||
353 | - &.clean { | ||
354 | - background: none; | ||
355 | - border: none; | ||
356 | - margin: 0; | ||
357 | - padding: 0; | ||
358 | - } | ||
359 | -} | ||
360 | - | ||
361 | .milestone { | 265 | .milestone { |
362 | &.milestone-closed { | 266 | &.milestone-closed { |
363 | background: #eee; | 267 | background: #eee; |
@@ -441,40 +345,6 @@ table { | @@ -441,40 +345,6 @@ table { | ||
441 | margin-bottom: 20px; | 345 | margin-bottom: 20px; |
442 | } | 346 | } |
443 | 347 | ||
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 { | 348 | .btn-sign-in { |
479 | margin-top: 7px; | 349 | margin-top: 7px; |
480 | text-shadow: none; | 350 | text-shadow: none; |
@@ -485,3 +355,7 @@ table { | @@ -485,3 +355,7 @@ table { | ||
485 | margin-bottom: 15px; | 355 | margin-bottom: 15px; |
486 | } | 356 | } |
487 | } | 357 | } |
358 | + | ||
359 | +@media (max-width: $screen-xs-max) { | ||
360 | + .container .content { margin-top: 20px; } | ||
361 | +} |
app/assets/stylesheets/generic/files.scss
@@ -45,14 +45,14 @@ | @@ -45,14 +45,14 @@ | ||
45 | text-align: center; | 45 | text-align: center; |
46 | img { | 46 | img { |
47 | padding: 100px; | 47 | padding: 100px; |
48 | - max-width: 300px; | 48 | + max-width: 50%; |
49 | } | 49 | } |
50 | } | 50 | } |
51 | 51 | ||
52 | &.wiki { | 52 | &.wiki { |
53 | - padding: 20px; | ||
54 | font-size: 14px; | 53 | font-size: 14px; |
55 | line-height: 1.6; | 54 | line-height: 1.6; |
55 | + padding: 25px; | ||
56 | 56 | ||
57 | .highlight { | 57 | .highlight { |
58 | margin-bottom: 9px; | 58 | margin-bottom: 9px; |
@@ -143,75 +143,6 @@ | @@ -143,75 +143,6 @@ | ||
143 | */ | 143 | */ |
144 | &.code { | 144 | &.code { |
145 | padding: 0; | 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 | } | 146 | } |
216 | } | 147 | } |
217 | } | 148 | } |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +.flash-container { | ||
2 | + display: none; | ||
3 | + cursor: pointer; | ||
4 | + margin: 0; | ||
5 | + text-align: center; | ||
6 | + color: #fff; | ||
7 | + font-size: 14px; | ||
8 | + position: fixed; | ||
9 | + bottom: 0; | ||
10 | + width: 100%; | ||
11 | + opacity: 0.8; | ||
12 | + z-index: 100; | ||
13 | + | ||
14 | + .flash-notice { | ||
15 | + background: #49C; | ||
16 | + padding: 10px; | ||
17 | + text-shadow: 0 1px 1px #178; | ||
18 | + } | ||
19 | + | ||
20 | + .flash-alert { | ||
21 | + background: #C67; | ||
22 | + text-shadow: 0 1px 1px #945; | ||
23 | + padding: 10px; | ||
24 | + } | ||
25 | +} |
app/assets/stylesheets/generic/forms.scss
@@ -51,3 +51,27 @@ label { | @@ -51,3 +51,27 @@ label { | ||
51 | .input-mn-300 { | 51 | .input-mn-300 { |
52 | min-width: 300px; | 52 | min-width: 300px; |
53 | } | 53 | } |
54 | + | ||
55 | +.custom-form-control { | ||
56 | + width: 150px; | ||
57 | +} | ||
58 | + | ||
59 | +@media (min-width: $screen-sm-min) { | ||
60 | + .custom-form-control { | ||
61 | + width: 150px; | ||
62 | + } | ||
63 | +} | ||
64 | + | ||
65 | +/* Medium devices (desktops, 992px and up) */ | ||
66 | +@media (min-width: $screen-md-min) { | ||
67 | + .custom-form-control { | ||
68 | + width: 170px; | ||
69 | + } | ||
70 | +} | ||
71 | + | ||
72 | +/* Large devices (large desktops, 1200px and up) */ | ||
73 | +@media (min-width: $screen-lg-min) { | ||
74 | + .custom-form-control { | ||
75 | + width: 200px; | ||
76 | + } | ||
77 | +} |
@@ -0,0 +1,64 @@ | @@ -0,0 +1,64 @@ | ||
1 | +.highlighted-data { | ||
2 | + border: none; | ||
3 | + box-shadow: none; | ||
4 | + margin: 0px; | ||
5 | + padding: 0px; | ||
6 | + table-layout: fixed; | ||
7 | + | ||
8 | + pre { | ||
9 | + padding: 10px; | ||
10 | + border: none; | ||
11 | + border-radius: 0; | ||
12 | + font-family: $monospace_font; | ||
13 | + font-size: 12px !important; | ||
14 | + line-height: 16px !important; | ||
15 | + margin: 0; | ||
16 | + | ||
17 | + code { | ||
18 | + white-space: pre; | ||
19 | + word-wrap: normal; | ||
20 | + padding: 0; | ||
21 | + | ||
22 | + .line { | ||
23 | + display: inline; | ||
24 | + } | ||
25 | + } | ||
26 | + } | ||
27 | + | ||
28 | + .hljs { | ||
29 | + padding: 0; | ||
30 | + } | ||
31 | + | ||
32 | + .line-numbers { | ||
33 | + padding: 10px; | ||
34 | + text-align: right; | ||
35 | + float: left; | ||
36 | + | ||
37 | + a { | ||
38 | + font-family: $monospace_font; | ||
39 | + display: block; | ||
40 | + font-size: 12px !important; | ||
41 | + line-height: 16px !important; | ||
42 | + white-space: nowrap; | ||
43 | + | ||
44 | + i { | ||
45 | + visibility: hidden; | ||
46 | + @extend .pull-left; | ||
47 | + } | ||
48 | + | ||
49 | + &:hover i { | ||
50 | + visibility: visible; | ||
51 | + } | ||
52 | + } | ||
53 | + } | ||
54 | + | ||
55 | + .highlight { | ||
56 | + overflow: auto; | ||
57 | + overflow-y: hidden; | ||
58 | + | ||
59 | + pre { | ||
60 | + white-space: pre; | ||
61 | + word-wrap: normal; | ||
62 | + } | ||
63 | + } | ||
64 | +} |
app/assets/stylesheets/generic/issue_box.scss
@@ -10,37 +10,103 @@ | @@ -10,37 +10,103 @@ | ||
10 | .issue-box { | 10 | .issue-box { |
11 | color: #666; | 11 | color: #666; |
12 | margin:20px 0; | 12 | margin:20px 0; |
13 | - background: #FAFAFA; | ||
14 | - border: 1px solid #DDD; | 13 | + background: #FFF; |
14 | + border: 1px solid #EEE; | ||
15 | + | ||
16 | + &.issue-box-closed { | ||
17 | + border-color: #DA4E49; | ||
18 | + .state { | ||
19 | + background-color: #f2dede; | ||
20 | + border-color: #ebccd1; | ||
21 | + color: #a94442; | ||
22 | + .state-label { | ||
23 | + background: #DA4E49; | ||
24 | + color: #FFF; | ||
25 | + } | ||
26 | + } | ||
27 | + } | ||
28 | + | ||
29 | + &.issue-box-merged { | ||
30 | + border-color: #31708f; | ||
31 | + .state { | ||
32 | + background-color: #d9edf7; | ||
33 | + border-color: #bce8f1; | ||
34 | + color: #31708f; | ||
35 | + .state-label { | ||
36 | + background: #31708f; | ||
37 | + color: #FFF; | ||
38 | + } | ||
39 | + } | ||
40 | + } | ||
41 | + | ||
42 | + &.issue-box-open { | ||
43 | + border-color: #4A4; | ||
44 | + .state { | ||
45 | + background-color: #dff0d8; | ||
46 | + border-color: #d6e9c6; | ||
47 | + color: #3c763d; | ||
48 | + .state-label { | ||
49 | + background: #4A4; | ||
50 | + color: #FFF; | ||
51 | + } | ||
52 | + } | ||
53 | + } | ||
54 | + | ||
55 | + &.issue-box-expired { | ||
56 | + border-color: #cea61b; | ||
57 | + .state { | ||
58 | + background-color: #fcf8e3; | ||
59 | + border-color: #faebcc; | ||
60 | + color: #8a6d3b; | ||
61 | + .state-label { | ||
62 | + background: #cea61b; | ||
63 | + color: #FFF; | ||
64 | + } | ||
65 | + } | ||
66 | + } | ||
15 | 67 | ||
16 | .control-group { | 68 | .control-group { |
17 | margin-bottom: 0; | 69 | margin-bottom: 0; |
18 | } | 70 | } |
19 | 71 | ||
72 | + .state { | ||
73 | + height: 34px; | ||
74 | + border-bottom: 1px solid #DDD; | ||
75 | + line-height: 32px; | ||
76 | + } | ||
77 | + | ||
20 | .title { | 78 | .title { |
21 | - font-size: 20px; | 79 | + font-size: 22px; |
22 | font-weight: 500; | 80 | font-weight: 500; |
23 | - line-height: 28px; | 81 | + line-height: 1.5; |
24 | margin: 0; | 82 | margin: 0; |
25 | - color: #444; | 83 | + color: #333; |
84 | + padding-bottom: 0; | ||
85 | + padding: 15px 25px; | ||
26 | } | 86 | } |
27 | 87 | ||
28 | .context { | 88 | .context { |
29 | border: none; | 89 | border: none; |
30 | - background-color: #f5f5f5; | ||
31 | - border: none; | ||
32 | border-top: 1px solid #eee; | 90 | border-top: 1px solid #eee; |
91 | + padding: 15px 25px; | ||
33 | } | 92 | } |
34 | 93 | ||
35 | .description { | 94 | .description { |
36 | - border-top: 1px solid #eee; | 95 | + padding: 0 25px 15px 25px; |
37 | } | 96 | } |
38 | 97 | ||
39 | .title, .context, .description { | 98 | .title, .context, .description { |
40 | - padding: 15px; | ||
41 | - | ||
42 | .clearfix { | 99 | .clearfix { |
43 | margin: 0; | 100 | margin: 0; |
44 | } | 101 | } |
45 | } | 102 | } |
103 | + | ||
104 | + .state-label { | ||
105 | + font-size: 14px; | ||
106 | + padding: 1px 25px; | ||
107 | + text-align: center; | ||
108 | + text-shadow: none; | ||
109 | + margin-right: 20px; | ||
110 | + display: inline-block; | ||
111 | + } | ||
46 | } | 112 | } |
app/assets/stylesheets/generic/lists.scss
app/assets/stylesheets/generic/selects.scss
1 | /** Select2 selectbox style override **/ | 1 | /** Select2 selectbox style override **/ |
2 | - | ||
3 | -.select2-container { | 2 | +.select2-container, .select2-container.select2-drop-above { |
4 | .select2-choice { | 3 | .select2-choice { |
5 | background: #FFF; | 4 | background: #FFF; |
6 | border-color: #BBB; | 5 | border-color: #BBB; |
@@ -12,8 +11,24 @@ | @@ -12,8 +11,24 @@ | ||
12 | } | 11 | } |
13 | 12 | ||
14 | .select2-drop-active { | 13 | .select2-drop-active { |
15 | - border: 1px solid #BBB; | 14 | + border: 1px solid #BBB !important; |
16 | margin-top: 4px; | 15 | margin-top: 4px; |
16 | + | ||
17 | + &.select2-drop-above { | ||
18 | + margin-bottom: 8px; | ||
19 | + } | ||
20 | + | ||
21 | + .select2-search input { | ||
22 | + background: #fafafa; | ||
23 | + border-color: #DDD; | ||
24 | + } | ||
25 | + | ||
26 | + .select2-results { | ||
27 | + max-height: 350px; | ||
28 | + .select2-highlighted { | ||
29 | + background: $bg_style_color; | ||
30 | + } | ||
31 | + } | ||
17 | } | 32 | } |
18 | 33 | ||
19 | select { | 34 | select { |
@@ -66,3 +81,43 @@ select { | @@ -66,3 +81,43 @@ select { | ||
66 | .project-refs-form .select2-container { | 81 | .project-refs-form .select2-container { |
67 | margin-right: 10px; | 82 | margin-right: 10px; |
68 | } | 83 | } |
84 | + | ||
85 | +.ajax-users-dropdown, .ajax-project-users-dropdown { | ||
86 | + .select2-search { | ||
87 | + padding-top: 4px; | ||
88 | + } | ||
89 | +} | ||
90 | + | ||
91 | +.ajax-users-select { | ||
92 | + width: 400px; | ||
93 | + | ||
94 | + &.input-large { | ||
95 | + width: 210px; | ||
96 | + } | ||
97 | + | ||
98 | + &.input-clamp { | ||
99 | + max-width: 100%; | ||
100 | + } | ||
101 | +} | ||
102 | + | ||
103 | +.user-result { | ||
104 | + .user-image { | ||
105 | + float: left; | ||
106 | + } | ||
107 | + .user-name { | ||
108 | + } | ||
109 | + .user-username { | ||
110 | + color: #999; | ||
111 | + } | ||
112 | +} | ||
113 | + | ||
114 | +.namespace-result { | ||
115 | + .namespace-kind { | ||
116 | + color: #AAA; | ||
117 | + font-weight: normal; | ||
118 | + } | ||
119 | + .namespace-path { | ||
120 | + margin-left: 10px; | ||
121 | + font-weight: bolder; | ||
122 | + } | ||
123 | +} |
app/assets/stylesheets/generic/typography.scss
@@ -90,9 +90,27 @@ a:focus { | @@ -90,9 +90,27 @@ a:focus { | ||
90 | 90 | ||
91 | font-size: 14px; | 91 | font-size: 14px; |
92 | line-height: 1.6; | 92 | line-height: 1.6; |
93 | - .white .highlight pre { | ||
94 | - background: #f5f5f5; | 93 | + |
94 | + /* Link to current header. */ | ||
95 | + h1, h2, h3, h4, h5, h6 { | ||
96 | + position: relative; | ||
97 | + &:hover > :last-child { | ||
98 | + $size: 16px; | ||
99 | + position: absolute; | ||
100 | + right: 100%; | ||
101 | + top: 50%; | ||
102 | + margin-top: -$size/2; | ||
103 | + margin-right: 0px; | ||
104 | + padding-right: 20px; | ||
105 | + display: inline-block; | ||
106 | + width: $size; | ||
107 | + height: $size; | ||
108 | + background-image: url("icon-link.png"); | ||
109 | + background-size: contain; | ||
110 | + background-repeat: no-repeat; | ||
111 | + } | ||
95 | } | 112 | } |
113 | + | ||
96 | ul { | 114 | ul { |
97 | padding: 0; | 115 | padding: 0; |
98 | margin: 0 0 9px 25px !important; | 116 | margin: 0 0 9px 25px !important; |
app/assets/stylesheets/gl_bootstrap.scss
@@ -108,6 +108,8 @@ $pagination-active-bg: $bg_style_color; | @@ -108,6 +108,8 @@ $pagination-active-bg: $bg_style_color; | ||
108 | 108 | ||
109 | // Nav tabs | 109 | // Nav tabs |
110 | .nav.nav-tabs { | 110 | .nav.nav-tabs { |
111 | + margin-bottom: 15px; | ||
112 | + | ||
111 | li { | 113 | li { |
112 | > a { | 114 | > a { |
113 | padding: 8px 20px; | 115 | padding: 8px 20px; |
app/assets/stylesheets/highlight/dark.scss
1 | -.dark .highlight { | 1 | +.dark { |
2 | + background-color: #232323; | ||
2 | 3 | ||
3 | - background-color: #333; | 4 | + .line.hll { |
5 | + background: #558; | ||
6 | + } | ||
7 | + | ||
8 | + .highlight{ | ||
9 | + border-left: 1px solid #444; | ||
10 | + } | ||
11 | + | ||
12 | + .no-highlight { | ||
13 | + color: #DDD; | ||
14 | + } | ||
15 | + | ||
16 | + .line-numbers a { | ||
17 | + color: #666; | ||
18 | + } | ||
4 | 19 | ||
5 | pre { | 20 | pre { |
6 | - background-color: #333; | ||
7 | - color: #eee; | ||
8 | - } | ||
9 | - | ||
10 | - .hll { display: block; background-color: darken($hover, 65%) } | ||
11 | - .c { color: #888888; font-style: italic } /* Comment */ | ||
12 | - .err { color: #a61717; background-color: #e3d2d2 } /* Error */ | ||
13 | - .k { color: #CDA869; font-weight: bold } /* Keyword */ | ||
14 | - .kp { color: #CDA869; font-weight: bold } /* Keyword */ | ||
15 | - .cm { color: #888888 } /* Comment.Multiline */ | ||
16 | - .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ | ||
17 | - .c1 { color: #888888 } /* Comment.Single */ | ||
18 | - .cs { color: #cc0000; font-weight: bold; background-color: transparent } /* Comment.Special */ | ||
19 | - .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ | ||
20 | - .ge { font-style: italic } /* Generic.Emph */ | ||
21 | - .gr { color: #aa0000 } /* Generic.Error */ | ||
22 | - .gh { color: #303030 } /* Generic.Heading */ | ||
23 | - .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ | ||
24 | - .go { color: #888888 } /* Generic.Output */ | ||
25 | - .gp { color: #555555 } /* Generic.Prompt */ | ||
26 | - .gs { font-weight: bold } /* Generic.Strong */ | ||
27 | - .gu { color: #606060 } /* Generic.Subheading */ | ||
28 | - .gt { color: #aa0000 } /* Generic.Traceback */ | ||
29 | - .kc{font-weight: bold;} /* Keyword.Constant */ | ||
30 | - .kd{font-weight: bold;} /* Keyword.Declaration */ | ||
31 | - .kn{font-weight: bold;} /* Keyword.Namespace */ | ||
32 | - .kp{font-weight: bold;} /* Keyword.Pseudo */ | ||
33 | - .kr{font-weight: bold;} /* Keyword.Reserved */ | ||
34 | - .kt{color: #458;font-weight: bold;} /* Keyword.Type */ | ||
35 | - .m { color: #0000DD; font-weight: bold } /* Literal.Number */ | ||
36 | - .p { color: #eee; } | ||
37 | - .s { color: #0AD; background-color: transparent } /* Literal.String */ | ||
38 | - .na{color: #008080;} /* Name.Attribute */ | ||
39 | - .nb{color: #0086B3;} /* Name.Builtin */ | ||
40 | - .nc{color: #ccc;font-weight: bold;} /* Name.Class */ | ||
41 | - .no{color: turquoise;} /* Name.Constant */ | ||
42 | - .ni{color: #800080;} | ||
43 | - .ne{color: #900;font-weight: bold;} /* Name.Exception */ | ||
44 | - .nf{color: #ccc;font-weight: bold;} /* Name.Function */ | ||
45 | - .nn{color: #79C3E0;font-weight: bold;} /* Name.Namespace */ | ||
46 | - .nt{color: #fc5;} /* Name.Tag */ | ||
47 | - .nv{color: #FA4;} /* Name.Variable */ | ||
48 | - .py { color: #336699; font-weight: bold } /* Name.Property */ | ||
49 | - .ow { color: #008800 } /* Operator.Word */ | ||
50 | - .w { color: #bbbbbb } /* Text.Whitespace */ | ||
51 | - .mf { color: #7AC; font-weight: bold } /* Literal.Number.Float */ | ||
52 | - .mh { color: #7AC; font-weight: bold } /* Literal.Number.Hex */ | ||
53 | - .mi {color: #099;} /* Literal.Number.Integer */ | ||
54 | - .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ | ||
55 | - .sb { color: #dd2200; background-color: transparent; } /* Literal.String.Backtick */ | ||
56 | - .sc{color: #d14;} /* Literal.String.Char */ | ||
57 | - .sd { color: #dd2200; background-color: transparent; } /* Literal.String.Doc */ | ||
58 | - .s2{color: orange;} /* Literal.String.Double */ | ||
59 | - .se{color: orange;} /* Literal.String.Escape */ | ||
60 | - .sh{color: orange;} /* Literal.String.Heredoc */ | ||
61 | - .si{color: orange;} /* Literal.String.Interpol */ | ||
62 | - .sx{color: orange;} /* Literal.String.Other */ | ||
63 | - .sr{color: orange;} /* Literal.String.Regex */ | ||
64 | - .s1{color: orange;} /* Literal.String.Single */ | ||
65 | - .ss{color: orange;} /* Literal.String.Symbol */ | ||
66 | - .bp { color: #D58 } /* Name.Builtin.Pseudo */ | ||
67 | - .vc { color: #336699 } /* Name.Variable.Class */ | ||
68 | - .vg { color: #dd7700 } /* Name.Variable.Global */ | ||
69 | - .vi { color: cyan } | ||
70 | -} | 21 | + background-color: #232323; |
22 | + } | ||
23 | + | ||
24 | + .hljs { | ||
25 | + display: block; | ||
26 | + background: #232323; | ||
27 | + color: #E6E1DC; | ||
28 | + } | ||
29 | + | ||
30 | + .hljs-comment, | ||
31 | + .hljs-template_comment, | ||
32 | + .hljs-javadoc, | ||
33 | + .hljs-shebang { | ||
34 | + color: #BC9458; | ||
35 | + font-style: italic; | ||
36 | + } | ||
37 | + | ||
38 | + .hljs-keyword, | ||
39 | + .ruby .hljs-function .hljs-keyword, | ||
40 | + .hljs-request, | ||
41 | + .hljs-status, | ||
42 | + .nginx .hljs-title, | ||
43 | + .method, | ||
44 | + .hljs-list .hljs-title { | ||
45 | + color: #C26230; | ||
46 | + } | ||
47 | + | ||
48 | + .hljs-string, | ||
49 | + .hljs-number, | ||
50 | + .hljs-regexp, | ||
51 | + .hljs-tag .hljs-value, | ||
52 | + .hljs-cdata, | ||
53 | + .hljs-filter .hljs-argument, | ||
54 | + .hljs-attr_selector, | ||
55 | + .apache .hljs-cbracket, | ||
56 | + .hljs-date, | ||
57 | + .tex .hljs-command, | ||
58 | + .markdown .hljs-link_label { | ||
59 | + color: #A5C261; | ||
60 | + } | ||
61 | + | ||
62 | + .hljs-subst { | ||
63 | + color: #519F50; | ||
64 | + } | ||
65 | + | ||
66 | + .hljs-tag, | ||
67 | + .hljs-tag .hljs-keyword, | ||
68 | + .hljs-tag .hljs-title, | ||
69 | + .hljs-doctype, | ||
70 | + .hljs-sub .hljs-identifier, | ||
71 | + .hljs-pi, | ||
72 | + .input_number { | ||
73 | + color: #E8BF6A; | ||
74 | + } | ||
75 | + | ||
76 | + .hljs-identifier { | ||
77 | + color: #D0D0FF; | ||
78 | + } | ||
79 | + | ||
80 | + .hljs-class .hljs-title, | ||
81 | + .haskell .hljs-type, | ||
82 | + .smalltalk .hljs-class, | ||
83 | + .hljs-javadoctag, | ||
84 | + .hljs-yardoctag, | ||
85 | + .hljs-phpdoc { | ||
86 | + text-decoration: none; | ||
87 | + } | ||
88 | + | ||
89 | + .hljs-constant { | ||
90 | + color: #DA4939; | ||
91 | + } | ||
92 | + | ||
93 | + | ||
94 | + .hljs-symbol, | ||
95 | + .hljs-built_in, | ||
96 | + .ruby .hljs-symbol .hljs-string, | ||
97 | + .ruby .hljs-symbol .hljs-identifier, | ||
98 | + .markdown .hljs-link_url, | ||
99 | + .hljs-attribute { | ||
100 | + color: #6D9CBE; | ||
101 | + } | ||
102 | + | ||
103 | + .markdown .hljs-link_url { | ||
104 | + text-decoration: underline; | ||
105 | + } | ||
71 | 106 | ||
107 | + | ||
108 | + | ||
109 | + .hljs-params, | ||
110 | + .hljs-variable, | ||
111 | + .clojure .hljs-attribute { | ||
112 | + color: #D0D0FF; | ||
113 | + } | ||
114 | + | ||
115 | + .css .hljs-tag, | ||
116 | + .hljs-rules .hljs-property, | ||
117 | + .hljs-pseudo, | ||
118 | + .tex .hljs-special { | ||
119 | + color: #CDA869; | ||
120 | + } | ||
121 | + | ||
122 | + .css .hljs-class { | ||
123 | + color: #9B703F; | ||
124 | + } | ||
125 | + | ||
126 | + .hljs-rules .hljs-keyword { | ||
127 | + color: #C5AF75; | ||
128 | + } | ||
129 | + | ||
130 | + .hljs-rules .hljs-value { | ||
131 | + color: #CF6A4C; | ||
132 | + } | ||
133 | + | ||
134 | + .css .hljs-id { | ||
135 | + color: #8B98AB; | ||
136 | + } | ||
137 | + | ||
138 | + .hljs-annotation, | ||
139 | + .apache .hljs-sqbracket, | ||
140 | + .nginx .hljs-built_in { | ||
141 | + color: #9B859D; | ||
142 | + } | ||
143 | + | ||
144 | + .hljs-preprocessor, | ||
145 | + .hljs-preprocessor *, | ||
146 | + .hljs-pragma { | ||
147 | + color: #8996A8 !important; | ||
148 | + } | ||
149 | + | ||
150 | + .hljs-hexcolor, | ||
151 | + .css .hljs-value .hljs-number { | ||
152 | + color: #A5C261; | ||
153 | + } | ||
154 | + | ||
155 | + .hljs-title, | ||
156 | + .hljs-decorator, | ||
157 | + .css .hljs-function { | ||
158 | + color: #FFC66D; | ||
159 | + } | ||
160 | + | ||
161 | + .diff .hljs-header, | ||
162 | + .hljs-chunk { | ||
163 | + background-color: #2F33AB; | ||
164 | + color: #E6E1DC; | ||
165 | + display: inline-block; | ||
166 | + width: 100%; | ||
167 | + } | ||
168 | + | ||
169 | + .diff .hljs-change { | ||
170 | + background-color: #4A410D; | ||
171 | + color: #F8F8F8; | ||
172 | + display: inline-block; | ||
173 | + width: 100%; | ||
174 | + } | ||
175 | + | ||
176 | + .hljs-addition { | ||
177 | + background-color: #144212; | ||
178 | + color: #E6E1DC; | ||
179 | + display: inline-block; | ||
180 | + width: 100%; | ||
181 | + } | ||
182 | + | ||
183 | + .hljs-deletion { | ||
184 | + background-color: #600; | ||
185 | + color: #E6E1DC; | ||
186 | + display: inline-block; | ||
187 | + width: 100%; | ||
188 | + } | ||
189 | + | ||
190 | + .coffeescript .javascript, | ||
191 | + .javascript .xml, | ||
192 | + .tex .hljs-formula, | ||
193 | + .xml .javascript, | ||
194 | + .xml .vbscript, | ||
195 | + .xml .css, | ||
196 | + .xml .hljs-cdata { | ||
197 | + opacity: 0.7; | ||
198 | + } | ||
199 | +} |
app/assets/stylesheets/highlight/monokai.scss
1 | -$monokai-fg: #f8f8f2; | ||
2 | -$monokai-comment: #75715e; | ||
3 | -$monokai-pink: #f92672; | ||
4 | -$monokai-blue: #66d9ef; | ||
5 | -$monokai-green: #a6e22e; | ||
6 | -$monokai-gold: #e6db74; | ||
7 | -$monokai-dark: #3b3a32; | ||
8 | -$monokai-purple: #ae81ff; | 1 | +.monokai { |
2 | + background-color: #272822; | ||
9 | 3 | ||
10 | -.monokai .highlight { | 4 | + .highlight{ |
5 | + border-left: 1px solid #444; | ||
6 | + } | ||
11 | 7 | ||
12 | - background-color: #272822; | 8 | + .line.hll { |
9 | + background: #558; | ||
10 | + } | ||
11 | + | ||
12 | + .no-highlight { | ||
13 | + color: #DDD; | ||
14 | + } | ||
15 | + | ||
16 | + .line-numbers a { | ||
17 | + color: #666; | ||
18 | + } | ||
13 | 19 | ||
14 | pre { | 20 | pre { |
15 | background-color: #272822; | 21 | background-color: #272822; |
16 | - color: $monokai-fg; | 22 | + color: #f8f8f2; |
17 | } | 23 | } |
18 | 24 | ||
19 | - .hll { background-color: darken($hover, 65%) } | ||
20 | - .c { color: $monokai-comment } /* Comment */ | ||
21 | - .err { color: $monokai-fg } /* Error */ | ||
22 | - .g { color: $monokai-fg } /* Generic */ | ||
23 | - .k { color: $monokai-pink } /* Keyword */ | ||
24 | - .l { color: $monokai-fg } /* Literal */ | ||
25 | - .n { color: $monokai-blue } /* Name */ | ||
26 | - .o { color: $monokai-fg } /* Operator */ | ||
27 | - .x { color: $monokai-fg } /* Other */ | ||
28 | - .p { color: $monokai-fg } /* Punctuation */ | ||
29 | - .cm { color: $monokai-comment } /* Comment.Multiline */ | ||
30 | - .cp { color: $monokai-comment } /* Comment.Preproc */ | ||
31 | - .c1 { color: $monokai-comment } /* Comment.Single */ | ||
32 | - .cs { color: $monokai-comment } /* Comment.Special */ | ||
33 | - .gd { color: #8b0807 } /* Generic.Deleted */ | ||
34 | - .ge { color: $monokai-fg; text-decoration: underline } /* Generic.Emph */ | ||
35 | - .gr { color: $monokai-fg } /* Generic.Error */ | ||
36 | - .gh { color: $monokai-fg; font-weight: bold } /* Generic.Heading */ | ||
37 | - .gi { color: $monokai-fg; font-weight: bold; background-color: #46830c } /* Generic.Inserted */ | ||
38 | - .go { color: $monokai-dark; background-color: #31322c } /* Generic.Output */ | ||
39 | - .gp { color: $monokai-fg } /* Generic.Prompt */ | ||
40 | - .gs { color: $monokai-fg } /* Generic.Strong */ | ||
41 | - .gu { color: $monokai-fg; font-weight: bold } /* Generic.Subheading */ | ||
42 | - .gt { color: #f8f8f0; background-color: $monokai-pink } /* Generic.Traceback */ | ||
43 | - .kc { color: $monokai-purple } /* Keyword.Constant */ | ||
44 | - .kd { color: $monokai-pink } /* Keyword.Declaration */ | ||
45 | - .kn { color: $monokai-pink } /* Keyword.Namespace */ | ||
46 | - .kp { color: $monokai-pink } /* Keyword.Pseudo */ | ||
47 | - .kr { color: $monokai-pink } /* Keyword.Reserved */ | ||
48 | - .kt { color: $monokai-fg } /* Keyword.Type */ | ||
49 | - .ld { color: $monokai-fg } /* Literal.Date */ | ||
50 | - .m { color: $monokai-purple } /* Literal.Number */ | ||
51 | - .s { color: $monokai-gold } /* Literal.String */ | ||
52 | - .na { color: $monokai-purple } /* Name.Attribute */ | ||
53 | - .nb { color: $monokai-blue } /* Name.Builtin */ | ||
54 | - .nc { color: $monokai-fg } /* Name.Class */ | ||
55 | - .no { color: $monokai-fg } /* Name.Constant */ | ||
56 | - .nd { color: $monokai-fg } /* Name.Decorator */ | ||
57 | - .ni { color: $monokai-fg } /* Name.Entity */ | ||
58 | - .ne { color: $monokai-fg } /* Name.Exception */ | ||
59 | - .nf { color: $monokai-green } /* Name.Function */ | ||
60 | - .nl { color: $monokai-gold } /* Name.Label */ | ||
61 | - .nn { color: $monokai-fg } /* Name.Namespace */ | ||
62 | - .nx { color: $monokai-fg } /* Name.Other */ | ||
63 | - .nt { color: $monokai-pink } /* Name.Tag */ | ||
64 | - .nv { color: $monokai-blue; font-style: italic } /* Name.Variable */ | ||
65 | - .py { color: $monokai-fg } /* Name.Property */ | ||
66 | - .ow { color: $monokai-pink } /* Operator.Word */ | ||
67 | - .w { color: $monokai-fg } /* Text.Whitespace */ | ||
68 | - .mf { color: $monokai-purple } /* Literal.Number.Float */ | ||
69 | - .mh { color: $monokai-purple } /* Literal.Number.Hex */ | ||
70 | - .mi { color: $monokai-purple } /* Literal.Number.Integer */ | ||
71 | - .mo { color: $monokai-purple } /* Literal.Number.Oct */ | ||
72 | - .sb { color: $monokai-gold } /* Literal.String.Backtick */ | ||
73 | - .sc { color: $monokai-gold } /* Literal.String.Char */ | ||
74 | - .sd { color: $monokai-gold } /* Literal.String.Doc */ | ||
75 | - .s2 { color: $monokai-gold } /* Literal.String.Double */ | ||
76 | - .se { color: $monokai-gold } /* Literal.String.Escape */ | ||
77 | - .sh { color: $monokai-gold } /* Literal.String.Heredoc */ | ||
78 | - .si { color: $monokai-gold } /* Literal.String.Interpol */ | ||
79 | - .sx { color: $monokai-gold } /* Literal.String.Other */ | ||
80 | - .sr { color: $monokai-gold } /* Literal.String.Regex */ | ||
81 | - .s1 { color: $monokai-gold } /* Literal.String.Single */ | ||
82 | - .ss { color: $monokai-gold } /* Literal.String.Symbol */ | ||
83 | - .bp { color: $monokai-fg } /* Name.Builtin.Pseudo */ | ||
84 | - .vc { color: $monokai-blue; font-style: italic } /* Name.Variable.Class */ | ||
85 | - .vg { color: $monokai-blue; font-style: italic } /* Name.Variable.Global */ | ||
86 | - .vi { color: $monokai-blue; font-style: italic } /* Name.Variable.Instance */ | ||
87 | - .il { color: $monokai-purple } /* Literal.Number.Integer.Long */ | ||
88 | -} | 25 | + .hljs { |
26 | + display: block; | ||
27 | + background: #272822; | ||
28 | + } | ||
29 | + | ||
30 | + .hljs-tag, | ||
31 | + .hljs-tag .hljs-title, | ||
32 | + .hljs-keyword, | ||
33 | + .hljs-literal, | ||
34 | + .hljs-strong, | ||
35 | + .hljs-change, | ||
36 | + .hljs-winutils, | ||
37 | + .hljs-flow, | ||
38 | + .lisp .hljs-title, | ||
39 | + .clojure .hljs-built_in, | ||
40 | + .nginx .hljs-title, | ||
41 | + .tex .hljs-special { | ||
42 | + color: #F92672; | ||
43 | + } | ||
44 | + | ||
45 | + .hljs { | ||
46 | + color: #DDD; | ||
47 | + } | ||
89 | 48 | ||
49 | + .hljs .hljs-constant, | ||
50 | + .asciidoc .hljs-code { | ||
51 | + color: #66D9EF; | ||
52 | + } | ||
53 | + | ||
54 | + .hljs-code, | ||
55 | + .hljs-class .hljs-title, | ||
56 | + .hljs-header { | ||
57 | + color: white; | ||
58 | + } | ||
59 | + | ||
60 | + .hljs-link_label, | ||
61 | + .hljs-attribute, | ||
62 | + .hljs-symbol, | ||
63 | + .hljs-symbol .hljs-string, | ||
64 | + .hljs-value, | ||
65 | + .hljs-regexp { | ||
66 | + color: #BF79DB; | ||
67 | + } | ||
68 | + | ||
69 | + .hljs-link_url, | ||
70 | + .hljs-tag .hljs-value, | ||
71 | + .hljs-string, | ||
72 | + .hljs-bullet, | ||
73 | + .hljs-subst, | ||
74 | + .hljs-title, | ||
75 | + .hljs-emphasis, | ||
76 | + .haskell .hljs-type, | ||
77 | + .hljs-preprocessor, | ||
78 | + .hljs-pragma, | ||
79 | + .ruby .hljs-class .hljs-parent, | ||
80 | + .hljs-built_in, | ||
81 | + .sql .hljs-aggregate, | ||
82 | + .django .hljs-template_tag, | ||
83 | + .django .hljs-variable, | ||
84 | + .smalltalk .hljs-class, | ||
85 | + .hljs-javadoc, | ||
86 | + .django .hljs-filter .hljs-argument, | ||
87 | + .smalltalk .hljs-localvars, | ||
88 | + .smalltalk .hljs-array, | ||
89 | + .hljs-attr_selector, | ||
90 | + .hljs-pseudo, | ||
91 | + .hljs-addition, | ||
92 | + .hljs-stream, | ||
93 | + .hljs-envvar, | ||
94 | + .apache .hljs-tag, | ||
95 | + .apache .hljs-cbracket, | ||
96 | + .tex .hljs-command, | ||
97 | + .hljs-prompt { | ||
98 | + color: #A6E22E; | ||
99 | + } | ||
100 | + | ||
101 | + .hljs-comment, | ||
102 | + .java .hljs-annotation, | ||
103 | + .smartquote, | ||
104 | + .hljs-blockquote, | ||
105 | + .hljs-horizontal_rule, | ||
106 | + .python .hljs-decorator, | ||
107 | + .hljs-template_comment, | ||
108 | + .hljs-pi, | ||
109 | + .hljs-doctype, | ||
110 | + .hljs-deletion, | ||
111 | + .hljs-shebang, | ||
112 | + .apache .hljs-sqbracket, | ||
113 | + .tex .hljs-formula { | ||
114 | + color: #75715E; | ||
115 | + } | ||
116 | + | ||
117 | + .hljs-keyword, | ||
118 | + .hljs-literal, | ||
119 | + .css .hljs-id, | ||
120 | + .hljs-phpdoc, | ||
121 | + .hljs-title, | ||
122 | + .hljs-header, | ||
123 | + .haskell .hljs-type, | ||
124 | + .vbscript .hljs-built_in, | ||
125 | + .sql .hljs-aggregate, | ||
126 | + .rsl .hljs-built_in, | ||
127 | + .smalltalk .hljs-class, | ||
128 | + .diff .hljs-header, | ||
129 | + .hljs-chunk, | ||
130 | + .hljs-winutils, | ||
131 | + .bash .hljs-variable, | ||
132 | + .apache .hljs-tag, | ||
133 | + .tex .hljs-special, | ||
134 | + .hljs-request, | ||
135 | + .hljs-status { | ||
136 | + font-weight: bold; | ||
137 | + } | ||
138 | + | ||
139 | + .coffeescript .javascript, | ||
140 | + .javascript .xml, | ||
141 | + .tex .hljs-formula, | ||
142 | + .xml .javascript, | ||
143 | + .xml .vbscript, | ||
144 | + .xml .css, | ||
145 | + .xml .hljs-cdata { | ||
146 | + opacity: 0.5; | ||
147 | + } | ||
148 | +} |
app/assets/stylesheets/highlight/solarized_dark.scss
1 | -.solarized-dark .highlight { | ||
2 | - | 1 | +.solarized-dark { |
3 | background-color: #002B36; | 2 | background-color: #002B36; |
4 | - | 3 | + |
4 | + .highlight{ | ||
5 | + border-left: 1px solid #113b46; | ||
6 | + } | ||
7 | + | ||
8 | + .line.hll { | ||
9 | + background: #000; | ||
10 | + } | ||
11 | + | ||
12 | + .no-highlight { | ||
13 | + color: #DDD; | ||
14 | + } | ||
15 | + | ||
5 | pre { | 16 | pre { |
6 | background-color: #002B36; | 17 | background-color: #002B36; |
7 | color: #eee; | 18 | color: #eee; |
8 | } | 19 | } |
9 | 20 | ||
10 | - .hll { background-color: #073642 } | ||
11 | - .c { color: #586E75 } /* Comment */ | ||
12 | - .err { color: #93A1A1 } /* Error */ | ||
13 | - .g { color: #93A1A1 } /* Generic */ | ||
14 | - .k { color: #859900 } /* Keyword */ | ||
15 | - .l { color: #93A1A1 } /* Literal */ | ||
16 | - .n { color: #93A1A1 } /* Name */ | ||
17 | - .o { color: #859900 } /* Operator */ | ||
18 | - .x { color: #CB4B16 } /* Other */ | ||
19 | - .p { color: #93A1A1 } /* Punctuation */ | ||
20 | - .cm { color: #586E75 } /* Comment.Multiline */ | ||
21 | - .cp { color: #859900 } /* Comment.Preproc */ | ||
22 | - .c1 { color: #586E75 } /* Comment.Single */ | ||
23 | - .cs { color: #859900 } /* Comment.Special */ | ||
24 | - .gd { color: #2AA198 } /* Generic.Deleted */ | ||
25 | - .ge { color: #93A1A1; font-style: italic } /* Generic.Emph */ | ||
26 | - .gr { color: #DC322F } /* Generic.Error */ | ||
27 | - .gh { color: #CB4B16 } /* Generic.Heading */ | ||
28 | - .gi { color: #859900 } /* Generic.Inserted */ | ||
29 | - .go { color: #93A1A1 } /* Generic.Output */ | ||
30 | - .gp { color: #93A1A1 } /* Generic.Prompt */ | ||
31 | - .gs { color: #93A1A1; font-weight: bold } /* Generic.Strong */ | ||
32 | - .gu { color: #CB4B16 } /* Generic.Subheading */ | ||
33 | - .gt { color: #93A1A1 } /* Generic.Traceback */ | ||
34 | - .kc { color: #CB4B16 } /* Keyword.Constant */ | ||
35 | - .kd { color: #268BD2 } /* Keyword.Declaration */ | ||
36 | - .kn { color: #859900 } /* Keyword.Namespace */ | ||
37 | - .kp { color: #859900 } /* Keyword.Pseudo */ | ||
38 | - .kr { color: #268BD2 } /* Keyword.Reserved */ | ||
39 | - .kt { color: #DC322F } /* Keyword.Type */ | ||
40 | - .ld { color: #93A1A1 } /* Literal.Date */ | ||
41 | - .m { color: #2AA198 } /* Literal.Number */ | ||
42 | - .s { color: #2AA198 } /* Literal.String */ | ||
43 | - .na { color: #93A1A1 } /* Name.Attribute */ | ||
44 | - .nb { color: #B58900 } /* Name.Builtin */ | ||
45 | - .nc { color: #268BD2 } /* Name.Class */ | ||
46 | - .no { color: #CB4B16 } /* Name.Constant */ | ||
47 | - .nd { color: #268BD2 } /* Name.Decorator */ | ||
48 | - .ni { color: #CB4B16 } /* Name.Entity */ | ||
49 | - .ne { color: #CB4B16 } /* Name.Exception */ | ||
50 | - .nf { color: #268BD2 } /* Name.Function */ | ||
51 | - .nl { color: #93A1A1 } /* Name.Label */ | ||
52 | - .nn { color: #93A1A1 } /* Name.Namespace */ | ||
53 | - .nx { color: #93A1A1 } /* Name.Other */ | ||
54 | - .py { color: #93A1A1 } /* Name.Property */ | ||
55 | - .nt { color: #268BD2 } /* Name.Tag */ | ||
56 | - .nv { color: #268BD2 } /* Name.Variable */ | ||
57 | - .ow { color: #859900 } /* Operator.Word */ | ||
58 | - .w { color: #93A1A1 } /* Text.Whitespace */ | ||
59 | - .mf { color: #2AA198 } /* Literal.Number.Float */ | ||
60 | - .mh { color: #2AA198 } /* Literal.Number.Hex */ | ||
61 | - .mi { color: #2AA198 } /* Literal.Number.Integer */ | ||
62 | - .mo { color: #2AA198 } /* Literal.Number.Oct */ | ||
63 | - .sb { color: #586E75 } /* Literal.String.Backtick */ | ||
64 | - .sc { color: #2AA198 } /* Literal.String.Char */ | ||
65 | - .sd { color: #93A1A1 } /* Literal.String.Doc */ | ||
66 | - .s2 { color: #2AA198 } /* Literal.String.Double */ | ||
67 | - .se { color: #CB4B16 } /* Literal.String.Escape */ | ||
68 | - .sh { color: #93A1A1 } /* Literal.String.Heredoc */ | ||
69 | - .si { color: #2AA198 } /* Literal.String.Interpol */ | ||
70 | - .sx { color: #2AA198 } /* Literal.String.Other */ | ||
71 | - .sr { color: #DC322F } /* Literal.String.Regex */ | ||
72 | - .s1 { color: #2AA198 } /* Literal.String.Single */ | ||
73 | - .ss { color: #2AA198 } /* Literal.String.Symbol */ | ||
74 | - .bp { color: #268BD2 } /* Name.Builtin.Pseudo */ | ||
75 | - .vc { color: #268BD2 } /* Name.Variable.Class */ | ||
76 | - .vg { color: #268BD2 } /* Name.Variable.Global */ | ||
77 | - .vi { color: #268BD2 } /* Name.Variable.Instance */ | ||
78 | - .il { color: #2AA198 } /* Literal.Number.Integer.Long */ | ||
79 | -} | 21 | + .line-numbers a { |
22 | + color: #666; | ||
23 | + } | ||
24 | + | ||
25 | + .hljs { | ||
26 | + display: block; | ||
27 | + background: #002b36; | ||
28 | + color: #839496; | ||
29 | + } | ||
30 | + | ||
31 | + .hljs-comment, | ||
32 | + .hljs-template_comment, | ||
33 | + .diff .hljs-header, | ||
34 | + .hljs-doctype, | ||
35 | + .hljs-pi, | ||
36 | + .lisp .hljs-string, | ||
37 | + .hljs-javadoc { | ||
38 | + color: #586e75; | ||
39 | + } | ||
40 | + | ||
41 | + /* Solarized Green */ | ||
42 | + .hljs-keyword, | ||
43 | + .hljs-winutils, | ||
44 | + .method, | ||
45 | + .hljs-addition, | ||
46 | + .css .hljs-tag, | ||
47 | + .hljs-request, | ||
48 | + .hljs-status, | ||
49 | + .nginx .hljs-title { | ||
50 | + color: #859900; | ||
51 | + } | ||
80 | 52 | ||
53 | + /* Solarized Cyan */ | ||
54 | + .hljs-number, | ||
55 | + .hljs-command, | ||
56 | + .hljs-string, | ||
57 | + .hljs-tag .hljs-value, | ||
58 | + .hljs-rules .hljs-value, | ||
59 | + .hljs-phpdoc, | ||
60 | + .tex .hljs-formula, | ||
61 | + .hljs-regexp, | ||
62 | + .hljs-hexcolor, | ||
63 | + .hljs-link_url { | ||
64 | + color: #2aa198; | ||
65 | + } | ||
66 | + | ||
67 | + /* Solarized Blue */ | ||
68 | + .hljs-title, | ||
69 | + .hljs-localvars, | ||
70 | + .hljs-chunk, | ||
71 | + .hljs-decorator, | ||
72 | + .hljs-built_in, | ||
73 | + .hljs-identifier, | ||
74 | + .vhdl .hljs-literal, | ||
75 | + .hljs-id, | ||
76 | + .css .hljs-function { | ||
77 | + color: #268bd2; | ||
78 | + } | ||
79 | + | ||
80 | + /* Solarized Yellow */ | ||
81 | + .hljs-attribute, | ||
82 | + .hljs-variable, | ||
83 | + .lisp .hljs-body, | ||
84 | + .smalltalk .hljs-number, | ||
85 | + .hljs-constant, | ||
86 | + .hljs-class .hljs-title, | ||
87 | + .hljs-parent, | ||
88 | + .haskell .hljs-type, | ||
89 | + .hljs-link_reference { | ||
90 | + color: #b58900; | ||
91 | + } | ||
92 | + | ||
93 | + /* Solarized Orange */ | ||
94 | + .hljs-preprocessor, | ||
95 | + .hljs-preprocessor .hljs-keyword, | ||
96 | + .hljs-pragma, | ||
97 | + .hljs-shebang, | ||
98 | + .hljs-symbol, | ||
99 | + .hljs-symbol .hljs-string, | ||
100 | + .diff .hljs-change, | ||
101 | + .hljs-special, | ||
102 | + .hljs-attr_selector, | ||
103 | + .hljs-subst, | ||
104 | + .hljs-cdata, | ||
105 | + .clojure .hljs-title, | ||
106 | + .css .hljs-pseudo, | ||
107 | + .hljs-header { | ||
108 | + color: #cb4b16; | ||
109 | + } | ||
110 | + | ||
111 | + /* Solarized Red */ | ||
112 | + .hljs-deletion, | ||
113 | + .hljs-important { | ||
114 | + color: #dc322f; | ||
115 | + } | ||
116 | + | ||
117 | + /* Solarized Violet */ | ||
118 | + .hljs-link_label { | ||
119 | + color: #6c71c4; | ||
120 | + } | ||
121 | + | ||
122 | + .tex .hljs-formula { | ||
123 | + background: #073642; | ||
124 | + } | ||
125 | +} |
app/assets/stylesheets/highlight/white.scss
1 | -.white .highlight { | ||
2 | - | 1 | +.white { |
3 | background-color: #fff; | 2 | background-color: #fff; |
4 | - | 3 | + |
4 | + .line.hll { | ||
5 | + background: #FFA; | ||
6 | + } | ||
7 | + | ||
8 | + .highlight{ | ||
9 | + border-left: 1px solid #eee; | ||
10 | + } | ||
11 | + | ||
5 | pre { | 12 | pre { |
6 | background-color: #fff; | 13 | background-color: #fff; |
7 | color: #333; | 14 | color: #333; |
8 | } | 15 | } |
9 | 16 | ||
10 | - .hll { display: block; background-color: $hover } | ||
11 | - .c { color: #888888; font-style: italic } /* Comment */ | ||
12 | - .err { color: #a61717; background-color: #e3d2d2 } /* Error */ | ||
13 | - .k { color: #000000; font-weight: bold } /* Keyword */ | ||
14 | - .cm { color: #888888 } /* Comment.Multiline */ | ||
15 | - .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ | ||
16 | - .c1 { color: #888888 } /* Comment.Single */ | ||
17 | - .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ | ||
18 | - .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ | ||
19 | - .ge { font-style: italic } /* Generic.Emph */ | ||
20 | - .gr { color: #aa0000 } /* Generic.Error */ | ||
21 | - .gh { color: #303030 } /* Generic.Heading */ | ||
22 | - .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ | ||
23 | - .go { color: #888888 } /* Generic.Output */ | ||
24 | - .gp { color: #555555 } /* Generic.Prompt */ | ||
25 | - .gs { font-weight: bold } /* Generic.Strong */ | ||
26 | - .gu { color: #606060 } /* Generic.Subheading */ | ||
27 | - .gt { color: #aa0000 } /* Generic.Traceback */ | ||
28 | - .kc{font-weight: bold;} /* Keyword.Constant */ | ||
29 | - .kd{font-weight: bold;} /* Keyword.Declaration */ | ||
30 | - .kn{font-weight: bold;} /* Keyword.Namespace */ | ||
31 | - .kp{font-weight: bold;} /* Keyword.Pseudo */ | ||
32 | - .kr{font-weight: bold;} /* Keyword.Reserved */ | ||
33 | - .kt{color: #458;font-weight: bold;} /* Keyword.Type */ | ||
34 | - .m { color: #0000DD; font-weight: bold } /* Literal.Number */ | ||
35 | - .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ | ||
36 | - .na{color: #008080;} /* Name.Attribute */ | ||
37 | - .nb{color: #0086B3;} /* Name.Builtin */ | ||
38 | - .nc{color: #458;font-weight: bold;} /* Name.Class */ | ||
39 | - .no{color: #008080;} /* Name.Constant */ | ||
40 | - .ni{color: #800080;} | ||
41 | - .ne{color: #900;font-weight: bold;} /* Name.Exception */ | ||
42 | - .nf{color: #900;font-weight: bold;} /* Name.Function */ | ||
43 | - .nn{color: #005;font-weight: bold;} /* Name.Namespace */ | ||
44 | - .nt{color: #000080;} /* Name.Tag */ | ||
45 | - .nv{color: #008080;} /* Name.Variable */ | ||
46 | - .py { color: #336699; font-weight: bold } /* Name.Property */ | ||
47 | - .ow { color: #008800 } /* Operator.Word */ | ||
48 | - .w { color: #bbbbbb } /* Text.Whitespace */ | ||
49 | - .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ | ||
50 | - .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ | ||
51 | - .mi {color: #099;} /* Literal.Number.Integer */ | ||
52 | - .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ | ||
53 | - .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ | ||
54 | - .sc{color: #d14;} /* Literal.String.Char */ | ||
55 | - .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ | ||
56 | - .s2{color: #d14;} /* Literal.String.Double */ | ||
57 | - .se{color: #d14;} /* Literal.String.Escape */ | ||
58 | - .sh{color: #d14;} /* Literal.String.Heredoc */ | ||
59 | - .si{color: #d14;} /* Literal.String.Interpol */ | ||
60 | - .sx{color: #d14;} /* Literal.String.Other */ | ||
61 | - .sr{color: #d14;} /* Literal.String.Regex */ | ||
62 | - .s1{color: #d14;} /* Literal.String.Single */ | ||
63 | - .ss{color: #d14;} /* Literal.String.Symbol */ | ||
64 | - .bp { color: #003388 } /* Name.Builtin.Pseudo */ | ||
65 | - .vc { color: #336699 } /* Name.Variable.Class */ | ||
66 | - .vg { color: #dd7700 } /* Name.Variable.Global */ | ||
67 | - .vi { color: #3333bb } | 17 | + .hljs { |
18 | + background: #FFF; | ||
19 | + } | ||
20 | + | ||
21 | + .line-numbers a { | ||
22 | + color: #999; | ||
23 | + } | ||
24 | + | ||
25 | + .hljs { | ||
26 | + display: block; | ||
27 | + background: #fff; color: black; | ||
28 | + } | ||
29 | + | ||
30 | + .hljs-comment, | ||
31 | + .hljs-template_comment, | ||
32 | + .hljs-javadoc, | ||
33 | + .hljs-comment * { | ||
34 | + color: #006a00; | ||
35 | + } | ||
36 | + | ||
37 | + .hljs-keyword, | ||
38 | + .hljs-literal, | ||
39 | + .nginx .hljs-title { | ||
40 | + color: #aa0d91; | ||
41 | + } | ||
42 | + .method, | ||
43 | + .hljs-list .hljs-title, | ||
44 | + .hljs-tag .hljs-title, | ||
45 | + .setting .hljs-value, | ||
46 | + .hljs-winutils, | ||
47 | + .tex .hljs-command, | ||
48 | + .http .hljs-title, | ||
49 | + .hljs-request, | ||
50 | + .hljs-status { | ||
51 | + color: #008; | ||
52 | + } | ||
53 | + | ||
54 | + .hljs-envvar, | ||
55 | + .tex .hljs-special { | ||
56 | + color: #660; | ||
57 | + } | ||
58 | + | ||
59 | + .hljs-string { | ||
60 | + color: #c41a16; | ||
61 | + } | ||
62 | + .hljs-tag .hljs-value, | ||
63 | + .hljs-cdata, | ||
64 | + .hljs-filter .hljs-argument, | ||
65 | + .hljs-attr_selector, | ||
66 | + .apache .hljs-cbracket, | ||
67 | + .hljs-date, | ||
68 | + .hljs-regexp { | ||
69 | + color: #080; | ||
70 | + } | ||
71 | + | ||
72 | + .hljs-sub .hljs-identifier, | ||
73 | + .hljs-pi, | ||
74 | + .hljs-tag, | ||
75 | + .hljs-tag .hljs-keyword, | ||
76 | + .hljs-decorator, | ||
77 | + .ini .hljs-title, | ||
78 | + .hljs-shebang, | ||
79 | + .hljs-prompt, | ||
80 | + .hljs-hexcolor, | ||
81 | + .hljs-rules .hljs-value, | ||
82 | + .hljs-symbol, | ||
83 | + .hljs-symbol .hljs-string, | ||
84 | + .hljs-number, | ||
85 | + .css .hljs-function, | ||
86 | + .clojure .hljs-title, | ||
87 | + .clojure .hljs-built_in, | ||
88 | + .hljs-function .hljs-title, | ||
89 | + .coffeescript .hljs-attribute { | ||
90 | + color: #1c00cf; | ||
91 | + } | ||
92 | + | ||
93 | + .hljs-class .hljs-title, | ||
94 | + .haskell .hljs-type, | ||
95 | + .smalltalk .hljs-class, | ||
96 | + .hljs-javadoctag, | ||
97 | + .hljs-yardoctag, | ||
98 | + .hljs-phpdoc, | ||
99 | + .hljs-typename, | ||
100 | + .hljs-tag .hljs-attribute, | ||
101 | + .hljs-doctype, | ||
102 | + .hljs-class .hljs-id, | ||
103 | + .hljs-built_in, | ||
104 | + .setting, | ||
105 | + .hljs-params, | ||
106 | + .clojure .hljs-attribute { | ||
107 | + color: #5c2699; | ||
108 | + } | ||
109 | + | ||
110 | + .hljs-variable { | ||
111 | + color: #3f6e74; | ||
112 | + } | ||
113 | + .css .hljs-tag, | ||
114 | + .hljs-rules .hljs-property, | ||
115 | + .hljs-pseudo, | ||
116 | + .hljs-subst { | ||
117 | + color: #000; | ||
118 | + } | ||
119 | + | ||
120 | + .css .hljs-class, | ||
121 | + .css .hljs-id { | ||
122 | + color: #9B703F; | ||
123 | + } | ||
124 | + | ||
125 | + .hljs-value .hljs-important { | ||
126 | + color: #ff7700; | ||
127 | + font-weight: bold; | ||
128 | + } | ||
129 | + | ||
130 | + .hljs-rules .hljs-keyword { | ||
131 | + color: #C5AF75; | ||
132 | + } | ||
133 | + | ||
134 | + .hljs-annotation, | ||
135 | + .apache .hljs-sqbracket, | ||
136 | + .nginx .hljs-built_in { | ||
137 | + color: #9B859D; | ||
138 | + } | ||
139 | + | ||
140 | + .hljs-preprocessor, | ||
141 | + .hljs-preprocessor *, | ||
142 | + .hljs-pragma { | ||
143 | + color: #643820; | ||
144 | + } | ||
145 | + | ||
146 | + .tex .hljs-formula { | ||
147 | + background-color: #EEE; | ||
148 | + font-style: italic; | ||
149 | + } | ||
150 | + | ||
151 | + .diff .hljs-header, | ||
152 | + .hljs-chunk { | ||
153 | + color: #808080; | ||
154 | + font-weight: bold; | ||
155 | + } | ||
156 | + | ||
157 | + .diff .hljs-change { | ||
158 | + background-color: #BCCFF9; | ||
159 | + } | ||
160 | + | ||
161 | + .hljs-addition { | ||
162 | + background-color: #BAEEBA; | ||
163 | + } | ||
164 | + | ||
165 | + .hljs-deletion { | ||
166 | + background-color: #FFC8BD; | ||
167 | + } | ||
168 | + | ||
169 | + .hljs-comment .hljs-yardoctag { | ||
170 | + font-weight: bold; | ||
171 | + } | ||
172 | + | ||
173 | + .method .hljs-id { | ||
174 | + color: #000; | ||
175 | + } | ||
68 | } | 176 | } |
69 | 177 | ||
70 | .shadow { | 178 | .shadow { |
71 | @include box-shadow(0 5px 15px #000); | 179 | @include box-shadow(0 5px 15px #000); |
72 | } | 180 | } |
181 | + | ||
182 | +.wiki, .note-body { | ||
183 | + .highlight { | ||
184 | + border: 1px solid #DDD; | ||
185 | + } | ||
186 | +} |
app/assets/stylesheets/main/layout.scss
1 | html { | 1 | html { |
2 | overflow-y: scroll; | 2 | overflow-y: scroll; |
3 | + | ||
4 | + &.touch .tooltip { display: none !important; } | ||
3 | } | 5 | } |
4 | 6 | ||
5 | body { | 7 | body { |
6 | - -webkit-font-smoothing: antialiased; | ||
7 | - -moz-osx-font-smoothing: grayscale; | ||
8 | - margin-bottom: 20px; | 8 | + padding-bottom: 20px; |
9 | } | 9 | } |
10 | 10 | ||
11 | .container { | 11 | .container { |
app/assets/stylesheets/main/mixins.scss
@@ -106,12 +106,12 @@ | @@ -106,12 +106,12 @@ | ||
106 | 106 | ||
107 | h3 { | 107 | h3 { |
108 | margin-top: 35px; | 108 | margin-top: 35px; |
109 | - font-size: 2em; | 109 | + font-size: 1.5em; |
110 | } | 110 | } |
111 | 111 | ||
112 | h4 { | 112 | h4 { |
113 | margin-top: 30px; | 113 | margin-top: 30px; |
114 | - font-size: 1.5em; | 114 | + font-size: 1.2em; |
115 | } | 115 | } |
116 | 116 | ||
117 | blockquote p { | 117 | blockquote p { |
@@ -128,7 +128,7 @@ | @@ -128,7 +128,7 @@ | ||
128 | } | 128 | } |
129 | } | 129 | } |
130 | 130 | ||
131 | - code { | 131 | + p > code { |
132 | font-size: inherit; | 132 | font-size: inherit; |
133 | font-weight: inherit; | 133 | font-weight: inherit; |
134 | color: #555; | 134 | color: #555; |
app/assets/stylesheets/main/variables.scss
@@ -5,6 +5,7 @@ $primary_color: #2FA0BB; | @@ -5,6 +5,7 @@ $primary_color: #2FA0BB; | ||
5 | $link_color: #3A89A3; | 5 | $link_color: #3A89A3; |
6 | $style_color: #474D57; | 6 | $style_color: #474D57; |
7 | $bg_style_color: #2299BB; | 7 | $bg_style_color: #2299BB; |
8 | +$list-group-active-bg: $bg_style_color; | ||
8 | $hover: #D9EDF7; | 9 | $hover: #D9EDF7; |
9 | 10 | ||
10 | /** | 11 | /** |
app/assets/stylesheets/sections/admin.scss
@@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
2 | * Admin area | 2 | * Admin area |
3 | * | 3 | * |
4 | */ | 4 | */ |
5 | -.admin_dash { | 5 | +.admin-dashboard { |
6 | .data { | 6 | .data { |
7 | a { | 7 | a { |
8 | h1 { | 8 | h1 { |
@@ -14,6 +14,10 @@ | @@ -14,6 +14,10 @@ | ||
14 | } | 14 | } |
15 | } | 15 | } |
16 | } | 16 | } |
17 | + | ||
18 | + .str-truncated { | ||
19 | + max-width: 60%; | ||
20 | + } | ||
17 | } | 21 | } |
18 | 22 | ||
19 | .admin-filter form { | 23 | .admin-filter form { |
app/assets/stylesheets/sections/commits.scss
@@ -10,331 +10,6 @@ | @@ -10,331 +10,6 @@ | ||
10 | } | 10 | } |
11 | } | 11 | } |
12 | 12 | ||
13 | -.file { | ||
14 | - border: 1px solid #CCC; | ||
15 | - margin-bottom: 1em; | ||
16 | - | ||
17 | - .header { | ||
18 | - @extend .clearfix; | ||
19 | - background: #DDD; | ||
20 | - border-bottom: 1px solid #CCC; | ||
21 | - padding: 5px 5px 5px 10px; | ||
22 | - color: #555; | ||
23 | - | ||
24 | - > span { | ||
25 | - font-family: $monospace_font; | ||
26 | - font-size: 14px; | ||
27 | - line-height: 2; | ||
28 | - } | ||
29 | - | ||
30 | - .view-file { | ||
31 | - font-weight: bold; | ||
32 | - float: right; | ||
33 | - background-color: #EEE; | ||
34 | - } | ||
35 | - | ||
36 | - .commit-short-id { | ||
37 | - font-family: $monospace_font; | ||
38 | - font-size: smaller; | ||
39 | - } | ||
40 | - | ||
41 | - .file-mode { | ||
42 | - font-family: $monospace_font; | ||
43 | - } | ||
44 | - } | ||
45 | - .content { | ||
46 | - overflow: auto; | ||
47 | - overflow-y: hidden; | ||
48 | - background: #FFF; | ||
49 | - color: #333; | ||
50 | - font-size: 12px; | ||
51 | - .old { | ||
52 | - span.idiff { | ||
53 | - background-color: #FAA; | ||
54 | - } | ||
55 | - } | ||
56 | - .new { | ||
57 | - span.idiff { | ||
58 | - background-color: #AFA; | ||
59 | - } | ||
60 | - } | ||
61 | - | ||
62 | - table { | ||
63 | - width: 100%; | ||
64 | - font-family: $monospace_font; | ||
65 | - border: none; | ||
66 | - margin: 0px; | ||
67 | - padding: 0px; | ||
68 | - td { | ||
69 | - line-height: 18px; | ||
70 | - font-size: 12px; | ||
71 | - } | ||
72 | - } | ||
73 | - .old_line, .new_line, .diff_line { | ||
74 | - margin: 0px; | ||
75 | - padding: 0px; | ||
76 | - border: none; | ||
77 | - background: #EEE; | ||
78 | - color: #666; | ||
79 | - padding: 0px 5px; | ||
80 | - border-right: 1px solid #ccc; | ||
81 | - text-align: right; | ||
82 | - min-width: 35px; | ||
83 | - max-width: 50px; | ||
84 | - width: 35px; | ||
85 | - @include user-select(none); | ||
86 | - a { | ||
87 | - float: left; | ||
88 | - width: 35px; | ||
89 | - font-weight: normal; | ||
90 | - color: #666; | ||
91 | - &:hover { | ||
92 | - text-decoration: underline; | ||
93 | - } | ||
94 | - } | ||
95 | - &.new { | ||
96 | - background: #CFD; | ||
97 | - } | ||
98 | - &.old { | ||
99 | - background: #FDD; | ||
100 | - } | ||
101 | - } | ||
102 | - .diff_line { | ||
103 | - padding: 0; | ||
104 | - } | ||
105 | - .line_holder { | ||
106 | - &.old .old_line, | ||
107 | - &.old .new_line { | ||
108 | - background: #FCC; | ||
109 | - border-color: #E7BABA; | ||
110 | - } | ||
111 | - &.new .old_line, | ||
112 | - &.new .new_line { | ||
113 | - background: #CFC; | ||
114 | - border-color: #B9ECB9; | ||
115 | - } | ||
116 | - } | ||
117 | - .line_content { | ||
118 | - display: block; | ||
119 | - white-space: pre; | ||
120 | - height: 18px; | ||
121 | - margin: 0px; | ||
122 | - padding: 0px 0.5em; | ||
123 | - border: none; | ||
124 | - &.new { | ||
125 | - background: #CFD; | ||
126 | - } | ||
127 | - &.old { | ||
128 | - background: #FDD; | ||
129 | - } | ||
130 | - &.matched { | ||
131 | - color: #ccc; | ||
132 | - background: #fafafa; | ||
133 | - } | ||
134 | - &.parallel { | ||
135 | - display: table-cell; | ||
136 | - overflow: hidden; | ||
137 | - width: 50%; | ||
138 | - } | ||
139 | - } | ||
140 | - } | ||
141 | - .image { | ||
142 | - background: #ddd; | ||
143 | - text-align: center; | ||
144 | - padding: 30px; | ||
145 | - .wrap{ | ||
146 | - display: inline-block; | ||
147 | - } | ||
148 | - | ||
149 | - .frame { | ||
150 | - display: inline-block; | ||
151 | - background-color: #fff; | ||
152 | - line-height: 0; | ||
153 | - img{ | ||
154 | - border: 1px solid #FFF; | ||
155 | - background: url('trans_bg.gif'); | ||
156 | - } | ||
157 | - &.deleted { | ||
158 | - border: 1px solid $deleted; | ||
159 | - } | ||
160 | - | ||
161 | - &.added { | ||
162 | - border: 1px solid $added; | ||
163 | - } | ||
164 | - } | ||
165 | - .image-info{ | ||
166 | - font-size: 12px; | ||
167 | - margin: 5px 0 0 0; | ||
168 | - color: grey; | ||
169 | - } | ||
170 | - | ||
171 | - .view.swipe{ | ||
172 | - position: relative; | ||
173 | - | ||
174 | - .swipe-frame{ | ||
175 | - display: block; | ||
176 | - margin: auto; | ||
177 | - position: relative; | ||
178 | - } | ||
179 | - .swipe-wrap{ | ||
180 | - overflow: hidden; | ||
181 | - border-left: 1px solid #999; | ||
182 | - position: absolute; | ||
183 | - display: block; | ||
184 | - top: 13px; | ||
185 | - right: 7px; | ||
186 | - } | ||
187 | - .frame{ | ||
188 | - top: 0; | ||
189 | - right: 0; | ||
190 | - position: absolute; | ||
191 | - &.deleted{ | ||
192 | - margin: 0; | ||
193 | - display: block; | ||
194 | - top: 13px; | ||
195 | - right: 7px; | ||
196 | - } | ||
197 | - } | ||
198 | - .swipe-bar{ | ||
199 | - display: block; | ||
200 | - height: 100%; | ||
201 | - width: 15px; | ||
202 | - z-index: 100; | ||
203 | - position: absolute; | ||
204 | - cursor: pointer; | ||
205 | - &:hover{ | ||
206 | - .top-handle{ | ||
207 | - background-position: -15px 3px; | ||
208 | - } | ||
209 | - .bottom-handle{ | ||
210 | - background-position: -15px -11px; | ||
211 | - } | ||
212 | - }; | ||
213 | - .top-handle{ | ||
214 | - display: block; | ||
215 | - height: 14px; | ||
216 | - width: 15px; | ||
217 | - position: absolute; | ||
218 | - top: 0px; | ||
219 | - background: url('swipemode_sprites.gif') 0 3px no-repeat; | ||
220 | - } | ||
221 | - .bottom-handle{ | ||
222 | - display: block; | ||
223 | - height: 14px; | ||
224 | - width: 15px; | ||
225 | - position: absolute; | ||
226 | - bottom: 0px; | ||
227 | - background: url('swipemode_sprites.gif') 0 -11px no-repeat; | ||
228 | - } | ||
229 | - } | ||
230 | - } //.view.swipe | ||
231 | - .view.onion-skin{ | ||
232 | - .onion-skin-frame{ | ||
233 | - display: block; | ||
234 | - margin: auto; | ||
235 | - position: relative; | ||
236 | - } | ||
237 | - .frame.added, .frame.deleted { | ||
238 | - position: absolute; | ||
239 | - display: block; | ||
240 | - top: 0px; | ||
241 | - left: 0px; | ||
242 | - } | ||
243 | - .controls{ | ||
244 | - display: block; | ||
245 | - height: 14px; | ||
246 | - width: 300px; | ||
247 | - z-index: 100; | ||
248 | - position: absolute; | ||
249 | - bottom: 0px; | ||
250 | - left: 50%; | ||
251 | - margin-left: -150px; | ||
252 | - | ||
253 | - .drag-track{ | ||
254 | - display: block; | ||
255 | - position: absolute; | ||
256 | - left: 12px; | ||
257 | - height: 10px; | ||
258 | - width: 276px; | ||
259 | - background: url('onion_skin_sprites.gif') -4px -20px repeat-x; | ||
260 | - } | ||
261 | - | ||
262 | - .dragger { | ||
263 | - display: block; | ||
264 | - position: absolute; | ||
265 | - left: 0px; | ||
266 | - top: 0px; | ||
267 | - height: 14px; | ||
268 | - width: 14px; | ||
269 | - background: url('onion_skin_sprites.gif') 0px -34px repeat-x; | ||
270 | - cursor: pointer; | ||
271 | - } | ||
272 | - | ||
273 | - .transparent { | ||
274 | - display: block; | ||
275 | - position: absolute; | ||
276 | - top: 2px; | ||
277 | - right: 0px; | ||
278 | - height: 10px; | ||
279 | - width: 10px; | ||
280 | - background: url('onion_skin_sprites.gif') -2px 0px no-repeat; | ||
281 | - } | ||
282 | - | ||
283 | - .opaque { | ||
284 | - display: block; | ||
285 | - position: absolute; | ||
286 | - top: 2px; | ||
287 | - left: 0px; | ||
288 | - height: 10px; | ||
289 | - width: 10px; | ||
290 | - background: url('onion_skin_sprites.gif') -2px -10px no-repeat; | ||
291 | - } | ||
292 | - } | ||
293 | - } //.view.onion-skin | ||
294 | - } | ||
295 | - .view-modes{ | ||
296 | - | ||
297 | - padding: 10px; | ||
298 | - text-align: center; | ||
299 | - | ||
300 | - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); | ||
301 | - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); | ||
302 | - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); | ||
303 | - background-image: -ms-linear-gradient(#eee 6.6%, #dfdfdf); | ||
304 | - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); | ||
305 | - | ||
306 | - ul, li{ | ||
307 | - list-style: none; | ||
308 | - margin: 0; | ||
309 | - padding: 0; | ||
310 | - display: inline-block; | ||
311 | - } | ||
312 | - | ||
313 | - li{ | ||
314 | - color: grey; | ||
315 | - border-left: 1px solid #c1c1c1; | ||
316 | - padding: 0 12px 0 16px; | ||
317 | - cursor: pointer; | ||
318 | - &:first-child{ | ||
319 | - border-left: none; | ||
320 | - } | ||
321 | - &:hover{ | ||
322 | - text-decoration: underline; | ||
323 | - } | ||
324 | - &.active{ | ||
325 | - &:hover{ | ||
326 | - text-decoration: none; | ||
327 | - } | ||
328 | - cursor: default; | ||
329 | - color: #333; | ||
330 | - } | ||
331 | - &.disabled{ | ||
332 | - display: none; | ||
333 | - } | ||
334 | - } | ||
335 | - } | ||
336 | -} | ||
337 | - | ||
338 | /** COMMIT BLOCK **/ | 13 | /** COMMIT BLOCK **/ |
339 | .commit-title{ | 14 | .commit-title{ |
340 | display: block; | 15 | display: block; |
@@ -493,6 +168,25 @@ li.commit { | @@ -493,6 +168,25 @@ li.commit { | ||
493 | text-decoration: underline; | 168 | text-decoration: underline; |
494 | } | 169 | } |
495 | } | 170 | } |
171 | + | ||
172 | + .text-expander { | ||
173 | + background: #eee; | ||
174 | + color: #555; | ||
175 | + padding: 0 5px; | ||
176 | + cursor: pointer; | ||
177 | + margin-left: 4px; | ||
178 | + &:hover { | ||
179 | + background-color: #ddd; | ||
180 | + } | ||
181 | + } | ||
182 | + } | ||
183 | + | ||
184 | + .commit-row-description { | ||
185 | + font-size: 14px; | ||
186 | + border-left: 1px solid #e5e5e5; | ||
187 | + padding: 0 15px 0 7px; | ||
188 | + margin: 5px 0 10px 5px; | ||
189 | + display: none; | ||
496 | } | 190 | } |
497 | 191 | ||
498 | .commit-row-info { | 192 | .commit-row-info { |
app/assets/stylesheets/sections/dashboard.scss
@@ -0,0 +1,329 @@ | @@ -0,0 +1,329 @@ | ||
1 | +.diff-file { | ||
2 | + border: 1px solid #CCC; | ||
3 | + margin-bottom: 1em; | ||
4 | + | ||
5 | + .diff-header { | ||
6 | + @extend .clearfix; | ||
7 | + background: #DDD; | ||
8 | + border-bottom: 1px solid #CCC; | ||
9 | + padding: 5px 5px 5px 10px; | ||
10 | + color: #555; | ||
11 | + | ||
12 | + > span { | ||
13 | + font-family: $monospace_font; | ||
14 | + font-size: 14px; | ||
15 | + line-height: 2; | ||
16 | + } | ||
17 | + | ||
18 | + .diff-btn-group { | ||
19 | + float: right; | ||
20 | + | ||
21 | + .btn { | ||
22 | + background-color: #EEE; | ||
23 | + color: #666; | ||
24 | + font-weight: bolder; | ||
25 | + } | ||
26 | + } | ||
27 | + | ||
28 | + .commit-short-id { | ||
29 | + font-family: $monospace_font; | ||
30 | + font-size: smaller; | ||
31 | + } | ||
32 | + | ||
33 | + .file-mode { | ||
34 | + font-family: $monospace_font; | ||
35 | + } | ||
36 | + } | ||
37 | + .diff-content { | ||
38 | + overflow: auto; | ||
39 | + overflow-y: hidden; | ||
40 | + background: #FFF; | ||
41 | + color: #333; | ||
42 | + font-size: 12px; | ||
43 | + .old { | ||
44 | + span.idiff { | ||
45 | + background-color: #FAA; | ||
46 | + } | ||
47 | + } | ||
48 | + .new { | ||
49 | + span.idiff { | ||
50 | + background-color: #AFA; | ||
51 | + } | ||
52 | + } | ||
53 | + | ||
54 | + table { | ||
55 | + width: 100%; | ||
56 | + font-family: $monospace_font; | ||
57 | + border: none; | ||
58 | + margin: 0px; | ||
59 | + padding: 0px; | ||
60 | + td { | ||
61 | + line-height: 18px; | ||
62 | + font-size: 12px; | ||
63 | + } | ||
64 | + } | ||
65 | + .old_line, .new_line, .diff_line { | ||
66 | + margin: 0px; | ||
67 | + padding: 0px; | ||
68 | + border: none; | ||
69 | + background: #EEE; | ||
70 | + color: #666; | ||
71 | + padding: 0px 5px; | ||
72 | + border-right: 1px solid #ccc; | ||
73 | + text-align: right; | ||
74 | + min-width: 35px; | ||
75 | + max-width: 50px; | ||
76 | + width: 35px; | ||
77 | + @include user-select(none); | ||
78 | + a { | ||
79 | + float: left; | ||
80 | + width: 35px; | ||
81 | + font-weight: normal; | ||
82 | + color: #666; | ||
83 | + &:hover { | ||
84 | + text-decoration: underline; | ||
85 | + } | ||
86 | + } | ||
87 | + &.new { | ||
88 | + background: #CFD; | ||
89 | + } | ||
90 | + &.old { | ||
91 | + background: #FDD; | ||
92 | + } | ||
93 | + } | ||
94 | + .diff_line { | ||
95 | + padding: 0; | ||
96 | + } | ||
97 | + .line_holder { | ||
98 | + &.old .old_line, | ||
99 | + &.old .new_line { | ||
100 | + background: #FCC; | ||
101 | + border-color: #E7BABA; | ||
102 | + } | ||
103 | + &.new .old_line, | ||
104 | + &.new .new_line { | ||
105 | + background: #CFC; | ||
106 | + border-color: #B9ECB9; | ||
107 | + } | ||
108 | + } | ||
109 | + .line_content { | ||
110 | + display: block; | ||
111 | + white-space: pre; | ||
112 | + height: 18px; | ||
113 | + margin: 0px; | ||
114 | + padding: 0px 0.5em; | ||
115 | + border: none; | ||
116 | + &.new { | ||
117 | + background: #CFD; | ||
118 | + } | ||
119 | + &.old { | ||
120 | + background: #FDD; | ||
121 | + } | ||
122 | + &.matched { | ||
123 | + color: #ccc; | ||
124 | + background: #fafafa; | ||
125 | + } | ||
126 | + &.parallel { | ||
127 | + display: table-cell; | ||
128 | + overflow: hidden; | ||
129 | + width: 50%; | ||
130 | + } | ||
131 | + } | ||
132 | + } | ||
133 | + .image { | ||
134 | + background: #ddd; | ||
135 | + text-align: center; | ||
136 | + padding: 30px; | ||
137 | + .wrap{ | ||
138 | + display: inline-block; | ||
139 | + } | ||
140 | + | ||
141 | + .frame { | ||
142 | + display: inline-block; | ||
143 | + background-color: #fff; | ||
144 | + line-height: 0; | ||
145 | + img{ | ||
146 | + border: 1px solid #FFF; | ||
147 | + background: url('trans_bg.gif'); | ||
148 | + max-width: 100%; | ||
149 | + } | ||
150 | + &.deleted { | ||
151 | + border: 1px solid $deleted; | ||
152 | + } | ||
153 | + | ||
154 | + &.added { | ||
155 | + border: 1px solid $added; | ||
156 | + } | ||
157 | + } | ||
158 | + .image-info{ | ||
159 | + font-size: 12px; | ||
160 | + margin: 5px 0 0 0; | ||
161 | + color: grey; | ||
162 | + } | ||
163 | + | ||
164 | + .view.swipe{ | ||
165 | + position: relative; | ||
166 | + | ||
167 | + .swipe-frame{ | ||
168 | + display: block; | ||
169 | + margin: auto; | ||
170 | + position: relative; | ||
171 | + } | ||
172 | + .swipe-wrap{ | ||
173 | + overflow: hidden; | ||
174 | + border-left: 1px solid #999; | ||
175 | + position: absolute; | ||
176 | + display: block; | ||
177 | + top: 13px; | ||
178 | + right: 7px; | ||
179 | + } | ||
180 | + .frame{ | ||
181 | + top: 0; | ||
182 | + right: 0; | ||
183 | + position: absolute; | ||
184 | + &.deleted{ | ||
185 | + margin: 0; | ||
186 | + display: block; | ||
187 | + top: 13px; | ||
188 | + right: 7px; | ||
189 | + } | ||
190 | + } | ||
191 | + .swipe-bar{ | ||
192 | + display: block; | ||
193 | + height: 100%; | ||
194 | + width: 15px; | ||
195 | + z-index: 100; | ||
196 | + position: absolute; | ||
197 | + cursor: pointer; | ||
198 | + &:hover{ | ||
199 | + .top-handle{ | ||
200 | + background-position: -15px 3px; | ||
201 | + } | ||
202 | + .bottom-handle{ | ||
203 | + background-position: -15px -11px; | ||
204 | + } | ||
205 | + }; | ||
206 | + .top-handle{ | ||
207 | + display: block; | ||
208 | + height: 14px; | ||
209 | + width: 15px; | ||
210 | + position: absolute; | ||
211 | + top: 0px; | ||
212 | + background: url('swipemode_sprites.gif') 0 3px no-repeat; | ||
213 | + } | ||
214 | + .bottom-handle{ | ||
215 | + display: block; | ||
216 | + height: 14px; | ||
217 | + width: 15px; | ||
218 | + position: absolute; | ||
219 | + bottom: 0px; | ||
220 | + background: url('swipemode_sprites.gif') 0 -11px no-repeat; | ||
221 | + } | ||
222 | + } | ||
223 | + } //.view.swipe | ||
224 | + .view.onion-skin{ | ||
225 | + .onion-skin-frame{ | ||
226 | + display: block; | ||
227 | + margin: auto; | ||
228 | + position: relative; | ||
229 | + } | ||
230 | + .frame.added, .frame.deleted { | ||
231 | + position: absolute; | ||
232 | + display: block; | ||
233 | + top: 0px; | ||
234 | + left: 0px; | ||
235 | + } | ||
236 | + .controls{ | ||
237 | + display: block; | ||
238 | + height: 14px; | ||
239 | + width: 300px; | ||
240 | + z-index: 100; | ||
241 | + position: absolute; | ||
242 | + bottom: 0px; | ||
243 | + left: 50%; | ||
244 | + margin-left: -150px; | ||
245 | + | ||
246 | + .drag-track{ | ||
247 | + display: block; | ||
248 | + position: absolute; | ||
249 | + left: 12px; | ||
250 | + height: 10px; | ||
251 | + width: 276px; | ||
252 | + background: url('onion_skin_sprites.gif') -4px -20px repeat-x; | ||
253 | + } | ||
254 | + | ||
255 | + .dragger { | ||
256 | + display: block; | ||
257 | + position: absolute; | ||
258 | + left: 0px; | ||
259 | + top: 0px; | ||
260 | + height: 14px; | ||
261 | + width: 14px; | ||
262 | + background: url('onion_skin_sprites.gif') 0px -34px repeat-x; | ||
263 | + cursor: pointer; | ||
264 | + } | ||
265 | + | ||
266 | + .transparent { | ||
267 | + display: block; | ||
268 | + position: absolute; | ||
269 | + top: 2px; | ||
270 | + right: 0px; | ||
271 | + height: 10px; | ||
272 | + width: 10px; | ||
273 | + background: url('onion_skin_sprites.gif') -2px 0px no-repeat; | ||
274 | + } | ||
275 | + | ||
276 | + .opaque { | ||
277 | + display: block; | ||
278 | + position: absolute; | ||
279 | + top: 2px; | ||
280 | + left: 0px; | ||
281 | + height: 10px; | ||
282 | + width: 10px; | ||
283 | + background: url('onion_skin_sprites.gif') -2px -10px no-repeat; | ||
284 | + } | ||
285 | + } | ||
286 | + } //.view.onion-skin | ||
287 | + } | ||
288 | + .view-modes{ | ||
289 | + | ||
290 | + padding: 10px; | ||
291 | + text-align: center; | ||
292 | + | ||
293 | + background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); | ||
294 | + background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf); | ||
295 | + background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf); | ||
296 | + background-image: -ms-linear-gradient(#eee 6.6%, #dfdfdf); | ||
297 | + background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); | ||
298 | + | ||
299 | + ul, li{ | ||
300 | + list-style: none; | ||
301 | + margin: 0; | ||
302 | + padding: 0; | ||
303 | + display: inline-block; | ||
304 | + } | ||
305 | + | ||
306 | + li{ | ||
307 | + color: grey; | ||
308 | + border-left: 1px solid #c1c1c1; | ||
309 | + padding: 0 12px 0 16px; | ||
310 | + cursor: pointer; | ||
311 | + &:first-child{ | ||
312 | + border-left: none; | ||
313 | + } | ||
314 | + &:hover{ | ||
315 | + text-decoration: underline; | ||
316 | + } | ||
317 | + &.active{ | ||
318 | + &:hover{ | ||
319 | + text-decoration: none; | ||
320 | + } | ||
321 | + cursor: default; | ||
322 | + color: #333; | ||
323 | + } | ||
324 | + &.disabled{ | ||
325 | + display: none; | ||
326 | + } | ||
327 | + } | ||
328 | + } | ||
329 | +} |
app/assets/stylesheets/sections/events.scss
@@ -37,8 +37,8 @@ | @@ -37,8 +37,8 @@ | ||
37 | 37 | ||
38 | &.event-inline { | 38 | &.event-inline { |
39 | .avatar { | 39 | .avatar { |
40 | - width: 16px; | ||
41 | - height: 16px; | 40 | + position: relative; |
41 | + top: -2px; | ||
42 | } | 42 | } |
43 | } | 43 | } |
44 | 44 | ||
@@ -113,6 +113,7 @@ | @@ -113,6 +113,7 @@ | ||
113 | &.commit { | 113 | &.commit { |
114 | background: transparent; | 114 | background: transparent; |
115 | padding: 3px; | 115 | padding: 3px; |
116 | + padding-left: 0; | ||
116 | border: none; | 117 | border: none; |
117 | color: #666; | 118 | color: #666; |
118 | .commit-row-title { | 119 | .commit-row-title { |
@@ -122,6 +123,7 @@ | @@ -122,6 +123,7 @@ | ||
122 | &.commits-stat { | 123 | &.commits-stat { |
123 | display: block; | 124 | display: block; |
124 | padding: 3px; | 125 | padding: 3px; |
126 | + padding-left: 0; | ||
125 | 127 | ||
126 | &:hover { | 128 | &:hover { |
127 | background: none; | 129 | background: none; |
app/assets/stylesheets/sections/header.scss
@@ -19,7 +19,7 @@ header { | @@ -19,7 +19,7 @@ header { | ||
19 | line-height: 32px; | 19 | line-height: 32px; |
20 | padding: 6px 10px; | 20 | padding: 6px 10px; |
21 | 21 | ||
22 | - &:hover { | 22 | + &:hover, &:focus, &:active { |
23 | background: none; | 23 | background: none; |
24 | } | 24 | } |
25 | } | 25 | } |
@@ -29,6 +29,64 @@ header { | @@ -29,6 +29,64 @@ header { | ||
29 | float: right; | 29 | float: right; |
30 | margin-right: 0; | 30 | margin-right: 0; |
31 | } | 31 | } |
32 | + | ||
33 | + .navbar-toggle { | ||
34 | + color: $style_color; | ||
35 | + margin: 0 -15px 0 0; | ||
36 | + padding: 10px; | ||
37 | + border-radius: 0; | ||
38 | + | ||
39 | + button i { font-size: 22px; } | ||
40 | + | ||
41 | + &.collapsed { background-color: transparent !important;} | ||
42 | + | ||
43 | + &:hover { | ||
44 | + background-color: #EEE; | ||
45 | + } | ||
46 | + } | ||
47 | + } | ||
48 | + | ||
49 | + .turbolink-spinner { | ||
50 | + font-size: 20px; | ||
51 | + margin-right: 10px; | ||
52 | + } | ||
53 | + | ||
54 | + @media (max-width: $screen-xs-max) { | ||
55 | + border-width: 0; | ||
56 | + font-size: 18px; | ||
57 | + | ||
58 | + .app_logo { margin-left: -15px; } | ||
59 | + .title { | ||
60 | + display: inline-block; | ||
61 | + overflow: hidden; | ||
62 | + text-overflow: ellipsis; | ||
63 | + vertical-align: top; | ||
64 | + white-space: nowrap; | ||
65 | + max-width: 70%; | ||
66 | + } | ||
67 | + | ||
68 | + .navbar-collapse { | ||
69 | + padding-right: 0; | ||
70 | + padding-left: 0; | ||
71 | + } | ||
72 | + | ||
73 | + .navbar-nav { | ||
74 | + margin: 5px 0; | ||
75 | + | ||
76 | + .visible-xs, .visable-sm { | ||
77 | + display: table-cell !important; | ||
78 | + } | ||
79 | + } | ||
80 | + | ||
81 | + li { | ||
82 | + display: table-cell; | ||
83 | + width: 1%; | ||
84 | + | ||
85 | + a { | ||
86 | + text-align: center; | ||
87 | + font-size: 18px !important; | ||
88 | + } | ||
89 | + } | ||
32 | } | 90 | } |
33 | } | 91 | } |
34 | 92 | ||
@@ -50,7 +108,7 @@ header { | @@ -50,7 +108,7 @@ header { | ||
50 | 108 | ||
51 | h1 { | 109 | h1 { |
52 | margin: 0; | 110 | margin: 0; |
53 | - background: url('logo-black.png') no-repeat center center; | 111 | + background: image-url('logo-black.png') no-repeat center center; |
54 | background-size: 32px; | 112 | background-size: 32px; |
55 | float: left; | 113 | float: left; |
56 | height: 46px; | 114 | height: 46px; |
@@ -69,7 +127,7 @@ header { | @@ -69,7 +127,7 @@ header { | ||
69 | * Project / Area name | 127 | * Project / Area name |
70 | * | 128 | * |
71 | */ | 129 | */ |
72 | - .project_name { | 130 | + .title { |
73 | position: relative; | 131 | position: relative; |
74 | float: left; | 132 | float: left; |
75 | margin: 0; | 133 | margin: 0; |
@@ -128,11 +186,14 @@ header { | @@ -128,11 +186,14 @@ header { | ||
128 | background: #708090; | 186 | background: #708090; |
129 | border-bottom: 1px solid #AAA; | 187 | border-bottom: 1px solid #AAA; |
130 | 188 | ||
189 | + .navbar-toggle { color: #fff; } | ||
190 | + | ||
131 | .nav > li > a { | 191 | .nav > li > a { |
132 | color: #AAA; | 192 | color: #AAA; |
133 | text-shadow: 0 1px 0 #444; | 193 | text-shadow: 0 1px 0 #444; |
134 | 194 | ||
135 | - &:hover { | 195 | + &:hover, &:focus, &:active { |
196 | + background: none; | ||
136 | color: #FFF; | 197 | color: #FFF; |
137 | } | 198 | } |
138 | } | 199 | } |
@@ -160,18 +221,18 @@ header { | @@ -160,18 +221,18 @@ header { | ||
160 | .app_logo { | 221 | .app_logo { |
161 | a { | 222 | a { |
162 | h1 { | 223 | h1 { |
163 | - background: url('logo-white.png') no-repeat center center; | 224 | + background: image-url('logo-white.png') no-repeat center center; |
164 | background-size: 32px; | 225 | background-size: 32px; |
165 | color: #fff; | 226 | color: #fff; |
166 | text-shadow: 0 1px 1px #444; | 227 | text-shadow: 0 1px 1px #444; |
167 | } | 228 | } |
168 | } | 229 | } |
169 | } | 230 | } |
170 | - .project_name { | 231 | + .title { |
171 | a { | 232 | a { |
172 | - color: #BBB; | 233 | + color: #FFF; |
173 | &:hover { | 234 | &:hover { |
174 | - color: #FFF; | 235 | + text-decoration: underline; |
175 | } | 236 | } |
176 | } | 237 | } |
177 | color: #fff; | 238 | color: #fff; |
app/assets/stylesheets/sections/issues.scss
@@ -14,8 +14,8 @@ | @@ -14,8 +14,8 @@ | ||
14 | 14 | ||
15 | .issue-check { | 15 | .issue-check { |
16 | float: left; | 16 | float: left; |
17 | - padding: 8px 0; | ||
18 | padding-right: 8px; | 17 | padding-right: 8px; |
18 | + margin-bottom: 10px; | ||
19 | min-width: 15px; | 19 | min-width: 15px; |
20 | } | 20 | } |
21 | 21 | ||
@@ -38,13 +38,21 @@ | @@ -38,13 +38,21 @@ | ||
38 | } | 38 | } |
39 | } | 39 | } |
40 | 40 | ||
41 | -input.check_all_issues { | 41 | +.check-all-holder { |
42 | + height: 32px; | ||
42 | float: left; | 43 | float: left; |
43 | - padding: 0; | ||
44 | - margin: 0; | ||
45 | - margin-right: 10px; | ||
46 | - position: relative; | ||
47 | - top: 13px; | 44 | + margin-right: 12px; |
45 | + padding: 6px 10px; | ||
46 | + border: 1px solid #ccc; | ||
47 | + @include border-radius(4px); | ||
48 | + | ||
49 | + | ||
50 | + input.check_all_issues { | ||
51 | + padding: 0; | ||
52 | + margin: 0; | ||
53 | + position: relative; | ||
54 | + top: 3px; | ||
55 | + } | ||
48 | } | 56 | } |
49 | 57 | ||
50 | .issues_content { | 58 | .issues_content { |
@@ -57,23 +65,6 @@ input.check_all_issues { | @@ -57,23 +65,6 @@ input.check_all_issues { | ||
57 | } | 65 | } |
58 | } | 66 | } |
59 | 67 | ||
60 | -.btn.close_issue { | ||
61 | - color: #B94A48; | ||
62 | - font-weight: bold; | ||
63 | - @include shade; | ||
64 | - &:hover { | ||
65 | - color: #B94A48; | ||
66 | - } | ||
67 | -} | ||
68 | -.btn.reopen_issue { | ||
69 | - color: #468847; | ||
70 | - font-weight: bold; | ||
71 | - @include shade; | ||
72 | - &:hover { | ||
73 | - color: #468847; | ||
74 | - } | ||
75 | -} | ||
76 | - | ||
77 | @media (min-width: 800px) { .issues_filters select { width: 160px; } } | 68 | @media (min-width: 800px) { .issues_filters select { width: 160px; } } |
78 | @media (min-width: 1200px) { .issues_filters select { width: 220px; } } | 69 | @media (min-width: 1200px) { .issues_filters select { width: 220px; } } |
79 | 70 | ||
@@ -93,6 +84,13 @@ input.check_all_issues { | @@ -93,6 +84,13 @@ input.check_all_issues { | ||
93 | .update_selected_issues { | 84 | .update_selected_issues { |
94 | margin-left: 4px; | 85 | margin-left: 4px; |
95 | } | 86 | } |
87 | + | ||
88 | + .select2-container .select2-choice { | ||
89 | + height: 32px; | ||
90 | + line-height: 28px; | ||
91 | + color: #444 !important; | ||
92 | + font-weight: 500; | ||
93 | + } | ||
96 | } | 94 | } |
97 | } | 95 | } |
98 | 96 | ||
@@ -127,3 +125,21 @@ input.check_all_issues { | @@ -127,3 +125,21 @@ input.check_all_issues { | ||
127 | form.edit-issue { | 125 | form.edit-issue { |
128 | margin: 0; | 126 | margin: 0; |
129 | } | 127 | } |
128 | + | ||
129 | +.merge-request, | ||
130 | +.issue { | ||
131 | + &.today { | ||
132 | + background: #EFE; | ||
133 | + border-color: #CEC; | ||
134 | + } | ||
135 | + | ||
136 | + &.closed { | ||
137 | + background: #F5f5f5; | ||
138 | + border-color: #E5E5E5; | ||
139 | + } | ||
140 | + | ||
141 | + &.merged { | ||
142 | + background: #F5f5f5; | ||
143 | + border-color: #E5E5E5; | ||
144 | + } | ||
145 | +} |
app/assets/stylesheets/sections/login.scss
@@ -6,11 +6,10 @@ | @@ -6,11 +6,10 @@ | ||
6 | } | 6 | } |
7 | 7 | ||
8 | .login-box{ | 8 | .login-box{ |
9 | - width: 304px; | 9 | + max-width: 304px; |
10 | position: relative; | 10 | position: relative; |
11 | @include border-radius(5px); | 11 | @include border-radius(5px); |
12 | margin: auto; | 12 | margin: auto; |
13 | - padding: 20px; | ||
14 | background: white; | 13 | background: white; |
15 | } | 14 | } |
16 | 15 | ||
@@ -23,7 +22,7 @@ | @@ -23,7 +22,7 @@ | ||
23 | background-color: #f1f1f1; | 22 | background-color: #f1f1f1; |
24 | font-size: 16px; | 23 | font-size: 16px; |
25 | padding: 14px 10px; | 24 | padding: 14px 10px; |
26 | - width: 280px; | 25 | + width: 100%; |
27 | height: auto; | 26 | height: auto; |
28 | 27 | ||
29 | &.top { | 28 | &.top { |
app/assets/stylesheets/sections/merge_requests.scss
@@ -31,10 +31,10 @@ | @@ -31,10 +31,10 @@ | ||
31 | 31 | ||
32 | .mr_source_commit, | 32 | .mr_source_commit, |
33 | .mr_target_commit { | 33 | .mr_target_commit { |
34 | + margin-top: 10px; | ||
34 | .commit { | 35 | .commit { |
35 | margin: 0; | 36 | margin: 0; |
36 | - padding: 0; | ||
37 | - padding: 5px 0; | 37 | + padding: 2px 0; |
38 | list-style: none; | 38 | list-style: none; |
39 | &:hover { | 39 | &:hover { |
40 | background: none; | 40 | background: none; |
@@ -90,15 +90,8 @@ | @@ -90,15 +90,8 @@ | ||
90 | padding-top: 15px; | 90 | padding-top: 15px; |
91 | } | 91 | } |
92 | 92 | ||
93 | -.merge-request-branches { | ||
94 | - .commit-row-message { | ||
95 | - font-weight: normal !important; | ||
96 | - } | ||
97 | - | ||
98 | - .select2-container .select2-single { | ||
99 | - span { | ||
100 | - font-weight: bold; | ||
101 | - color: #555; | ||
102 | - } | ||
103 | - } | 93 | +// hide mr close link for inline diff comment form |
94 | +.diff-file .close-mr-link, | ||
95 | +.diff-file .reopen-mr-link { | ||
96 | + display: none; | ||
104 | } | 97 | } |
app/assets/stylesheets/sections/nav.scss
@@ -35,9 +35,8 @@ | @@ -35,9 +35,8 @@ | ||
35 | width: 1%; | 35 | width: 1%; |
36 | &.active { | 36 | &.active { |
37 | a { | 37 | a { |
38 | - color: $style_color; | ||
39 | - font-weight: bolder; | ||
40 | - | 38 | + color: #333; |
39 | + font-weight: bold; | ||
41 | &:after { | 40 | &:after { |
42 | content: ''; | 41 | content: ''; |
43 | display: block; | 42 | display: block; |
@@ -46,7 +45,7 @@ | @@ -46,7 +45,7 @@ | ||
46 | left: 50%; | 45 | left: 50%; |
47 | width: 0; | 46 | width: 0; |
48 | height: 0; | 47 | height: 0; |
49 | - border-color: transparent transparent #777 transparent; | 48 | + border-color: transparent transparent #333 transparent; |
50 | border-style: solid; | 49 | border-style: solid; |
51 | border-width: 6px; | 50 | border-width: 6px; |
52 | margin-left: -6px; | 51 | margin-left: -6px; |
@@ -56,7 +55,20 @@ | @@ -56,7 +55,20 @@ | ||
56 | 55 | ||
57 | &:hover { | 56 | &:hover { |
58 | a { | 57 | a { |
59 | - color: $style_color; | 58 | + color: $link_color; |
59 | + &:after { | ||
60 | + content: ''; | ||
61 | + display: block; | ||
62 | + position: relative; | ||
63 | + bottom: 8px; | ||
64 | + left: 50%; | ||
65 | + width: 0; | ||
66 | + height: 0; | ||
67 | + border-color: transparent transparent #29b transparent; | ||
68 | + border-style: solid; | ||
69 | + border-width: 6px; | ||
70 | + margin-left: -6px; | ||
71 | + } | ||
60 | } | 72 | } |
61 | } | 73 | } |
62 | 74 | ||
@@ -73,7 +85,7 @@ | @@ -73,7 +85,7 @@ | ||
73 | a { | 85 | a { |
74 | display: block; | 86 | display: block; |
75 | text-align: center; | 87 | text-align: center; |
76 | - font-weight: normal; | 88 | + font-weight: 500; |
77 | height: 38px; | 89 | height: 38px; |
78 | line-height: 34px; | 90 | line-height: 34px; |
79 | color: #777; | 91 | color: #777; |
@@ -83,4 +95,38 @@ | @@ -83,4 +95,38 @@ | ||
83 | padding-top: 2px; | 95 | padding-top: 2px; |
84 | } | 96 | } |
85 | } | 97 | } |
98 | + | ||
99 | + @media (max-width: $screen-xs-max) { | ||
100 | + font-size: 18px; | ||
101 | + margin: 0; | ||
102 | + | ||
103 | + max-height: none; | ||
104 | + | ||
105 | + &, .container { | ||
106 | + padding: 0; | ||
107 | + border-top: 0; | ||
108 | + } | ||
109 | + | ||
110 | + ul { | ||
111 | + height: auto; | ||
112 | + | ||
113 | + li { | ||
114 | + display: list-item; | ||
115 | + width: auto; | ||
116 | + padding: 5px 0; | ||
117 | + | ||
118 | + &.active { | ||
119 | + background-color: $primary_color; | ||
120 | + | ||
121 | + a { | ||
122 | + color: #fff; | ||
123 | + font-weight: normal; | ||
124 | + text-shadow: none; | ||
125 | + | ||
126 | + &:after { display: none; } | ||
127 | + } | ||
128 | + } | ||
129 | + } | ||
130 | + } | ||
131 | + } | ||
86 | } | 132 | } |
app/assets/stylesheets/sections/notes.scss
@@ -47,13 +47,13 @@ ul.notes { | @@ -47,13 +47,13 @@ ul.notes { | ||
47 | .discussion-body { | 47 | .discussion-body { |
48 | margin-left: 50px; | 48 | margin-left: 50px; |
49 | 49 | ||
50 | - .file, | 50 | + .diff-file, |
51 | .discussion-hidden, | 51 | .discussion-hidden, |
52 | .notes { | 52 | .notes { |
53 | @extend .borders; | 53 | @extend .borders; |
54 | background-color: #F9F9F9; | 54 | background-color: #F9F9F9; |
55 | } | 55 | } |
56 | - .file .notes { | 56 | + .diff-file .notes { |
57 | /* reset */ | 57 | /* reset */ |
58 | background: inherit; | 58 | background: inherit; |
59 | border: none; | 59 | border: none; |
@@ -87,15 +87,10 @@ ul.notes { | @@ -87,15 +87,10 @@ ul.notes { | ||
87 | } | 87 | } |
88 | .attachment { | 88 | .attachment { |
89 | font-size: 14px; | 89 | font-size: 14px; |
90 | - margin-top: -20px; | ||
91 | } | 90 | } |
92 | .note-body { | 91 | .note-body { |
93 | @include md-typography; | 92 | @include md-typography; |
94 | margin-left: 45px; | 93 | margin-left: 45px; |
95 | - | ||
96 | - .highlight { | ||
97 | - @include border-radius(4px); | ||
98 | - } | ||
99 | } | 94 | } |
100 | .note-header { | 95 | .note-header { |
101 | padding-bottom: 5px; | 96 | padding-bottom: 5px; |
@@ -118,7 +113,7 @@ ul.notes { | @@ -118,7 +113,7 @@ ul.notes { | ||
118 | } | 113 | } |
119 | } | 114 | } |
120 | 115 | ||
121 | -.file .notes_holder { | 116 | +.diff-file .notes_holder { |
122 | font-size: 13px; | 117 | font-size: 13px; |
123 | line-height: 18px; | 118 | line-height: 18px; |
124 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | 119 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; |
@@ -188,7 +183,7 @@ ul.notes { | @@ -188,7 +183,7 @@ ul.notes { | ||
188 | } | 183 | } |
189 | } | 184 | } |
190 | } | 185 | } |
191 | -.file .note .note-actions { | 186 | +.diff-file .note .note-actions { |
192 | right: 0; | 187 | right: 0; |
193 | top: 0; | 188 | top: 0; |
194 | } | 189 | } |
@@ -199,7 +194,7 @@ ul.notes { | @@ -199,7 +194,7 @@ ul.notes { | ||
199 | * Line note button on the side of diffs | 194 | * Line note button on the side of diffs |
200 | */ | 195 | */ |
201 | 196 | ||
202 | -.file tr.line_holder { | 197 | +.diff-file tr.line_holder { |
203 | .add-diff-note { | 198 | .add-diff-note { |
204 | background: url("diff_note_add.png") no-repeat left 0; | 199 | background: url("diff_note_add.png") no-repeat left 0; |
205 | height: 22px; | 200 | height: 22px; |
@@ -239,22 +234,25 @@ ul.notes { | @@ -239,22 +234,25 @@ ul.notes { | ||
239 | .reply-btn { | 234 | .reply-btn { |
240 | @extend .btn-primary; | 235 | @extend .btn-primary; |
241 | } | 236 | } |
242 | -.file .content tr.line_holder:hover { | ||
243 | - &> td.line_content { | ||
244 | - background: $hover !important; | ||
245 | - border-color: darken($hover, 10%) !important; | 237 | +.diff-file .diff-content { |
238 | + tr.line_holder:hover { | ||
239 | + &> td.line_content { | ||
240 | + background: $hover !important; | ||
241 | + border-color: darken($hover, 10%) !important; | ||
242 | + } | ||
243 | + &> td.new_line, | ||
244 | + &> td.old_line { | ||
245 | + background: darken($hover, 4%) !important; | ||
246 | + border-color: darken($hover, 10%) !important; | ||
247 | + } | ||
246 | } | 248 | } |
247 | - &> td.new_line, | ||
248 | - &> td.old_line { | ||
249 | - background: darken($hover, 4%) !important; | ||
250 | - border-color: darken($hover, 10%) !important; | 249 | + |
250 | + tr.line_holder:hover > td .line_note_link { | ||
251 | + opacity: 1.0; | ||
252 | + filter: alpha(opacity=100); | ||
251 | } | 253 | } |
252 | } | 254 | } |
253 | -.file .content tr.line_holder:hover > td .line_note_link { | ||
254 | - opacity: 1.0; | ||
255 | - filter: alpha(opacity=100); | ||
256 | -} | ||
257 | -.file, | 255 | +.diff-file, |
258 | .discussion { | 256 | .discussion { |
259 | .new_note { | 257 | .new_note { |
260 | margin: 0; | 258 | margin: 0; |
@@ -292,7 +290,7 @@ ul.notes { | @@ -292,7 +290,7 @@ ul.notes { | ||
292 | box-shadow: none; | 290 | box-shadow: none; |
293 | font-size: 14px; | 291 | font-size: 14px; |
294 | height: 80px; | 292 | height: 80px; |
295 | - width: 98.6%; | 293 | + width: 100%; |
296 | } | 294 | } |
297 | } | 295 | } |
298 | } | 296 | } |
@@ -306,6 +304,7 @@ ul.notes { | @@ -306,6 +304,7 @@ ul.notes { | ||
306 | @extend .col-md-4; | 304 | @extend .col-md-4; |
307 | @extend .thumbnail; | 305 | @extend .thumbnail; |
308 | margin-left: 45px; | 306 | margin-left: 45px; |
307 | + float: none; | ||
309 | } | 308 | } |
310 | 309 | ||
311 | 310 | ||
@@ -341,7 +340,7 @@ ul.notes { | @@ -341,7 +340,7 @@ ul.notes { | ||
341 | box-shadow: none; | 340 | box-shadow: none; |
342 | font-size: 14px; | 341 | font-size: 14px; |
343 | height: 80px; | 342 | height: 80px; |
344 | - width: 98.6%; | 343 | + width: 100%; |
345 | } | 344 | } |
346 | 345 | ||
347 | .form-actions { | 346 | .form-actions { |
app/assets/stylesheets/sections/profile.scss
@@ -105,3 +105,23 @@ | @@ -105,3 +105,23 @@ | ||
105 | } | 105 | } |
106 | } | 106 | } |
107 | } | 107 | } |
108 | + | ||
109 | +.profile-groups-avatars { | ||
110 | + margin: 0 5px 10px 0; | ||
111 | + | ||
112 | + img { | ||
113 | + width: 50px; | ||
114 | + height: 50px; | ||
115 | + } | ||
116 | +} | ||
117 | + | ||
118 | +.global-notifications-form .level-title { | ||
119 | + font-size: 15px; | ||
120 | + color: #333; | ||
121 | + font-weight: bold; | ||
122 | +} | ||
123 | + | ||
124 | +.notification-icon-holder { | ||
125 | + width: 20px; | ||
126 | + float: left; | ||
127 | +} |
app/assets/stylesheets/sections/projects.scss
@@ -123,14 +123,9 @@ | @@ -123,14 +123,9 @@ | ||
123 | } | 123 | } |
124 | 124 | ||
125 | .save-project-loader { | 125 | .save-project-loader { |
126 | - img { | ||
127 | - margin-top: 50px; | ||
128 | - margin-bottom: 50px; | ||
129 | - } | ||
130 | - h3 { | ||
131 | - @extend .page-title; | ||
132 | - } | ||
133 | - | 126 | + margin-top: 50px; |
127 | + margin-bottom: 50px; | ||
128 | + color: #555; | ||
134 | } | 129 | } |
135 | 130 | ||
136 | ul.nav.nav-projects-tabs { | 131 | ul.nav.nav-projects-tabs { |
app/assets/stylesheets/sections/tree.scss
@@ -127,9 +127,27 @@ | @@ -127,9 +127,27 @@ | ||
127 | border-top: 1px dashed #CCC; | 127 | border-top: 1px dashed #CCC; |
128 | padding-top: 10px; | 128 | padding-top: 10px; |
129 | 129 | ||
130 | - h4 { | 130 | + .readme-file-title { |
131 | font-size: 14px; | 131 | font-size: 14px; |
132 | margin-bottom: 20px; | 132 | margin-bottom: 20px; |
133 | color: #777; | 133 | color: #777; |
134 | } | 134 | } |
135 | } | 135 | } |
136 | + | ||
137 | +.blob-commit-info { | ||
138 | + list-style: none; | ||
139 | + margin: 0; | ||
140 | + padding: 0; | ||
141 | + margin-bottom: 10px; | ||
142 | + | ||
143 | + .commit { | ||
144 | + .commit-row-title { | ||
145 | + font-size: 13px; | ||
146 | + | ||
147 | + .commit-row-message { | ||
148 | + font-weight: normal; | ||
149 | + color: #555; | ||
150 | + } | ||
151 | + } | ||
152 | + } | ||
153 | +} |
app/assets/stylesheets/themes/ui_color.scss
@@ -18,7 +18,7 @@ | @@ -18,7 +18,7 @@ | ||
18 | .navbar-inner { | 18 | .navbar-inner { |
19 | background: #547; | 19 | background: #547; |
20 | border-bottom: 1px solid #435; | 20 | border-bottom: 1px solid #435; |
21 | - .app_logo { | 21 | + .app_logo, .navbar-toggle { |
22 | &:hover { | 22 | &:hover { |
23 | background-color: #435; | 23 | background-color: #435; |
24 | } | 24 | } |
@@ -36,4 +36,8 @@ | @@ -36,4 +36,8 @@ | ||
36 | } | 36 | } |
37 | } | 37 | } |
38 | } | 38 | } |
39 | + | ||
40 | + .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { | ||
41 | + background: #769; | ||
42 | + } | ||
39 | } | 43 | } |
app/assets/stylesheets/themes/ui_gray.scss
@@ -18,7 +18,7 @@ | @@ -18,7 +18,7 @@ | ||
18 | .navbar-inner { | 18 | .navbar-inner { |
19 | background: #373737; | 19 | background: #373737; |
20 | border-bottom: 1px solid #272727; | 20 | border-bottom: 1px solid #272727; |
21 | - .app_logo { | 21 | + .app_logo, .navbar-toggle { |
22 | &:hover { | 22 | &:hover { |
23 | background-color: #272727; | 23 | background-color: #272727; |
24 | } | 24 | } |
app/assets/stylesheets/themes/ui_mars.scss
@@ -18,7 +18,7 @@ | @@ -18,7 +18,7 @@ | ||
18 | .navbar-inner { | 18 | .navbar-inner { |
19 | background: #474D57; | 19 | background: #474D57; |
20 | border-bottom: 1px solid #373D47; | 20 | border-bottom: 1px solid #373D47; |
21 | - .app_logo { | 21 | + .app_logo, .navbar-toggle { |
22 | &:hover { | 22 | &:hover { |
23 | background-color: #373D47; | 23 | background-color: #373D47; |
24 | } | 24 | } |
app/assets/stylesheets/themes/ui_modern.scss
@@ -18,7 +18,7 @@ | @@ -18,7 +18,7 @@ | ||
18 | .navbar-inner { | 18 | .navbar-inner { |
19 | background: #345; | 19 | background: #345; |
20 | border-bottom: 1px solid #234; | 20 | border-bottom: 1px solid #234; |
21 | - .app_logo { | 21 | + .app_logo, .navbar-toggle { |
22 | &:hover { | 22 | &:hover { |
23 | background-color: #234; | 23 | background-color: #234; |
24 | } | 24 | } |
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 |