Commit b1492a2a627d1fe51f5cdd5423169247a188f7e4

Authored by GitLab
2 parents 1c9a41e0 319f355a

sync with upstream for ease to merge

Showing 944 changed files with 19326 additions and 10426 deletions   Show diff stats

Too many changes.

To preserve performance only 100 of 944 files displayed.

@@ -34,3 +34,4 @@ doc/code/* @@ -34,3 +34,4 @@ doc/code/*
34 .secret 34 .secret
35 *.log 35 *.log
36 public/uploads.* 36 public/uploads.*
  37 +public/assets/
1 language: ruby 1 language: ruby
2 env: 2 env:
3 - - DB=mysql TRAVIS=true 3 + global:
  4 + - DB=mysql
  5 + - TRAVIS=true
  6 + matrix:
  7 + - TASK=spinach
  8 + - TASK=spec
  9 + - TASK=jasmine:ci
4 before_install: 10 before_install:
5 - sudo apt-get install libicu-dev -y 11 - sudo apt-get install libicu-dev -y
6 - - gem install charlock_holmes -v="0.6.9"  
7 branches: 12 branches:
8 only: 13 only:
9 - 'master' 14 - 'master'
@@ -11,8 +16,12 @@ rvm: @@ -11,8 +16,12 @@ rvm:
11 - 2.0.0 16 - 2.0.0
12 services: 17 services:
13 - mysql 18 - mysql
14 - - postgresql 19 + - redis-server
15 before_script: 20 before_script:
16 - "cp config/database.yml.$DB config/database.yml" 21 - "cp config/database.yml.$DB config/database.yml"
17 - "cp config/gitlab.yml.example config/gitlab.yml" 22 - "cp config/gitlab.yml.example config/gitlab.yml"
18 -script: "bundle exec rake gitlab:test --trace" 23 + - "bundle exec rake db:setup"
  24 + - "bundle exec rake db:seed_fu"
  25 +script: "bundle exec rake $TASK --trace"
  26 +notifications:
  27 + email: false
1 -v 6.2.0 1 +v 6.6.0
2 - Retrieving user ssh keys publically(github style): http://__HOST__/__USERNAME__.keys 2 - Retrieving user ssh keys publically(github style): http://__HOST__/__USERNAME__.keys
  3 + - Permissions: Developer now can manage issue tracker (modify any issue)
  4 + - Improve Code Compare page performance
  5 +
  6 +v 6.5.1
  7 + - Fix branch selectbox when create merge request from fork
  8 +
  9 +v 6.5.0
  10 + - Dropdown menus on issue#show page for assignee and milestone (Jason Blanchard)
  11 + - Add color custimization and previewing to broadcast messages
  12 + - Fixed notes anchors
  13 + - Load new comments in issues dynamically
  14 + - Added sort options to Public page
  15 + - New filters (assigned/authored/all) for Dashboard#issues/merge_requests (sponsored by Say Media)
  16 + - Add project visibility icons to dashboard
  17 + - Enable secure cookies if https used
  18 + - Protect users/confirmation with rack_attack
  19 + - Default HTTP headers to protect against MIME-sniffing, force https if enabled
  20 + - Bootstrap 3 with responsive UI
  21 + - New repository download formats: tar.bz2, zip, tar (Jason Hollingsworth)
  22 + - Restyled accept widgets for MR
  23 + - SCSS refactored
  24 + - Use jquery timeago plugin
  25 + - Fix 500 error for rdoc files
  26 + - Ability to customize merge commit message (sponsored by Say Media)
  27 + - Search autocomplete via ajax
  28 + - Add website url to user profile
  29 + - Files API supports base64 encoded content (sponsored by O'Reilly Media)
  30 + - Added support for Go's repository retrieval (Bruno Albuquerque)
  31 +
  32 +v6.4.3
  33 + - Don't use unicorn worker killer if PhusionPassenger is defined
  34 +
  35 +v6.4.2
  36 + - Fixed wrong behaviour of script/upgrade.rb
  37 +
  38 +v6.4.1
  39 + - Fixed bug with repository rename
  40 + - Fixed bug with project transfer
  41 +
  42 +v 6.4.0
  43 + - Added sorting to project issues page (Jason Blanchard)
  44 + - Assembla integration (Carlos Paramio)
  45 + - Fixed another 500 error with submodules
  46 + - UI: More compact issues page
  47 + - Minimal password length increased to 8 symbols
  48 + - Side-by-side diff view (Steven Thonus)
  49 + - Internal projects (Jason Hollingsworth)
  50 + - Allow removal of avatar (Drew Blessing)
  51 + - Project web hooks now support issues and merge request events
  52 + - Visiting project page while not logged in will redirect to sign-in instead of 404 (Jason Hollingsworth)
  53 + - Expire event cache on avatar creation/removal (Drew Blessing)
  54 + - Archiving old projects (Steven Thonus)
  55 + - Rails 4
  56 + - Add time ago tooltips to show actual date/time
  57 + - UI: Fixed UI for admin system hooks
  58 + - Ruby script for easier GitLab upgrade
  59 + - Do not remove Merge requests if fork project was removed
  60 + - Improve sign-in/signup UX
  61 + - Add resend confirmation link to sign-in page
  62 + - Set noreply@HOSTNAME for reply_to field in all emails
  63 + - Show GitLab API version on Admin#dashboard
  64 + - API Cross-origin resource sharing
  65 + - Show READMe link at project home page
  66 + - Show repo size for projects in Admin area
  67 +
  68 +v 6.3.0
  69 + - API for adding gitlab-ci service
  70 + - Init script now waits for pids to appear after (re)starting before reporting status (Rovanion Luckey)
  71 + - Restyle project home page
  72 + - Grammar fixes
  73 + - Show branches list (which branches contains commit) on commit page (Andrew Kumanyaev)
  74 + - Security improvements
  75 + - Added support for GitLab CI 4.0
  76 + - Fixed issue with 500 error when group did not exist
  77 + - Ability to leave project
  78 + - You can create file in repo using UI
  79 + - You can remove file from repo using UI
  80 + - API: dropped default_branch attribute from project during creation
  81 + - Project default_branch is not stored in db any more. It takes from repo now.
  82 + - Admin broadcast messages
  83 + - UI improvements
  84 + - Dont show last push widget if user removed this branch
  85 + - Fix 500 error for repos with newline in file name
  86 + - Extended html titles
  87 + - API: create/update/delete repo files
  88 + - Admin can transfer project to any namespace
  89 + - API: projects/all for admin users
  90 + - Fix recent branches order
  91 +
  92 +v 6.2.4
  93 + - Security: Cast API private_token to string (CVE-2013-4580)
  94 + - Security: Require gitlab-shell 1.7.8 (CVE-2013-4581, CVE-2013-4582, CVE-2013-4583)
  95 + - Fix for Git SSH access for LDAP users
  96 +
  97 +v 6.2.3
  98 + - Security: More protection against CVE-2013-4489
  99 + - Security: Require gitlab-shell 1.7.4 (CVE-2013-4490, CVE-2013-4546)
  100 + - Fix sidekiq rake tasks
  101 +
  102 +v 6.2.2
  103 + - Security: Update gitlab_git (CVE-2013-4489)
  104 +
  105 +v 6.2.1
  106 + - Security: Fix issue with generated passwords for new users
  107 +
  108 +v 6.2.0
3 - Public projects are visible from the outside 109 - Public projects are visible from the outside
  110 + - Public project pages are now visible to everyone (files, issues, wik, etc.)
  111 + THIS MEANS YOUR ISSUES AND WIKI FOR PUBLIC PROJECTS ARE PUBLICLY VISIBLE AFTER THE UPGRADE
4 - Add group access to permissions page 112 - Add group access to permissions page
5 - Require current password to change one 113 - Require current password to change one
6 - Group owner or admin can remove other group owners 114 - Group owner or admin can remove other group owners
@@ -13,6 +121,13 @@ v 6.2.0 @@ -13,6 +121,13 @@ v 6.2.0
13 - Update logic for validates_merge_request for tree of MR (Andrew Kumanyaev) 121 - Update logic for validates_merge_request for tree of MR (Andrew Kumanyaev)
14 - Rake tasks for web hooks management (Jonhnny Weslley) 122 - Rake tasks for web hooks management (Jonhnny Weslley)
15 - Extended User API to expose admin and can_create_group for user creation/updating (Boyan Tabakov) 123 - Extended User API to expose admin and can_create_group for user creation/updating (Boyan Tabakov)
  124 + - API: Remove group
  125 + - API: Remove project
  126 + - Avatar upload on profile page with a maximum of 100KB (Steven Thonus)
  127 + - Store the sessions in Redis instead of the cookie store
  128 + - Fixed relative links in markdown
  129 + - User must confirm their email if signup enabled
  130 + - User must confirm changed email
16 131
17 v 6.1.0 132 v 6.1.0
18 - Project specific IDs for issues, mr, milestones 133 - Project specific IDs for issues, mr, milestones
@@ -33,7 +148,7 @@ v 6.1.0 @@ -33,7 +148,7 @@ v 6.1.0
33 - Add links to create branch/tag from project home page 148 - Add links to create branch/tag from project home page
34 - Add public-project? checkbox to new-project view 149 - Add public-project? checkbox to new-project view
35 - Improved compare page. Added link to proceed into Merge Request 150 - Improved compare page. Added link to proceed into Merge Request
36 - - Send email to user when he was added to group 151 + - Send an email to a user when they are added to group
37 - New landing page when you have 0 projects 152 - New landing page when you have 0 projects
38 153
39 v 6.0.0 154 v 6.0.0
@@ -76,6 +191,14 @@ v 6.0.0 @@ -76,6 +191,14 @@ v 6.0.0
76 - Improved MR comments logic 191 - Improved MR comments logic
77 - Render readme file for projects in public area 192 - Render readme file for projects in public area
78 193
  194 +v 5.4.2
  195 + - Security: Cast API private_token to string (CVE-2013-4580)
  196 + - Security: Require gitlab-shell 1.7.8 (CVE-2013-4581, CVE-2013-4582, CVE-2013-4583)
  197 +
  198 +v 5.4.1
  199 + - Security: Fixes for CVE-2013-4489
  200 + - Security: Require gitlab-shell 1.7.4 (CVE-2013-4490, CVE-2013-4546)
  201 +
79 v 5.4.0 202 v 5.4.0
80 - Ability to edit own comments 203 - Ability to edit own comments
81 - Documentation improvements 204 - Documentation improvements
CONTRIBUTING.md
1 # Contribute to GitLab 1 # Contribute to GitLab
2 2
3 -This guide details how to use issues and pull requests to improve GitLab.  
4 -  
5 -- [Closing policy for issues and pull requests](#closing-policy-for-issues-and-pull-requests)  
6 -- [Issue tracker](#issue-tracker)  
7 -- [Pull requests](#pull-requests) 3 +This guide details how contribute to GitLab.
8 4
9 If you want to know how the GitLab team handles contributions have a look at [the GitLab contributing process](PROCESS.md). 5 If you want to know how the GitLab team handles contributions have a look at [the GitLab contributing process](PROCESS.md).
10 6
11 -## Closing policy for issues and pull requests 7 +## Contributor license agreement
  8 +
  9 +By submitting code as an individual you agree to the [individual contributor license agreement](doc/legal/individual_contributor_license_agreement.md). By submitting code as an entity you agree to the [corporate contributor license agreement](doc/legal/corporate_contributor_license_agreement.md).
  10 +
  11 +## Security vulnerability disclosure
  12 +
  13 +Please report suspected security vulnerabilities in private to support@gitlab.com, also see the [disclosure section on the GitLab.com website](http://www.gitlab.com/disclosure/). Please do NOT create publicly viewable issues for suspected security vulnerabilities.
  14 +
  15 +## Closing policy for issues and merge requests
12 16
13 -GitLab is a popular open source project and the capacity to deal with issues and pull requests is limited. Out of respect for our volunteers, issues and pull requests not in line with the guidelines listed in this document may be closed without notice. 17 +GitLab is a popular open source project and the capacity to deal with issues and merge requests is limited. Out of respect for our volunteers, issues and merge requests not in line with the guidelines listed in this document may be closed without notice.
14 18
15 Please treat our volunteers with courtesy and respect, it will go a long way towards getting your issue resolved. 19 Please treat our volunteers with courtesy and respect, it will go a long way towards getting your issue resolved.
16 20
17 -Issues and pull requests should be in English and contain appropriate language for audiences of all ages. 21 +Issues and merge requests should be in English and contain appropriate language for audiences of all ages.
18 22
19 ## Issue tracker 23 ## Issue tracker
20 24
21 -To get support for your particular problem please use the channels as detailed in [the getting help section of the readme](https://github.com/gitlabhq/gitlabhq#getting-help). Professional [support subscriptions](http://www.gitlab.com/subscription/) and [consulting services](http://www.gitlab.com/consultancy/) are available from [GitLab.com](http://www.gitlab.com/). 25 +To get support for your particular problem please use the channels as detailed in the getting help section of [the readme](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/README.md). Professional [support subscriptions](http://www.gitlab.com/subscription/) and [consulting services](http://www.gitlab.com/consultancy/) are available from [GitLab.com](http://www.gitlab.com/).
22 26
23 -The [issue tracker](https://github.com/gitlabhq/gitlabhq/issues) is only for obvious bugs or misbehavior in the latest [stable or development release of GitLab](MAINTENANCE.md). When submitting an issue please conform to the issue submission guidelines listed below. Not all issues will be addressed and your issue is more likely to be addressed if you submit a pull request which partially or fully addresses the issue. 27 +The [issue tracker](https://gitlab.com/gitlab-org/gitlab-ce/issues) is only for obvious bugs or misbehavior in the latest [stable or development release of GitLab](MAINTENANCE.md). When submitting an issue please conform to the issue submission guidelines listed below. Not all issues will be addressed and your issue is more likely to be addressed if you submit a merge request which partially or fully addresses the issue.
24 28
25 Do not use the issue tracker for feature requests. We have a specific [feedback and suggestions forum](http://feedback.gitlab.com) for this purpose. 29 Do not use the issue tracker for feature requests. We have a specific [feedback and suggestions forum](http://feedback.gitlab.com) for this purpose.
26 30
27 -Please send a pull request with a tested solution or a pull request with a failing test instead of opening an issue if you can. If you're unsure where to post, post to the [mailing list](https://groups.google.com/forum/#!forum/gitlabhq) or [Stack Overflow](http://stackoverflow.com/questions/tagged/gitlab) first. There are a lot of helpful GitLab users there who may be able to help you quickly. If your particular issue turns out to be a bug, it will find its way from there. 31 +Please send a merge request with a tested solution or a merge request with a failing test instead of opening an issue if you can. If you're unsure where to post, post to the [mailing list](https://groups.google.com/forum/#!forum/gitlabhq) or [Stack Overflow](http://stackoverflow.com/questions/tagged/gitlab) first. There are a lot of helpful GitLab users there who may be able to help you quickly. If your particular issue turns out to be a bug, it will find its way from there.
28 32
29 ### Issue tracker guidelines 33 ### Issue tracker guidelines
30 34
31 -**[Search](https://github.com/gitlabhq/gitlabhq/search?q=&ref=cmdform&type=Issues)** for similar entries before submitting your own, there's a good chance somebody else had the same issue. Show your support with `:+1:` and/or join the discussion. Please submit issues in the following format (as the first post): 35 +**[Search the issues](https://gitlab.com/gitlab-org/gitlab-ce/issues)** for similar entries before submitting your own, there's a good chance somebody else had the same issue. Show your support with `:+1:` and/or join the discussion. Please submit issues in the following format (as the first post):
32 36
33 1. **Summary:** Summarize your issue in one sentence (what goes wrong, what did you expect to happen) 37 1. **Summary:** Summarize your issue in one sentence (what goes wrong, what did you expect to happen)
34 -2. **Steps to reproduce:** How can we reproduce the issue, preferably on the [GitLab Vagrant virtual machine](https://github.com/gitlabhq/gitlab-vagrant-vm) (start with: `vagrant destroy && vagrant up && vagrant ssh`) 38 +2. **Steps to reproduce:** How can we reproduce the issue, preferably on the [GitLab development virtual machine with vagrant](https://gitlab.com/gitlab-org/cookbook-gitlab/blob/master/doc/development.md) (start your issue with: `vagrant destroy && vagrant up && vagrant ssh`)
35 3. **Expected behavior:** Describe your issue in detail 39 3. **Expected behavior:** Describe your issue in detail
36 4. **Observed behavior** 40 4. **Observed behavior**
37 5. **Relevant logs and/or screenshots:** Please use code blocks (\`\`\`) to format console output, logs, and code as it's very hard to read otherwise. 41 5. **Relevant logs and/or screenshots:** Please use code blocks (\`\`\`) to format console output, logs, and code as it's very hard to read otherwise.
@@ -42,34 +46,45 @@ Please send a pull request with a tested solution or a pull request with a faili @@ -42,34 +46,45 @@ Please send a pull request with a tested solution or a pull request with a faili
42 * Describe your setup (use relevant parts from `sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production`) 46 * Describe your setup (use relevant parts from `sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production`)
43 7. **Possible fixes**: If you can, link to the line of code that might be responsible for the problem 47 7. **Possible fixes**: If you can, link to the line of code that might be responsible for the problem
44 48
45 -## Pull requests 49 +## Merge requests
46 50
47 -We welcome pull requests with fixes and improvements to GitLab code, tests, and/or documentation. The features we would really like a pull request for are listed with the [status 'accepting merge/pull requests' on our feedback forum](http://feedback.gitlab.com/forums/176466-general/status/796455) but other improvements are also welcome. 51 +We welcome merge requests with fixes and improvements to GitLab code, tests, and/or documentation. The features we would really like a merge request for are listed with the [status 'accepting merge/merge requests' on our feedback forum](http://feedback.gitlab.com/forums/176466-general/status/796455) but other improvements are also welcome.
48 52
49 -### Pull request guidelines 53 +### Merge request guidelines
50 54
51 -If you can, please submit a pull request with the fix or improvements including tests. If you don't know how to fix the issue but can write a test that exposes the issue we will accept that as well. In general bug fixes that include a regression test are merged quickly while new features without proper tests are least likely to receive timely feedback. The workflow to make a pull request is as follows: 55 +If you can, please submit a merge request with the fix or improvements including tests. If you don't know how to fix the issue but can write a test that exposes the issue we will accept that as well. In general bug fixes that include a regression test are merged quickly while new features without proper tests are least likely to receive timely feedback. The workflow to make a merge request is as follows:
52 56
53 -1. Fork the project on GitHub 57 +1. Fork the project on GitLab Cloud
54 1. Create a feature branch 58 1. Create a feature branch
55 1. Write [tests](README.md#run-the-tests) and code 59 1. Write [tests](README.md#run-the-tests) and code
56 1. Add your changes to the [CHANGELOG](CHANGELOG) 60 1. Add your changes to the [CHANGELOG](CHANGELOG)
57 1. If you have multiple commits please combine them into one commit by [squashing them](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) 61 1. If you have multiple commits please combine them into one commit by [squashing them](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)
58 1. Push the commit to your fork 62 1. Push the commit to your fork
59 -1. Submit a pull request  
60 -2. [Search for issues](https://github.com/gitlabhq/gitlabhq/search?q=&ref=cmdform&type=Issues) related to your pull request and mention them in the pull request description  
61 -  
62 -We will accept pull requests if:  
63 -  
64 -* The code has proper tests and all tests pass (or it is a test exposing a failure in existing code)  
65 -* It can be merged without problems (if not please use: `git rebase master`)  
66 -* It does not break any existing functionality  
67 -* It's quality code that conforms to the [Ruby](https://github.com/bbatsov/ruby-style-guide) and [Rails](https://github.com/bbatsov/rails-style-guide) style guides and best practices  
68 -* The description includes a motive for your change and the method you used to achieve it  
69 -* It is not a catch all pull request but rather fixes a specific issue or implements a specific feature  
70 -* It keeps the GitLab code base clean and well structured  
71 -* We think other users will benefit from the same functionality  
72 -* If it makes changes to the UI the pull request should include screenshots  
73 -* It is a single commit (please use `git rebase -i` to squash commits)  
74 -  
75 -For examples of feedback on pull requests please look at already [closed pull requests](https://github.com/gitlabhq/gitlabhq/pulls?direction=desc&page=1&sort=created&state=closed). 63 +1. Submit a merge request (MR)
  64 +1. The MR title should describes the change you want to make
  65 +1. The MR description should give a motive for your change and the method you used to achieve it
  66 +1. If the MR changes the UI it should include before and after screenshots
  67 +1. Link relevant [issues](https://gitlab.com/gitlab-org/gitlab-ce/issues) and/or [feedback items](http://feedback.gitlab.com/) from the merge request description and leave a comment on them with a link back to the MR
  68 +1. Be prepared to answer questions and incorporate feedback even if requests for this arrive weeks or months after your MR submittion
  69 +
  70 +Please keep the change in a single MR **as small as possible**. If you want to contribute a large feature think very hard what the minimum viable change is. Can you split functionality? Can you only submit the backend/API code? Can you start with a very simple UI? The smaller a MR is the more likely it is it will be merged, after that you can send more MR's to enhance it.
  71 +
  72 +The **official merge window** is in the beginning of the month from the 1st to the 7th day of the month.
  73 +The best time to submit a MR and get feedback fast.
  74 +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.
  75 +After the 7th it is already getting closer to the release date of the next version.
  76 +This means there is less time to fix the issues created by merging large new features.
  77 +
  78 +We will accept a merge requests if it:
  79 +
  80 +* Includes proper tests and all tests pass (unless it contains a test exposing a bug in existing code)
  81 +* Can be merged without problems (if not please use: `git rebase master`)
  82 +* Do not break any existing functionality
  83 +* 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
  84 +* Fixes one specific issue or implements one specific feature (do not combine things, send separate merge requests if needed)
  85 +* Keeps the GitLab code base clean and well structured
  86 +* Contains functionality we think other users will benefit from too
  87 +* Doesn't add avoidable configuration options since these complicate future changes
  88 +* Contains a single commit (please use `git rebase -i` to squash commits)
  89 +
  90 +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).
@@ -8,14 +8,20 @@ def linux_only(require_as) @@ -8,14 +8,20 @@ def linux_only(require_as)
8 RUBY_PLATFORM.include?('linux') && require_as 8 RUBY_PLATFORM.include?('linux') && require_as
9 end 9 end
10 10
11 -gem "rails", "3.2.13" 11 +gem "rails", "~> 4.0.0"
  12 +
  13 +gem "protected_attributes"
  14 +gem 'rails-observers'
  15 +gem 'actionpack-page_caching'
  16 +gem 'actionpack-action_caching'
12 17
13 # Supported DBs 18 # Supported DBs
14 gem "mysql2", group: :mysql 19 gem "mysql2", group: :mysql
15 -gem "pg", group: :postgres 20 +#gem "pg", group: :postgres
16 21
17 # Auth 22 # Auth
18 -gem "devise", '~> 2.2' 23 +gem "devise", '3.0.4'
  24 +gem "devise-async", '0.8.0'
19 gem 'omniauth', "~> 1.1.3" 25 gem 'omniauth', "~> 1.1.3"
20 gem 'omniauth-google-oauth2' 26 gem 'omniauth-google-oauth2'
21 gem 'omniauth-twitter' 27 gem 'omniauth-twitter'
@@ -23,26 +29,27 @@ gem 'omniauth-github' @@ -23,26 +29,27 @@ gem 'omniauth-github'
23 29
24 # Extracting information from a git repository 30 # Extracting information from a git repository
25 # Provide access to Gitlab::Git library 31 # Provide access to Gitlab::Git library
26 -gem "gitlab_git", '2.3.1' 32 +gem "gitlab_git", '~> 5.1.0'
27 33
28 # Ruby/Rack Git Smart-HTTP Server Handler 34 # Ruby/Rack Git Smart-HTTP Server Handler
29 -gem 'gitlab-grack', '~> 1.0.1', require: 'grack' 35 +gem 'gitlab-grack', '~> 2.0.0.pre', require: 'grack'
30 36
31 # LDAP Auth 37 # LDAP Auth
32 -gem 'gitlab_omniauth-ldap', '1.0.3', require: "omniauth-ldap"  
33 -  
34 -# Syntax highlighter  
35 -gem "gitlab-pygments.rb", '~> 0.3.2', require: 'pygments.rb' 38 +gem 'gitlab_omniauth-ldap', '1.0.4', require: "omniauth-ldap"
36 39
37 # Git Wiki 40 # Git Wiki
38 -gem "gitlab-gollum-lib", "~> 1.0.1", require: 'gollum-lib' 41 +gem "gitlab-gollum-lib", "~> 1.1.0", require: 'gollum-lib'
39 42
40 # Language detection 43 # Language detection
41 -gem "github-linguist", require: "linguist" 44 +gem "gitlab-linguist", "~> 3.0.0", require: "linguist"
42 45
43 # API 46 # API
44 -gem "grape", "~> 0.4.1" 47 +gem "grape", "~> 0.6.1"
45 gem "grape-entity", "~> 0.3.0" 48 gem "grape-entity", "~> 0.3.0"
  49 +gem 'rack-cors', require: 'rack/cors'
  50 +
  51 +# Email validation
  52 +gem "email_validator", "~> 1.4.0", :require => 'email_validator/strict'
46 53
47 # Format dates and times 54 # Format dates and times
48 # based on human-friendly examples 55 # based on human-friendly examples
@@ -52,7 +59,7 @@ gem "stamp" @@ -52,7 +59,7 @@ gem "stamp"
52 gem 'enumerize' 59 gem 'enumerize'
53 60
54 # Pagination 61 # Pagination
55 -gem "kaminari", "~> 0.14.1" 62 +gem "kaminari", "~> 0.15.1"
56 63
57 # HAML 64 # HAML
58 gem "haml-rails" 65 gem "haml-rails"
@@ -71,13 +78,16 @@ gem "seed-fu" @@ -71,13 +78,16 @@ gem "seed-fu"
71 78
72 # Markdown to HTML 79 # Markdown to HTML
73 gem "redcarpet", "~> 2.2.2" 80 gem "redcarpet", "~> 2.2.2"
74 -gem "github-markup", "~> 0.7.4", require: 'github/markup' 81 +gem "github-markup", "~> 0.7.4", require: 'github/markup', git: 'https://github.com/gitlabhq/markup.git', ref: '61ade389c1e1c159359338f570d18464a44ddbc4'
75 82
76 # Asciidoc to HTML 83 # Asciidoc to HTML
77 gem "asciidoctor" 84 gem "asciidoctor"
78 85
79 # Application server 86 # Application server
80 -gem "unicorn", '~> 4.6.3', group: :unicorn 87 +group :unicorn do
  88 + gem "unicorn", '~> 4.6.3'
  89 + gem 'unicorn-worker-killer'
  90 +end
81 91
82 # State machine 92 # State machine
83 gem "state_machine" 93 gem "state_machine"
@@ -109,7 +119,10 @@ gem "redis-rails" @@ -109,7 +119,10 @@ gem "redis-rails"
109 gem 'tinder', '~> 1.9.2' 119 gem 'tinder', '~> 1.9.2'
110 120
111 # HipChat integration 121 # HipChat integration
112 -gem "hipchat", "~> 0.9.0" 122 +gem "hipchat", "~> 0.14.0"
  123 +
  124 +# Flowdock integration
  125 +gem "gitlab-flowdock-git-hook", "~> 0.4.2"
113 126
114 # d3 127 # d3
115 gem "d3_rails", "~> 3.1.4" 128 gem "d3_rails", "~> 3.1.4"
@@ -123,26 +136,23 @@ gem "sanitize" @@ -123,26 +136,23 @@ gem "sanitize"
123 # Protect against bruteforcing 136 # Protect against bruteforcing
124 gem "rack-attack" 137 gem "rack-attack"
125 138
126 -group :assets do  
127 - gem "sass-rails"  
128 - gem "coffee-rails"  
129 - gem "uglifier"  
130 - gem "therubyracer"  
131 - gem 'turbolinks'  
132 - gem 'jquery-turbolinks'  
133 -  
134 - gem 'chosen-rails', "1.0.0"  
135 - gem 'select2-rails'  
136 - gem 'jquery-atwho-rails', "0.3.0"  
137 - gem "jquery-rails", "2.1.3"  
138 - gem "jquery-ui-rails", "2.0.2"  
139 - gem "modernizr", "2.6.2"  
140 - gem "raphael-rails", "~> 2.1.2"  
141 - gem 'bootstrap-sass'  
142 - gem "font-awesome-rails"  
143 - gem "gemoji", "~> 1.2.1", require: 'emoji/railtie'  
144 - gem "gon"  
145 -end 139 +gem "sass-rails"
  140 +gem "coffee-rails"
  141 +gem "uglifier"
  142 +gem "therubyracer"
  143 +gem 'turbolinks'
  144 +gem 'jquery-turbolinks'
  145 +
  146 +gem 'select2-rails'
  147 +gem 'jquery-atwho-rails', "~> 0.3.3"
  148 +gem "jquery-rails", "2.1.3"
  149 +gem "jquery-ui-rails", "2.0.2"
  150 +gem "modernizr", "2.6.2"
  151 +gem "raphael-rails", "~> 2.1.2"
  152 +gem 'bootstrap-sass', '~> 3.0'
  153 +gem "font-awesome-rails", '~> 3.2'
  154 +gem "gemoji", "~> 1.3.0"
  155 +gem "gon", '~> 5.0.0'
146 156
147 group :development do 157 group :development do
148 gem "annotate", "~> 2.6.0.beta2" 158 gem "annotate", "~> 2.6.0.beta2"
@@ -165,7 +175,7 @@ end @@ -165,7 +175,7 @@ end
165 175
166 group :development, :test do 176 group :development, :test do
167 gem 'coveralls', require: false 177 gem 'coveralls', require: false
168 - gem 'rails-dev-tweaks' 178 + # gem 'rails-dev-tweaks'
169 gem 'spinach-rails' 179 gem 'spinach-rails'
170 gem "rspec-rails" 180 gem "rspec-rails"
171 gem "capybara" 181 gem "capybara"
@@ -194,7 +204,7 @@ group :development, :test do @@ -194,7 +204,7 @@ group :development, :test do
194 gem 'poltergeist', '~> 1.4.1' 204 gem 'poltergeist', '~> 1.4.1'
195 205
196 gem 'spork', '~> 1.0rc' 206 gem 'spork', '~> 1.0rc'
197 - gem 'jasmine' 207 + gem 'jasmine', '2.0.0.rc5'
198 end 208 end
199 209
200 group :test do 210 group :test do
  1 +GIT
  2 + remote: https://github.com/gitlabhq/markup.git
  3 + revision: 61ade389c1e1c159359338f570d18464a44ddbc4
  4 + ref: 61ade389c1e1c159359338f570d18464a44ddbc4
  5 + specs:
  6 + github-markup (0.7.6)
  7 +
1 GEM 8 GEM
2 remote: https://rubygems.org/ 9 remote: https://rubygems.org/
3 specs: 10 specs:
4 - actionmailer (3.2.13)  
5 - actionpack (= 3.2.13)  
6 - mail (~> 2.5.3)  
7 - actionpack (3.2.13)  
8 - activemodel (= 3.2.13)  
9 - activesupport (= 3.2.13)  
10 - builder (~> 3.0.0) 11 + actionmailer (4.0.2)
  12 + actionpack (= 4.0.2)
  13 + mail (~> 2.5.4)
  14 + actionpack (4.0.2)
  15 + activesupport (= 4.0.2)
  16 + builder (~> 3.1.0)
11 erubis (~> 2.7.0) 17 erubis (~> 2.7.0)
12 - journey (~> 1.0.4)  
13 - rack (~> 1.4.5)  
14 - rack-cache (~> 1.2)  
15 - rack-test (~> 0.6.1)  
16 - sprockets (~> 2.2.1)  
17 - activemodel (3.2.13)  
18 - activesupport (= 3.2.13)  
19 - builder (~> 3.0.0)  
20 - activerecord (3.2.13)  
21 - activemodel (= 3.2.13)  
22 - activesupport (= 3.2.13)  
23 - arel (~> 3.0.2)  
24 - tzinfo (~> 0.3.29)  
25 - activeresource (3.2.13)  
26 - activemodel (= 3.2.13)  
27 - activesupport (= 3.2.13)  
28 - activesupport (3.2.13)  
29 - i18n (= 0.6.1)  
30 - multi_json (~> 1.0) 18 + rack (~> 1.5.2)
  19 + rack-test (~> 0.6.2)
  20 + actionpack-action_caching (1.1.0)
  21 + actionpack (>= 4.0.0, < 5.0)
  22 + actionpack-page_caching (1.0.2)
  23 + actionpack (>= 4.0.0, < 5)
  24 + activemodel (4.0.2)
  25 + activesupport (= 4.0.2)
  26 + builder (~> 3.1.0)
  27 + activerecord (4.0.2)
  28 + activemodel (= 4.0.2)
  29 + activerecord-deprecated_finders (~> 1.0.2)
  30 + activesupport (= 4.0.2)
  31 + arel (~> 4.0.0)
  32 + activerecord-deprecated_finders (1.0.3)
  33 + activesupport (4.0.2)
  34 + i18n (~> 0.6, >= 0.6.4)
  35 + minitest (~> 4.2)
  36 + multi_json (~> 1.3)
  37 + thread_safe (~> 0.1)
  38 + tzinfo (~> 0.3.37)
31 acts-as-taggable-on (2.4.1) 39 acts-as-taggable-on (2.4.1)
32 rails (>= 3, < 5) 40 rails (>= 3, < 5)
33 - addressable (2.3.4)  
34 - annotate (2.6.0.beta2) 41 + addressable (2.3.5)
  42 + annotate (2.6.0)
35 activerecord (>= 2.3.0) 43 activerecord (>= 2.3.0)
36 rake (>= 0.8.7) 44 rake (>= 0.8.7)
37 - arel (3.0.2)  
38 - asciidoctor (0.1.3) 45 + arel (4.0.1)
  46 + asciidoctor (0.1.4)
  47 + atomic (1.1.14)
39 awesome_print (1.2.0) 48 awesome_print (1.2.0)
40 - backports (3.3.2)  
41 - bcrypt-ruby (3.1.1) 49 + axiom-types (0.0.5)
  50 + descendants_tracker (~> 0.0.1)
  51 + ice_nine (~> 0.9)
  52 + bcrypt-ruby (3.1.2)
42 better_errors (1.0.1) 53 better_errors (1.0.1)
43 coderay (>= 1.0.0) 54 coderay (>= 1.0.0)
44 erubis (>= 2.6.6) 55 erubis (>= 2.6.6)
45 binding_of_caller (0.7.2) 56 binding_of_caller (0.7.2)
46 debug_inspector (>= 0.0.1) 57 debug_inspector (>= 0.0.1)
47 - bootstrap-sass (2.3.2.2) 58 + bootstrap-sass (3.0.3.0)
48 sass (~> 3.2) 59 sass (~> 3.2)
49 - builder (3.0.4) 60 + builder (3.1.4)
50 capybara (2.1.0) 61 capybara (2.1.0)
51 mime-types (>= 1.16) 62 mime-types (>= 1.16)
52 nokogiri (>= 1.3.3) 63 nokogiri (>= 1.3.3)
53 rack (>= 1.0.0) 64 rack (>= 1.0.0)
54 rack-test (>= 0.5.4) 65 rack-test (>= 0.5.4)
55 xpath (~> 2.0) 66 xpath (~> 2.0)
56 - carrierwave (0.8.0) 67 + carrierwave (0.9.0)
57 activemodel (>= 3.2.0) 68 activemodel (>= 3.2.0)
58 activesupport (>= 3.2.0) 69 activesupport (>= 3.2.0)
59 - celluloid (0.14.1)  
60 - timers (>= 1.0.0) 70 + json (>= 1.7)
  71 + celluloid (0.15.2)
  72 + timers (~> 1.1.0)
61 charlock_holmes (0.6.9.4) 73 charlock_holmes (0.6.9.4)
62 - childprocess (0.3.9)  
63 - ffi (~> 1.0, >= 1.0.11)  
64 - chosen-rails (1.0.0)  
65 - coffee-rails (>= 3.2)  
66 - compass-rails (>= 1.0)  
67 - railties (>= 3.0)  
68 - sass-rails (>= 3.2)  
69 - chunky_png (1.2.8)  
70 - cliver (0.2.1) 74 + cliver (0.2.2)
71 code_analyzer (0.4.3) 75 code_analyzer (0.4.3)
72 sexp_processor 76 sexp_processor
73 - coderay (1.0.9)  
74 - coffee-rails (3.2.2) 77 + coderay (1.1.0)
  78 + coercible (1.0.0)
  79 + descendants_tracker (~> 0.0.1)
  80 + coffee-rails (4.0.1)
75 coffee-script (>= 2.2.0) 81 coffee-script (>= 2.2.0)
76 - railties (~> 3.2.0) 82 + railties (>= 4.0.0, < 5.0)
77 coffee-script (2.2.0) 83 coffee-script (2.2.0)
78 coffee-script-source 84 coffee-script-source
79 execjs 85 execjs
80 - coffee-script-source (1.6.2) 86 + coffee-script-source (1.6.3)
81 colored (1.2) 87 colored (1.2)
82 colorize (0.5.8) 88 colorize (0.5.8)
83 - compass (0.12.2)  
84 - chunky_png (~> 1.2)  
85 - fssm (>= 0.2.7)  
86 - sass (~> 3.1)  
87 - compass-rails (1.0.3)  
88 - compass (>= 0.12.2, < 0.14)  
89 - connection_pool (1.1.0) 89 + connection_pool (1.2.0)
90 coveralls (0.7.0) 90 coveralls (0.7.0)
91 multi_json (~> 1.3) 91 multi_json (~> 1.3)
92 rest-client 92 rest-client
93 simplecov (>= 0.7) 93 simplecov (>= 0.7)
94 term-ansicolor 94 term-ansicolor
95 thor 95 thor
96 - crack (0.4.0) 96 + crack (0.4.1)
97 safe_yaml (~> 0.9.0) 97 safe_yaml (~> 0.9.0)
98 d3_rails (3.1.10) 98 d3_rails (3.1.10)
99 railties (>= 3.1.0) 99 railties (>= 3.1.0)
100 daemons (1.1.9) 100 daemons (1.1.9)
101 - database_cleaner (1.1.1) 101 + database_cleaner (1.2.0)
102 debug_inspector (0.0.2) 102 debug_inspector (0.0.2)
103 - descendants_tracker (0.0.1)  
104 - devise (2.2.5) 103 + descendants_tracker (0.0.3)
  104 + devise (3.0.4)
105 bcrypt-ruby (~> 3.0) 105 bcrypt-ruby (~> 3.0)
106 orm_adapter (~> 0.1) 106 orm_adapter (~> 0.1)
107 - railties (~> 3.1)  
108 - warden (~> 1.2.1)  
109 - diff-lcs (1.2.4)  
110 - dotenv (0.8.0)  
111 - email_spec (1.4.0) 107 + railties (>= 3.2.6, < 5)
  108 + warden (~> 1.2.3)
  109 + devise-async (0.8.0)
  110 + devise (>= 2.2, < 3.2)
  111 + diff-lcs (1.2.5)
  112 + docile (1.1.1)
  113 + dotenv (0.9.0)
  114 + email_spec (1.5.0)
112 launchy (~> 2.1) 115 launchy (~> 2.1)
113 mail (~> 2.2) 116 mail (~> 2.2)
114 - enumerize (0.6.1) 117 + email_validator (1.4.0)
  118 + activemodel
  119 + enumerize (0.7.0)
115 activesupport (>= 3.2) 120 activesupport (>= 3.2)
  121 + equalizer (0.0.8)
116 erubis (2.7.0) 122 erubis (2.7.0)
117 escape_utils (0.2.4) 123 escape_utils (0.2.4)
118 eventmachine (1.0.3) 124 eventmachine (1.0.3)
119 excon (0.13.4) 125 excon (0.13.4)
120 - execjs (1.4.0)  
121 - multi_json (~> 1.0)  
122 - factory_girl (4.2.0) 126 + execjs (2.0.2)
  127 + factory_girl (4.3.0)
123 activesupport (>= 3.0.0) 128 activesupport (>= 3.0.0)
124 - factory_girl_rails (4.2.1)  
125 - factory_girl (~> 4.2.0) 129 + factory_girl_rails (4.3.0)
  130 + factory_girl (~> 4.3.0)
126 railties (>= 3.0.0) 131 railties (>= 3.0.0)
127 - faraday (0.8.7)  
128 - multipart-post (~> 1.1) 132 + faraday (0.8.8)
  133 + multipart-post (~> 1.2.0)
129 faraday_middleware (0.9.0) 134 faraday_middleware (0.9.0)
130 faraday (>= 0.7.4, < 0.9) 135 faraday (>= 0.7.4, < 0.9)
131 - ffaker (1.18.0)  
132 - ffi (1.9.0) 136 + ffaker (1.22.1)
  137 + ffi (1.9.3)
133 fog (1.3.1) 138 fog (1.3.1)
134 builder 139 builder
135 excon (~> 0.13.0) 140 excon (~> 0.13.0)
@@ -146,48 +151,46 @@ GEM @@ -146,48 +151,46 @@ GEM
146 dotenv (>= 0.7) 151 dotenv (>= 0.7)
147 thor (>= 0.13.6) 152 thor (>= 0.13.6)
148 formatador (0.2.4) 153 formatador (0.2.4)
149 - fssm (0.2.10)  
150 - gemoji (1.2.1)  
151 - gherkin-ruby (0.3.0)  
152 - github-linguist (2.3.4)  
153 - charlock_holmes (~> 0.6.6)  
154 - escape_utils (~> 0.2.3)  
155 - mime-types (~> 1.19)  
156 - pygments.rb (>= 0.2.13)  
157 - github-markdown (0.5.3)  
158 - github-markup (0.7.5)  
159 - gitlab-gollum-lib (1.0.1) 154 + gemoji (1.3.1)
  155 + gherkin-ruby (0.3.1)
  156 + racc
  157 + github-markdown (0.5.5)
  158 + gitlab-flowdock-git-hook (0.4.2.2)
  159 + gitlab-grit (>= 2.4.1)
  160 + multi_json
  161 + gitlab-gollum-lib (1.1.0)
160 github-markdown (~> 0.5.3) 162 github-markdown (~> 0.5.3)
161 github-markup (>= 0.7.5, < 1.0.0) 163 github-markup (>= 0.7.5, < 1.0.0)
162 - gitlab-grit (>= 2.5.1) 164 + gitlab-grit (~> 2.6.1)
163 nokogiri (~> 1.5.9) 165 nokogiri (~> 1.5.9)
164 - pygments.rb (~> 0.4.2)  
165 sanitize (~> 2.0.3) 166 sanitize (~> 2.0.3)
166 stringex (~> 1.5.1) 167 stringex (~> 1.5.1)
167 - gitlab-grack (1.0.1)  
168 - rack (~> 1.4.1)  
169 - gitlab-grit (2.6.0) 168 + gitlab-grack (2.0.0.pre)
  169 + rack (~> 1.5.1)
  170 + gitlab-grit (2.6.4)
170 charlock_holmes (~> 0.6.9) 171 charlock_holmes (~> 0.6.9)
171 diff-lcs (~> 1.1) 172 diff-lcs (~> 1.1)
172 mime-types (~> 1.15) 173 mime-types (~> 1.15)
173 posix-spawn (~> 0.3.6) 174 posix-spawn (~> 0.3.6)
174 - gitlab-pygments.rb (0.3.2)  
175 - posix-spawn (~> 0.3.6)  
176 - yajl-ruby (~> 1.1.0)  
177 - gitlab_git (2.3.1)  
178 - activesupport (~> 3.2.13)  
179 - github-linguist (~> 2.3.4)  
180 - gitlab-grit (~> 2.6.0) 175 + gitlab-linguist (3.0.0)
  176 + charlock_holmes (~> 0.6.6)
  177 + escape_utils (~> 0.2.4)
  178 + mime-types (~> 1.19)
  179 + gitlab_git (5.1.0)
  180 + activesupport (~> 4.0.0)
  181 + gitlab-grit (~> 2.6.1)
  182 + gitlab-linguist (~> 3.0.0)
  183 + rugged (~> 0.19.0)
181 gitlab_meta (6.0) 184 gitlab_meta (6.0)
182 - gitlab_omniauth-ldap (1.0.3) 185 + gitlab_omniauth-ldap (1.0.4)
183 net-ldap (~> 0.3.1) 186 net-ldap (~> 0.3.1)
184 omniauth (~> 1.0) 187 omniauth (~> 1.0)
185 pyu-ruby-sasl (~> 0.0.3.1) 188 pyu-ruby-sasl (~> 0.0.3.1)
186 rubyntlm (~> 0.1.1) 189 rubyntlm (~> 0.1.1)
187 - gon (4.1.1) 190 + gon (5.0.1)
188 actionpack (>= 2.3.0) 191 actionpack (>= 2.3.0)
189 json 192 json
190 - grape (0.4.1) 193 + grape (0.6.1)
191 activesupport 194 activesupport
192 builder 195 builder
193 hashie (>= 1.2.0) 196 hashie (>= 1.2.0)
@@ -196,91 +199,91 @@ GEM @@ -196,91 +199,91 @@ GEM
196 rack (>= 1.3.0) 199 rack (>= 1.3.0)
197 rack-accept 200 rack-accept
198 rack-mount 201 rack-mount
199 - virtus 202 + virtus (>= 1.0.0)
200 grape-entity (0.3.0) 203 grape-entity (0.3.0)
201 activesupport 204 activesupport
202 multi_json (>= 1.3.2) 205 multi_json (>= 1.3.2)
203 growl (1.0.3) 206 growl (1.0.3)
204 - guard (1.8.1) 207 + guard (2.2.4)
205 formatador (>= 0.2.4) 208 formatador (>= 0.2.4)
206 - listen (>= 1.0.0)  
207 - lumberjack (>= 1.0.2)  
208 - pry (>= 0.9.10)  
209 - thor (>= 0.14.6)  
210 - guard-rspec (3.0.2)  
211 - guard (>= 1.8)  
212 - rspec (~> 2.13) 209 + listen (~> 2.1)
  210 + lumberjack (~> 1.0)
  211 + pry (>= 0.9.12)
  212 + thor (>= 0.18.1)
  213 + guard-rspec (4.2.0)
  214 + guard (>= 2.1.1)
  215 + rspec (>= 2.14, < 4.0)
213 guard-spinach (0.0.2) 216 guard-spinach (0.0.2)
214 guard (>= 1.1) 217 guard (>= 1.1)
215 spinach 218 spinach
216 - haml (4.0.3) 219 + haml (4.0.4)
217 tilt 220 tilt
218 - haml-rails (0.4)  
219 - actionpack (>= 3.1, < 4.1)  
220 - activesupport (>= 3.1, < 4.1)  
221 - haml (>= 3.1, < 4.1)  
222 - railties (>= 3.1, < 4.1)  
223 - hashie (1.2.0) 221 + haml-rails (0.5.1)
  222 + actionpack (~> 4.0.0)
  223 + activesupport (~> 4.0.0)
  224 + haml (>= 3.1, < 5.0)
  225 + railties (~> 4.0.0)
  226 + hashie (2.0.5)
224 hike (1.2.3) 227 hike (1.2.3)
225 - hipchat (0.9.0) 228 + hipchat (0.14.0)
226 httparty 229 httparty
227 httparty 230 httparty
228 http_parser.rb (0.5.3) 231 http_parser.rb (0.5.3)
229 - httparty (0.11.0)  
230 - multi_json (~> 1.0) 232 + httparty (0.12.0)
  233 + json (~> 1.8)
231 multi_xml (>= 0.5.2) 234 multi_xml (>= 0.5.2)
232 httpauth (0.2.0) 235 httpauth (0.2.0)
233 - i18n (0.6.1)  
234 - jasmine (1.3.2)  
235 - jasmine-core (~> 1.3.1)  
236 - rack (~> 1.0)  
237 - rspec (>= 1.3.1)  
238 - selenium-webdriver (>= 0.1.3)  
239 - jasmine-core (1.3.1)  
240 - journey (1.0.4)  
241 - jquery-atwho-rails (0.3.0) 236 + i18n (0.6.9)
  237 + ice_nine (0.10.0)
  238 + jasmine (2.0.0.rc5)
  239 + jasmine-core (~> 2.0.0.rc5)
  240 + phantomjs
  241 + rack (>= 1.2.1)
  242 + rake
  243 + jasmine-core (2.0.0.rc5)
  244 + jquery-atwho-rails (0.3.3)
242 jquery-rails (2.1.3) 245 jquery-rails (2.1.3)
243 railties (>= 3.1.0, < 5.0) 246 railties (>= 3.1.0, < 5.0)
244 thor (~> 0.14) 247 thor (~> 0.14)
245 - jquery-turbolinks (1.0.0) 248 + jquery-turbolinks (2.0.1)
246 railties (>= 3.1.0) 249 railties (>= 3.1.0)
247 turbolinks 250 turbolinks
248 jquery-ui-rails (2.0.2) 251 jquery-ui-rails (2.0.2)
249 jquery-rails 252 jquery-rails
250 railties (>= 3.1.0) 253 railties (>= 3.1.0)
251 - json (1.7.7) 254 + json (1.8.1)
252 jwt (0.1.8) 255 jwt (0.1.8)
253 multi_json (>= 1.5) 256 multi_json (>= 1.5)
254 - kaminari (0.14.1) 257 + kaminari (0.15.1)
255 actionpack (>= 3.0.0) 258 actionpack (>= 3.0.0)
256 activesupport (>= 3.0.0) 259 activesupport (>= 3.0.0)
257 - kgio (2.8.0)  
258 - launchy (2.3.0) 260 + kgio (2.8.1)
  261 + launchy (2.4.2)
259 addressable (~> 2.3) 262 addressable (~> 2.3)
260 - letter_opener (1.1.1) 263 + letter_opener (1.1.2)
261 launchy (~> 2.2) 264 launchy (~> 2.2)
262 - libv8 (3.11.8.17)  
263 - listen (1.2.2) 265 + libv8 (3.16.14.3)
  266 + listen (2.3.1)
  267 + celluloid (>= 0.15.2)
264 rb-fsevent (>= 0.9.3) 268 rb-fsevent (>= 0.9.3)
265 rb-inotify (>= 0.9) 269 rb-inotify (>= 0.9)
266 - rb-kqueue (>= 0.2)  
267 - lumberjack (1.0.3) 270 + lumberjack (1.0.4)
268 mail (2.5.4) 271 mail (2.5.4)
269 mime-types (~> 1.16) 272 mime-types (~> 1.16)
270 treetop (~> 1.4.8) 273 treetop (~> 1.4.8)
271 - method_source (0.8.1)  
272 - mime-types (1.25)  
273 - minitest (4.7.4) 274 + method_source (0.8.2)
  275 + mime-types (1.25.1)
  276 + minitest (4.7.5)
274 modernizr (2.6.2) 277 modernizr (2.6.2)
275 sprockets (~> 2.0) 278 sprockets (~> 2.0)
276 - multi_json (1.8.0)  
277 - multi_xml (0.5.4) 279 + multi_json (1.8.4)
  280 + multi_xml (0.5.5)
278 multipart-post (1.2.0) 281 multipart-post (1.2.0)
279 mysql2 (0.3.11) 282 mysql2 (0.3.11)
280 net-ldap (0.3.1) 283 net-ldap (0.3.1)
281 net-scp (1.0.4) 284 net-scp (1.0.4)
282 net-ssh (>= 1.99.1) 285 net-ssh (>= 1.99.1)
283 - net-ssh (2.6.8) 286 + net-ssh (2.7.0)
284 nokogiri (1.5.10) 287 nokogiri (1.5.10)
285 oauth (0.4.7) 288 oauth (0.4.7)
286 oauth2 (0.8.1) 289 oauth2 (0.8.1)
@@ -292,10 +295,10 @@ GEM @@ -292,10 +295,10 @@ GEM
292 omniauth (1.1.4) 295 omniauth (1.1.4)
293 hashie (>= 1.2, < 3) 296 hashie (>= 1.2, < 3)
294 rack 297 rack
295 - omniauth-github (1.1.0) 298 + omniauth-github (1.1.1)
296 omniauth (~> 1.0) 299 omniauth (~> 1.0)
297 omniauth-oauth2 (~> 1.1) 300 omniauth-oauth2 (~> 1.1)
298 - omniauth-google-oauth2 (0.1.19) 301 + omniauth-google-oauth2 (0.2.1)
299 omniauth (~> 1.0) 302 omniauth (~> 1.0)
300 omniauth-oauth2 303 omniauth-oauth2
301 omniauth-oauth (1.0.1) 304 omniauth-oauth (1.0.1)
@@ -304,56 +307,52 @@ GEM @@ -304,56 +307,52 @@ GEM
304 omniauth-oauth2 (1.1.1) 307 omniauth-oauth2 (1.1.1)
305 oauth2 (~> 0.8.0) 308 oauth2 (~> 0.8.0)
306 omniauth (~> 1.0) 309 omniauth (~> 1.0)
307 - omniauth-twitter (0.0.17) 310 + omniauth-twitter (1.0.1)
308 multi_json (~> 1.3) 311 multi_json (~> 1.3)
309 omniauth-oauth (~> 1.0) 312 omniauth-oauth (~> 1.0)
310 - orm_adapter (0.4.0)  
311 - pg (0.15.1) 313 + orm_adapter (0.5.0)
  314 + phantomjs (1.9.2.0)
312 poltergeist (1.4.1) 315 poltergeist (1.4.1)
313 capybara (~> 2.1.0) 316 capybara (~> 2.1.0)
314 cliver (~> 0.2.1) 317 cliver (~> 0.2.1)
315 multi_json (~> 1.0) 318 multi_json (~> 1.0)
316 websocket-driver (>= 0.2.0) 319 websocket-driver (>= 0.2.0)
317 polyglot (0.3.3) 320 polyglot (0.3.3)
318 - posix-spawn (0.3.6)  
319 - pry (0.9.12.2)  
320 - coderay (~> 1.0.5) 321 + posix-spawn (0.3.8)
  322 + protected_attributes (1.0.5)
  323 + activemodel (>= 4.0.1, < 5.0)
  324 + pry (0.9.12.4)
  325 + coderay (~> 1.0)
321 method_source (~> 0.8) 326 method_source (~> 0.8)
322 slop (~> 3.4) 327 slop (~> 3.4)
323 - pygments.rb (0.4.2)  
324 - posix-spawn (~> 0.3.6)  
325 - yajl-ruby (~> 1.1.0)  
326 pyu-ruby-sasl (0.0.3.3) 328 pyu-ruby-sasl (0.0.3.3)
327 quiet_assets (1.0.2) 329 quiet_assets (1.0.2)
328 railties (>= 3.1, < 5.0) 330 railties (>= 3.1, < 5.0)
329 - rack (1.4.5) 331 + racc (1.4.10)
  332 + rack (1.5.2)
330 rack-accept (0.4.5) 333 rack-accept (0.4.5)
331 rack (>= 0.4) 334 rack (>= 0.4)
332 - rack-attack (2.2.1) 335 + rack-attack (2.3.0)
333 rack 336 rack
334 - rack-cache (1.2)  
335 - rack (>= 0.4) 337 + rack-cors (0.2.9)
336 rack-mini-profiler (0.1.31) 338 rack-mini-profiler (0.1.31)
337 rack (>= 1.1.3) 339 rack (>= 1.1.3)
338 rack-mount (0.8.3) 340 rack-mount (0.8.3)
339 rack (>= 1.0.0) 341 rack (>= 1.0.0)
340 - rack-protection (1.5.0)  
341 - rack  
342 - rack-ssl (1.3.3) 342 + rack-protection (1.5.1)
343 rack 343 rack
344 rack-test (0.6.2) 344 rack-test (0.6.2)
345 rack (>= 1.0) 345 rack (>= 1.0)
346 - rails (3.2.13)  
347 - actionmailer (= 3.2.13)  
348 - actionpack (= 3.2.13)  
349 - activerecord (= 3.2.13)  
350 - activeresource (= 3.2.13)  
351 - activesupport (= 3.2.13)  
352 - bundler (~> 1.0)  
353 - railties (= 3.2.13)  
354 - rails-dev-tweaks (0.6.1)  
355 - actionpack (~> 3.1)  
356 - railties (~> 3.1) 346 + rails (4.0.2)
  347 + actionmailer (= 4.0.2)
  348 + actionpack (= 4.0.2)
  349 + activerecord (= 4.0.2)
  350 + activesupport (= 4.0.2)
  351 + bundler (>= 1.3.0, < 2.0)
  352 + railties (= 4.0.2)
  353 + sprockets-rails (~> 2.0.0)
  354 + rails-observers (0.1.2)
  355 + activemodel (~> 4.0)
357 rails_best_practices (1.14.4) 356 rails_best_practices (1.14.4)
358 activesupport 357 activesupport
359 awesome_print 358 awesome_print
@@ -363,235 +362,237 @@ GEM @@ -363,235 +362,237 @@ GEM
363 i18n 362 i18n
364 require_all 363 require_all
365 ruby-progressbar 364 ruby-progressbar
366 - railties (3.2.13)  
367 - actionpack (= 3.2.13)  
368 - activesupport (= 3.2.13)  
369 - rack-ssl (~> 1.3.2) 365 + railties (4.0.2)
  366 + actionpack (= 4.0.2)
  367 + activesupport (= 4.0.2)
370 rake (>= 0.8.7) 368 rake (>= 0.8.7)
371 - rdoc (~> 3.4)  
372 - thor (>= 0.14.6, < 2.0)  
373 - raindrops (0.11.0) 369 + thor (>= 0.18.1, < 2.0)
  370 + raindrops (0.12.0)
374 rake (10.1.0) 371 rake (10.1.0)
375 raphael-rails (2.1.2) 372 raphael-rails (2.1.2)
376 rb-fsevent (0.9.3) 373 rb-fsevent (0.9.3)
377 - rb-inotify (0.9.0)  
378 - ffi (>= 0.5.0)  
379 - rb-kqueue (0.2.0) 374 + rb-inotify (0.9.2)
380 ffi (>= 0.5.0) 375 ffi (>= 0.5.0)
381 rdoc (3.12.2) 376 rdoc (3.12.2)
382 json (~> 1.4) 377 json (~> 1.4)
383 redcarpet (2.2.2) 378 redcarpet (2.2.2)
384 - redis (3.0.4)  
385 - redis-actionpack (3.2.4)  
386 - actionpack (~> 3.2.0)  
387 - redis-rack (~> 1.4.4)  
388 - redis-store (~> 1.1.4)  
389 - redis-activesupport (3.2.4)  
390 - activesupport (~> 3.2.0) 379 + redis (3.0.6)
  380 + redis-actionpack (4.0.0)
  381 + actionpack (~> 4)
  382 + redis-rack (~> 1.5.0)
  383 + redis-store (~> 1.1.0)
  384 + redis-activesupport (4.0.0)
  385 + activesupport (~> 4)
  386 + redis-store (~> 1.1.0)
  387 + redis-namespace (1.4.1)
  388 + redis (~> 3.0.4)
  389 + redis-rack (1.5.0)
  390 + rack (~> 1.5)
  391 + redis-store (~> 1.1.0)
  392 + redis-rails (4.0.0)
  393 + redis-actionpack (~> 4)
  394 + redis-activesupport (~> 4)
391 redis-store (~> 1.1.0) 395 redis-store (~> 1.1.0)
392 - redis-namespace (1.3.1)  
393 - redis (~> 3.0.0)  
394 - redis-rack (1.4.4)  
395 - rack (~> 1.4.0)  
396 - redis-store (~> 1.1.4)  
397 - redis-rails (3.2.4)  
398 - redis-actionpack (~> 3.2.4)  
399 - redis-activesupport (~> 3.2.4)  
400 - redis-store (~> 1.1.4)  
401 redis-store (1.1.4) 396 redis-store (1.1.4)
402 redis (>= 2.2) 397 redis (>= 2.2)
403 ref (1.0.5) 398 ref (1.0.5)
404 - require_all (1.3.1) 399 + require_all (1.3.2)
405 rest-client (1.6.7) 400 rest-client (1.6.7)
406 mime-types (>= 1.16) 401 mime-types (>= 1.16)
407 - rspec (2.13.0)  
408 - rspec-core (~> 2.13.0)  
409 - rspec-expectations (~> 2.13.0)  
410 - rspec-mocks (~> 2.13.0)  
411 - rspec-core (2.13.1)  
412 - rspec-expectations (2.13.0) 402 + rspec (2.14.1)
  403 + rspec-core (~> 2.14.0)
  404 + rspec-expectations (~> 2.14.0)
  405 + rspec-mocks (~> 2.14.0)
  406 + rspec-core (2.14.7)
  407 + rspec-expectations (2.14.4)
413 diff-lcs (>= 1.1.3, < 2.0) 408 diff-lcs (>= 1.1.3, < 2.0)
414 - rspec-mocks (2.13.1)  
415 - rspec-rails (2.13.2) 409 + rspec-mocks (2.14.4)
  410 + rspec-rails (2.14.0)
416 actionpack (>= 3.0) 411 actionpack (>= 3.0)
417 activesupport (>= 3.0) 412 activesupport (>= 3.0)
418 railties (>= 3.0) 413 railties (>= 3.0)
419 - rspec-core (~> 2.13.0)  
420 - rspec-expectations (~> 2.13.0)  
421 - rspec-mocks (~> 2.13.0) 414 + rspec-core (~> 2.14.0)
  415 + rspec-expectations (~> 2.14.0)
  416 + rspec-mocks (~> 2.14.0)
422 ruby-hmac (0.4.0) 417 ruby-hmac (0.4.0)
423 ruby-progressbar (1.2.0) 418 ruby-progressbar (1.2.0)
424 rubyntlm (0.1.1) 419 rubyntlm (0.1.1)
425 - rubyzip (0.9.9)  
426 - safe_yaml (0.9.3)  
427 - sanitize (2.0.3)  
428 - nokogiri (>= 1.4.4, < 1.6)  
429 - sass (3.2.11)  
430 - sass-rails (3.2.6)  
431 - railties (~> 3.2.0) 420 + rugged (0.19.0)
  421 + safe_yaml (0.9.7)
  422 + sanitize (2.0.6)
  423 + nokogiri (>= 1.4.4)
  424 + sass (3.2.12)
  425 + sass-rails (4.0.1)
  426 + railties (>= 4.0.0, < 5.0)
432 sass (>= 3.1.10) 427 sass (>= 3.1.10)
433 - tilt (~> 1.3) 428 + sprockets-rails (~> 2.0.0)
434 sdoc (0.3.20) 429 sdoc (0.3.20)
435 json (>= 1.1.3) 430 json (>= 1.1.3)
436 rdoc (~> 3.10) 431 rdoc (~> 3.10)
437 - seed-fu (2.2.0)  
438 - activerecord (~> 3.1)  
439 - activesupport (~> 3.1)  
440 - select2-rails (3.4.2)  
441 - sass-rails 432 + seed-fu (2.3.0)
  433 + activerecord (>= 3.1, < 4.1)
  434 + activesupport (>= 3.1, < 4.1)
  435 + select2-rails (3.5.2)
442 thor (~> 0.14) 436 thor (~> 0.14)
443 - selenium-webdriver (2.33.0)  
444 - childprocess (>= 0.2.5)  
445 - multi_json (~> 1.0)  
446 - rubyzip  
447 - websocket (~> 1.0.4)  
448 settingslogic (2.0.9) 437 settingslogic (2.0.9)
449 - sexp_processor (4.3.0) 438 + sexp_processor (4.4.0)
450 shoulda-matchers (2.1.0) 439 shoulda-matchers (2.1.0)
451 activesupport (>= 3.0.0) 440 activesupport (>= 3.0.0)
452 - sidekiq (2.14.0)  
453 - celluloid (>= 0.14.1) 441 + sidekiq (2.17.0)
  442 + celluloid (>= 0.15.2)
454 connection_pool (>= 1.0.0) 443 connection_pool (>= 1.0.0)
455 json 444 json
456 redis (>= 3.0.4) 445 redis (>= 3.0.4)
457 - redis-namespace 446 + redis-namespace (>= 1.3.1)
458 simple_oauth (0.1.9) 447 simple_oauth (0.1.9)
459 - simplecov (0.7.1)  
460 - multi_json (~> 1.0)  
461 - simplecov-html (~> 0.7.1)  
462 - simplecov-html (0.7.1)  
463 - sinatra (1.4.3) 448 + simplecov (0.8.2)
  449 + docile (~> 1.1.0)
  450 + multi_json
  451 + simplecov-html (~> 0.8.0)
  452 + simplecov-html (0.8.0)
  453 + sinatra (1.4.4)
464 rack (~> 1.4) 454 rack (~> 1.4)
465 rack-protection (~> 1.4) 455 rack-protection (~> 1.4)
466 tilt (~> 1.3, >= 1.3.4) 456 tilt (~> 1.3, >= 1.3.4)
467 six (0.2.0) 457 six (0.2.0)
468 - slim (2.0.0)  
469 - temple (~> 0.6.5)  
470 - tilt (~> 1.3, >= 1.3.3)  
471 - slop (3.4.5)  
472 - spinach (0.8.3) 458 + slim (2.0.2)
  459 + temple (~> 0.6.6)
  460 + tilt (>= 1.3.3, < 2.1)
  461 + slop (3.4.7)
  462 + spinach (0.8.7)
473 colorize (= 0.5.8) 463 colorize (= 0.5.8)
474 - gherkin-ruby (~> 0.3.0) 464 + gherkin-ruby (>= 0.3.1)
475 spinach-rails (0.2.1) 465 spinach-rails (0.2.1)
476 capybara (>= 2.0.0) 466 capybara (>= 2.0.0)
477 railties (>= 3) 467 railties (>= 3)
478 spinach (>= 0.4) 468 spinach (>= 0.4)
479 - spork (1.0.0rc2)  
480 - sprockets (2.2.2) 469 + spork (1.0.0rc4)
  470 + sprockets (2.10.1)
481 hike (~> 1.2) 471 hike (~> 1.2)
482 multi_json (~> 1.0) 472 multi_json (~> 1.0)
483 rack (~> 1.0) 473 rack (~> 1.0)
484 tilt (~> 1.1, != 1.3.0) 474 tilt (~> 1.1, != 1.3.0)
  475 + sprockets-rails (2.0.1)
  476 + actionpack (>= 3.0)
  477 + activesupport (>= 3.0)
  478 + sprockets (~> 2.8)
485 stamp (0.5.0) 479 stamp (0.5.0)
486 state_machine (1.2.0) 480 state_machine (1.2.0)
487 stringex (1.5.1) 481 stringex (1.5.1)
488 - temple (0.6.5) 482 + temple (0.6.7)
489 term-ansicolor (1.2.2) 483 term-ansicolor (1.2.2)
490 tins (~> 0.8) 484 tins (~> 0.8)
491 - test_after_commit (0.2.1)  
492 - therubyracer (0.11.4)  
493 - libv8 (~> 3.11.8.12) 485 + test_after_commit (0.2.2)
  486 + therubyracer (0.12.0)
  487 + libv8 (~> 3.16.14.0)
494 ref 488 ref
495 - thin (1.5.1) 489 + thin (1.6.1)
496 daemons (>= 1.0.9) 490 daemons (>= 1.0.9)
497 - eventmachine (>= 0.12.6) 491 + eventmachine (>= 1.0.0)
498 rack (>= 1.0.0) 492 rack (>= 1.0.0)
499 thor (0.18.1) 493 thor (0.18.1)
  494 + thread_safe (0.1.3)
  495 + atomic
500 tilt (1.4.1) 496 tilt (1.4.1)
501 timers (1.1.0) 497 timers (1.1.0)
502 - tinder (1.9.2) 498 + tinder (1.9.3)
503 eventmachine (~> 1.0) 499 eventmachine (~> 1.0)
504 faraday (~> 0.8) 500 faraday (~> 0.8)
505 faraday_middleware (~> 0.9) 501 faraday_middleware (~> 0.9)
506 - hashie (~> 1.0)  
507 - json (~> 1.7.5) 502 + hashie (>= 1.0, < 3)
  503 + json (~> 1.8.0)
508 mime-types (~> 1.19) 504 mime-types (~> 1.19)
509 - multi_json (~> 1.5) 505 + multi_json (~> 1.7)
510 twitter-stream (~> 0.1) 506 twitter-stream (~> 0.1)
511 - tins (0.11.0)  
512 - treetop (1.4.14) 507 + tins (0.13.1)
  508 + treetop (1.4.15)
513 polyglot 509 polyglot
514 polyglot (>= 0.3.1) 510 polyglot (>= 0.3.1)
515 - turbolinks (1.2.0) 511 + turbolinks (2.0.0)
516 coffee-rails 512 coffee-rails
517 twitter-stream (0.1.16) 513 twitter-stream (0.1.16)
518 eventmachine (>= 0.12.8) 514 eventmachine (>= 0.12.8)
519 http_parser.rb (~> 0.5.1) 515 http_parser.rb (~> 0.5.1)
520 simple_oauth (~> 0.1.4) 516 simple_oauth (~> 0.1.4)
521 - tzinfo (0.3.37)  
522 - uglifier (2.1.1) 517 + tzinfo (0.3.38)
  518 + uglifier (2.3.2)
523 execjs (>= 0.3.0) 519 execjs (>= 0.3.0)
524 - multi_json (~> 1.0, >= 1.0.2) 520 + json (>= 1.8.0)
525 underscore-rails (1.4.4) 521 underscore-rails (1.4.4)
526 unicorn (4.6.3) 522 unicorn (4.6.3)
527 kgio (~> 2.6) 523 kgio (~> 2.6)
528 rack 524 rack
529 raindrops (~> 0.7) 525 raindrops (~> 0.7)
530 - virtus (0.5.5)  
531 - backports (~> 3.3) 526 + unicorn-worker-killer (0.4.2)
  527 + unicorn (~> 4)
  528 + virtus (1.0.1)
  529 + axiom-types (~> 0.0.5)
  530 + coercible (~> 1.0)
532 descendants_tracker (~> 0.0.1) 531 descendants_tracker (~> 0.0.1)
  532 + equalizer (~> 0.0.7)
533 warden (1.2.3) 533 warden (1.2.3)
534 rack (>= 1.0) 534 rack (>= 1.0)
535 - webmock (1.11.0) 535 + webmock (1.16.0)
536 addressable (>= 2.2.7) 536 addressable (>= 2.2.7)
537 crack (>= 0.3.2) 537 crack (>= 0.3.2)
538 - websocket (1.0.7)  
539 - websocket-driver (0.3.0) 538 + websocket-driver (0.3.1)
540 xpath (2.0.0) 539 xpath (2.0.0)
541 nokogiri (~> 1.3) 540 nokogiri (~> 1.3)
542 - yajl-ruby (1.1.0)  
543 541
544 PLATFORMS 542 PLATFORMS
545 ruby 543 ruby
546 544
547 DEPENDENCIES 545 DEPENDENCIES
  546 + actionpack-action_caching
  547 + actionpack-page_caching
548 acts-as-taggable-on 548 acts-as-taggable-on
549 annotate (~> 2.6.0.beta2) 549 annotate (~> 2.6.0.beta2)
550 asciidoctor 550 asciidoctor
551 awesome_print 551 awesome_print
552 better_errors 552 better_errors
553 binding_of_caller 553 binding_of_caller
554 - bootstrap-sass 554 + bootstrap-sass (~> 3.0)
555 capybara 555 capybara
556 carrierwave 556 carrierwave
557 - chosen-rails (= 1.0.0)  
558 coffee-rails 557 coffee-rails
559 colored 558 colored
560 coveralls 559 coveralls
561 d3_rails (~> 3.1.4) 560 d3_rails (~> 3.1.4)
562 database_cleaner 561 database_cleaner
563 - devise (~> 2.2) 562 + devise (= 3.0.4)
  563 + devise-async (= 0.8.0)
564 email_spec 564 email_spec
  565 + email_validator (~> 1.4.0)
565 enumerize 566 enumerize
566 factory_girl_rails 567 factory_girl_rails
567 ffaker 568 ffaker
568 fog (~> 1.3.1) 569 fog (~> 1.3.1)
569 - font-awesome-rails 570 + font-awesome-rails (~> 3.2)
570 foreman 571 foreman
571 - gemoji (~> 1.2.1)  
572 - github-linguist  
573 - github-markup (~> 0.7.4)  
574 - gitlab-gollum-lib (~> 1.0.1)  
575 - gitlab-grack (~> 1.0.1)  
576 - gitlab-pygments.rb (~> 0.3.2)  
577 - gitlab_git (= 2.3.1) 572 + gemoji (~> 1.3.0)
  573 + github-markup (~> 0.7.4)!
  574 + gitlab-flowdock-git-hook (~> 0.4.2)
  575 + gitlab-gollum-lib (~> 1.1.0)
  576 + gitlab-grack (~> 2.0.0.pre)
  577 + gitlab-linguist (~> 3.0.0)
  578 + gitlab_git (~> 5.1.0)
578 gitlab_meta (= 6.0) 579 gitlab_meta (= 6.0)
579 - gitlab_omniauth-ldap (= 1.0.3)  
580 - gon  
581 - grape (~> 0.4.1) 580 + gitlab_omniauth-ldap (= 1.0.4)
  581 + gon (~> 5.0.0)
  582 + grape (~> 0.6.1)
582 grape-entity (~> 0.3.0) 583 grape-entity (~> 0.3.0)
583 growl 584 growl
584 guard-rspec 585 guard-rspec
585 guard-spinach 586 guard-spinach
586 haml-rails 587 haml-rails
587 - hipchat (~> 0.9.0) 588 + hipchat (~> 0.14.0)
588 httparty 589 httparty
589 - jasmine  
590 - jquery-atwho-rails (= 0.3.0) 590 + jasmine (= 2.0.0.rc5)
  591 + jquery-atwho-rails (~> 0.3.3)
591 jquery-rails (= 2.1.3) 592 jquery-rails (= 2.1.3)
592 jquery-turbolinks 593 jquery-turbolinks
593 jquery-ui-rails (= 2.0.2) 594 jquery-ui-rails (= 2.0.2)
594 - kaminari (~> 0.14.1) 595 + kaminari (~> 0.15.1)
595 launchy 596 launchy
596 letter_opener 597 letter_opener
597 minitest (~> 4.7.0) 598 minitest (~> 4.7.0)
@@ -601,14 +602,15 @@ DEPENDENCIES @@ -601,14 +602,15 @@ DEPENDENCIES
601 omniauth-github 602 omniauth-github
602 omniauth-google-oauth2 603 omniauth-google-oauth2
603 omniauth-twitter 604 omniauth-twitter
604 - pg  
605 poltergeist (~> 1.4.1) 605 poltergeist (~> 1.4.1)
  606 + protected_attributes
606 pry 607 pry
607 quiet_assets (~> 1.0.1) 608 quiet_assets (~> 1.0.1)
608 rack-attack 609 rack-attack
  610 + rack-cors
609 rack-mini-profiler 611 rack-mini-profiler
610 - rails (= 3.2.13)  
611 - rails-dev-tweaks 612 + rails (~> 4.0.0)
  613 + rails-observers
612 rails_best_practices 614 rails_best_practices
613 raphael-rails (~> 2.1.2) 615 raphael-rails (~> 2.1.2)
614 rb-fsevent 616 rb-fsevent
@@ -640,4 +642,5 @@ DEPENDENCIES @@ -640,4 +642,5 @@ DEPENDENCIES
640 uglifier 642 uglifier
641 underscore-rails (~> 1.4.4) 643 underscore-rails (~> 1.4.4)
642 unicorn (~> 4.6.3) 644 unicorn (~> 4.6.3)
  645 + unicorn-worker-killer
643 webmock 646 webmock
@@ -8,25 +8,25 @@ Below we describe the contributing process to GitLab for two reasons. So that co @@ -8,25 +8,25 @@ Below we describe the contributing process to GitLab for two reasons. So that co
8 8
9 ### Issue team 9 ### Issue team
10 - Looks for issues without workflow labels and triages issue 10 - Looks for issues without workflow labels and triages issue
11 -- Monitors pull requests  
12 -- Closes invalid issues and pull requests with a comment (duplicates, [feature requests](#feature-requests), [fixed in newer version](#issue-fixed-in-newer-version), [issue report for old version](#issue-report-for-old-version), not a problem in GitLab, etc.) 11 +- Monitors merge requests
  12 +- Closes invalid issues and merge requests with a comment (duplicates, [feature requests](#feature-requests), [fixed in newer version](#issue-fixed-in-newer-version), [issue report for old version](#issue-report-for-old-version), not a problem in GitLab, etc.)
13 - Assigns appropriate [labels](#how-we-handle-issues) 13 - Assigns appropriate [labels](#how-we-handle-issues)
14 -- Asks for feedback from issue reporter/pull request initiator ([invalid issue reports](#improperly-formatted-issue), [format code](#code-format), etc.) 14 +- Asks for feedback from issue reporter/merge request initiator ([invalid issue reports](#improperly-formatted-issue), [format code](#code-format), etc.)
15 - Asks for feedback from the relevant developer(s) based on the [list of members and their specialities](http://gitlab.org/team/) 15 - Asks for feedback from the relevant developer(s) based on the [list of members and their specialities](http://gitlab.org/team/)
16 -- Monitors all issues/pull requests for feedback (but especially ones commented on since automatically watching them): 16 +- Monitors all issues/merge requests for feedback (but especially ones commented on since automatically watching them):
17 - Closes issues with no feedback from the reporter for two weeks 17 - Closes issues with no feedback from the reporter for two weeks
18 -- Closes stale pull requests 18 +- Closes stale merge requests
19 19
20 ### Development team 20 ### Development team
21 21
22 -- Responds to issues and pull requests the issue team mentions them in 22 +- Responds to issues and merge requests the issue team mentions them in
23 - Monitors for new issues in _Awaiting developer action/feedback_ with no developer activity (once a week) 23 - Monitors for new issues in _Awaiting developer action/feedback_ with no developer activity (once a week)
24 -- Monitors for new pull requests (at least once a week)  
25 -- Manages their work queue by looking at issues and pull requests assigned to them 24 +- Monitors for new merge requests (at least once a week)
  25 +- Manages their work queue by looking at issues and merge requests assigned to them
26 - Close fixed issues (via commit messages or manually) 26 - Close fixed issues (via commit messages or manually)
27 - Codes [new features](http://feedback.gitlab.com/forums/176466-general/filters/top)! 27 - Codes [new features](http://feedback.gitlab.com/forums/176466-general/filters/top)!
28 - Response guidelines 28 - Response guidelines
29 -- Be kind to people trying to contribute. Be aware that people can be a non-native or a native English speaker, they might not understand thing or they might be very sensitive to how your word things. Use emoji to express your feelings (heart, star, smile, etc.). Some good tips about giving feedback to pull requests is in the [Thoughtbot code review guide](https://github.com/thoughtbot/guides/tree/master/code-review). 29 +- Be kind to people trying to contribute. Be aware that people can be a non-native or a native English speaker, they might not understand thing or they might be very sensitive to how your word things. Use emoji to express your feelings (heart, star, smile, etc.). Some good tips about giving feedback to merge requests is in the [Thoughtbot code review guide](https://github.com/thoughtbot/guides/tree/master/code-review).
30 30
31 ## Priorities of the issue team 31 ## Priorities of the issue team
32 32
@@ -45,8 +45,8 @@ Workflow labels are purposely not very detailed since that would be hard to keep @@ -45,8 +45,8 @@ Workflow labels are purposely not very detailed since that would be hard to keep
45 45
46 - _Awaiting feedback_: Feedback pending from the reporter 46 - _Awaiting feedback_: Feedback pending from the reporter
47 - _Awaiting confirmation of fix_: The issue should already be solved in **master** (generally you can avoid this workflow item and just close the issue right away) 47 - _Awaiting confirmation of fix_: The issue should already be solved in **master** (generally you can avoid this workflow item and just close the issue right away)
48 -- _Attached PR_: There is a PR attached and the discussion should happen there  
49 - - We need to let issues stay in sync with the PR's. We can do this with a "Closing #XXXX" or "Fixes #XXXX" comment in the PR. We can't close the issue when there is a pull request because sometimes a PR is not good and we just close the PR, then the issue must stay. 48 +- _Attached MR_: There is a MR attached and the discussion should happen there
  49 + - We need to let issues stay in sync with the MR's. We can do this with a "Closing #XXXX" or "Fixes #XXXX" comment in the MR. We can't close the issue when there is a merge request because sometimes a MR is not good and we just close the MR, then the issue must stay.
50 - _Awaiting developer action/feedback_: Issue needs to be fixed or clarified by a developer 50 - _Awaiting developer action/feedback_: Issue needs to be fixed or clarified by a developer
51 51
52 ## Functional labels 52 ## Functional labels
@@ -59,7 +59,7 @@ If an issue is complex and needs the attention of a specific person, assignment @@ -59,7 +59,7 @@ If an issue is complex and needs the attention of a specific person, assignment
59 59
60 ## Label colors 60 ## Label colors
61 - Light orange `#fef2c0`: workflow labels for issue team members (awaiting feedback, awaiting confirmation of fix) 61 - Light orange `#fef2c0`: workflow labels for issue team members (awaiting feedback, awaiting confirmation of fix)
62 -- Bright orange `#eb6420`: workflow labels for core team members (attached PR, awaiting developer action/feedback) 62 +- Bright orange `#eb6420`: workflow labels for core team members (attached MR, awaiting developer action/feedback)
63 - Light blue `#82C5FF`: functional labels 63 - Light blue `#82C5FF`: functional labels
64 - Green labels `#009800`: issues that can generally be ignored. For example, issues given the following labels normally can be closed immediately: 64 - Green labels `#009800`: issues that can generally be ignored. For example, issues given the following labels normally can be closed immediately:
65 - Feature request (see copy & paste response: [Feature requests](#feature-requests)) 65 - Feature request (see copy & paste response: [Feature requests](#feature-requests))
@@ -69,19 +69,19 @@ If an issue is complex and needs the attention of a specific person, assignment @@ -69,19 +69,19 @@ If an issue is complex and needs the attention of a specific person, assignment
69 69
70 ### Improperly formatted issue 70 ### Improperly formatted issue
71 71
72 -Thanks for the issue report. Please reformat your issue to conform to the issue tracker guidelines found in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines). 72 +Thanks for the issue report. Please reformat your issue to conform to the issue tracker guidelines found in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
73 73
74 ### Feature requests 74 ### Feature requests
75 75
76 -Thanks for your interest in GitLab. We don't use the GitHub issue tracker for feature requests. Please use http://feedback.gitlab.com/ for this purpose or create a pull request implementing this feature. Have a look at the \[contribution guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) for more information. 76 +Thanks for your interest in GitLab. We don't use the issue tracker for feature requests. Please use http://feedback.gitlab.com/ for this purpose or create a merge request implementing this feature. Have a look at the \[contribution guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md) for more information.
77 77
78 ### Issue report for old version 78 ### Issue report for old version
79 79
80 -Thanks for the issue report but we only support issues for the latest stable version of GitLab. I'm closing this issue but if you still experience this problem in the latest stable version, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines). 80 +Thanks for the issue report but we only support issues for the latest stable version of GitLab. I'm closing this issue but if you still experience this problem in the latest stable version, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
81 81
82 ### Support requests and configuration questions 82 ### Support requests and configuration questions
83 83
84 -Thanks for your interest in GitLab. We don't use the GitHub issue tracker for support requests and configuration questions. Please use the \[support forum\]\(https://groups.google.com/forum/#!forum/gitlabhq), \[Stack Overflow\]\(http://stackoverflow.com/questions/tagged/gitlab), the unofficial #gitlab IRC channel on Freenode or the http://www.gitlab.com paid services for this purpose. Have a look at the \[contribution guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) for more information. 84 +Thanks for your interest in GitLab. We don't use the issue tracker for support requests and configuration questions. Please use the \[support forum\]\(https://groups.google.com/forum/#!forum/gitlabhq), \[Stack Overflow\]\(http://stackoverflow.com/questions/tagged/gitlab), the unofficial #gitlab IRC channel on Freenode or the http://www.gitlab.com paid services for this purpose. Have a look at the \[contribution guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md) for more information.
85 85
86 ### Code format 86 ### Code format
87 87
@@ -89,17 +89,17 @@ Please use ``` to format console output, logs, and code as it&#39;s very hard to rea @@ -89,17 +89,17 @@ Please use ``` to format console output, logs, and code as it&#39;s very hard to rea
89 89
90 ### Issue fixed in newer version 90 ### Issue fixed in newer version
91 91
92 -Thanks for the issue report. This issue has already been fixed in newer versions of GitLab. Due to the size of this project and our limited resources we are only able to support the latest stable release as outlined in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker). In order to get this bug fix and enjoy many new features please \[upgrade\]\(http://blog.gitlab.org/). If you still experience issues at that time please open a new issue following our issue tracker guidelines found in the \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines). 92 +Thanks for the issue report. This issue has already been fixed in newer versions of GitLab. Due to the size of this project and our limited resources we are only able to support the latest stable release as outlined in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker). In order to get this bug fix and enjoy many new features please \[upgrade\]\(http://blog.gitlab.org/). If you still experience issues at that time please open a new issue following our issue tracker guidelines found in the \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
93 93
94 -### Improperly formatted pull request 94 +### Improperly formatted merge request
95 95
96 -Thanks for your interest in improving the GitLab codebase! Please update your pull request according to the \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#pull-request-guidelines). 96 +Thanks for your interest in improving the GitLab codebase! Please update your merge request according to the \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#pull-request-guidelines).
97 97
98 ### Inactivity close of an issue 98 ### Inactivity close of an issue
99 99
100 -It's been at least 2 weeks (and a new release) since we heard from you. I'm closing this issue but if you still experience this problem, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines). 100 +It's been at least 2 weeks (and a new release) since we heard from you. I'm closing this issue but if you still experience this problem, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
101 101
102 -### Inactivity close of a pull request 102 +### Inactivity close of a merge request
103 103
104 -This pull request has been closed because a request for more information has not been reacted to for more than 2 weeks. If you respond and conform to the pull request guidelines in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#pull-requests) we will reopen this pull request. 104 +This merge request has been closed because a request for more information has not been reacted to for more than 2 weeks. If you respond and conform to the merge request guidelines in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#pull-requests) we will reopen this merge request.
105 105
1 ## GitLab: self hosted Git management software 1 ## GitLab: self hosted Git management software
2 2
3 -![logo](https://raw.github.com/gitlabhq/gitlabhq/master/public/gitlab_logo.png) 3 +![logo](https://gitlab.com/gitlab-org/gitlab-ce/raw/master/public/gitlab_logo.png)
4 4
5 ![animated-screenshots](https://gist.github.com/fnkr/2f9badd56bfe0ed04ee7/raw/4f48806fbae97f556c2f78d8c2d299c04500cb0d/compiled.gif) 5 ![animated-screenshots](https://gist.github.com/fnkr/2f9badd56bfe0ed04ee7/raw/4f48806fbae97f556c2f78d8c2d299c04500cb0d/compiled.gif)
6 6
@@ -32,7 +32,9 @@ @@ -32,7 +32,9 @@
32 32
33 * GitLab.com commercial services: [Homepage](http://www.gitlab.com/) | [Subscription](http://www.gitlab.com/subscription/) | [Consultancy](http://www.gitlab.com/consultancy/) | [GitLab Cloud](http://www.gitlab.com/cloud/) | [Blog](http://blog.gitlab.com/) 33 * GitLab.com commercial services: [Homepage](http://www.gitlab.com/) | [Subscription](http://www.gitlab.com/subscription/) | [Consultancy](http://www.gitlab.com/consultancy/) | [GitLab Cloud](http://www.gitlab.com/cloud/) | [Blog](http://blog.gitlab.com/)
34 34
35 -* GitLab CI: [Readme](https://github.com/gitlabhq/gitlab-ci/blob/master/README.md) of the GitLab open-source continuous integration server 35 +* [GitLab Enterprise Edition](https://www.gitlab.com/features/) offers additional features that are useful for larger organizations (100+ users).
  36 +
  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.
36 38
37 ### Requirements 39 ### Requirements
38 40
@@ -46,40 +48,32 @@ @@ -46,40 +48,32 @@
46 48
47 ### Installation 49 ### Installation
48 50
49 -#### Official production installation  
50 -  
51 -* [Installation guide for a production server](doc/install/installation.md) 51 +#### Official installation methods
52 52
  53 +* [Manual installation guide for a production server](doc/install/installation.md)
53 54
54 -#### Official development installation 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.
55 56
56 -If you want to contribute, please first read our [Contributing Guidelines](https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) and then we suggest you to use the Vagrant virtual machine project to get an environment working with all dependencies. 57 +#### Third party one-click installers
57 58
58 -* [Vagrant virtual machine for development](https://github.com/gitlabhq/gitlab-vagrant-vm) 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.
59 60
  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.).
60 62
61 -#### Unofficial production installations 63 +#### Unofficial installation methods
62 64
63 -* [GitLab recipes](https://github.com/gitlabhq/gitlab-recipes) repository with unofficial guides for using GitLab with different software (operating systems, webservers, etc.) than the official version. 65 +* [GitLab recipes](https://gitlab.com/gitlab-org/gitlab-recipes/) repository with unofficial guides for using GitLab with different software (operating systems, webservers, etc.) than the official version.
64 66
65 * [Installation guides](https://github.com/gitlabhq/gitlab-public-wiki/wiki/Unofficial-Installation-Guides) public wiki with unofficial guides to install GitLab on different operating systems. 67 * [Installation guides](https://github.com/gitlabhq/gitlab-public-wiki/wiki/Unofficial-Installation-Guides) public wiki with unofficial guides to install GitLab on different operating systems.
66 68
67 -* [BitNami one-click installers](http://bitnami.com/stack/gitlab)  
68 -  
69 -* [TurnKey Linux virtual appliance](http://www.turnkeylinux.org/gitlab)  
70 -  
71 -  
72 ### New versions and upgrading 69 ### New versions and upgrading
73 70
74 -Since 2011 GitLab is released on the 22nd of every month. Every new release includes an upgrade guide.  
75 -  
76 -* [Upgrade guides](doc/update) 71 +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).
77 72
78 -* [Changelog](CHANGELOG) 73 +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.
79 74
80 * 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). 75 * 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).
81 76
82 -  
83 ### Run in production mode 77 ### Run in production mode
84 78
85 The Installation guide contains instructions on how to download an init script and run it automatically on boot. You can also start the init script manually: 79 The Installation guide contains instructions on how to download an init script and run it automatically on boot. You can also start the init script manually:
@@ -99,7 +93,7 @@ Start it with [Foreman](https://github.com/ddollar/foreman) @@ -99,7 +93,7 @@ Start it with [Foreman](https://github.com/ddollar/foreman)
99 or start each component separately 93 or start each component separately
100 94
101 bundle exec rails s 95 bundle exec rails s
102 - bundle exec rake sidekiq:start 96 + script/background_jobs start
103 97
104 ### Run the tests 98 ### Run the tests
105 99
@@ -110,7 +104,7 @@ or start each component separately @@ -110,7 +104,7 @@ or start each component separately
110 104
111 * Run all tests 105 * Run all tests
112 106
113 - bundle exec rake gitlab:test 107 + bundle exec rake gitlab:test RAILS_ENV=test
114 108
115 * [RSpec](http://rspec.info/) unit and functional tests 109 * [RSpec](http://rspec.info/) unit and functional tests
116 110
@@ -127,14 +121,17 @@ or start each component separately @@ -127,14 +121,17 @@ or start each component separately
127 121
128 ### GitLab interfaces 122 ### GitLab interfaces
129 123
130 -* [GitLab API](doc/api/README.md) 124 +* [GitLab API doc](doc/api/README.md) or see the [GitLab API website](http://api.gitlab.org/)
131 125
132 -* [Rake tasks](doc/raketasks) 126 +* [Rake tasks](doc/raketasks) including a [backup and restore procedure](doc/raketasks/backup_restore.md)
133 127
134 * [Directory structure](doc/install/structure.md) 128 * [Directory structure](doc/install/structure.md)
135 129
136 -* [Databases](doc/install/databases.md) 130 +* [Database installation](doc/install/databases.md)
  131 +
  132 +* [Markdown specification](doc/markdown/markdown.md)
137 133
  134 +* [Security guide](doc/security/rack_attack.md) to throttle abusive requests
138 135
139 ### Getting help 136 ### Getting help
140 137
@@ -144,23 +141,23 @@ or start each component separately @@ -144,23 +141,23 @@ or start each component separately
144 141
145 * [Mailing list](https://groups.google.com/forum/#!forum/gitlabhq) and [Stack Overflow](http://stackoverflow.com/questions/tagged/gitlab) are the best places to ask questions. For example you can use it if you have questions about: permission denied errors, invisible repos, can't clone/pull/push or with web hooks that don't fire. Please search for similar issues before posting your own, there's a good chance somebody else had the same issue you have now and has resolved it. There are a lot of helpful GitLab users there who may be able to help you quickly. If your particular issue turns out to be a bug, it will find its way from there to a fix. 142 * [Mailing list](https://groups.google.com/forum/#!forum/gitlabhq) and [Stack Overflow](http://stackoverflow.com/questions/tagged/gitlab) are the best places to ask questions. For example you can use it if you have questions about: permission denied errors, invisible repos, can't clone/pull/push or with web hooks that don't fire. Please search for similar issues before posting your own, there's a good chance somebody else had the same issue you have now and has resolved it. There are a lot of helpful GitLab users there who may be able to help you quickly. If your particular issue turns out to be a bug, it will find its way from there to a fix.
146 143
147 -* [Unofficial #gitlab IRC on Freenode](http://www.freenode.net/) is another way to get in touch with other GitLab users who may be able to help you.  
148 -  
149 * [Feedback and suggestions forum](http://feedback.gitlab.com) is the place to propose and discuss new features for GitLab. 144 * [Feedback and suggestions forum](http://feedback.gitlab.com) is the place to propose and discuss new features for GitLab.
150 145
151 -* [Contributing guide](https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) describes how to submit pull requests and issues. Pull requests and issues not in line with the guidelines in this document will be closed. 146 +* [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.
152 147
153 * [Support subscription](http://www.gitlab.com/subscription/) connects you to the knowledge of GitLab experts that will resolve your issues and answer your questions. 148 * [Support subscription](http://www.gitlab.com/subscription/) connects you to the knowledge of GitLab experts that will resolve your issues and answer your questions.
154 149
155 -* [Consultancy](http://www.gitlab.com/consultancy/) allows you hire GitLab experts for installations, upgrades and customizations. 150 +* [Consultancy](http://www.gitlab.com/consultancy/) from the GitLab experts for installations, upgrades and customizations.
156 151
  152 +* [#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).
  153 +
  154 +* [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 155
158 -### Getting in touch  
159 156
160 -* [Core team](https://github.com/gitlabhq?tab=members) 157 +### Getting in touch
161 158
162 -* [Contributors](https://github.com/gitlabhq/gitlabhq/graphs/contributors) 159 +* [Core team](http://gitlab.org/team/)
163 160
164 -* [Leader](https://github.com/randx) 161 +* [Contributors](http://contributors.gitlab.org/)
165 162
166 -* [Contact page](http://gitlab.org/contact/) 163 +* [Community](http://gitlab.org/community/)
1 -6.2.0.pre 1 +6.6.0.pre
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

212 Bytes | W: | H:

210 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/dark-scheme-preview.png

16.5 KB | W: | H:

9.64 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/favicon.ico
No preview for this file type
app/assets/images/file_txt.png

290 Bytes | W: | H:

463 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/icon-search.png

422 Bytes | W: | H:

331 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/images.png

8.49 KB | W: | H:

6.49 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/logo-black.png

3.01 KB | W: | H:

2.73 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/logo-white.png

5.59 KB | W: | H:

7.33 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/monokai-scheme-preview.png

6.5 KB | W: | H:

4.23 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/no_avatar.png

1.31 KB | W: | H:

704 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/no_group_avatar.png 0 → 100644

4.77 KB

app/assets/images/onion_skin_sprites.gif

1.55 KB | W: | H:

548 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/solarized-dark-scheme-preview.png

15.9 KB | W: | H:

9.67 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/swipemode_sprites.gif

1.5 KB | W: | H:

505 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/switch_icon.png

1.17 KB | W: | H:

1.17 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/trans_bg.gif

58 Bytes | W: | H:

50 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/images/white-scheme-preview.png

16.8 KB | W: | H:

9.79 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/assets/javascripts/admin.js.coffee
@@ -8,6 +8,23 @@ class Admin @@ -8,6 +8,23 @@ class Admin
8 else 8 else
9 elems.removeAttr 'disabled' 9 elems.removeAttr 'disabled'
10 10
  11 + $('body').on 'click', '.js-toggle-colors-link', (e) ->
  12 + e.preventDefault()
  13 + $('.js-toggle-colors-link').hide()
  14 + $('.js-toggle-colors-container').show()
  15 +
  16 + $('input#broadcast_message_color').on 'input', ->
  17 + previewColor = $('input#broadcast_message_color').val()
  18 + $('div.broadcast-message-preview').css('background-color', previewColor)
  19 +
  20 + $('input#broadcast_message_font').on 'input', ->
  21 + previewColor = $('input#broadcast_message_font').val()
  22 + $('div.broadcast-message-preview').css('color', previewColor)
  23 +
  24 + $('textarea#broadcast_message_message').on 'input', ->
  25 + previewMessage = $('textarea#broadcast_message_message').val()
  26 + $('div.broadcast-message-preview span').text(previewMessage)
  27 +
11 $('.log-tabs a').click (e) -> 28 $('.log-tabs a').click (e) ->
12 e.preventDefault() 29 e.preventDefault()
13 $(this).tab('show') 30 $(this).tab('show')
app/assets/javascripts/api.js.coffee
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 users_path: "/api/:version/users.json" 2 users_path: "/api/:version/users.json"
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 6
6 # Get 20 (depends on api) recent notes 7 # Get 20 (depends on api) recent notes
7 # and sort the ascending from oldest to newest 8 # and sort the ascending from oldest to newest
@@ -49,6 +50,20 @@ @@ -49,6 +50,20 @@
49 ).done (users) -> 50 ).done (users) ->
50 callback(users) 51 callback(users)
51 52
  53 + # Return namespaces list. Filtered by query
  54 + namespaces: (query, callback) ->
  55 + url = Api.buildUrl(Api.namespaces_path)
  56 +
  57 + $.ajax(
  58 + url: url
  59 + data:
  60 + private_token: gon.api_token
  61 + search: query
  62 + per_page: 20
  63 + dataType: "json"
  64 + ).done (namespaces) ->
  65 + callback(namespaces)
  66 +
52 buildUrl: (url) -> 67 buildUrl: (url) ->
53 url = gon.relative_url_root + url if gon.relative_url_root? 68 url = gon.relative_url_root + url if gon.relative_url_root?
54 return url.replace(':version', gon.api_version) 69 return url.replace(':version', gon.api_version)
app/assets/javascripts/application.js
@@ -19,12 +19,12 @@ @@ -19,12 +19,12 @@
19 //= require jquery.turbolinks 19 //= require jquery.turbolinks
20 //= require bootstrap 20 //= require bootstrap
21 //= require modernizr 21 //= require modernizr
22 -//= require chosen-jquery  
23 //= require select2 22 //= require select2
24 //= require raphael 23 //= require raphael
25 //= require g.raphael-min 24 //= require g.raphael-min
26 //= require g.bar-min 25 //= require g.bar-min
27 //= require branch-graph 26 //= require branch-graph
  27 +//= require highlightjs.min
28 //= require ace-src-noconflict/ace 28 //= require ace-src-noconflict/ace
29 //= require_tree . 29 //= require_tree .
30 //= require d3 30 //= require d3
app/assets/javascripts/behaviors/toggler_behavior.coffee
@@ -3,7 +3,7 @@ $ -&gt; @@ -3,7 +3,7 @@ $ -&gt;
3 container = $(@).closest(".js-toggler-container") 3 container = $(@).closest(".js-toggler-container")
4 4
5 container.toggleClass("on") 5 container.toggleClass("on")
6 - 6 +
7 $("body").on "click", ".js-toggle-visibility-link", (e) -> 7 $("body").on "click", ".js-toggle-visibility-link", (e) ->
8 $(@).find('i'). 8 $(@).find('i').
9 toggleClass('icon-chevron-down'). 9 toggleClass('icon-chevron-down').
@@ -11,7 +11,7 @@ $ -&gt; @@ -11,7 +11,7 @@ $ -&gt;
11 container = $(".js-toggle-visibility-container") 11 container = $(".js-toggle-visibility-container")
12 container.toggleClass("hide") 12 container.toggleClass("hide")
13 e.preventDefault() 13 e.preventDefault()
14 - 14 +
15 $("body").on "click", ".js-toggle-button", (e) -> 15 $("body").on "click", ".js-toggle-button", (e) ->
16 $(@).closest(".js-toggle-container").find(".js-toggle-content").toggle() 16 $(@).closest(".js-toggle-container").find(".js-toggle-content").toggle()
17 e.preventDefault() 17 e.preventDefault()
app/assets/javascripts/blob.js.coffee
1 class BlobView 1 class BlobView
2 constructor: -> 2 constructor: ->
  3 + # handle multi-line select
  4 + handleMultiSelect = (e) ->
  5 + [ first_line, last_line ] = parseSelectedLines()
  6 + [ line_number ] = parseSelectedLines($(this).attr("id"))
  7 + hash = "L#{line_number}"
  8 +
  9 + if e.shiftKey and not isNaN(first_line) and not isNaN(line_number)
  10 + if line_number < first_line
  11 + last_line = first_line
  12 + first_line = line_number
  13 + else
  14 + last_line = line_number
  15 +
  16 + hash = if first_line == last_line then "L#{first_line}" else "L#{first_line}-#{last_line}"
  17 +
  18 + setHash(hash)
  19 + e.preventDefault()
  20 +
3 # See if there are lines selected 21 # See if there are lines selected
4 # "#L12" and "#L34-56" supported 22 # "#L12" and "#L34-56" supported
5 - highlightBlobLines = ->  
6 - if window.location.hash isnt ""  
7 - matches = window.location.hash.match(/\#L(\d+)(\-(\d+))?/) 23 + highlightBlobLines = (e) ->
  24 + [ first_line, last_line ] = parseSelectedLines()
  25 +
  26 + unless isNaN first_line
  27 + $("#tree-content-holder .highlight .line").removeClass("hll")
  28 + $("#LC#{line}").addClass("hll") for line in [first_line..last_line]
  29 + $("#L#{first_line}").ScrollTo() unless e?
  30 +
  31 + # parse selected lines from hash
  32 + # always return first and last line (initialized to NaN)
  33 + parseSelectedLines = (str) ->
  34 + first_line = NaN
  35 + last_line = NaN
  36 + hash = str || window.location.hash
  37 +
  38 + if hash isnt ""
  39 + matches = hash.match(/\#?L(\d+)(\-(\d+))?/)
8 first_line = parseInt(matches?[1]) 40 first_line = parseInt(matches?[1])
9 last_line = parseInt(matches?[3]) 41 last_line = parseInt(matches?[3])
  42 + last_line = first_line if isNaN(last_line)
  43 +
  44 + [ first_line, last_line ]
  45 +
  46 + setHash = (hash) ->
  47 + hash = hash.replace(/^\#/, "")
  48 + nodes = $("#" + hash)
  49 + # if any nodes are using this id, they must be temporarily changed
  50 + # also, add a temporary div at the top of the screen to prevent scrolling
  51 + if nodes.length > 0
  52 + scroll_top = $(document).scrollTop()
  53 + nodes.attr("id", "")
  54 + tmp = $("<div></div>")
  55 + .css({ position: "absolute", visibility: "hidden", top: scroll_top + "px" })
  56 + .attr("id", hash)
  57 + .appendTo(document.body)
  58 +
  59 + window.location.hash = hash
  60 +
  61 + # restore the nodes
  62 + if nodes.length > 0
  63 + tmp.remove()
  64 + nodes.attr("id", hash)
10 65
11 - unless isNaN first_line  
12 - last_line = first_line if isNaN(last_line)  
13 - $("#tree-content-holder .highlight .line").removeClass("hll")  
14 - $("#LC#{line}").addClass("hll") for line in [first_line..last_line]  
15 - $("#L#{first_line}").ScrollTo() 66 + # initialize multi-line select
  67 + $("#tree-content-holder .line-numbers a[id^=L]").on("click", handleMultiSelect)
16 68
17 # Highlight the correct lines on load 69 # Highlight the correct lines on load
18 highlightBlobLines() 70 highlightBlobLines()
19 71
20 # Highlight the correct lines when the hash part of the URL changes 72 # Highlight the correct lines when the hash part of the URL changes
21 - $(window).on 'hashchange', highlightBlobLines 73 + $(window).on("hashchange", highlightBlobLines)
22 74
23 75
24 @BlobView = BlobView 76 @BlobView = BlobView
app/assets/javascripts/branch-graph.js.coffee
@@ -194,11 +194,14 @@ class BranchGraph @@ -194,11 +194,14 @@ class BranchGraph
194 fill: @colors[commit.space] 194 fill: @colors[commit.space]
195 stroke: "none" 195 stroke: "none"
196 ) 196 )
197 - r.rect(@offsetX + @unitSpace * @mspace + 10, y - 10, 20, 20).attr(  
198 - fill: "url(#{commit.author.icon})" 197 +
  198 + avatar_box_x = @offsetX + @unitSpace * @mspace + 10
  199 + avatar_box_y = y - 10
  200 + r.rect(avatar_box_x, avatar_box_y, 20, 20).attr(
199 stroke: @colors[commit.space] 201 stroke: @colors[commit.space]
200 "stroke-width": 2 202 "stroke-width": 2
201 ) 203 )
  204 + r.image(commit.author.icon, avatar_box_x, avatar_box_y, 20, 20)
202 r.text(@offsetX + @unitSpace * @mspace + 35, y, commit.message.split("\n")[0]).attr( 205 r.text(@offsetX + @unitSpace * @mspace + 35, y, commit.message.split("\n")[0]).attr(
203 "text-anchor": "start" 206 "text-anchor": "start"
204 font: "14px Monaco, monospace" 207 font: "14px Monaco, monospace"
app/assets/javascripts/commits.js.coffee
@@ -4,13 +4,13 @@ class CommitsList @@ -4,13 +4,13 @@ class CommitsList
4 limit: 0 4 limit: 0
5 offset: 0 5 offset: 0
6 @disable = false 6 @disable = false
7 - 7 +
8 @showProgress: -> 8 @showProgress: ->
9 $('.loading').show() 9 $('.loading').show()
10 - 10 +
11 @hideProgress: -> 11 @hideProgress: ->
12 $('.loading').hide() 12 $('.loading').hide()
13 - 13 +
14 @init: (ref, limit) -> 14 @init: (ref, limit) ->
15 $(".day-commits-table li.commit").live 'click', (event) -> 15 $(".day-commits-table li.commit").live 'click', (event) ->
16 if event.target.nodeName != "A" 16 if event.target.nodeName != "A"
@@ -21,7 +21,7 @@ class CommitsList @@ -21,7 +21,7 @@ class CommitsList
21 @data.ref = ref 21 @data.ref = ref
22 @data.limit = limit 22 @data.limit = limit
23 @data.offset = limit 23 @data.offset = limit
24 - 24 +
25 this.initLoadMore() 25 this.initLoadMore()
26 this.showProgress() 26 this.showProgress()
27 27
@@ -32,7 +32,9 @@ class CommitsList @@ -32,7 +32,9 @@ class CommitsList
32 url: location.href 32 url: location.href
33 data: @data 33 data: @data
34 complete: this.hideProgress 34 complete: this.hideProgress
35 - dataType: "script" 35 + success: (data) ->
  36 + CommitsList.append(data.count, data.html)
  37 + dataType: "json"
36 38
37 @append: (count, html) -> 39 @append: (count, html) ->
38 $("#commits-list").append(html) 40 $("#commits-list").append(html)
@@ -40,7 +42,7 @@ class CommitsList @@ -40,7 +42,7 @@ class CommitsList
40 @data.offset += count 42 @data.offset += count
41 else 43 else
42 @disable = true 44 @disable = true
43 - 45 +
44 @initLoadMore: -> 46 @initLoadMore: ->
45 $(document).unbind('scroll') 47 $(document).unbind('scroll')
46 $(document).endlessScroll 48 $(document).endlessScroll
app/assets/javascripts/dispatcher.js.coffee
@@ -4,6 +4,7 @@ $ -&gt; @@ -4,6 +4,7 @@ $ -&gt;
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: ->
@@ -47,5 +48,16 @@ class Dispatcher @@ -47,5 +48,16 @@ class Dispatcher
47 48
48 49
49 initSearch: -> 50 initSearch: ->
50 - autocomplete_json = $('.search-autocomplete-json').data('autocomplete-opts')  
51 - new SearchAutocomplete(autocomplete_json) 51 + opts = $('.search-autocomplete-opts')
  52 + path = opts.data('autocomplete-path')
  53 + project_id = opts.data('autocomplete-project-id')
  54 + project_ref = opts.data('autocomplete-project-ref')
  55 +
  56 + new SearchAutocomplete(path, project_id, project_ref)
  57 +
  58 + initHighlight: ->
  59 + $('.highlight pre code').each (i, e) ->
  60 + hljs.highlightBlock(e)
  61 + $(e).html($.map($(e).html().split("\n"), (line, i) ->
  62 + "<div class='line' id='LC" + (i + 1) + "'>" + line + "</div>"
  63 + ).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
app/assets/javascripts/issues.js.coffee
@@ -22,19 +22,17 @@ @@ -22,19 +22,17 @@
22 backgroundColor: '#DDD' 22 backgroundColor: '#DDD'
23 opacity: .4 23 opacity: .4
24 ) 24 )
25 - 25 +
26 reload: -> 26 reload: ->
27 Issues.initSelects() 27 Issues.initSelects()
28 Issues.initChecks() 28 Issues.initChecks()
29 $('#filter_issue_search').val($('#issue_search').val()) 29 $('#filter_issue_search').val($('#issue_search').val())
30 30
31 initSelects: -> 31 initSelects: ->
32 - $("#update_status").chosen()  
33 - $("#update_assignee_id").chosen()  
34 - $("#update_milestone_id").chosen()  
35 - $("#label_name").chosen()  
36 - $("#assignee_id").chosen()  
37 - $("#milestone_id").chosen() 32 + $("select#update_status").select2(width: 'resolve', dropdownAutoWidth: true)
  33 + $("select#update_assignee_id").select2(width: 'resolve', dropdownAutoWidth: true)
  34 + $("select#update_milestone_id").select2(width: 'resolve', dropdownAutoWidth: true)
  35 + $("select#label_name").select2(width: 'resolve', dropdownAutoWidth: true)
38 $("#milestone_id, #assignee_id, #label_name").on "change", -> 36 $("#milestone_id, #assignee_id, #label_name").on "change", ->
39 $(this).closest("form").submit() 37 $(this).closest("form").submit()
40 38
@@ -54,7 +52,16 @@ @@ -54,7 +52,16 @@
54 unless terms is last_terms 52 unless terms is last_terms
55 last_terms = terms 53 last_terms = terms
56 if terms.length >= 2 or terms.length is 0 54 if terms.length >= 2 or terms.length is 0
57 - form.submit() 55 + $.ajax
  56 + type: "GET"
  57 + url: location.href
  58 + data: "issue_search=" + terms
  59 + complete: ->
  60 + $(".loading").hide()
  61 + success: (data) ->
  62 + $('.issues-holder').html(data.html)
  63 + Issues.reload()
  64 + dataType: "json"
58 65
59 checkChanged: -> 66 checkChanged: ->
60 checked_issues = $(".selected_issue:checked") 67 checked_issues = $(".selected_issue:checked")
@@ -70,3 +77,9 @@ @@ -70,3 +77,9 @@
70 $("#update_issues_ids").val [] 77 $("#update_issues_ids").val []
71 $(".issues_bulk_update").hide() 78 $(".issues_bulk_update").hide()
72 $(".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
1 -window.updatePage = (data) ->  
2 - $.ajax({type: "GET", url: location.href, data: data, dataType: "script"})  
3 -  
4 window.slugify = (text) -> 1 window.slugify = (text) ->
5 text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase() 2 text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase()
6 3
@@ -56,7 +53,7 @@ window.unbindEvents = -&gt; @@ -56,7 +53,7 @@ window.unbindEvents = -&gt;
56 53
57 document.addEventListener("page:fetch", startSpinner) 54 document.addEventListener("page:fetch", startSpinner)
58 document.addEventListener("page:fetch", unbindEvents) 55 document.addEventListener("page:fetch", unbindEvents)
59 -document.addEventListener("page:receive", stopSpinner) 56 +document.addEventListener("page:change", stopSpinner)
60 57
61 $ -> 58 $ ->
62 # Click a .one_click_select field, select the contents 59 # Click a .one_click_select field, select the contents
@@ -70,8 +67,8 @@ $ -&gt; @@ -70,8 +67,8 @@ $ -&gt;
70 $('.appear-data').fadeIn() 67 $('.appear-data').fadeIn()
71 e.preventDefault() 68 e.preventDefault()
72 69
73 - # Initialize chosen selects  
74 - $('select.chosen').chosen() 70 + # Initialize select2 selects
  71 + $('select.select2').select2(width: 'resolve', dropdownAutoWidth: true)
75 72
76 # Initialize tooltips 73 # Initialize tooltips
77 $('.has_tooltip').tooltip() 74 $('.has_tooltip').tooltip()
@@ -84,6 +81,7 @@ $ -&gt; @@ -84,6 +81,7 @@ $ -&gt;
84 $(@).parents('form').submit() 81 $(@).parents('form').submit()
85 82
86 $("abbr.timeago").timeago() 83 $("abbr.timeago").timeago()
  84 + $('.js-timeago').timeago()
87 85
88 # Flash 86 # Flash
89 if (flash = $(".flash-container")).length > 0 87 if (flash = $(".flash-container")).length > 0
@@ -123,13 +121,11 @@ $ -&gt; @@ -123,13 +121,11 @@ $ -&gt;
123 $(@).next('table').show() 121 $(@).next('table').show()
124 $(@).remove() 122 $(@).remove()
125 123
126 -(($) ->  
127 - _chosen = $.fn.chosen  
128 - $.fn.extend chosen: (options) ->  
129 - default_options = search_contains: "true"  
130 - $.extend default_options, options  
131 - _chosen.apply @, [default_options] 124 + $(".content").on "click", ".js-details-expand", ->
  125 + $(@).next('.js-details-contain').removeClass("hide")
  126 + $(@).remove()
132 127
  128 +(($) ->
133 # Disable an element and add the 'disabled' Bootstrap class 129 # Disable an element and add the 'disabled' Bootstrap class
134 $.fn.extend disable: -> 130 $.fn.extend disable: ->
135 $(@).attr('disabled', 'disabled').addClass('disabled') 131 $(@).attr('disabled', 'disabled').addClass('disabled')
app/assets/javascripts/merge_requests.js.coffee
@@ -2,8 +2,8 @@ @@ -2,8 +2,8 @@
2 # * Filter merge requests 2 # * Filter merge requests
3 # 3 #
4 @merge_requestsPage = -> 4 @merge_requestsPage = ->
5 - $('#assignee_id').chosen()  
6 - $('#milestone_id').chosen() 5 + $('#assignee_id').select2()
  6 + $('#milestone_id').select2()
7 $('#milestone_id, #assignee_id').on 'change', -> 7 $('#milestone_id, #assignee_id').on 'change', ->
8 $(this).closest('form').submit() 8 $(this).closest('form').submit()
9 9
@@ -21,9 +21,11 @@ class MergeRequest @@ -21,9 +21,11 @@ class MergeRequest
21 this.initMergeWidget() 21 this.initMergeWidget()
22 this.$('.show-all-commits').on 'click', => 22 this.$('.show-all-commits').on 'click', =>
23 this.showAllCommits() 23 this.showAllCommits()
24 - 24 +
25 modal = $('#modal_merge_info').modal(show: false) 25 modal = $('#modal_merge_info').modal(show: false)
26 26
  27 + disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request'
  28 +
27 # Local jQuery finder 29 # Local jQuery finder
28 $: (selector) -> 30 $: (selector) ->
29 this.$el.find(selector) 31 this.$el.find(selector)
@@ -83,12 +85,12 @@ class MergeRequest @@ -83,12 +85,12 @@ class MergeRequest
83 url: this.$('.nav-tabs .diffs-tab a').attr('href') 85 url: this.$('.nav-tabs .diffs-tab a').attr('href')
84 beforeSend: => 86 beforeSend: =>
85 this.$('.status').addClass 'loading' 87 this.$('.status').addClass 'loading'
86 -  
87 complete: => 88 complete: =>
88 @diffs_loaded = true 89 @diffs_loaded = true
89 this.$('.status').removeClass 'loading' 90 this.$('.status').removeClass 'loading'
90 -  
91 - dataType: 'script' 91 + success: (data) =>
  92 + this.$(".diffs").html(data.html)
  93 + dataType: 'json'
92 94
93 showAllCommits: -> 95 showAllCommits: ->
94 this.$('.first-commits').remove() 96 this.$('.first-commits').remove()
app/assets/javascripts/namespace_select.js.coffee 0 → 100644
@@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
  1 +$ ->
  2 + namespaceFormatResult = (namespace) ->
  3 + markup = "<div class='namespace-result'>"
  4 + markup += "<span class='namespace-kind'>" + namespace.kind + "</span>"
  5 + markup += "<span class='namespace-path'>" + namespace.path + "</span>"
  6 + markup += "</div>"
  7 + markup
  8 +
  9 + formatSelection = (namespace) ->
  10 + namespace.kind + ": " + namespace.path
  11 +
  12 + $('.ajax-namespace-select').each (i, select) ->
  13 + $(select).select2
  14 + placeholder: "Search for namespace"
  15 + multiple: $(select).hasClass('multiselect')
  16 + minimumInputLength: 0
  17 + query: (query) ->
  18 + Api.namespaces query.term, (namespaces) ->
  19 + data = { results: namespaces }
  20 + query.callback(data)
  21 +
  22 + dropdownCssClass: "ajax-namespace-dropdown"
  23 + formatResult: namespaceFormatResult
  24 + formatSelection: formatSelection
app/assets/javascripts/notes.js
@@ -1,580 +0,0 @@ @@ -1,580 +0,0 @@
1 -var NoteList = {  
2 - id: null,  
3 - notes_path: null,  
4 - target_params: null,  
5 - target_id: 0,  
6 - target_type: null,  
7 -  
8 - init: function(tid, tt, path) {  
9 - NoteList.notes_path = path + ".js";  
10 - NoteList.target_id = tid;  
11 - NoteList.target_type = tt;  
12 - NoteList.target_params = "target_type=" + NoteList.target_type + "&target_id=" + NoteList.target_id;  
13 -  
14 - NoteList.setupMainTargetNoteForm();  
15 -  
16 - // get initial set of notes  
17 - NoteList.getContent();  
18 -  
19 - // Unbind events to prevent firing twice  
20 - $(document).off("click", ".js-add-diff-note-button");  
21 - $(document).off("click", ".js-discussion-reply-button");  
22 - $(document).off("click", ".js-note-preview-button");  
23 - $(document).off("click", ".js-note-attachment-input");  
24 - $(document).off("click", ".js-close-discussion-note-form");  
25 - $(document).off("click", ".js-note-delete");  
26 - $(document).off("click", ".js-note-edit");  
27 - $(document).off("click", ".js-note-edit-cancel");  
28 - $(document).off("click", ".js-note-attachment-delete");  
29 - $(document).off("click", ".js-choose-note-attachment-button");  
30 - $(document).off("click", ".js-show-outdated-discussion");  
31 -  
32 - $(document).off("ajax:complete", ".js-main-target-form");  
33 -  
34 -  
35 - // add a new diff note  
36 - $(document).on("click",  
37 - ".js-add-diff-note-button",  
38 - NoteList.addDiffNote);  
39 -  
40 - // reply to diff/discussion notes  
41 - $(document).on("click",  
42 - ".js-discussion-reply-button",  
43 - NoteList.replyToDiscussionNote);  
44 -  
45 - // setup note preview  
46 - $(document).on("click",  
47 - ".js-note-preview-button",  
48 - NoteList.previewNote);  
49 -  
50 - // update the file name when an attachment is selected  
51 - $(document).on("change",  
52 - ".js-note-attachment-input",  
53 - NoteList.updateFormAttachment);  
54 -  
55 - // hide diff note form  
56 - $(document).on("click",  
57 - ".js-close-discussion-note-form",  
58 - NoteList.removeDiscussionNoteForm);  
59 -  
60 - // remove a note (in general)  
61 - $(document).on("click",  
62 - ".js-note-delete",  
63 - NoteList.removeNote);  
64 -  
65 - // show the edit note form  
66 - $(document).on("click",  
67 - ".js-note-edit",  
68 - NoteList.showEditNoteForm);  
69 -  
70 - // cancel note editing  
71 - $(document).on("click",  
72 - ".note-edit-cancel",  
73 - NoteList.cancelNoteEdit);  
74 -  
75 - // delete note attachment  
76 - $(document).on("click",  
77 - ".js-note-attachment-delete",  
78 - NoteList.deleteNoteAttachment);  
79 -  
80 - // update the note after editing  
81 - $(document).on("ajax:complete",  
82 - "form.edit_note",  
83 - NoteList.updateNote);  
84 -  
85 - // reset main target form after submit  
86 - $(document).on("ajax:complete",  
87 - ".js-main-target-form",  
88 - NoteList.resetMainTargetForm);  
89 -  
90 -  
91 - $(document).on("click",  
92 - ".js-choose-note-attachment-button",  
93 - NoteList.chooseNoteAttachment);  
94 -  
95 - $(document).on("click",  
96 - ".js-show-outdated-discussion",  
97 - function(e) { $(this).next('.outdated-discussion').show(); e.preventDefault() });  
98 - },  
99 -  
100 -  
101 - /**  
102 - * When clicking on buttons  
103 - */  
104 -  
105 - /**  
106 - * Called when clicking on the "add a comment" button on the side of a diff line.  
107 - *  
108 - * Inserts a temporary row for the form below the line.  
109 - * Sets up the form and shows it.  
110 - */  
111 - addDiffNote: function(e) {  
112 - e.preventDefault();  
113 -  
114 - // find the form  
115 - var form = $(".js-new-note-form");  
116 - var row = $(this).closest("tr");  
117 - var nextRow = row.next();  
118 -  
119 - // does it already have notes?  
120 - if (nextRow.is(".notes_holder")) {  
121 - $.proxy(NoteList.replyToDiscussionNote,  
122 - nextRow.find(".js-discussion-reply-button")  
123 - ).call();  
124 - } else {  
125 - // add a notes row and insert the form  
126 - row.after('<tr class="notes_holder js-temp-notes-holder"><td class="notes_line" colspan="2"></td><td class="notes_content"></td></tr>');  
127 - form.clone().appendTo(row.next().find(".notes_content"));  
128 -  
129 - // show the form  
130 - NoteList.setupDiscussionNoteForm($(this), row.next().find("form"));  
131 - }  
132 - },  
133 -  
134 - /**  
135 - * Called when clicking the "Choose File" button.  
136 - *  
137 - * Opens the file selection dialog.  
138 - */  
139 - chooseNoteAttachment: function() {  
140 - var form = $(this).closest("form");  
141 -  
142 - form.find(".js-note-attachment-input").click();  
143 - },  
144 -  
145 - /**  
146 - * Shows the note preview.  
147 - *  
148 - * Lets the server render GFM into Html and displays it.  
149 - *  
150 - * Note: uses the Toggler behavior to toggle preview/edit views/buttons  
151 - */  
152 - previewNote: function(e) {  
153 - e.preventDefault();  
154 -  
155 - var form = $(this).closest("form");  
156 - var preview = form.find('.js-note-preview');  
157 - var noteText = form.find('.js-note-text').val();  
158 -  
159 - if(noteText.trim().length === 0) {  
160 - preview.text('Nothing to preview.');  
161 - } else {  
162 - preview.text('Loading...');  
163 - $.post($(this).data('url'), {note: noteText})  
164 - .success(function(previewData) {  
165 - preview.html(previewData);  
166 - });  
167 - }  
168 - },  
169 -  
170 - /**  
171 - * Called in response to "cancel" on a diff note form.  
172 - *  
173 - * Shows the reply button again.  
174 - * Removes the form and if necessary it's temporary row.  
175 - */  
176 - removeDiscussionNoteForm: function() {  
177 - var form = $(this).closest("form");  
178 - var row = form.closest("tr");  
179 -  
180 - // show the reply button (will only work for replies)  
181 - form.prev(".js-discussion-reply-button").show();  
182 -  
183 - if (row.is(".js-temp-notes-holder")) {  
184 - // remove temporary row for diff lines  
185 - row.remove();  
186 - } else {  
187 - // only remove the form  
188 - form.remove();  
189 - }  
190 - },  
191 -  
192 - /**  
193 - * Called in response to deleting a note of any kind.  
194 - *  
195 - * Removes the actual note from view.  
196 - * Removes the whole discussion if the last note is being removed.  
197 - */  
198 - removeNote: function() {  
199 - var note = $(this).closest(".note");  
200 - var notes = note.closest(".notes");  
201 -  
202 - // check if this is the last note for this line  
203 - if (notes.find(".note").length === 1) {  
204 - // for discussions  
205 - notes.closest(".discussion").remove();  
206 -  
207 - // for diff lines  
208 - notes.closest("tr").remove();  
209 - }  
210 -  
211 - note.remove();  
212 - NoteList.updateVotes();  
213 - },  
214 -  
215 - /**  
216 - * Called in response to clicking the edit note link  
217 - *  
218 - * Replaces the note text with the note edit form  
219 - * Adds a hidden div with the original content of the note to fill the edit note form with  
220 - * if the user cancels  
221 - */  
222 - showEditNoteForm: function(e) {  
223 - e.preventDefault();  
224 - var note = $(this).closest(".note");  
225 - note.find(".note-text").hide();  
226 -  
227 - // Show the attachment delete link  
228 - note.find(".js-note-attachment-delete").show();  
229 -  
230 - GitLab.GfmAutoComplete.setup();  
231 -  
232 - var form = note.find(".note-edit-form");  
233 - form.show();  
234 -  
235 - var textarea = form.find("textarea");  
236 - var p = $("<p></p>").text(textarea.val());  
237 - var hidden_div = $('<div class="note-original-content"></div>').append(p);  
238 - form.append(hidden_div);  
239 - hidden_div.hide();  
240 - textarea.focus();  
241 - },  
242 -  
243 - /**  
244 - * Called in response to clicking the cancel button when editing a note  
245 - *  
246 - * Resets and hides the note editing form  
247 - */  
248 - cancelNoteEdit: function(e) {  
249 - e.preventDefault();  
250 - var note = $(this).closest(".note");  
251 - NoteList.resetNoteEditing(note);  
252 - },  
253 -  
254 -  
255 - /**  
256 - * Called in response to clicking the delete attachment link  
257 - *  
258 - * Removes the attachment wrapper view, including image tag if it exists  
259 - * Resets the note editing form  
260 - */  
261 - deleteNoteAttachment: function() {  
262 - var note = $(this).closest(".note");  
263 - note.find(".note-attachment").remove();  
264 - NoteList.resetNoteEditing(note);  
265 - NoteList.rewriteTimestamp(note.find(".note-last-update"));  
266 - },  
267 -  
268 -  
269 - /**  
270 - * Called when clicking on the "reply" button for a diff line.  
271 - *  
272 - * Shows the note form below the notes.  
273 - */  
274 - replyToDiscussionNote: function() {  
275 - // find the form  
276 - var form = $(".js-new-note-form");  
277 -  
278 - // hide reply button  
279 - $(this).hide();  
280 - // insert the form after the button  
281 - form.clone().insertAfter($(this));  
282 -  
283 - // show the form  
284 - NoteList.setupDiscussionNoteForm($(this), $(this).next("form"));  
285 - },  
286 -  
287 -  
288 - /**  
289 - * Helper for inserting and setting up note forms.  
290 - */  
291 -  
292 -  
293 - /**  
294 - * Called in response to creating a note failing validation.  
295 - *  
296 - * Adds the rendered errors to the respective form.  
297 - * If "discussionId" is null or undefined, the main target form is assumed.  
298 - */  
299 - errorsOnForm: function(errorsHtml, discussionId) {  
300 - // find the form  
301 - if (discussionId) {  
302 - var form = $("form[rel='"+discussionId+"']");  
303 - } else {  
304 - var form = $(".js-main-target-form");  
305 - }  
306 -  
307 - form.find(".js-errors").remove();  
308 - form.prepend(errorsHtml);  
309 -  
310 - form.find(".js-note-text").focus();  
311 - },  
312 -  
313 -  
314 - /**  
315 - * Shows the diff/discussion form and does some setup on it.  
316 - *  
317 - * Sets some hidden fields in the form.  
318 - *  
319 - * Note: dataHolder must have the "discussionId", "lineCode", "noteableType"  
320 - * and "noteableId" data attributes set.  
321 - */  
322 - setupDiscussionNoteForm: function(dataHolder, form) {  
323 - // setup note target  
324 - form.attr("rel", dataHolder.data("discussionId"));  
325 - form.find("#note_commit_id").val(dataHolder.data("commitId"));  
326 - form.find("#note_line_code").val(dataHolder.data("lineCode"));  
327 - form.find("#note_noteable_type").val(dataHolder.data("noteableType"));  
328 - form.find("#note_noteable_id").val(dataHolder.data("noteableId"));  
329 -  
330 - NoteList.setupNoteForm(form);  
331 -  
332 - form.find(".js-note-text").focus();  
333 - },  
334 -  
335 - /**  
336 - * Shows the main form and does some setup on it.  
337 - *  
338 - * Sets some hidden fields in the form.  
339 - */  
340 - setupMainTargetNoteForm: function() {  
341 - // find the form  
342 - var form = $(".js-new-note-form");  
343 - // insert the form after the button  
344 - form.clone().replaceAll($(".js-main-target-form"));  
345 -  
346 - form = form.prev("form");  
347 -  
348 - // show the form  
349 - NoteList.setupNoteForm(form);  
350 -  
351 - // fix classes  
352 - form.removeClass("js-new-note-form");  
353 - form.addClass("js-main-target-form");  
354 -  
355 - // remove unnecessary fields and buttons  
356 - form.find("#note_line_code").remove();  
357 - form.find(".js-close-discussion-note-form").remove();  
358 - },  
359 -  
360 - /**  
361 - * General note form setup.  
362 - *  
363 - * * deactivates the submit button when text is empty  
364 - * * hides the preview button when text is empty  
365 - * * setup GFM auto complete  
366 - * * show the form  
367 - */  
368 - setupNoteForm: function(form) {  
369 - disableButtonIfEmptyField(form.find(".js-note-text"), form.find(".js-comment-button"));  
370 -  
371 - form.removeClass("js-new-note-form");  
372 -  
373 - // setup preview buttons  
374 - form.find(".js-note-edit-button, .js-note-preview-button")  
375 - .tooltip({ placement: 'left' });  
376 -  
377 - previewButton = form.find(".js-note-preview-button");  
378 - form.find(".js-note-text").on("input", function() {  
379 - if ($(this).val().trim() !== "") {  
380 - previewButton.removeClass("turn-off").addClass("turn-on");  
381 - } else {  
382 - previewButton.removeClass("turn-on").addClass("turn-off");  
383 - }  
384 - });  
385 -  
386 - // remove notify commit author checkbox for non-commit notes  
387 - if (form.find("#note_noteable_type").val() !== "Commit") {  
388 - form.find(".js-notify-commit-author").remove();  
389 - }  
390 -  
391 - GitLab.GfmAutoComplete.setup();  
392 -  
393 - form.show();  
394 - },  
395 -  
396 -  
397 - /**  
398 - * Handle loading the initial set of notes.  
399 - * And set up loading more notes when scrolling to the bottom of the page.  
400 - */  
401 -  
402 -  
403 - /**  
404 - * Gets an initial set of notes.  
405 - */  
406 - getContent: function() {  
407 - $.ajax({  
408 - url: NoteList.notes_path,  
409 - data: NoteList.target_params,  
410 - complete: function(){ $('.js-notes-busy').removeClass("loading")},  
411 - beforeSend: function() { $('.js-notes-busy').addClass("loading") },  
412 - dataType: "script"  
413 - });  
414 - },  
415 -  
416 - /**  
417 - * Called in response to getContent().  
418 - * Replaces the content of #notes-list with the given html.  
419 - */  
420 - setContent: function(newNoteIds, html) {  
421 - $("#notes-list").html(html);  
422 - },  
423 -  
424 -  
425 - /**  
426 - * Adds a single common note to #notes-list.  
427 - */  
428 - appendNewNote: function(id, html) {  
429 - $("#notes-list").append(html);  
430 - NoteList.updateVotes();  
431 - },  
432 -  
433 - /**  
434 - * Adds a single discussion note to #notes-list.  
435 - *  
436 - * Also removes the corresponding form.  
437 - */  
438 - appendNewDiscussionNote: function(discussionId, diffRowHtml, noteHtml) {  
439 - var form = $("form[rel='"+discussionId+"']");  
440 - var row = form.closest("tr");  
441 -  
442 - // is this the first note of discussion?  
443 - if (row.is(".js-temp-notes-holder")) {  
444 - // insert the note and the reply button after the temp row  
445 - row.after(diffRowHtml);  
446 - // remove the note (will be added again below)  
447 - row.next().find(".note").remove();  
448 - }  
449 -  
450 - // append new note to all matching discussions  
451 - $(".notes[rel='"+discussionId+"']").append(noteHtml);  
452 -  
453 - // cleanup after successfully creating a diff/discussion note  
454 - $.proxy(NoteList.removeDiscussionNoteForm, form).call();  
455 - },  
456 -  
457 - /**  
458 - * Called in response the main target form has been successfully submitted.  
459 - *  
460 - * Removes any errors.  
461 - * Resets text and preview.  
462 - * Resets buttons.  
463 - */  
464 - resetMainTargetForm: function(){  
465 - var form = $(this);  
466 -  
467 - // remove validation errors  
468 - form.find(".js-errors").remove();  
469 -  
470 - // reset text and preview  
471 - var previewContainer = form.find(".js-toggler-container.note_text_and_preview");  
472 - if (previewContainer.is(".on")) {  
473 - previewContainer.removeClass("on");  
474 - }  
475 - form.find(".js-note-text").val("").trigger("input");  
476 - },  
477 -  
478 - /**  
479 - * Called after an attachment file has been selected.  
480 - *  
481 - * Updates the file name for the selected attachment.  
482 - */  
483 - updateFormAttachment: function() {  
484 - var form = $(this).closest("form");  
485 -  
486 - // get only the basename  
487 - var filename = $(this).val().replace(/^.*[\\\/]/, '');  
488 -  
489 - form.find(".js-attachment-filename").text(filename);  
490 - },  
491 -  
492 - /**  
493 - * Recalculates the votes and updates them (if they are displayed at all).  
494 - *  
495 - * Assumes all relevant notes are displayed (i.e. there are no more notes to  
496 - * load via getMore()).  
497 - * Might produce inaccurate results when not all notes have been loaded and a  
498 - * recalculation is triggered (e.g. when deleting a note).  
499 - */  
500 - updateVotes: function() {  
501 - var votes = $("#votes .votes");  
502 - var notes = $("#notes-list .note .vote");  
503 -  
504 - // only update if there is a vote display  
505 - if (votes.size()) {  
506 - var upvotes = notes.filter(".upvote").size();  
507 - var downvotes = notes.filter(".downvote").size();  
508 - var votesCount = upvotes + downvotes;  
509 - var upvotesPercent = votesCount ? (100.0 / votesCount * upvotes) : 0;  
510 - var downvotesPercent = votesCount ? (100.0 - upvotesPercent) : 0;  
511 -  
512 - // change vote bar lengths  
513 - votes.find(".bar-success").css("width", upvotesPercent+"%");  
514 - votes.find(".bar-danger").css("width", downvotesPercent+"%");  
515 - // replace vote numbers  
516 - votes.find(".upvotes").text(votes.find(".upvotes").text().replace(/\d+/, upvotes));  
517 - votes.find(".downvotes").text(votes.find(".downvotes").text().replace(/\d+/, downvotes));  
518 - }  
519 - },  
520 -  
521 - /**  
522 - * Called in response to the edit note form being submitted  
523 - *  
524 - * Updates the current note field.  
525 - * Hides the edit note form  
526 - */  
527 - updateNote: function(e, xhr, settings) {  
528 - response = JSON.parse(xhr.responseText);  
529 - if (response.success) {  
530 - var note_li = $("#note_" + response.id);  
531 - var note_text = note_li.find(".note-text");  
532 - note_text.html(response.note).show();  
533 -  
534 - var note_form = note_li.find(".note-edit-form");  
535 - note_form.hide();  
536 - note_form.find(".btn-save").enableButton();  
537 -  
538 - // Update the "Edited at xxx label" on the note to show it's just been updated  
539 - NoteList.rewriteTimestamp(note_li.find(".note-last-update"));  
540 - }  
541 - },  
542 -  
543 - /**  
544 - * Called in response to the 'cancel note' link clicked, or after deleting a note attachment  
545 - *  
546 - * Hides the edit note form and shows the note  
547 - * Resets the edit note form textarea with the original content of the note  
548 - */  
549 - resetNoteEditing: function(note) {  
550 - note.find(".note-text").show();  
551 -  
552 - // Hide the attachment delete link  
553 - note.find(".js-note-attachment-delete").hide();  
554 -  
555 - // Put the original content of the note back into the edit form textarea  
556 - var form = note.find(".note-edit-form");  
557 - var original_content = form.find(".note-original-content");  
558 - form.find("textarea").val(original_content.text());  
559 - original_content.remove();  
560 -  
561 - note.find(".note-edit-form").hide();  
562 - },  
563 -  
564 - /**  
565 - * Utility function to generate new timestamp text for a note  
566 - *  
567 - */  
568 - rewriteTimestamp: function(element) {  
569 - // Strip all newlines from the existing timestamp  
570 - var ts = element.text().replace(/\n/g, ' ').trim();  
571 -  
572 - // If the timestamp already has '(Edited xxx ago)' text, remove it  
573 - ts = ts.replace(new RegExp("\\(Edited [A-Za-z0-9 ]+\\)$", "gi"), "");  
574 -  
575 - // Append "(Edited just now)"  
576 - ts = (ts + " <small>(Edited just now)</small>");  
577 -  
578 - element.html(ts);  
579 - }  
580 -};  
app/assets/javascripts/notes.js.coffee 0 → 100644
@@ -0,0 +1,453 @@ @@ -0,0 +1,453 @@
  1 +class Notes
  2 + @interval: null
  3 +
  4 + constructor: (notes_url, note_ids) ->
  5 + @notes_url = notes_url
  6 + @notes_url = gon.relative_url_root + @notes_url if gon.relative_url_root?
  7 + @note_ids = note_ids
  8 + @initRefresh()
  9 + @setupMainTargetNoteForm()
  10 + @cleanBinding()
  11 + @addBinding()
  12 +
  13 + addBinding: ->
  14 + # add note to UI after creation
  15 + $(document).on "ajax:success", ".js-main-target-form", @addNote
  16 + $(document).on "ajax:success", ".js-discussion-note-form", @addDiscussionNote
  17 +
  18 + # change note in UI after update
  19 + $(document).on "ajax:success", "form.edit_note", @updateNote
  20 +
  21 + # Edit note link
  22 + $(document).on "click", ".js-note-edit", @showEditForm
  23 + $(document).on "click", ".note-edit-cancel", @cancelEdit
  24 +
  25 + # remove a note (in general)
  26 + $(document).on "click", ".js-note-delete", @removeNote
  27 +
  28 + # delete note attachment
  29 + $(document).on "click", ".js-note-attachment-delete", @removeAttachment
  30 +
  31 + # Preview button
  32 + $(document).on "click", ".js-note-preview-button", @previewNote
  33 +
  34 + # reset main target form after submit
  35 + $(document).on "ajax:complete", ".js-main-target-form", @resetMainTargetForm
  36 +
  37 + # attachment button
  38 + $(document).on "click", ".js-choose-note-attachment-button", @chooseNoteAttachment
  39 +
  40 + # update the file name when an attachment is selected
  41 + $(document).on "change", ".js-note-attachment-input", @updateFormAttachment
  42 +
  43 + # reply to diff/discussion notes
  44 + $(document).on "click", ".js-discussion-reply-button", @replyToDiscussionNote
  45 +
  46 + # add diff note
  47 + $(document).on "click", ".js-add-diff-note-button", @addDiffNote
  48 +
  49 + # hide diff note form
  50 + $(document).on "click", ".js-close-discussion-note-form", @cancelDiscussionForm
  51 +
  52 + cleanBinding: ->
  53 + $(document).off "ajax:success", ".js-main-target-form"
  54 + $(document).off "ajax:success", ".js-discussion-note-form"
  55 + $(document).off "ajax:success", "form.edit_note"
  56 + $(document).off "click", ".js-note-edit"
  57 + $(document).off "click", ".note-edit-cancel"
  58 + $(document).off "click", ".js-note-delete"
  59 + $(document).off "click", ".js-note-attachment-delete"
  60 + $(document).off "click", ".js-note-preview-button"
  61 + $(document).off "ajax:complete", ".js-main-target-form"
  62 + $(document).off "click", ".js-choose-note-attachment-button"
  63 + $(document).off "click", ".js-discussion-reply-button"
  64 + $(document).off "click", ".js-add-diff-note-button"
  65 +
  66 +
  67 + initRefresh: ->
  68 + clearInterval(Notes.interval)
  69 + Notes.interval = setInterval =>
  70 + @refresh()
  71 + , 15000
  72 +
  73 + refresh: ->
  74 + @getContent()
  75 +
  76 + getContent: ->
  77 + $.ajax
  78 + url: @notes_url
  79 + dataType: "json"
  80 + success: (data) =>
  81 + notes = data.notes
  82 + $.each notes, (i, note) =>
  83 + @renderNote(note)
  84 +
  85 +
  86 + ###
  87 + Render note in main comments area.
  88 +
  89 + Note: for rendering inline notes use renderDiscussionNote
  90 + ###
  91 + renderNote: (note) ->
  92 + # render note if it not present in loaded list
  93 + # or skip if rendered
  94 + if @isNewNote(note)
  95 + @note_ids.push(note.id)
  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)
  100 +
  101 +
  102 + ###
  103 + Check if note does not exists on page
  104 + ###
  105 + isNewNote: (note) ->
  106 + $.inArray(note.id, @note_ids) == -1
  107 +
  108 +
  109 + ###
  110 + Render note in discussion area.
  111 +
  112 + Note: for rendering inline notes use renderDiscussionNote
  113 + ###
  114 + renderDiscussionNote: (note) ->
  115 + @note_ids.push(note.id)
  116 + form = $("form[rel='" + note.discussion_id + "']")
  117 + row = form.closest("tr")
  118 +
  119 + # is this the first note of discussion?
  120 + if row.is(".js-temp-notes-holder")
  121 + # insert the note and the reply button after the temp row
  122 + row.after note.discussion_html
  123 +
  124 + # remove the note (will be added again below)
  125 + row.next().find(".note").remove()
  126 +
  127 + # append new note to all matching discussions
  128 + $(".notes[rel='" + note.discussion_id + "']").append note.html
  129 +
  130 + # cleanup after successfully creating a diff/discussion note
  131 + @removeDiscussionNoteForm(form)
  132 +
  133 + ###
  134 + Shows the note preview.
  135 +
  136 + Lets the server render GFM into Html and displays it.
  137 +
  138 + Note: uses the Toggler behavior to toggle preview/edit views/buttons
  139 + ###
  140 + previewNote: (e) ->
  141 + e.preventDefault()
  142 + form = $(this).closest("form")
  143 + preview = form.find(".js-note-preview")
  144 + noteText = form.find(".js-note-text").val()
  145 + if noteText.trim().length is 0
  146 + preview.text "Nothing to preview."
  147 + else
  148 + preview.text "Loading..."
  149 + $.post($(this).data("url"),
  150 + note: noteText
  151 + ).success (previewData) ->
  152 + preview.html previewData
  153 +
  154 + ###
  155 + Called in response the main target form has been successfully submitted.
  156 +
  157 + Removes any errors.
  158 + Resets text and preview.
  159 + Resets buttons.
  160 + ###
  161 + resetMainTargetForm: ->
  162 + form = $(".js-main-target-form")
  163 +
  164 + # remove validation errors
  165 + form.find(".js-errors").remove()
  166 +
  167 + # reset text and preview
  168 + previewContainer = form.find(".js-toggler-container.note_text_and_preview")
  169 + previewContainer.removeClass "on" if previewContainer.is(".on")
  170 + form.find(".js-note-text").val("").trigger "input"
  171 +
  172 + ###
  173 + Called when clicking the "Choose File" button.
  174 +
  175 + Opens the file selection dialog.
  176 + ###
  177 + chooseNoteAttachment: ->
  178 + form = $(this).closest("form")
  179 + form.find(".js-note-attachment-input").click()
  180 +
  181 + ###
  182 + Shows the main form and does some setup on it.
  183 +
  184 + Sets some hidden fields in the form.
  185 + ###
  186 + setupMainTargetNoteForm: ->
  187 +
  188 + # find the form
  189 + form = $(".js-new-note-form")
  190 +
  191 + # insert the form after the button
  192 + form.clone().replaceAll $(".js-main-target-form")
  193 + form = form.prev("form")
  194 +
  195 + # show the form
  196 + @setupNoteForm(form)
  197 +
  198 + # fix classes
  199 + form.removeClass "js-new-note-form"
  200 + form.addClass "js-main-target-form"
  201 +
  202 + # remove unnecessary fields and buttons
  203 + form.find("#note_line_code").remove()
  204 + form.find(".js-close-discussion-note-form").remove()
  205 +
  206 + ###
  207 + General note form setup.
  208 +
  209 + deactivates the submit button when text is empty
  210 + hides the preview button when text is empty
  211 + setup GFM auto complete
  212 + show the form
  213 + ###
  214 + setupNoteForm: (form) ->
  215 + disableButtonIfEmptyField form.find(".js-note-text"), form.find(".js-comment-button")
  216 + form.removeClass "js-new-note-form"
  217 +
  218 + # setup preview buttons
  219 + form.find(".js-note-edit-button, .js-note-preview-button").tooltip placement: "left"
  220 + previewButton = form.find(".js-note-preview-button")
  221 + form.find(".js-note-text").on "input", ->
  222 + if $(this).val().trim() isnt ""
  223 + previewButton.removeClass("turn-off").addClass "turn-on"
  224 + else
  225 + previewButton.removeClass("turn-on").addClass "turn-off"
  226 +
  227 +
  228 + # remove notify commit author checkbox for non-commit notes
  229 + form.find(".js-notify-commit-author").remove() if form.find("#note_noteable_type").val() isnt "Commit"
  230 + GitLab.GfmAutoComplete.setup()
  231 + form.show()
  232 +
  233 +
  234 + ###
  235 + Called in response to the new note form being submitted
  236 +
  237 + Adds new note to list.
  238 + ###
  239 + addNote: (xhr, note, status) =>
  240 + @renderNote(note)
  241 + @updateVotes()
  242 +
  243 + ###
  244 + Called in response to the new note form being submitted
  245 +
  246 + Adds new note to list.
  247 + ###
  248 + addDiscussionNote: (xhr, note, status) =>
  249 + @renderDiscussionNote(note)
  250 +
  251 + ###
  252 + Called in response to the edit note form being submitted
  253 +
  254 + Updates the current note field.
  255 + ###
  256 + updateNote: (xhr, note, status) =>
  257 + note_li = $("#note_" + note.id)
  258 + note_li.replaceWith(note.html)
  259 + code = "#note_" + note.id + " .highlight pre code"
  260 + $(code).each (i, e) ->
  261 + hljs.highlightBlock(e)
  262 +
  263 + ###
  264 + Called in response to clicking the edit note link
  265 +
  266 + Replaces the note text with the note edit form
  267 + Adds a hidden div with the original content of the note to fill the edit note form with
  268 + if the user cancels
  269 + ###
  270 + showEditForm: (e) ->
  271 + e.preventDefault()
  272 + note = $(this).closest(".note")
  273 + note.find(".note-text").hide()
  274 +
  275 + # Show the attachment delete link
  276 + note.find(".js-note-attachment-delete").show()
  277 + GitLab.GfmAutoComplete.setup()
  278 + form = note.find(".note-edit-form")
  279 + form.show()
  280 + form.find("textarea").focus()
  281 +
  282 + ###
  283 + Called in response to clicking the edit note link
  284 +
  285 + Hides edit form
  286 + ###
  287 + cancelEdit: (e) ->
  288 + e.preventDefault()
  289 + note = $(this).closest(".note")
  290 + note.find(".note-text").show()
  291 + note.find(".js-note-attachment-delete").hide()
  292 + note.find(".note-edit-form").hide()
  293 +
  294 + ###
  295 + Called in response to deleting a note of any kind.
  296 +
  297 + Removes the actual note from view.
  298 + Removes the whole discussion if the last note is being removed.
  299 + ###
  300 + removeNote: ->
  301 + note = $(this).closest(".note")
  302 + notes = note.closest(".notes")
  303 +
  304 + # check if this is the last note for this line
  305 + if notes.find(".note").length is 1
  306 +
  307 + # for discussions
  308 + notes.closest(".discussion").remove()
  309 +
  310 + # for diff lines
  311 + notes.closest("tr").remove()
  312 +
  313 + note.remove()
  314 +
  315 + ###
  316 + Called in response to clicking the delete attachment link
  317 +
  318 + Removes the attachment wrapper view, including image tag if it exists
  319 + Resets the note editing form
  320 + ###
  321 + removeAttachment: ->
  322 + note = $(this).closest(".note")
  323 + note.find(".note-attachment").remove()
  324 + note.find(".note-text").show()
  325 + note.find(".js-note-attachment-delete").hide()
  326 + note.find(".note-edit-form").hide()
  327 +
  328 + ###
  329 + Called when clicking on the "reply" button for a diff line.
  330 +
  331 + Shows the note form below the notes.
  332 + ###
  333 + replyToDiscussionNote: (e) =>
  334 + form = $(".js-new-note-form")
  335 + replyLink = $(e.target)
  336 + replyLink.hide()
  337 +
  338 + # insert the form after the button
  339 + form.clone().insertAfter replyLink
  340 +
  341 + # show the form
  342 + @setupDiscussionNoteForm(replyLink, replyLink.next("form"))
  343 +
  344 + ###
  345 + Shows the diff or discussion form and does some setup on it.
  346 +
  347 + Sets some hidden fields in the form.
  348 +
  349 + Note: dataHolder must have the "discussionId", "lineCode", "noteableType"
  350 + and "noteableId" data attributes set.
  351 + ###
  352 + setupDiscussionNoteForm: (dataHolder, form) =>
  353 + # setup note target
  354 + form.attr "rel", dataHolder.data("discussionId")
  355 + form.find("#note_commit_id").val dataHolder.data("commitId")
  356 + form.find("#note_line_code").val dataHolder.data("lineCode")
  357 + form.find("#note_noteable_type").val dataHolder.data("noteableType")
  358 + form.find("#note_noteable_id").val dataHolder.data("noteableId")
  359 + @setupNoteForm form
  360 + form.find(".js-note-text").focus()
  361 + form.addClass "js-discussion-note-form"
  362 +
  363 + ###
  364 + General note form setup.
  365 +
  366 + deactivates the submit button when text is empty
  367 + hides the preview button when text is empty
  368 + setup GFM auto complete
  369 + show the form
  370 + ###
  371 + setupNoteForm: (form) =>
  372 + disableButtonIfEmptyField form.find(".js-note-text"), form.find(".js-comment-button")
  373 + form.removeClass "js-new-note-form"
  374 + form.removeClass "js-new-note-form"
  375 + GitLab.GfmAutoComplete.setup()
  376 +
  377 + # setup preview buttons
  378 + previewButton = form.find(".js-note-preview-button")
  379 + form.find(".js-note-text").on "input", ->
  380 + if $(this).val().trim() isnt ""
  381 + previewButton.removeClass("turn-off").addClass "turn-on"
  382 + else
  383 + previewButton.removeClass("turn-on").addClass "turn-off"
  384 +
  385 + form.show()
  386 +
  387 + ###
  388 + Called when clicking on the "add a comment" button on the side of a diff line.
  389 +
  390 + Inserts a temporary row for the form below the line.
  391 + Sets up the form and shows it.
  392 + ###
  393 + addDiffNote: (e) =>
  394 + e.preventDefault()
  395 + link = e.target
  396 + form = $(".js-new-note-form")
  397 + row = $(link).closest("tr")
  398 + nextRow = row.next()
  399 +
  400 + # does it already have notes?
  401 + if nextRow.is(".notes_holder")
  402 + replyButton = nextRow.find(".js-discussion-reply-button")
  403 + if replyButton.length > 0
  404 + $.proxy(@replyToDiscussionNote, replyButton).call()
  405 + else
  406 + # add a notes row and insert the form
  407 + row.after "<tr class=\"notes_holder js-temp-notes-holder\"><td class=\"notes_line\" colspan=\"2\"></td><td class=\"notes_content\"></td></tr>"
  408 + form.clone().appendTo row.next().find(".notes_content")
  409 +
  410 + # show the form
  411 + @setupDiscussionNoteForm $(link), row.next().find("form")
  412 +
  413 + ###
  414 + Called in response to "cancel" on a diff note form.
  415 +
  416 + Shows the reply button again.
  417 + Removes the form and if necessary it's temporary row.
  418 + ###
  419 + removeDiscussionNoteForm: (form)->
  420 + row = form.closest("tr")
  421 +
  422 + # show the reply button (will only work for replies)
  423 + form.prev(".js-discussion-reply-button").show()
  424 + if row.is(".js-temp-notes-holder")
  425 + # remove temporary row for diff lines
  426 + row.remove()
  427 + else
  428 + # only remove the form
  429 + form.remove()
  430 +
  431 +
  432 + cancelDiscussionForm: (e) =>
  433 + e.preventDefault()
  434 + form = $(".js-new-note-form")
  435 + form = $(e.target).closest(".js-discussion-note-form")
  436 + @removeDiscussionNoteForm(form)
  437 +
  438 + updateVotes: ->
  439 + (new NotesVotes).updateVotes()
  440 +
  441 + ###
  442 + Called after an attachment file has been selected.
  443 +
  444 + Updates the file name for the selected attachment.
  445 + ###
  446 + updateFormAttachment: ->
  447 + form = $(this).closest("form")
  448 +
  449 + # get only the basename
  450 + filename = $(this).val().replace(/^.*[\\\/]/, "")
  451 + form.find(".js-attachment-filename").text filename
  452 +
  453 +@Notes = Notes
app/assets/javascripts/notes_votes.js.coffee 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +class NotesVotes
  2 + updateVotes: ->
  3 + votes = $("#votes .votes")
  4 + notes = $("#notes-list .note .vote")
  5 +
  6 + # only update if there is a vote display
  7 + if votes.size()
  8 + upvotes = notes.filter(".upvote").size()
  9 + downvotes = notes.filter(".downvote").size()
  10 + votesCount = upvotes + downvotes
  11 + upvotesPercent = (if votesCount then (100.0 / votesCount * upvotes) else 0)
  12 + downvotesPercent = (if votesCount then (100.0 - upvotesPercent) else 0)
  13 +
  14 + # change vote bar lengths
  15 + votes.find(".bar-success").css "width", upvotesPercent + "%"
  16 + votes.find(".bar-danger").css "width", downvotesPercent + "%"
  17 +
  18 + # replace vote numbers
  19 + votes.find(".upvotes").text votes.find(".upvotes").text().replace(/\d+/, upvotes)
  20 + votes.find(".downvotes").text votes.find(".downvotes").text().replace(/\d+/, downvotes)
  21 +
  22 +@NotesVotes = NotesVotes
app/assets/javascripts/pager.js.coffee
@@ -19,8 +19,9 @@ @@ -19,8 +19,9 @@
19 data: "limit=" + @limit + "&offset=" + @offset 19 data: "limit=" + @limit + "&offset=" + @offset
20 complete: -> 20 complete: ->
21 $(".loading").hide() 21 $(".loading").hide()
22 -  
23 - dataType: "script" 22 + success: (data) ->
  23 + Pager.append(data.count, data.html)
  24 + dataType: "json"
24 25
25 append: (count, html) -> 26 append: (count, html) ->
26 $(".content_list").append html 27 $(".content_list").append html
app/assets/javascripts/profile.js.coffee
@@ -16,3 +16,13 @@ $ -&gt; @@ -16,3 +16,13 @@ $ -&gt;
16 16
17 $('.update-notifications').on 'ajax:complete', -> 17 $('.update-notifications').on 'ajax:complete', ->
18 $(this).find('.btn-save').enableButton() 18 $(this).find('.btn-save').enableButton()
  19 +
  20 +
  21 + $('.js-choose-user-avatar-button').bind "click", ->
  22 + form = $(this).closest("form")
  23 + form.find(".js-user-avatar-input").click()
  24 +
  25 + $('.js-user-avatar-input').bind "change", ->
  26 + form = $(this).closest("form")
  27 + filename = $(this).val().replace(/^.*[\\\/]/, '')
  28 + form.find(".js-avatar-filename").text(filename)
app/assets/javascripts/project.js.coffee
@@ -6,10 +6,10 @@ class Project @@ -6,10 +6,10 @@ class Project
6 6
7 @initEvents() 7 @initEvents()
8 8
9 - 9 +
10 initEvents: -> 10 initEvents: ->
11 disableButtonIfEmptyField '#project_name', '.project-submit' 11 disableButtonIfEmptyField '#project_name', '.project-submit'
12 - 12 +
13 $('#project_issues_enabled').change -> 13 $('#project_issues_enabled').change ->
14 if ($(this).is(':checked') == true) 14 if ($(this).is(':checked') == true)
15 $('#project_issues_tracker').removeAttr('disabled') 15 $('#project_issues_tracker').removeAttr('disabled')
@@ -29,14 +29,20 @@ class Project @@ -29,14 +29,20 @@ class Project
29 29
30 $ -> 30 $ ->
31 # Git clone panel switcher 31 # Git clone panel switcher
32 - scope = $ '.project_clone_holder' 32 + scope = $ '.git-clone-holder'
33 if scope.length > 0 33 if scope.length > 0
34 $('a, button', scope).click -> 34 $('a, button', scope).click ->
35 $('a, button', scope).removeClass 'active' 35 $('a, button', scope).removeClass 'active'
36 $(@).addClass 'active' 36 $(@).addClass 'active'
37 $('#project_clone', scope).val $(@).data 'clone' 37 $('#project_clone', scope).val $(@).data 'clone'
38 - $(".clone").text("").append 'git remote add origin ' + $(@).data 'clone' 38 + $(".clone").text("").append $(@).data 'clone'
39 39
40 # Ref switcher 40 # Ref switcher
41 $('.project-refs-select').on 'change', -> 41 $('.project-refs-select').on 'change', ->
42 $(@).parents('form').submit() 42 $(@).parents('form').submit()
  43 +
  44 + $('.hide-no-ssh-message').on 'click', (e) ->
  45 + path = '/'
  46 + $.cookie('hide_no_ssh_message', 'false', { path: path })
  47 + $(@).parents('.no-ssh-key-message').hide()
  48 + e.preventDefault()
app/assets/javascripts/search_autocomplete.js.coffee
1 class SearchAutocomplete 1 class SearchAutocomplete
2 - constructor: (json) -> 2 + constructor: (search_autocomplete_path, project_id, project_ref) ->
  3 + project_id = '' unless project_id
  4 + project_ref = '' unless project_ref
  5 + query = "?project_id=" + project_id + "&project_ref=" + project_ref
  6 +
3 $("#search").autocomplete 7 $("#search").autocomplete
4 - source: json 8 + source: search_autocomplete_path + query
  9 + minLength: 1
5 select: (event, ui) -> 10 select: (event, ui) ->
6 location.href = ui.item.url 11 location.href = ui.item.url
7 12
app/assets/javascripts/stat_graph_contributors_graph.js.coffee
@@ -46,11 +46,7 @@ class window.ContributorsGraph @@ -46,11 +46,7 @@ class window.ContributorsGraph
46 46
47 class window.ContributorsMasterGraph extends ContributorsGraph 47 class window.ContributorsMasterGraph extends ContributorsGraph
48 constructor: (@data) -> 48 constructor: (@data) ->
49 - if $(window).width() > 1214  
50 - @width = 1100  
51 - else  
52 - @width = 870  
53 - 49 + @width = $('.container').width() - 70
54 @height = 200 50 @height = 200
55 @x = null 51 @x = null
56 @y = null 52 @y = null
@@ -88,7 +84,6 @@ class window.ContributorsMasterGraph extends ContributorsGraph @@ -88,7 +84,6 @@ class window.ContributorsMasterGraph extends ContributorsGraph
88 x(d.date) 84 x(d.date)
89 ).y0(@height).y1((d) -> 85 ).y0(@height).y1((d) ->
90 xa = d.commits = d.commits ? d.additions ? d.deletions 86 xa = d.commits = d.commits ? d.additions ? d.deletions
91 - console.log(xa)  
92 y(xa) 87 y(xa)
93 ).interpolate("basis") 88 ).interpolate("basis")
94 create_brush: -> 89 create_brush: ->
@@ -124,11 +119,7 @@ class window.ContributorsMasterGraph extends ContributorsGraph @@ -124,11 +119,7 @@ class window.ContributorsMasterGraph extends ContributorsGraph
124 119
125 class window.ContributorsAuthorGraph extends ContributorsGraph 120 class window.ContributorsAuthorGraph extends ContributorsGraph
126 constructor: (@data) -> 121 constructor: (@data) ->
127 - if $(window).width() > 1214  
128 - @width = 490  
129 - else  
130 - @width = 380  
131 - 122 + @width = $('.container').width()/2 - 100
132 @height = 200 123 @height = 200
133 @x = null 124 @x = null
134 @y = null 125 @y = null
app/assets/javascripts/users_select.js.coffee
1 $ -> 1 $ ->
2 userFormatResult = (user) -> 2 userFormatResult = (user) ->
3 - avatar = gon.gravatar_url  
4 - avatar = avatar.replace('%{hash}', md5(user.email))  
5 - avatar = avatar.replace('%{size}', '24') 3 + if user.avatar
  4 + avatar = user.avatar.url
  5 + else
  6 + avatar = gon.gravatar_url
  7 + avatar = avatar.replace('%{hash}', md5(user.email))
  8 + avatar = avatar.replace('%{size}', '24')
6 9
7 - markup = "<div class='user-result'>"  
8 - markup += "<div class='user-image'><img class='avatar s24' src='" + avatar + "'></div>"  
9 - markup += "<div class='user-name'>" + user.name + "</div>"  
10 - markup += "<div class='user-username'>" + user.username + "</div>"  
11 - markup += "</div>"  
12 - markup 10 + "<div class='user-result'>
  11 + <div class='user-image'><img class='avatar s24' src='#{avatar}'></div>
  12 + <div class='user-name'>#{user.name}</div>
  13 + <div class='user-username'>#{user.username}</div>
  14 + </div>"
13 15
14 userFormatSelection = (user) -> 16 userFormatSelection = (user) ->
15 user.name 17 user.name
app/assets/stylesheets/application.scss
@@ -4,19 +4,46 @@ @@ -4,19 +4,46 @@
4 * the top of the compiled file, but it's generally better to create a new file per style scope. 4 * the top of the compiled file, but it's generally better to create a new file per style scope.
5 *= require jquery.ui.gitlab 5 *= require jquery.ui.gitlab
6 *= require jquery.atwho 6 *= require jquery.atwho
7 - *= require chosen  
8 *= require select2 7 *= require select2
  8 + *= require highlightjs.min
9 *= require_self 9 *= require_self
10 */ 10 */
11 11
  12 +@import "main/variables.scss";
  13 +@import "main/mixins.scss";
  14 +@import "main/fonts.scss";
  15 +@import "main/layout.scss";
  16 +
  17 +/**
  18 + * Customized Twitter bootstrap
  19 + */
  20 +@import 'gl_bootstrap';
  21 +
12 /** 22 /**
13 - * GitLab bootstrap: 23 + * Font icons
  24 + *
14 */ 25 */
15 -@import "gitlab_bootstrap.scss"; 26 +@import "font-awesome";
16 27
17 -@import "common.scss";  
18 -@import "selects.scss"; 28 +/**
  29 + * Generic css (forms, nav etc):
  30 + */
  31 +@import "generic/avatar.scss";
  32 +@import "generic/common.scss";
  33 +@import "generic/typography.scss";
  34 +@import "generic/buttons.scss";
  35 +@import "generic/blocks.scss";
  36 +@import "generic/ui_box.scss";
  37 +@import "generic/issue_box.scss";
  38 +@import "generic/files.scss";
  39 +@import "generic/lists.scss";
  40 +@import "generic/forms.scss";
  41 +@import "generic/selects.scss";
  42 +@import "generic/highlight.scss";
19 43
  44 +/**
  45 + * Page specific styles (issues, projects etc):
  46 + */
20 @import "sections/header.scss"; 47 @import "sections/header.scss";
21 @import "sections/nav.scss"; 48 @import "sections/nav.scss";
22 @import "sections/commits.scss"; 49 @import "sections/commits.scss";
@@ -39,6 +66,9 @@ @@ -39,6 +66,9 @@
39 @import "sections/dashboard.scss"; 66 @import "sections/dashboard.scss";
40 @import "sections/stat_graph.scss"; 67 @import "sections/stat_graph.scss";
41 68
  69 +/**
  70 + * Code ighlight
  71 + */
42 @import "highlight/white.scss"; 72 @import "highlight/white.scss";
43 @import "highlight/dark.scss"; 73 @import "highlight/dark.scss";
44 @import "highlight/solarized_dark.scss"; 74 @import "highlight/solarized_dark.scss";
@@ -57,4 +87,3 @@ @@ -57,4 +87,3 @@
57 * Styles for JS behaviors. 87 * Styles for JS behaviors.
58 */ 88 */
59 @import "behaviors.scss"; 89 @import "behaviors.scss";
60 -  
app/assets/stylesheets/common.scss
@@ -1,389 +0,0 @@ @@ -1,389 +0,0 @@
1 -html {  
2 - overflow-y: scroll;  
3 -}  
4 -  
5 -/** LAYOUT **/  
6 -  
7 -body {  
8 - margin-bottom: 20px;  
9 -}  
10 -  
11 -.container {  
12 - padding-top: 0;  
13 - z-index: 5;  
14 -}  
15 -  
16 -.container .content {  
17 - margin: 0 0;  
18 -}  
19 -  
20 -.author_link {  
21 - color: $link_color;  
22 -}  
23 -  
24 -.help li { color:$style_color; }  
25 -  
26 -.back-link {  
27 - font-size: 14px;  
28 -}  
29 -  
30 -table a code {  
31 - position: relative;  
32 - top: -2px;  
33 - margin-right: 3px;  
34 -}  
35 -  
36 -.loading {  
37 - margin: 20px auto;  
38 - background: url(ajax_loader.gif) no-repeat center center;  
39 - width: 40px;  
40 - height: 40px;  
41 - &.loading-gray {  
42 - background: url(ajax_loader_gray.gif) no-repeat center center;  
43 - }  
44 -}  
45 -  
46 -/** FLASH message **/  
47 -.flash-container {  
48 - display: none;  
49 - cursor: pointer;  
50 - margin: 0;  
51 - text-align: center;  
52 - color: #fff;  
53 - font-size: 14px;  
54 - position: fixed;  
55 - bottom: 0;  
56 - width: 100%;  
57 - opacity: 0.8;  
58 - z-index: 100;  
59 -  
60 - .flash-notice {  
61 - background: #49C;  
62 - padding: 10px;  
63 - text-shadow: 0 1px 1px #178;  
64 - }  
65 -  
66 - .flash-alert {  
67 - background: #C67;  
68 - text-shadow: 0 1px 1px #945;  
69 - padding: 10px;  
70 - }  
71 -}  
72 -  
73 -span.update-author {  
74 - display: block;  
75 - color: #999;  
76 - font-weight: normal;  
77 - font-style: italic;  
78 - strong {  
79 - font-weight: bold;  
80 - font-style: normal;  
81 - }  
82 -}  
83 -  
84 -.user-mention {  
85 - color: #2FA0BB;  
86 - font-weight: bold;  
87 -}  
88 -  
89 -.label {  
90 - padding: 1px 4px;  
91 - font-size: 12px;  
92 - font-style: normal;  
93 - font-weight: normal;  
94 -}  
95 -  
96 -.field_with_errors {  
97 - display: inline;  
98 -}  
99 -  
100 -ul.breadcrumb {  
101 - background: white;  
102 - border: none;  
103 - li {  
104 - display: inline;  
105 - text-shadow: 0 1px 0 white  
106 - }  
107 -  
108 - a {  
109 - font-size: 16px;  
110 - }  
111 -}  
112 -  
113 -.line_holder {  
114 - &:hover {  
115 - td {  
116 - background: #FFFFCF !important;  
117 - }  
118 - }  
119 -}  
120 -  
121 -p.time {  
122 - color: #999;  
123 - font-size: 90%;  
124 - margin: 30px 3px 3px 2px;  
125 -}  
126 -  
127 -.search-holder {  
128 - label, input {  
129 - height: 30px;  
130 - padding: 0;  
131 - font-size: 14px;  
132 - }  
133 - label {  
134 - line-height: 30px;  
135 - color: #666;  
136 - }  
137 -}  
138 -  
139 -.highlight_word {  
140 - border-bottom: 2px solid #F90;  
141 -}  
142 -  
143 -.status_info {  
144 - font-size: 14px;  
145 - padding: 5px 15px;  
146 - line-height: 26px;  
147 - text-align: center;  
148 - float: right;  
149 - position: relative;  
150 - top: -5px;  
151 - @include border-radius(4px);  
152 -  
153 - &.success {  
154 - background: #4A4;  
155 - color: #FFF;  
156 - }  
157 -  
158 - &.error {  
159 - background: #DA4E49;  
160 - color: #FFF;  
161 - }  
162 -}  
163 -  
164 -.thin_area{  
165 - height: 150px;  
166 -}  
167 -  
168 -// Fixes alignment on notes.  
169 -.new_note {  
170 - label {  
171 - text-align: left;  
172 - }  
173 -}  
174 -  
175 -// Fix issue with notes & lists creating a bunch of bottom borders.  
176 -li.note {  
177 - img { max-width:100% }  
178 - .note-title {  
179 - li {  
180 - border-bottom:none !important;  
181 - }  
182 - }  
183 -}  
184 -  
185 -.markdown {  
186 - img {  
187 - max-width: 100%;  
188 - }  
189 -}  
190 -  
191 -.wiki_content code, .readme code{  
192 - background-color: inherit;  
193 -}  
194 -  
195 -.team_member_show {  
196 - td:first-child {  
197 - color: #aaa;  
198 - }  
199 -}  
200 -  
201 -.rss-icon {  
202 - img {  
203 - width: 24px;  
204 - vertical-align: top;  
205 - }  
206 -  
207 - strong {  
208 - line-height: 24px;  
209 - }  
210 -}  
211 -  
212 -.supp_diff_link,  
213 -.show-all-commits {  
214 - cursor: pointer;  
215 -}  
216 -  
217 -.merge-request,  
218 -.issue {  
219 - &.today{  
220 - background: #EFE;  
221 - border-color: #CEC;  
222 - }  
223 - &.closed {  
224 - background: #F5f5f5;  
225 - border-color: #E5E5E5;  
226 - }  
227 - &.merged {  
228 - background: #F5f5f5;  
229 - border-color: #E5E5E5;  
230 - }  
231 -}  
232 -  
233 -.git_error_tips {  
234 - @extend .span6;  
235 - text-align: left;  
236 - margin-top: 40px;  
237 - pre {  
238 - background: white;  
239 - border: none;  
240 - font-size: 12px;  
241 - }  
242 -}  
243 -  
244 -.error-message {  
245 - padding: 10px;  
246 - background: #C67;  
247 - padding-left: 20px;  
248 - margin: 0;  
249 - color: #FFF;  
250 -  
251 - a {  
252 - color: #fff;  
253 - text-decoration: underline;  
254 - }  
255 - &.centered {  
256 - text-align: center;  
257 - }  
258 -}  
259 -  
260 -.warning_message {  
261 - border-left: 4px solid #ed9;  
262 - color: #b90;  
263 - padding: 10px;  
264 - margin-bottom: 10px;  
265 - background: #ffffe6;  
266 - padding-left: 20px;  
267 -  
268 - &.centered {  
269 - text-align: center;  
270 - }  
271 -}  
272 -  
273 -.oauth_select_holder {  
274 - padding: 20px;  
275 - img {  
276 - padding: 5px;  
277 - margin-right: 10px;  
278 - }  
279 - .active {  
280 - img {  
281 - border: 1px solid #ccc;  
282 - background: $hover;  
283 - @include border-radius(5px);  
284 - }  
285 - }  
286 -}  
287 -  
288 -.btn-build-token {  
289 - float: left;  
290 - padding: 6px 20px;  
291 - margin-right: 12px;  
292 -}  
293 -  
294 -.gitlab-promo {  
295 - a {  
296 - color: #aaa;  
297 - margin-right: 30px;  
298 - }  
299 -}  
300 -  
301 -pre {  
302 - &.clean {  
303 - background: none;  
304 - border: none;  
305 - margin: 0;  
306 - padding: 0;  
307 - }  
308 -}  
309 -  
310 -.milestone {  
311 - &.milestone-closed {  
312 - background: #eee;  
313 - }  
314 - .progress {  
315 - margin-bottom: 0;  
316 - margin-top: 4px;  
317 - }  
318 -}  
319 -  
320 -h1.http_status_code {  
321 - font-size: 56px;  
322 - line-height: 100px;  
323 - font-weight: normal;  
324 - color: #456;  
325 -}  
326 -  
327 -.control-group {  
328 - .controls {  
329 - span {  
330 - &.descr {  
331 - position: relative;  
332 - top: 2px;  
333 - left: 5px;  
334 - color: #666;  
335 - }  
336 - }  
337 - }  
338 -}  
339 -  
340 -img.emoji {  
341 - height: 20px;  
342 - vertical-align: middle;  
343 - width: 20px;  
344 -}  
345 -  
346 -.appear-data {  
347 - display: none;  
348 -}  
349 -  
350 -.chart {  
351 - overflow: hidden;  
352 - height: 220px;  
353 -}  
354 -  
355 -.navless-container {  
356 - margin-top: 20px;  
357 -}  
358 -  
359 -.description-block {  
360 - @extend .light-well;  
361 - @extend .light;  
362 - margin-bottom: 10px;  
363 -}  
364 -  
365 -.group-name {  
366 - font-size: 14px;  
367 - line-height: 24px;  
368 -}  
369 -  
370 -table {  
371 - td.permission-x {  
372 - background: #D9EDF7 !important;  
373 - text-align: center;  
374 - }  
375 -}  
376 -  
377 -.dashboard-intro-icon {  
378 - float: left;  
379 - font-size: 32px;  
380 - color: #AAA;  
381 - padding: 5px 0;  
382 - width: 50px;  
383 - min-height: 100px;  
384 -}  
385 -  
386 -.navbar-gitlab .navbar-inner .nav > li .btn-sign-in {  
387 - @extend .btn-new;  
388 - padding: 5px 15px;  
389 -}  
app/assets/stylesheets/generic/avatar.scss 0 → 100644
@@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
  1 +.avatar {
  2 + float: left;
  3 + margin-right: 12px;
  4 + width: 40px;
  5 + padding: 1px;
  6 + @include border-radius(4px);
  7 +
  8 + &.avatar-inline {
  9 + float: none;
  10 + margin-left: 3px;
  11 +
  12 + &.s16 { margin-right: 2px; }
  13 + &.s24 { margin-right: 2px; }
  14 + }
  15 +
  16 + &.s16 { width: 16px; height: 16px; margin-right: 6px; }
  17 + &.s24 { width: 24px; height: 24px; margin-right: 8px; }
  18 + &.s26 { width: 26px; height: 26px; margin-right: 8px; }
  19 + &.s32 { width: 32px; height: 32px; margin-right: 10px; }
  20 + &.s60 { width: 60px; height: 60px; margin-right: 12px; }
  21 + &.s90 { width: 90px; height: 90px; margin-right: 15px; }
  22 + &.s160 { width: 160px; height: 160px; margin-right: 20px; }
  23 +}
app/assets/stylesheets/generic/blocks.scss 0 → 100644
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +.light-well {
  2 + background: #f9f9f9;
  3 + padding: 15px;
  4 +}
app/assets/stylesheets/generic/buttons.scss 0 → 100644
@@ -0,0 +1,169 @@ @@ -0,0 +1,169 @@
  1 +.btn {
  2 + display: inline-block;
  3 + margin-bottom: 0;
  4 + font-weight: normal;
  5 + text-align: center;
  6 + vertical-align: middle;
  7 + cursor: pointer;
  8 + background-image: none;
  9 + border: 1px solid transparent;
  10 + white-space: nowrap;
  11 + padding: 6px 12px;
  12 + font-size: 13px;
  13 + line-height: 18px;
  14 + border-radius: 4px;
  15 + -webkit-user-select: none;
  16 + -moz-user-select: none;
  17 + -ms-user-select: none;
  18 + -o-user-select: none;
  19 + user-select: none;
  20 + color: #444444;
  21 + background-color: #fff;
  22 + border-color: #ccc;
  23 + text-shadow: none;
  24 +
  25 + &.hover,
  26 + &:hover {
  27 + color: #444444;
  28 + text-decoration: none;
  29 + background-color: #ebebeb;
  30 + border-color: #adadad;
  31 + }
  32 +
  33 + &.focus,
  34 + &:focus {
  35 + color: #444444;
  36 + text-decoration: none;
  37 + outline: thin dotted #333;
  38 + outline: 5px auto -webkit-focus-ring-color;
  39 + outline-offset: -2px;
  40 + }
  41 +
  42 + &.active,
  43 + &:active {
  44 + outline: 0;
  45 + background-image: none;
  46 + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  47 + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  48 + }
  49 +
  50 + &.disabled,
  51 + &[disabled] {
  52 + cursor: not-allowed;
  53 + pointer-events: none;
  54 + opacity: 0.65;
  55 + filter: alpha(opacity=65);
  56 + -webkit-box-shadow: none;
  57 + box-shadow: none;
  58 + }
  59 +
  60 + &.btn-primary {
  61 + color: #ffffff;
  62 + background-color: #429bca;
  63 + border-color: #358ebd;
  64 +
  65 + &.hover,
  66 + &:hover,
  67 + &.disabled,
  68 + &[disabled] {
  69 + color: #ffffff;
  70 + background-color: #3286b1;
  71 + border-color: #286e8e;
  72 + }
  73 + }
  74 +
  75 + &.btn-success {
  76 + color: #ffffff;
  77 + background-color: #5cb85c;
  78 + border-color: #4cae4c;
  79 +
  80 +
  81 + &.hover,
  82 + &:hover,
  83 + &.disabled,
  84 + &[disabled] {
  85 + color: #ffffff;
  86 + background-color: #47a447;
  87 + border-color: #398439;
  88 + }
  89 + }
  90 +
  91 + &.btn-danger {
  92 + color: #ffffff;
  93 + background-color: #d9534f;
  94 + border-color: #d43f3a;
  95 +
  96 +
  97 + &.hover,
  98 + &:hover,
  99 + &.disabled,
  100 + &[disabled] {
  101 + color: #ffffff;
  102 + background-color: #d2322d;
  103 + border-color: #ac2925;
  104 + }
  105 + }
  106 +
  107 + &.btn-new {
  108 + @extend .btn-success;
  109 + }
  110 +
  111 + &.btn-create {
  112 + @extend .wide;
  113 + @extend .btn-success;
  114 + }
  115 +
  116 + &.btn-save {
  117 + @extend .wide;
  118 + @extend .btn-primary;
  119 + }
  120 +
  121 + &.btn-close,
  122 + &.btn-remove {
  123 + @extend .btn-danger;
  124 + }
  125 +
  126 + &.btn-cancel {
  127 + float: right;
  128 + }
  129 +
  130 + &.wide {
  131 + padding-left: 20px;
  132 + padding-right: 20px;
  133 + }
  134 +
  135 + &.btn-small {
  136 + padding: 2px 10px;
  137 + font-size: 12px;
  138 + }
  139 +
  140 + &.btn-tiny {
  141 + font-size: 11px;
  142 + padding: 2px 6px;
  143 + line-height: 16px;
  144 + margin: 2px;
  145 + }
  146 +}
  147 +
  148 +.btn-block {
  149 + width: 100%;
  150 + margin: 0;
  151 + margin-bottom: 15px;
  152 + &.btn {
  153 + padding: 6px 0;
  154 + }
  155 +}
  156 +
  157 +.btn,
  158 +.btn-group {
  159 + &.grouped {
  160 + margin-right: 7px;
  161 + float: left;
  162 + &:last-child {
  163 + margin-right: 0px;
  164 + }
  165 + }
  166 +}
  167 +
  168 +.btn-group-small > .btn { @extend .btn.btn-small; }
  169 +.btn-group-tiny > .btn { @extend .btn.btn-tiny; }
app/assets/stylesheets/generic/common.scss 0 → 100644
@@ -0,0 +1,495 @@ @@ -0,0 +1,495 @@
  1 +/** COLORS **/
  2 +.cgray { color: gray }
  3 +.clgray { color: #BBB }
  4 +.cred { color: #D12F19 }
  5 +.cgreen { color: #4a2 }
  6 +.cblue { color: #29A }
  7 +.cblack { color: #111 }
  8 +.cdark { color: #444 }
  9 +.camber { color: #ffc000 }
  10 +.cwhite { color: #fff!important }
  11 +.bgred { background: #F2DEDE!important }
  12 +
  13 +/** COMMON CLASSES **/
  14 +.left { float:left }
  15 +
  16 +.prepend-top-10 { margin-top:10px }
  17 +.prepend-top-20 { margin-top:20px }
  18 +.prepend-left-10 { margin-left:10px }
  19 +.prepend-left-20 { margin-left:20px }
  20 +.append-right-10 { margin-right:10px }
  21 +.append-right-20 { margin-right:20px }
  22 +.append-bottom-10 { margin-bottom:10px }
  23 +.append-bottom-15 { margin-bottom:15px }
  24 +.append-bottom-20 { margin-bottom:20px }
  25 +.inline { display: inline-block }
  26 +
  27 +.padded { padding:20px }
  28 +.ipadded { padding:20px!important }
  29 +.lborder { border-left:1px solid #eee }
  30 +.underlined_link { text-decoration: underline; }
  31 +.hint { font-style: italic; color: #999; }
  32 +.light { color: #888 }
  33 +.tiny { font-weight: normal }
  34 +.vtop { vertical-align: top !important; }
  35 +
  36 +
  37 +/** ALERT MESSAGES **/
  38 +.alert.alert-disabled {
  39 + background: #EEE;
  40 + color: #777;
  41 + border-color: #DDD;
  42 +}
  43 +
  44 +/** HELPERS **/
  45 +.nothing_here_message {
  46 + text-align: center;
  47 + padding: 20px;
  48 + color: #666;
  49 + font-weight: normal;
  50 + font-size: 16px;
  51 + line-height: 36px;
  52 +}
  53 +
  54 +.slead {
  55 + color: #666;
  56 + font-size: 14px;
  57 + margin-bottom: 12px;
  58 + font-weight: normal;
  59 + line-height: 24px;
  60 +}
  61 +
  62 +
  63 +.tab-content {
  64 + overflow: visible;
  65 +}
  66 +
  67 +@media (max-width: 1200px) {
  68 + .only-wide {
  69 + display: none;
  70 + }
  71 +}
  72 +
  73 +pre.well-pre {
  74 + border: 1px solid #EEE;
  75 + background: #f9f9f9;
  76 + border-radius: 0;
  77 + color: #555;
  78 +}
  79 +
  80 +.input-append .btn.active, .input-prepend .btn.active {
  81 + background: #CCC;
  82 + border-color: #BBB;
  83 + text-shadow: 0 1px 1px #fff;
  84 + font-weight: bold;
  85 + @include box-shadow(inset 0 2px 4px rgba(0,0,0,.15));
  86 +}
  87 +
  88 +/** Big Labels **/
  89 +.state-label {
  90 + font-size: 14px;
  91 + padding: 6px 25px;
  92 + text-align: center;
  93 + @include border-radius(4px);
  94 + text-shadow: none;
  95 + margin-left: 10px;
  96 +
  97 + &.state-label-green {
  98 + background: #4A4;
  99 + color: #FFF;
  100 + }
  101 +
  102 + &.state-label-red {
  103 + background: #DA4E49;
  104 + color: #FFF;
  105 + }
  106 +}
  107 +
  108 +.dropdown-menu > li > a {
  109 + text-shadow: none;
  110 +}
  111 +
  112 +.dropdown-menu > li > a:hover,
  113 +.dropdown-menu > li > a:focus {
  114 + background: #29b;
  115 +}
  116 +
  117 +.breadcrumb > li + li:before {
  118 + content: "/";
  119 + padding: 0;
  120 + color: #666;
  121 +}
  122 +
  123 +.str-truncated {
  124 + display: inline-block;
  125 + overflow: hidden;
  126 + text-overflow: ellipsis;
  127 + vertical-align: top;
  128 + white-space: nowrap;
  129 + max-width: 82%;
  130 +}
  131 +
  132 +/** FLASH message **/
  133 +.flash-container {
  134 + display: none;
  135 + cursor: pointer;
  136 + margin: 0;
  137 + text-align: center;
  138 + color: #fff;
  139 + font-size: 14px;
  140 + position: fixed;
  141 + bottom: 0;
  142 + width: 100%;
  143 + opacity: 0.8;
  144 + z-index: 100;
  145 +
  146 + .flash-notice {
  147 + background: #49C;
  148 + padding: 10px;
  149 + text-shadow: 0 1px 1px #178;
  150 + }
  151 +
  152 + .flash-alert {
  153 + background: #C67;
  154 + text-shadow: 0 1px 1px #945;
  155 + padding: 10px;
  156 + }
  157 +}
  158 +.author_link {
  159 + color: $link_color;
  160 +}
  161 +
  162 +.help li { color:$style_color; }
  163 +
  164 +.back-link {
  165 + font-size: 14px;
  166 +}
  167 +
  168 +table a code {
  169 + position: relative;
  170 + top: -2px;
  171 + margin-right: 3px;
  172 +}
  173 +
  174 +.loading {
  175 + margin: 20px auto;
  176 + height: 40px;
  177 + color: #555;
  178 + font-size: 32px;
  179 + text-align: center;
  180 +}
  181 +
  182 +span.update-author {
  183 + display: block;
  184 + color: #999;
  185 + font-weight: normal;
  186 + font-style: italic;
  187 + strong {
  188 + font-weight: bold;
  189 + font-style: normal;
  190 + }
  191 +}
  192 +
  193 +.user-mention {
  194 + color: #2FA0BB;
  195 + font-weight: bold;
  196 +}
  197 +
  198 +.field_with_errors {
  199 + display: inline;
  200 +}
  201 +
  202 +.line_holder {
  203 + &:hover {
  204 + td {
  205 + background: #FFFFCF !important;
  206 + }
  207 + }
  208 +}
  209 +
  210 +p.time {
  211 + color: #999;
  212 + font-size: 90%;
  213 + margin: 30px 3px 3px 2px;
  214 +}
  215 +
  216 +.highlight {
  217 + text-shadow: none;
  218 +}
  219 +
  220 +.highlight_word {
  221 + border-bottom: 2px solid #F90;
  222 +}
  223 +
  224 +.thin_area{
  225 + height: 150px;
  226 +}
  227 +
  228 +// Fixes alignment on notes.
  229 +.new_note {
  230 + label {
  231 + text-align: left;
  232 + }
  233 +}
  234 +
  235 +// Fix issue with notes & lists creating a bunch of bottom borders.
  236 +li.note {
  237 + img { max-width:100% }
  238 + .note-title {
  239 + li {
  240 + border-bottom:none !important;
  241 + }
  242 + }
  243 +}
  244 +
  245 +.markdown {
  246 + img {
  247 + max-width: 100%;
  248 + }
  249 +}
  250 +
  251 +.wiki_content code, .readme code{
  252 + background-color: inherit;
  253 +}
  254 +
  255 +.team_member_show {
  256 + td:first-child {
  257 + color: #aaa;
  258 + }
  259 +}
  260 +
  261 +.rss-icon {
  262 + img {
  263 + width: 24px;
  264 + vertical-align: top;
  265 + }
  266 +
  267 + strong {
  268 + line-height: 24px;
  269 + }
  270 +}
  271 +
  272 +.supp_diff_link,
  273 +.show-all-commits {
  274 + cursor: pointer;
  275 +}
  276 +
  277 +.merge-request,
  278 +.issue {
  279 + &.today{
  280 + background: #EFE;
  281 + border-color: #CEC;
  282 + }
  283 + &.closed {
  284 + background: #F5f5f5;
  285 + border-color: #E5E5E5;
  286 + }
  287 + &.merged {
  288 + background: #F5f5f5;
  289 + border-color: #E5E5E5;
  290 + }
  291 +}
  292 +
  293 +.git_error_tips {
  294 + @extend .col-md-6;
  295 + text-align: left;
  296 + margin-top: 40px;
  297 + pre {
  298 + background: white;
  299 + border: none;
  300 + font-size: 12px;
  301 + }
  302 +}
  303 +
  304 +.error-message {
  305 + padding: 10px;
  306 + background: #C67;
  307 + margin: 0;
  308 + color: #FFF;
  309 +
  310 + a {
  311 + color: #fff;
  312 + text-decoration: underline;
  313 + }
  314 +}
  315 +
  316 +.no-ssh-key-message {
  317 + padding: 10px 0;
  318 + background: #C67;
  319 + margin: 0;
  320 + color: #FFF;
  321 + margin-top: -1px;
  322 + text-align: center;
  323 +
  324 + a {
  325 + color: #fff;
  326 + text-decoration: underline;
  327 + }
  328 +
  329 + .links-xs {
  330 + text-align: center;
  331 + font-size: 16px;
  332 + padding: 5px;
  333 + }
  334 +}
  335 +
  336 +.warning_message {
  337 + border-left: 4px solid #ed9;
  338 + color: #b90;
  339 + padding: 10px;
  340 + margin-bottom: 10px;
  341 + background: #ffffe6;
  342 + padding-left: 20px;
  343 +
  344 + &.centered {
  345 + text-align: center;
  346 + }
  347 +}
  348 +
  349 +.gitlab-promo {
  350 + a {
  351 + color: #aaa;
  352 + margin-right: 30px;
  353 + }
  354 +}
  355 +
  356 +pre {
  357 + &.clean {
  358 + background: none;
  359 + border: none;
  360 + margin: 0;
  361 + padding: 0;
  362 + }
  363 +}
  364 +
  365 +.milestone {
  366 + &.milestone-closed {
  367 + background: #eee;
  368 + }
  369 + .progress {
  370 + margin-bottom: 0;
  371 + margin-top: 4px;
  372 + }
  373 +}
  374 +
  375 +h1.http_status_code {
  376 + font-size: 56px;
  377 + line-height: 100px;
  378 + font-weight: normal;
  379 + color: #456;
  380 +}
  381 +
  382 +.control-group {
  383 + .controls {
  384 + span {
  385 + &.descr {
  386 + position: relative;
  387 + top: 2px;
  388 + left: 5px;
  389 + color: #666;
  390 + }
  391 + }
  392 + }
  393 +}
  394 +
  395 +img.emoji {
  396 + height: 20px;
  397 + vertical-align: middle;
  398 + width: 20px;
  399 +}
  400 +
  401 +.appear-data {
  402 + display: none;
  403 +}
  404 +
  405 +.chart {
  406 + overflow: hidden;
  407 + height: 220px;
  408 +}
  409 +
  410 +.navless-container {
  411 + margin-top: 20px;
  412 +}
  413 +
  414 +.description-block {
  415 + @extend .light-well;
  416 + @extend .light;
  417 + margin-bottom: 10px;
  418 +}
  419 +
  420 +table {
  421 + td.permission-x {
  422 + background: #D9EDF7 !important;
  423 + text-align: center;
  424 + }
  425 +}
  426 +
  427 +.dashboard-intro-icon {
  428 + float: left;
  429 + font-size: 32px;
  430 + color: #AAA;
  431 + padding: 5px 0;
  432 + width: 50px;
  433 + min-height: 100px;
  434 +}
  435 +
  436 +.broadcast-message {
  437 + padding: 10px;
  438 + text-align: center;
  439 + background: #555;
  440 + color: #BBB;
  441 +}
  442 +
  443 +.broadcast-message-preview {
  444 + @extend .broadcast-message;
  445 + margin-bottom: 20px;
  446 +}
  447 +
  448 +.ajax-users-select {
  449 + width: 400px;
  450 +
  451 + &.input-large {
  452 + width: 210px;
  453 + }
  454 +
  455 + &.input-clamp {
  456 + max-width: 100%;
  457 + }
  458 +}
  459 +
  460 +.user-result {
  461 + .user-image {
  462 + float: left;
  463 + }
  464 + .user-name {
  465 + }
  466 + .user-username {
  467 + color: #999;
  468 + }
  469 +}
  470 +
  471 +.namespace-result {
  472 + .namespace-kind {
  473 + color: #AAA;
  474 + font-weight: normal;
  475 + }
  476 + .namespace-path {
  477 + margin-left: 10px;
  478 + font-weight: bolder;
  479 + }
  480 +}
  481 +
  482 +.btn-sign-in {
  483 + margin-top: 7px;
  484 + text-shadow: none;
  485 +}
  486 +
  487 +.side-filters {
  488 + fieldset {
  489 + margin-bottom: 15px;
  490 + }
  491 +}
  492 +
  493 +@media (max-width: $screen-xs-max) {
  494 + .container .content { margin-top: 20px; }
  495 +}
app/assets/stylesheets/generic/files.scss 0 → 100644
@@ -0,0 +1,149 @@ @@ -0,0 +1,149 @@
  1 +/**
  2 + * File content holder
  3 + *
  4 + */
  5 +.file-holder {
  6 + border: 1px solid #CCC;
  7 + margin-bottom: 1em;
  8 +
  9 + table {
  10 + @extend .table;
  11 + }
  12 +
  13 + .file-title {
  14 + background: #DDD;
  15 + border-bottom: 1px solid #CCC;
  16 + text-shadow: 0 1px 1px #fff;
  17 + margin: 0;
  18 + font-weight: normal;
  19 + font-weight: bold;
  20 + text-align: left;
  21 + color: $style_color;
  22 + padding: 9px 10px;
  23 +
  24 + .options {
  25 + float: right;
  26 + margin-top: -5px;
  27 + }
  28 +
  29 + .file_name {
  30 + color: $style_color;
  31 + font-size: 14px;
  32 + text-shadow: 0 1px 1px #fff;
  33 + small {
  34 + color: #999;
  35 + font-size: 13px;
  36 + }
  37 + }
  38 + }
  39 + .file-content {
  40 + background: #fff;
  41 + font-size: 11px;
  42 +
  43 + &.image_file {
  44 + background: #eee;
  45 + text-align: center;
  46 + img {
  47 + padding: 100px;
  48 + max-width: 50%;
  49 + }
  50 + }
  51 +
  52 + &.wiki {
  53 + padding: 20px;
  54 + font-size: 14px;
  55 + line-height: 1.6;
  56 +
  57 + .highlight {
  58 + margin-bottom: 9px;
  59 + @include border-radius(4px);
  60 +
  61 + > pre {
  62 + margin: 0;
  63 + }
  64 + }
  65 + }
  66 +
  67 + &.blob_file {
  68 +
  69 + }
  70 +
  71 + &.blob-no-preview {
  72 + background: #eee;
  73 + text-shadow: 0 1px 2px #FFF;
  74 + padding: 100px 0;
  75 + }
  76 +
  77 + /**
  78 + * Blame file
  79 + */
  80 + &.blame {
  81 + table {
  82 + border: none;
  83 + box-shadow: none;
  84 + margin: 0;
  85 + }
  86 + tr {
  87 + border-bottom: 1px solid #eee;
  88 + }
  89 + td {
  90 + &:first-child {
  91 + border-left: none;
  92 + }
  93 + &:last-child {
  94 + border-right: none;
  95 + }
  96 + background: #fff;
  97 + padding: 5px;
  98 + }
  99 + .author,
  100 + .blame_commit {
  101 + background: #f5f5f5;
  102 + vertical-align: top;
  103 + }
  104 + .lines {
  105 + pre {
  106 + padding: 0;
  107 + margin: 0;
  108 + background: none;
  109 + border: none;
  110 + }
  111 + }
  112 + }
  113 +
  114 + &.logs {
  115 + background: #eee;
  116 + max-height: 700px;
  117 + overflow-y: auto;
  118 +
  119 + ol {
  120 + margin-left: 40px;
  121 + padding: 10px 0;
  122 + border-left: 1px solid #CCC;
  123 + margin-bottom: 0;
  124 + background: white;
  125 + li {
  126 + color: #888;
  127 + p {
  128 + margin: 0;
  129 + color: #333;
  130 + line-height: 24px;
  131 + padding-left: 10px;
  132 + }
  133 +
  134 + &:hover {
  135 + background: $hover;
  136 + }
  137 + }
  138 + }
  139 + }
  140 +
  141 + /**
  142 + * Code file
  143 + */
  144 + &.code {
  145 + padding: 0;
  146 + }
  147 + }
  148 +}
  149 +
app/assets/stylesheets/generic/forms.scss 0 → 100644
@@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
  1 +input[type='search'].search-text-input {
  2 + background-image: url("icon-search.png");
  3 + background-repeat: no-repeat;
  4 + background-position: 10px;
  5 + padding-left: 25px;
  6 +}
  7 +
  8 +input[type='text'].danger {
  9 + background: #F2DEDE!important;
  10 + border-color: #D66;
  11 + text-shadow: 0 1px 1px #fff
  12 +}
  13 +
  14 +fieldset legend {
  15 + font-size: 16px;
  16 +}
  17 +
  18 +.datetime-controls {
  19 + select {
  20 + width: 100px;
  21 + }
  22 +}
  23 +
  24 +.form-actions {
  25 + padding: 17px 20px 18px;
  26 + margin-top: 18px;
  27 + margin-bottom: 18px;
  28 + background-color: whitesmoke;
  29 + border-top: 1px solid #e5e5e5;
  30 + padding-left: 17%;
  31 +}
  32 +
  33 +label {
  34 + &.control-label {
  35 + @extend .col-sm-2;
  36 + }
  37 +
  38 + &.inline-label {
  39 + margin: 0;
  40 + }
  41 +}
  42 +
  43 +.inline-input-group {
  44 + width: 250px;
  45 +}
  46 +
  47 +.input-mx-250 {
  48 + max-width: 250px;
  49 +}
  50 +
  51 +.input-mn-300 {
  52 + min-width: 300px;
  53 +}
app/assets/stylesheets/generic/highlight.scss 0 → 100644
@@ -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 0 → 100644
@@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
  1 +/**
  2 + * Issue box:
  3 + * Huge block (one per page) for storing title, descripion and other information.
  4 + * Used for Issue#show page, MergeRequest#show page etc
  5 + *
  6 + * CLasses:
  7 + * .issue-box - Regular box
  8 + */
  9 +
  10 +.issue-box {
  11 + color: #666;
  12 + margin:20px 0;
  13 + background: #FAFAFA;
  14 + border: 1px solid #EEE;
  15 +
  16 + .control-group {
  17 + margin-bottom: 0;
  18 + }
  19 +
  20 + .title {
  21 + font-size: 20px;
  22 + font-weight: 500;
  23 + line-height: 28px;
  24 + margin: 0;
  25 + color: #444;
  26 + }
  27 +
  28 + .context {
  29 + border: none;
  30 + border-top: 1px solid #eee;
  31 + }
  32 +
  33 + .description {
  34 + border-top: 1px solid #eee;
  35 + }
  36 +
  37 + .title, .context, .description {
  38 + padding: 15px;
  39 +
  40 + .clearfix {
  41 + margin: 0;
  42 + }
  43 + }
  44 +}
app/assets/stylesheets/generic/lists.scss 0 → 100644
@@ -0,0 +1,103 @@ @@ -0,0 +1,103 @@
  1 +/**
  2 + * Well styled list
  3 + *
  4 + */
  5 +.well-list {
  6 + margin: 0;
  7 + padding: 0;
  8 + list-style: none;
  9 +
  10 + li {
  11 + padding: 10px;
  12 + min-height: 20px;
  13 + border-bottom: 1px solid #eee;
  14 + border-bottom: 1px solid rgba(0, 0, 0, 0.05);
  15 +
  16 + &.disabled {
  17 + color: #888;
  18 + }
  19 +
  20 + &.unstyled {
  21 + &:hover {
  22 + background: none;
  23 + }
  24 + }
  25 +
  26 + &.warning-row {
  27 + background-color: #fcf8e3;
  28 + border-color: #faebcc;
  29 + color: #8a6d3b;
  30 + }
  31 +
  32 + &.smoke { background-color: #f5f5f5; }
  33 +
  34 + &:hover {
  35 + background: $hover;
  36 + border-bottom: 1px solid #ADF;
  37 + }
  38 +
  39 + &:last-child {
  40 + border-bottom: none;
  41 +
  42 + &.bottom {
  43 + background: #f5f5f5;
  44 + }
  45 + }
  46 +
  47 + .author { color: #999; }
  48 +
  49 + p {
  50 + padding-top: 1px;
  51 + margin: 0;
  52 + color: #222;
  53 + img {
  54 + position: relative;
  55 + top: 3px;
  56 + }
  57 + }
  58 +
  59 + .well-title {
  60 + font-size: 14px;
  61 + line-height: 18px;
  62 + }
  63 + }
  64 +}
  65 +
  66 +ol, ul {
  67 + &.styled {
  68 + li {
  69 + padding: 2px;
  70 + }
  71 + }
  72 +}
  73 +
  74 +/** light list with border-bottom between li **/
  75 +ul.bordered-list {
  76 + margin: 5px 0px;
  77 + padding: 0px;
  78 + li {
  79 + padding: 5px 0;
  80 + border-bottom: 1px solid #EEE;
  81 + overflow: hidden;
  82 + display: block;
  83 + margin: 0px;
  84 + &:last-child { border:none }
  85 + &.active {
  86 + background: #f9f9f9;
  87 + a { font-weight: bold; }
  88 + }
  89 +
  90 + &.light {
  91 + a { color: #777; }
  92 + }
  93 + }
  94 +
  95 + &.top-list {
  96 + li:first-child {
  97 + padding-top: 0;
  98 + h4, h5 {
  99 + margin-top: 0;
  100 + }
  101 + }
  102 + }
  103 +}
app/assets/stylesheets/generic/selects.scss 0 → 100644
@@ -0,0 +1,80 @@ @@ -0,0 +1,80 @@
  1 +/** Select2 selectbox style override **/
  2 +
  3 +.select2-container, .select2-container.select2-drop-above {
  4 + .select2-choice {
  5 + background: #FFF;
  6 + border-color: #BBB;
  7 +
  8 + .select2-arrow {
  9 + background: #FFF;
  10 + }
  11 + }
  12 +}
  13 +
  14 +.select2-drop-active {
  15 + border: 1px solid #BBB;
  16 + margin-top: 4px;
  17 +
  18 + .select2-search input {
  19 + background: #fafafa;
  20 + border-color: #DDD;
  21 + }
  22 +
  23 + .select2-results {
  24 + max-height: 350px;
  25 + .select2-highlighted {
  26 + background: $bg_style_color;
  27 + }
  28 + }
  29 +}
  30 +
  31 +select {
  32 + &.select2 {
  33 + width: 100px;
  34 + }
  35 +
  36 + &.select2-sm {
  37 + width: 100px;
  38 + }
  39 +}
  40 +
  41 +@media (min-width: $screen-sm-min) {
  42 + select {
  43 + &.select2 {
  44 + width: 150px;
  45 + }
  46 + &.select2-sm {
  47 + width: 120px;
  48 + }
  49 + }
  50 +}
  51 +
  52 +/* Medium devices (desktops, 992px and up) */
  53 +@media (min-width: $screen-md-min) {
  54 + select {
  55 + &.select2 {
  56 + width: 170px;
  57 + }
  58 + &.select2-sm {
  59 + width: 140px;
  60 + }
  61 + }
  62 +}
  63 +
  64 +/* Large devices (large desktops, 1200px and up) */
  65 +@media (min-width: $screen-lg-min) {
  66 + select {
  67 + &.select2 {
  68 + width: 200px;
  69 + }
  70 + &.select2-sm {
  71 + width: 150px;
  72 + }
  73 + }
  74 +}
  75 +
  76 +
  77 +/** Branch/tag selector **/
  78 +.project-refs-form .select2-container {
  79 + margin-right: 10px;
  80 +}
app/assets/stylesheets/generic/typography.scss 0 → 100644
@@ -0,0 +1,101 @@ @@ -0,0 +1,101 @@
  1 +/**
  2 + * Headers
  3 + *
  4 + */
  5 +h1.page-title {
  6 + @include page-title;
  7 + font-size: 28px;
  8 +}
  9 +
  10 +h2.page-title {
  11 + @include page-title;
  12 + font-size: 24px;
  13 +}
  14 +
  15 +h3.page-title {
  16 + @include page-title;
  17 +}
  18 +
  19 +h6 {
  20 + color: #888;
  21 + text-transform: uppercase;
  22 +}
  23 +
  24 +/** CODE **/
  25 +pre {
  26 + font-family: $monospace_font;
  27 +
  28 + &.dark {
  29 + background: #333;
  30 + color: #f5f5f5;
  31 + }
  32 +}
  33 +
  34 +/**
  35 + * Links
  36 + *
  37 + */
  38 +a {
  39 + outline: none;
  40 + color: $link_color;
  41 + &:hover {
  42 + text-decoration: none;
  43 + color: $primary_color;
  44 + }
  45 +
  46 + &:focus {
  47 + text-decoration: underline;
  48 + }
  49 +
  50 + &.dark {
  51 + color: $style_color;
  52 + }
  53 +
  54 + &.lined {
  55 + text-decoration: underline;
  56 + &:hover { text-decoration: underline; }
  57 + }
  58 +
  59 + &.gray {
  60 + color: gray;
  61 + }
  62 +
  63 + &.supp_diff_link {
  64 + text-align: center;
  65 + padding: 20px 0;
  66 + background: #f1f1f1;
  67 + width: 100%;
  68 + float: left;
  69 + }
  70 +
  71 + &.neib {
  72 + margin-right: 15px;
  73 + }
  74 +}
  75 +
  76 +a:focus {
  77 + outline: none;
  78 +}
  79 +
  80 +.monospace {
  81 + font-family: $monospace_font;
  82 +}
  83 +
  84 +/**
  85 + * Wiki typography
  86 + *
  87 + */
  88 +.wiki {
  89 + @include md-typography;
  90 +
  91 + font-size: 14px;
  92 + line-height: 1.6;
  93 + ul {
  94 + padding: 0;
  95 + margin: 0 0 9px 25px !important;
  96 + }
  97 +}
  98 +
  99 +.md {
  100 + @include md-typography;
  101 +}
app/assets/stylesheets/generic/ui_box.scss 0 → 100644
@@ -0,0 +1,173 @@ @@ -0,0 +1,173 @@
  1 +/**
  2 + * UI box:
  3 + * Block element for separating information on page.
  4 + * Used for storing issues lists, grouped data.
  5 + * You can have multiple ui boxes on one page
  6 + *
  7 + * Classes:
  8 + * .ui-box - for any block & widgets
  9 + * .ui-box.ui-box-small - same but with smaller title
  10 + * .ui-box.ui-box-danger - with red title
  11 + *
  12 + * Ex. 1: List
  13 + * .ui-box
  14 + * .title
  15 + * # title here
  16 + * %ul
  17 + * # content here
  18 + *
  19 + * Ex. 2: Block data
  20 + * .ui-box
  21 + * .title
  22 + * # title here
  23 + * .body
  24 + * # content here
  25 + *
  26 + */
  27 +
  28 +.ui-box {
  29 + background: #FFF;
  30 + margin-bottom: 20px;
  31 + border: 1px solid #DDD;
  32 + word-wrap: break-word;
  33 +
  34 + img {
  35 + max-width: 100%;
  36 + }
  37 +
  38 + pre {
  39 + code {
  40 + background: none !important;
  41 + }
  42 + }
  43 +
  44 + ul {
  45 + margin: 0;
  46 + padding: 0;
  47 + }
  48 +
  49 + .title {
  50 + background-color: #EEE;
  51 + border-bottom: 1px solid #DDD;
  52 + color: #666;
  53 + font-size: 16px;
  54 + text-shadow: 0 1px 1px #fff;
  55 + padding: 0 10px;
  56 + font-size: 14px;
  57 + line-height: 40px;
  58 + font-weight: normal;
  59 + margin: 0;
  60 +
  61 + > a {
  62 + text-shadow: 0 1px 1px #fff;
  63 + }
  64 +
  65 + form {
  66 + margin-bottom: 0;
  67 + margin-top: 0;
  68 + }
  69 +
  70 + .btn {
  71 + vertical-align: middle;
  72 + padding: 4px 12px;
  73 + @include box-shadow(0 0px 1px 1px #f2f2f2);
  74 + }
  75 +
  76 + .nav-pills {
  77 + > li {
  78 + > a {
  79 + padding: 13px;
  80 + margin: 0;
  81 + font-size: 13px;
  82 + }
  83 + &.active {
  84 + > a {
  85 + background: #D5D5D5;
  86 + color: $style_color;
  87 + @include border-radius(0);
  88 + border-radius: 0;
  89 + border-left: 1px solid #CCC;
  90 + border-right: 1px solid #CCC;
  91 + }
  92 + }
  93 + }
  94 + }
  95 + }
  96 +
  97 + .body {
  98 + padding: 10px;
  99 + }
  100 +
  101 + &.padded {
  102 + h5, .title {
  103 + margin: -20px;
  104 + margin-bottom: 0;
  105 + padding: 5px 20px;
  106 + }
  107 + }
  108 +
  109 + .row_title {
  110 + font-weight: 500;
  111 + color: #444;
  112 + &:hover {
  113 + color: #444;
  114 + text-decoration: underline;
  115 + }
  116 + }
  117 +
  118 + .form-holder {
  119 + padding-top: 20px;
  120 + form {
  121 + margin-bottom: 0;
  122 + legend {
  123 + text-indent: 10px;
  124 + }
  125 + .form-actions {
  126 + margin-bottom: 0;
  127 + }
  128 + }
  129 + }
  130 +}
  131 +
  132 +/*
  133 + * Small box
  134 + */
  135 +.ui-box.ui-box-small {
  136 + margin-bottom: 10px;
  137 +
  138 + .title {
  139 + font-size: 13px;
  140 + line-height: 30px;
  141 +
  142 + a {
  143 + color: #666;
  144 + &:hover {
  145 + text-decoration: underline;
  146 + }
  147 + }
  148 + }
  149 +}
  150 +
  151 +/*
  152 + * Danger box
  153 + */
  154 +.ui-box.ui-box-danger {
  155 + background: #f7f7f7;
  156 + border: none;
  157 +
  158 + .title {
  159 + background: #D65;
  160 + color: #fff;
  161 + text-shadow: none;
  162 + font-weight: 500;
  163 + }
  164 +}
  165 +
  166 +/*
  167 + * Block under tw-bootstrap tabs
  168 + */
  169 +.tab-pane {
  170 + .ui-box {
  171 + margin: 3px 3px 25px 3px;
  172 + }
  173 +}
app/assets/stylesheets/gitlab_bootstrap.scss
@@ -1,66 +0,0 @@ @@ -1,66 +0,0 @@
1 -/** Override bootstrap variables **/  
2 -$baseFontSize: 13px !default;  
3 -$baseLineHeight: 18px !default;  
4 -  
5 -/**  
6 - * BOOTSTRAP  
7 - */  
8 -@import "bootstrap/variables";  
9 -@import "bootstrap/mixins";  
10 -@import "bootstrap/reset";  
11 -@import "bootstrap/scaffolding";  
12 -@import "bootstrap/grid";  
13 -@import "bootstrap/layouts";  
14 -@import "bootstrap/type";  
15 -@import "bootstrap/code";  
16 -@import "bootstrap/forms";  
17 -@import "bootstrap/tables";  
18 -@import "bootstrap/sprites";  
19 -@import "bootstrap/dropdowns";  
20 -@import "bootstrap/wells";  
21 -@import "bootstrap/component-animations";  
22 -@import "bootstrap/close";  
23 -@import "bootstrap/button-groups";  
24 -@import "bootstrap/alerts";  
25 -@import "bootstrap/navs";  
26 -@import "bootstrap/navbar";  
27 -@import "bootstrap/breadcrumbs";  
28 -@import "bootstrap/pagination";  
29 -@import "bootstrap/pager";  
30 -@import "bootstrap/modals";  
31 -@import "bootstrap/tooltip";  
32 -@import "bootstrap/popovers";  
33 -@import "bootstrap/thumbnails";  
34 -@import "bootstrap/media";  
35 -@import "bootstrap/labels-badges";  
36 -@import "bootstrap/progress-bars";  
37 -@import "bootstrap/accordion";  
38 -@import "bootstrap/carousel";  
39 -@import "bootstrap/hero-unit";  
40 -@import "bootstrap/utilities";  
41 -@import "bootstrap/responsive-utilities";  
42 -@import "bootstrap/responsive-1200px-min";  
43 -  
44 -/**  
45 - * Font icons  
46 - *  
47 - */  
48 -@import "font-awesome";  
49 -  
50 -/**  
51 - * GitLab bootstrap.  
52 - * Overrides some styles of twitter bootstrap.  
53 - * Also give some common classes for GitLab app  
54 - */  
55 -@import "gitlab_bootstrap/variables.scss";  
56 -@import "gitlab_bootstrap/fonts.scss";  
57 -@import "gitlab_bootstrap/mixins.scss";  
58 -@import "gitlab_bootstrap/avatar.scss";  
59 -@import "gitlab_bootstrap/nav.scss";  
60 -@import "gitlab_bootstrap/common.scss";  
61 -@import "gitlab_bootstrap/typography.scss";  
62 -@import "gitlab_bootstrap/buttons.scss";  
63 -@import "gitlab_bootstrap/blocks.scss";  
64 -@import "gitlab_bootstrap/files.scss";  
65 -@import "gitlab_bootstrap/lists.scss";  
66 -@import "gitlab_bootstrap/forms.scss";  
app/assets/stylesheets/gitlab_bootstrap/avatar.scss
@@ -1,22 +0,0 @@ @@ -1,22 +0,0 @@
1 -.avatar {  
2 - float: left;  
3 - margin-right: 12px;  
4 - width: 40px;  
5 - border: 1px solid #ddd;  
6 - padding: 1px;  
7 -  
8 - &.avatar-inline {  
9 - float: none;  
10 - margin-left: 3px;  
11 -  
12 - &.s16 { margin-right: 2px; }  
13 - &.s24 { margin-right: 2px; }  
14 - }  
15 -  
16 - &.s16 { width: 16px; height: 16px; margin-right: 6px; }  
17 - &.s24 { width: 24px; height: 24px; margin-right: 8px; }  
18 - &.s26 { width: 26px; height: 26px; margin-right: 8px; }  
19 - &.s32 { width: 32px; height: 32px; margin-right: 10px; }  
20 - &.s60 { width: 60px; height: 60px; margin-right: 12px; }  
21 - &.s90 { width: 90px; height: 90px; margin-right: 15px; }  
22 -}  
app/assets/stylesheets/gitlab_bootstrap/blocks.scss
@@ -1,186 +0,0 @@ @@ -1,186 +0,0 @@
1 -/**  
2 - * ===================================  
3 - * Contain UI block elements:  
4 - * .ui-box - for any block & widgets  
5 - * ===================================  
6 - */  
7 -  
8 -/**  
9 - * UI Block  
10 - *  
11 - */  
12 -.ui-box {  
13 - background: #FFF;  
14 - margin-bottom: 20px;  
15 - border: 1px solid #CCC;  
16 - word-wrap: break-word;  
17 -  
18 - &.small-box {  
19 - margin-bottom: 10px;  
20 -  
21 - .title {  
22 - font-size: 13px;  
23 - line-height: 30px;  
24 -  
25 - a {  
26 - color: #666;  
27 - &:hover {  
28 - text-decoration: underline;  
29 - }  
30 - }  
31 - }  
32 - }  
33 -  
34 - &.ui-box-show {  
35 - margin:20px 0;  
36 - background: #FFF;  
37 -  
38 - .control-group {  
39 - margin-bottom: 0;  
40 - }  
41 - }  
42 -  
43 - &.ui-box-danger {  
44 - .title {  
45 - @include linear-gradient(#F26E5E, #bd362f);  
46 - color: #fff;  
47 - text-shadow: 0 1px 1px #900;  
48 - font-weight: bold;  
49 - }  
50 - }  
51 -  
52 - img { max-width: 100%; }  
53 -  
54 - pre {  
55 - code {  
56 - background: none !important;  
57 - }  
58 - }  
59 -  
60 - .ui-box-head,  
61 - .ui-box-body,  
62 - .ui-box-bottom {  
63 - padding: 15px;  
64 -  
65 - .clearfix {  
66 - margin: 0;  
67 - }  
68 - }  
69 -  
70 - .ui-box-head {  
71 - .box-title {  
72 - color: $style_color;  
73 - font-size: 18px;  
74 - font-weight: normal;  
75 - line-height: 28px;  
76 - margin: 0;  
77 - }  
78 - h3 {  
79 - margin: 0;  
80 - }  
81 - }  
82 -  
83 - .ui-box-body {  
84 - border: none;  
85 - background-color: #f5f5f5;  
86 - border: none;  
87 - border-top: 1px solid #eee;  
88 - }  
89 -  
90 - .ui-box-bottom {  
91 - border-top: 1px solid #eee;  
92 - }  
93 -  
94 - ul {  
95 - margin: 0;  
96 - }  
97 -  
98 - .title {  
99 - @include bg-gray-gradient;  
100 - border-bottom: 1px solid #CCC;  
101 - color: #456;  
102 - font-size: 16px;  
103 - text-shadow: 0 1px 1px #fff;  
104 - padding: 0 10px;  
105 - font-size: 14px;  
106 - line-height: 40px;  
107 - font-weight: normal;  
108 - margin: 0;  
109 -  
110 - > a {  
111 - text-shadow: 0 1px 1px #fff;  
112 - }  
113 -  
114 - form {  
115 - margin-bottom: 0;  
116 - margin-top: 0;  
117 - }  
118 -  
119 - .btn {  
120 - vertical-align: middle;  
121 - padding: 4px 12px;  
122 - @include box-shadow(0 0px 1px 1px #f2f2f2);  
123 - }  
124 -  
125 - .nav-pills {  
126 - > li {  
127 - > a {  
128 - padding: 13px;  
129 - margin: 0;  
130 - font-size: 13px;  
131 - }  
132 - &.active {  
133 - > a {  
134 - background: #D5D5D5;  
135 - color: $style_color;  
136 - @include border-radius(0);  
137 - border-radius: 0;  
138 - border-left: 1px solid #CCC;  
139 - border-right: 1px solid #CCC;  
140 - }  
141 - }  
142 - }  
143 - }  
144 - }  
145 -  
146 - &.padded {  
147 - h5, .title {  
148 - margin: -20px;  
149 - margin-bottom: 0;  
150 - padding: 5px 20px;  
151 - }  
152 - }  
153 -  
154 - .row_title {  
155 - font-weight: bold;  
156 - color: #444;  
157 - &:hover {  
158 - color: #444;  
159 - text-decoration: underline;  
160 - }  
161 - }  
162 -  
163 - .form-holder {  
164 - padding-top: 20px;  
165 - form {  
166 - margin-bottom: 0;  
167 - legend {  
168 - text-indent: 10px;  
169 - }  
170 - .form-actions {  
171 - margin-bottom: 0;  
172 - }  
173 - }  
174 - }  
175 -}  
176 -  
177 -.tab-pane {  
178 - .ui-box {  
179 - margin: 3px 3px 25px 3px;  
180 - }  
181 -}  
182 -  
183 -.light-well {  
184 - background: #f9f9f9;  
185 - padding: 15px;  
186 -}  
app/assets/stylesheets/gitlab_bootstrap/buttons.scss
@@ -1,141 +0,0 @@ @@ -1,141 +0,0 @@
1 -.btn {  
2 - display: inline-block;  
3 - padding: 6px 12px;  
4 - margin-bottom: 0;  
5 - font-size: 13px;  
6 - line-height: $baseLineHeight;  
7 - text-align: center;  
8 - vertical-align: middle;  
9 - cursor: pointer;  
10 - border: 1px solid #BBB;  
11 - color: $style_color;  
12 - @include border-radius($baseBorderRadius);  
13 - @include box-shadow(inset 0 1px 0 rgba(255,255,255,.2));  
14 - @include linear-gradient(#f1f1f1, #e1e1e1);  
15 - text-shadow: 0 1px 1px #FFF;  
16 - text-decoration: none;  
17 -  
18 - &.hover,  
19 - &:hover {  
20 - color: $style_color;  
21 - background: #f1f1f1;  
22 - border-color: #AAA;  
23 - text-decoration: none;  
24 - @include linear-gradient(#fAfAfA, #f1f1f1);  
25 - }  
26 -  
27 - &.focus,  
28 - &:focus {  
29 - text-decoration: none;  
30 - @include box-shadow(inset 0 2px 4px rgba(0,0,0,.15));  
31 - }  
32 -  
33 - &.active,  
34 - &:active {  
35 - background-image: none;  
36 - outline: 0;  
37 - text-decoration: none;  
38 - @include box-shadow(inset 0 2px 4px rgba(0,0,0,.15));  
39 - }  
40 -  
41 - &.disabled,  
42 - &[disabled] {  
43 - cursor: default;  
44 - background-image: none;  
45 - @include opacity(65);  
46 - @include box-shadow(none);  
47 - }  
48 -  
49 - &.btn-primary {  
50 - color: #FFF;  
51 - border-color: #189;  
52 - text-shadow: 0 1px 1px #189;  
53 - @include linear-gradient(#4AC, #289);  
54 -  
55 - &.hover,  
56 - &:hover,  
57 - &.disabled,  
58 - &[disabled] {  
59 - color: #FFF;  
60 - background: #389;  
61 - }  
62 - }  
63 -  
64 - &.btn-success {  
65 - color: #FFF;  
66 - border-color: #1A1;  
67 - text-shadow: 0 1px 1px #FFF;  
68 - text-shadow: 0 1px 1px #181;  
69 - @include linear-gradient(#62C452, #51a351);  
70 -  
71 -  
72 - &.hover,  
73 - &:hover,  
74 - &.disabled,  
75 - &[disabled] {  
76 - color: #FFF;  
77 - background: #2A2;  
78 - }  
79 - }  
80 -  
81 - &.btn-danger {  
82 - color: #FFF;  
83 - text-shadow: 0 1px 1px #811;  
84 - border-color: #BD362F;  
85 - @include linear-gradient(#EE5F5B, #BD362F);  
86 -  
87 -  
88 - &.hover,  
89 - &:hover,  
90 - &.disabled,  
91 - &[disabled] {  
92 - color: #FFF;  
93 - background: #A22;  
94 - }  
95 - }  
96 -  
97 - &.btn-new {  
98 - @extend .btn-success;  
99 - }  
100 -  
101 - &.btn-create {  
102 - @extend .wide;  
103 - @extend .btn-success;  
104 - }  
105 -  
106 - &.btn-save {  
107 - @extend .wide;  
108 - @extend .btn-primary;  
109 - }  
110 -  
111 - &.btn-close,  
112 - &.btn-remove {  
113 - @extend .btn-danger;  
114 - }  
115 -  
116 - &.btn-cancel {  
117 - float: right;  
118 - }  
119 -  
120 - &.wide {  
121 - padding-left: 20px;  
122 - padding-right: 20px;  
123 - }  
124 -  
125 - &.btn-small {  
126 - padding: 2px 10px;  
127 - font-size: 12px;  
128 - }  
129 -  
130 - &.btn-tiny {  
131 - font-size: 11px;  
132 - padding: 2px 6px;  
133 - line-height: 16px;  
134 - margin: 2px;  
135 - }  
136 -  
137 - &.grouped {  
138 - margin-right: 7px;  
139 - float: left;  
140 - }  
141 -}  
app/assets/stylesheets/gitlab_bootstrap/common.scss
@@ -1,89 +0,0 @@ @@ -1,89 +0,0 @@
1 -/** COLORS **/  
2 -.cgray { color: gray }  
3 -.cred { color: #D12F19 }  
4 -.cgreen { color: #4a2 }  
5 -.cblue { color: #29A }  
6 -.cblack { color: #111 }  
7 -.cdark { color: #444 }  
8 -.cwhite { color: #fff!important }  
9 -.bgred { background: #F2DEDE!important }  
10 -  
11 -/** COMMON CLASSES **/  
12 -.left { float:left }  
13 -  
14 -.prepend-top-10 { margin-top:10px }  
15 -.prepend-top-20 { margin-top:20px }  
16 -.prepend-left-10 { margin-left:10px }  
17 -.prepend-left-20 { margin-left:20px }  
18 -.append-right-10 { margin-right:10px }  
19 -.append-right-20 { margin-right:20px }  
20 -.append-bottom-10 { margin-bottom:10px }  
21 -.append-bottom-20 { margin-bottom:20px }  
22 -.inline { display: inline-block }  
23 -  
24 -.padded { padding:20px }  
25 -.ipadded { padding:20px!important }  
26 -.lborder { border-left:1px solid #eee }  
27 -.underlined_link { text-decoration: underline; }  
28 -.hint { font-style: italic; color: #999; }  
29 -.light { color: #888 }  
30 -.tiny { font-weight: normal }  
31 -.vtop { vertical-align: top !important; }  
32 -  
33 -  
34 -/** ALERT MESSAGES **/  
35 -.alert.alert-disabled {  
36 - background: #EEE;  
37 - color: #777;  
38 - border-color: #DDD;  
39 -}  
40 -  
41 -/** HELPERS **/  
42 -.nothing_here_message {  
43 - text-align: center;  
44 - padding: 20px;  
45 - color: #666;  
46 - font-weight: normal;  
47 - font-size: 16px;  
48 - line-height: 36px;  
49 -}  
50 -  
51 -.slead {  
52 - color: #666;  
53 - font-size: 14px;  
54 - margin-bottom: 12px;  
55 - font-weight: normal;  
56 - line-height: 24px;  
57 -}  
58 -  
59 -  
60 -.tab-content {  
61 - overflow: visible;  
62 -}  
63 -  
64 -@media (max-width: 1200px) {  
65 - .only-wide {  
66 - display: none;  
67 - }  
68 -}  
69 -  
70 -.pagination ul > li > a, .pagination ul > li >span {  
71 - @include linear-gradient(#f1f1f1, #e1e1e1);  
72 - color: #333;  
73 - text-shadow: 0 1px 1px #FFF;  
74 -}  
75 -  
76 -pre.well-pre {  
77 - border: 1px solid #EEE;  
78 - background: #f9f9f9;  
79 - border-radius: 0;  
80 - color: #555;  
81 -}  
82 -  
83 -.input-append .btn.active, .input-prepend .btn.active {  
84 - background: #CCC;  
85 - border-color: #BBB;  
86 - text-shadow: 0 1px 1px #fff;  
87 - font-weight: bold;  
88 - @include box-shadow(inset 0 2px 4px rgba(0,0,0,.15));  
89 -}  
app/assets/stylesheets/gitlab_bootstrap/files.scss
@@ -1,213 +0,0 @@ @@ -1,213 +0,0 @@
1 -/**  
2 - * File content holder  
3 - *  
4 - */  
5 -.file-holder {  
6 - border: 1px solid #CCC;  
7 - margin-bottom: 1em;  
8 -  
9 - table {  
10 - @extend .table;  
11 - }  
12 -  
13 - .file-title {  
14 - border-bottom: 1px solid #bbb;  
15 - @include bg-dark-gray-gradient;  
16 - text-shadow: 0 1px 1px #fff;  
17 - margin: 0;  
18 - font-weight: normal;  
19 - font-weight: bold;  
20 - text-align: left;  
21 - color: $style_color;  
22 - padding: 9px 10px;  
23 - height: 18px;  
24 -  
25 - .options {  
26 - float: right;  
27 - margin-top: -5px;  
28 - }  
29 -  
30 - .file_name {  
31 - color: $style_color;  
32 - font-size: 14px;  
33 - text-shadow: 0 1px 1px #fff;  
34 - small {  
35 - color: #999;  
36 - font-size: 13px;  
37 - }  
38 - }  
39 - }  
40 - .file-content {  
41 - background: #fff;  
42 - font-size: 11px;  
43 -  
44 - &.image_file {  
45 - background: #eee;  
46 - text-align: center;  
47 - img {  
48 - padding: 100px;  
49 - max-width: 300px;  
50 - }  
51 - }  
52 -  
53 - &.wiki {  
54 - padding: 20px;  
55 - font-size: 14px;  
56 - line-height: 1.6;  
57 -  
58 - .highlight {  
59 - margin-bottom: 9px;  
60 - @include border-radius(4px);  
61 -  
62 - > pre {  
63 - margin: 0;  
64 - }  
65 - }  
66 - }  
67 -  
68 - &.blob_file {  
69 -  
70 - }  
71 -  
72 - /**  
73 - * Blame file  
74 - */  
75 - &.blame {  
76 - table {  
77 - border: none;  
78 - box-shadow: none;  
79 - margin: 0;  
80 - }  
81 - tr {  
82 - border-bottom: 1px solid #eee;  
83 - }  
84 - td {  
85 - &:first-child {  
86 - border-left: none;  
87 - }  
88 - &:last-child {  
89 - border-right: none;  
90 - }  
91 - background: #fff;  
92 - padding: 5px;  
93 - }  
94 - .author,  
95 - .blame_commit {  
96 - background: #f5f5f5;  
97 - vertical-align: top;  
98 - }  
99 - .lines {  
100 - pre {  
101 - padding: 0;  
102 - margin: 0;  
103 - background: none;  
104 - border: none;  
105 - }  
106 - }  
107 - }  
108 -  
109 - &.logs {  
110 - background: #eee;  
111 - max-height: 700px;  
112 - overflow-y: auto;  
113 -  
114 - ol {  
115 - margin-left: 40px;  
116 - padding: 10px 0;  
117 - border-left: 1px solid #CCC;  
118 - margin-bottom: 0;  
119 - background: white;  
120 - li {  
121 - color: #888;  
122 - p {  
123 - margin: 0;  
124 - color: #333;  
125 - line-height: 24px;  
126 - padding-left: 10px;  
127 - }  
128 -  
129 - &:hover {  
130 - background: $hover;  
131 - }  
132 - }  
133 - }  
134 - }  
135 -  
136 - /**  
137 - * Code file  
138 - */  
139 - &.code {  
140 - padding: 0;  
141 -  
142 - table.lines {  
143 - border: none;  
144 - box-shadow: none;  
145 - margin: 0px;  
146 - padding: 0px;  
147 - table-layout: fixed;  
148 -  
149 - pre {  
150 - border: none;  
151 - border-radius: 0;  
152 - font-family: $monospace_font;  
153 - font-size: 12px !important;  
154 - line-height: 16px !important;  
155 - margin: 0;  
156 - padding: 10px 0;  
157 - }  
158 - td {  
159 - border: none;  
160 - margin: 0;  
161 - padding: 0;  
162 - vertical-align: top;  
163 -  
164 - &:first-child {  
165 - background: #eee;  
166 - width: 50px;  
167 - }  
168 - &:last-child {  
169 - }  
170 - }  
171 - tr:hover {  
172 - background: none;  
173 - }  
174 -  
175 - pre.line_numbers {  
176 - color: #666;  
177 - padding: 10px 6px 10px 0;  
178 - text-align: right;  
179 - background: #EEE;  
180 -  
181 - a {  
182 - color: #666;  
183 -  
184 - i {  
185 - display: none;  
186 - font-size: 14px;  
187 - line-height: 14px;  
188 - }  
189 - &:hover i {  
190 - display: inherit;  
191 - }  
192 - }  
193 - }  
194 -  
195 - .highlight {  
196 - border-left: 1px solid #DEE2E3;  
197 - overflow: auto;  
198 - overflow-y: hidden;  
199 -  
200 - pre {  
201 - white-space: pre;  
202 - word-wrap: normal;  
203 -  
204 - .line {  
205 - padding: 0 10px;  
206 - }  
207 - }  
208 - }  
209 - }  
210 - }  
211 - }  
212 -}  
213 -  
app/assets/stylesheets/gitlab_bootstrap/fonts.scss
@@ -1,2 +0,0 @@ @@ -1,2 +0,0 @@
1 -/** Typo **/  
2 -$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono', 'lucida console', monospace;  
app/assets/stylesheets/gitlab_bootstrap/forms.scss
@@ -1,51 +0,0 @@ @@ -1,51 +0,0 @@
1 -form {  
2 - @extend .form-horizontal;  
3 -  
4 - label {  
5 - @extend .control-label;  
6 - }  
7 -}  
8 -  
9 -input.input-xpadding,  
10 -.add-on.input-xpadding {  
11 - padding: 6px 10px;  
12 -}  
13 -  
14 -.control-group {  
15 - .control-label {  
16 - padding-top: 6px;  
17 - }  
18 - .controls {  
19 - input, textarea {  
20 - padding: 6px 10px;  
21 - }  
22 -  
23 - input[type="radio"], input[type="checkbox"] {  
24 - margin-top: 6px;  
25 - }  
26 -  
27 - .add-on {  
28 - padding: 6px;  
29 - }  
30 - }  
31 -}  
32 -  
33 -input[type='search'].search-text-input {  
34 - background-image: url("icon-search.png");  
35 - background-repeat: no-repeat;  
36 - background-position: 10px;  
37 - padding-left: 25px;  
38 - @include border-radius(4px);  
39 - border: 1px solid #ccc;  
40 -}  
41 -  
42 -input[type='text'].danger {  
43 - background: #F2DEDE!important;  
44 - border-color: #D66;  
45 - text-shadow: 0 1px 1px #fff  
46 -}  
47 -  
48 -fieldset legend {  
49 - font-size: 16px;  
50 - margin-bottom: 10px;  
51 -}  
app/assets/stylesheets/gitlab_bootstrap/lists.scss
@@ -1,95 +0,0 @@ @@ -1,95 +0,0 @@
1 -/**  
2 - * Well styled list  
3 - *  
4 - */  
5 -.well-list {  
6 - margin: 0;  
7 - list-style: none;  
8 - li {  
9 - padding: 10px;  
10 - min-height: 20px;  
11 - border-bottom: 1px solid #eee;  
12 - border-bottom: 1px solid rgba(0, 0, 0, 0.05);  
13 -  
14 - &.disabled {  
15 - color: #888;  
16 - }  
17 -  
18 - &.unstyled {  
19 - &:hover {  
20 - background: none;  
21 - }  
22 - }  
23 -  
24 - &.smoke { background-color: #f5f5f5; }  
25 -  
26 - &:hover {  
27 - background: $hover;  
28 - border-bottom: 1px solid #ADF;  
29 - }  
30 -  
31 - &:last-child {  
32 - border-bottom: none;  
33 -  
34 - &.bottom {  
35 - background: #f5f5f5;  
36 - }  
37 - }  
38 -  
39 - .author { color: #999; }  
40 -  
41 - p {  
42 - padding-top: 1px;  
43 - margin: 0;  
44 - color: #222;  
45 - img {  
46 - position: relative;  
47 - top: 3px;  
48 - }  
49 - }  
50 -  
51 - .well-title {  
52 - font-size: 14px;  
53 - line-height: 18px;  
54 - }  
55 - }  
56 -}  
57 -  
58 -ol, ul {  
59 - &.styled {  
60 - li {  
61 - padding: 2px;  
62 - }  
63 - }  
64 -}  
65 -  
66 -/** light list with border-bottom between li **/  
67 -ul.bordered-list {  
68 - margin: 5px 0px;  
69 - padding: 0px;  
70 - li {  
71 - padding: 5px 0;  
72 - border-bottom: 1px solid #EEE;  
73 - overflow: hidden;  
74 - display: block;  
75 - margin: 0px;  
76 - &:last-child { border:none }  
77 - &.active {  
78 - background: #f9f9f9;  
79 - a { font-weight: bold; }  
80 - }  
81 -  
82 - &.light {  
83 - a { color: #777; }  
84 - }  
85 - }  
86 -  
87 - &.top-list {  
88 - li:first-child {  
89 - padding-top: 0;  
90 - h4, h5 {  
91 - margin-top: 0;  
92 - }  
93 - }  
94 - }  
95 -}  
app/assets/stylesheets/gitlab_bootstrap/mixins.scss
@@ -1,114 +0,0 @@ @@ -1,114 +0,0 @@
1 -/**  
2 - * Generic mixins  
3 - */  
4 - @mixin box-shadow($shadow) {  
5 - -webkit-box-shadow: $shadow;  
6 - -moz-box-shadow: $shadow;  
7 - -ms-box-shadow: $shadow;  
8 - -o-box-shadow: $shadow;  
9 - box-shadow: $shadow;  
10 -}  
11 -  
12 -@mixin border-radius($radius) {  
13 - -webkit-border-radius: $radius;  
14 - -moz-border-radius: $radius;  
15 - -ms-border-radius: $radius;  
16 - -o-border-radius: $radius;  
17 - border-radius: $radius;  
18 -}  
19 -  
20 -@mixin border-radius-left($radius) {  
21 - @include border-radius($radius 0 0 $radius)  
22 -}  
23 -  
24 -@mixin linear-gradient($from, $to) {  
25 - background-image: -webkit-gradient(linear, 0 0, 0 100%, from($from), to($to));  
26 - background-image: -webkit-linear-gradient($from, $to);  
27 - background-image: -moz-linear-gradient($from, $to);  
28 - background-image: -o-linear-gradient($from, $to);  
29 -}  
30 -  
31 -@mixin transition($transition) {  
32 - -webkit-transition: $transition;  
33 - -moz-transition: $transition;  
34 - -ms-transition: $transition;  
35 - -o-transition: $transition;  
36 - transition: $transition;  
37 -}  
38 -  
39 -/**  
40 - * Prefilled mixins  
41 - * Mixins with fixed values  
42 - */  
43 -@mixin bg-light-gray-gradient {  
44 - background: #f1f1f1;  
45 - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #f5f5f5), to(#e1e1e1));  
46 - background-image: -webkit-linear-gradient(#f5f5f5 6.6%, #e1e1e1);  
47 - background-image: -moz-linear-gradient(#f5f5f5 6.6%, #e1e1e1);  
48 - background-image: -o-linear-gradient(#f5f5f5 6.6%, #e1e1e1);  
49 -}  
50 -  
51 -@mixin bg-gray-gradient {  
52 - background: #eee;  
53 - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf));  
54 - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf);  
55 - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);  
56 - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);  
57 -}  
58 -  
59 -@mixin bg-dark-gray-gradient {  
60 - background: #eee;  
61 - background-image: -webkit-linear-gradient(#e9e9e9, #d7d7d7);  
62 - background-image: -moz-linear-gradient(#e9e9e9, #d7d7d7);  
63 - background-image: -o-linear-gradient(#e9e9e9, #d7d7d7);  
64 -}  
65 -  
66 -@mixin shade {  
67 - @include box-shadow(0 0 3px #ddd);  
68 -}  
69 -  
70 -@mixin solid-shade {  
71 - @include box-shadow(0 0 0 3px #f1f1f1);  
72 -}  
73 -  
74 -@mixin header-font {  
75 - color: $style_color;  
76 - text-shadow: 0 1px 1px #FFF;  
77 - font-size: 16px;  
78 - line-height: 40px;  
79 - font-weight: normal;  
80 -}  
81 -  
82 -@mixin md-typography {  
83 - *:first-child {  
84 - margin-top: 0;  
85 - }  
86 -  
87 - code { padding: 0 4px; }  
88 - h1 { margin-top: 30px;}  
89 - h2 { margin-top: 25px;}  
90 - h3 { margin-top: 20px;}  
91 - h4 { margin-top: 15px;}  
92 -  
93 - blockquote p {  
94 - color: #888;  
95 - font-size: 14px;  
96 - line-height: 1.5;  
97 - }  
98 -  
99 - table {  
100 - @extend .table;  
101 - @extend .table-bordered;  
102 - th {  
103 - background: #EEE;  
104 - }  
105 - }  
106 -}  
107 -  
108 -@mixin page-title {  
109 - color: $style_color;  
110 - font-size: 20px;  
111 - line-height: 1.5;  
112 - margin-top: 0px;  
113 - margin-bottom: 15px;  
114 -}  
app/assets/stylesheets/gitlab_bootstrap/nav.scss
@@ -1,92 +0,0 @@ @@ -1,92 +0,0 @@
1 -/**  
2 - * nav-pills  
3 - *  
4 - */  
5 -.nav-pills {  
6 - .active a {  
7 - background: $primary_color;  
8 - }  
9 -  
10 - > li > a {  
11 - @include border-radius(0);  
12 - }  
13 -  
14 - &.nav-stacked {  
15 - > li > a {  
16 - border-left: 4px solid #EEE;  
17 - padding: 12px;  
18 - }  
19 - > .active > a {  
20 - border-color: $primary_color;  
21 - border-radius: 0;  
22 - background: #F1F1F1;  
23 - color: $style_color;  
24 - font-weight: bold;  
25 - text-shadow: 0 1px 1px #fff;  
26 - }  
27 -  
28 - &.nav-stacked-menu {  
29 - background: #FAFAFA;  
30 - li > a {  
31 - padding: 16px;  
32 - }  
33 - }  
34 - }  
35 -  
36 - &.nav-pills-small {  
37 - > li > a {  
38 - padding: 8px 12px;  
39 - }  
40 - }  
41 -}  
42 -  
43 -.nav-pills > .active > a > i[class^="icon-"] { background: inherit; }  
44 -  
45 -  
46 -  
47 -/**  
48 - * nav-tabs  
49 - *  
50 - */  
51 -.nav-tabs > li > a, .nav-pills > li > a { color: $style_color; }  
52 -.nav.nav-tabs {  
53 - li {  
54 - > a {  
55 - padding: 8px 20px;  
56 - margin-right: 7px;  
57 - line-height: 20px;  
58 - border-color: #EEE;  
59 - color: #888;  
60 - border-bottom: 1px solid #ddd;  
61 - .badge {  
62 - background-color: #eee;  
63 - color: #888;  
64 - text-shadow: 0 1px 1px #fff;  
65 - }  
66 - i[class^="icon-"] {  
67 - line-height: 14px;  
68 - }  
69 - }  
70 - &.active {  
71 - > a {  
72 - border-color: #CCC;  
73 - border-bottom: 1px solid #fff;  
74 - color: #333;  
75 - font-weight: bold;  
76 - }  
77 - }  
78 - }  
79 -  
80 - &.nav-small-tabs > li > a { padding: 6px 9px; }  
81 -}  
82 -  
83 -  
84 -  
85 -/**  
86 - * fix to keep tooltips position in top navigation bar  
87 - *  
88 - */  
89 -.navbar .nav > li {  
90 - position: relative;  
91 - white-space: nowrap;  
92 -}  
app/assets/stylesheets/gitlab_bootstrap/typography.scss
@@ -1,108 +0,0 @@ @@ -1,108 +0,0 @@
1 -/**  
2 - * Headers  
3 - *  
4 - */  
5 -h1, h2, h3, h4, h5, h6 {  
6 - font-weight: 500;  
7 - line-height: 1.1;  
8 -}  
9 -  
10 -h1.page-title {  
11 - @include page-title;  
12 - font-size: 28px;  
13 -}  
14 -  
15 -h2.page-title {  
16 - @include page-title;  
17 - font-size: 24px;  
18 -}  
19 -  
20 -h3.page-title {  
21 - @include page-title;  
22 -}  
23 -  
24 -h6 {  
25 - color: #888;  
26 - text-transform: uppercase;  
27 -}  
28 -  
29 -/** CODE **/  
30 -pre {  
31 - font-family: $monospace_font;  
32 -  
33 - &.dark {  
34 - background: #333;  
35 - color: #f5f5f5;  
36 - }  
37 -}  
38 -  
39 -/**  
40 - * Links  
41 - *  
42 - */  
43 -a {  
44 - outline: none;  
45 - color: $link_color;  
46 - &:hover {  
47 - text-decoration: none;  
48 - color: $primary_color;  
49 - }  
50 -  
51 - &:focus {  
52 - text-decoration: underline;  
53 - }  
54 -  
55 - &.dark {  
56 - color: $style_color;  
57 - }  
58 -  
59 - &.lined {  
60 - text-decoration: underline;  
61 - &:hover { text-decoration: underline; }  
62 - }  
63 -  
64 - &.gray {  
65 - color: gray;  
66 - }  
67 -  
68 - &.supp_diff_link {  
69 - text-align: center;  
70 - padding: 20px 0;  
71 - background: #f1f1f1;  
72 - width: 100%;  
73 - float: left;  
74 - }  
75 -  
76 - &.neib {  
77 - margin-right: 15px;  
78 - }  
79 -}  
80 -  
81 -a:focus {  
82 - outline: none;  
83 -}  
84 -  
85 -.monospace {  
86 - font-family: $monospace_font;  
87 -}  
88 -  
89 -/**  
90 - * Wiki typography  
91 - *  
92 - */  
93 -.wiki {  
94 - @include md-typography;  
95 -  
96 - font-size: 14px;  
97 - line-height: 1.6;  
98 - .white .highlight pre {  
99 - background: #f5f5f5;  
100 - }  
101 - ul {  
102 - margin: 0 0 9px 25px !important;  
103 - }  
104 -}  
105 -  
106 -.md {  
107 - @include md-typography;  
108 -}  
app/assets/stylesheets/gitlab_bootstrap/variables.scss
@@ -1,13 +0,0 @@ @@ -1,13 +0,0 @@
1 -/**  
2 - * General Colors  
3 - */  
4 -$primary_color: #2FA0BB;  
5 -$link_color: #3A89A3;  
6 -$style_color: #474D57;  
7 -$hover: #D9EDF7;  
8 -  
9 -/**  
10 - * Commit Diff Colors  
11 - */  
12 -$added: #63c363;  
13 -$deleted: #f77;  
app/assets/stylesheets/gl_bootstrap.scss 0 → 100644
@@ -0,0 +1,220 @@ @@ -0,0 +1,220 @@
  1 +/*
  2 + * Twitter bootstrap with GitLab customizations/additions
  3 + *
  4 + * Some unused bootstrap compontents like panels are not included.
  5 + * Other components like tabs are modified to GitLab style.
  6 + *
  7 + */
  8 +
  9 +$font-size-base: 13px !default;
  10 +$nav-pills-active-link-hover-bg: $bg_style_color;
  11 +$pagination-active-bg: $bg_style_color;
  12 +
  13 +// Core variables and mixins
  14 +@import "bootstrap/variables";
  15 +@import "bootstrap/mixins";
  16 +
  17 +// Reset
  18 +@import "bootstrap/normalize";
  19 +@import "bootstrap/print";
  20 +
  21 +// Core CSS
  22 +@import "bootstrap/scaffolding";
  23 +@import "bootstrap/type";
  24 +@import "bootstrap/code";
  25 +@import "bootstrap/grid";
  26 +@import "bootstrap/tables";
  27 +@import "bootstrap/forms";
  28 +
  29 +// Components
  30 +@import "bootstrap/component-animations";
  31 +@import "bootstrap/dropdowns";
  32 +@import "bootstrap/button-groups";
  33 +@import "bootstrap/input-groups";
  34 +@import "bootstrap/navs";
  35 +@import "bootstrap/navbar";
  36 +@import "bootstrap/breadcrumbs";
  37 +@import "bootstrap/pagination";
  38 +@import "bootstrap/pager";
  39 +@import "bootstrap/labels";
  40 +@import "bootstrap/badges";
  41 +@import "bootstrap/jumbotron";
  42 +@import "bootstrap/thumbnails";
  43 +@import "bootstrap/alerts";
  44 +@import "bootstrap/progress-bars";
  45 +@import "bootstrap/list-group";
  46 +@import "bootstrap/wells";
  47 +@import "bootstrap/close";
  48 +
  49 +// Components w/ JavaScript
  50 +@import "bootstrap/modals";
  51 +@import "bootstrap/tooltip";
  52 +@import "bootstrap/popovers";
  53 +@import "bootstrap/carousel";
  54 +
  55 +// Utility classes
  56 +.clearfix {
  57 + @include clearfix();
  58 +}
  59 +.center-block {
  60 + @include center-block();
  61 +}
  62 +.pull-right {
  63 + float: right !important;
  64 +}
  65 +.pull-left {
  66 + float: left !important;
  67 +}
  68 +.hide {
  69 + display: none;
  70 +}
  71 +.show {
  72 + display: block !important;
  73 +}
  74 +.invisible {
  75 + visibility: hidden;
  76 +}
  77 +.text-hide {
  78 + @include text-hide();
  79 +}
  80 +.hidden {
  81 + display: none !important;
  82 + visibility: hidden !important;
  83 +}
  84 +.affix {
  85 + position: fixed;
  86 +}
  87 +
  88 +@import "bootstrap/responsive-utilities";
  89 +
  90 +// Labels
  91 +.label {
  92 + padding: 2px 4px;
  93 + font-size: 12px;
  94 + font-style: normal;
  95 + font-weight: normal;
  96 + display: inline-block;
  97 +
  98 + &.label-gray {
  99 + background-color: #eee;
  100 + color: #999;
  101 + text-shadow: none;
  102 + }
  103 +
  104 + &.label-inverse {
  105 + background-color: #333333;
  106 + }
  107 +}
  108 +
  109 +// Nav tabs
  110 +.nav.nav-tabs {
  111 + li {
  112 + > a {
  113 + padding: 8px 20px;
  114 + margin-right: 7px;
  115 + line-height: 20px;
  116 + border-color: #EEE;
  117 + color: #888;
  118 + border-bottom: 1px solid #ddd;
  119 + .badge {
  120 + background-color: #eee;
  121 + color: #888;
  122 + text-shadow: 0 1px 1px #fff;
  123 + }
  124 + i[class^="icon-"] {
  125 + line-height: 14px;
  126 + }
  127 + }
  128 + &.active {
  129 + > a {
  130 + border-color: #CCC;
  131 + border-bottom: 1px solid #fff;
  132 + color: #333;
  133 + font-weight: bold;
  134 + }
  135 + }
  136 + }
  137 +
  138 + &.nav-small-tabs > li > a {
  139 + padding: 6px 9px;
  140 + }
  141 +}
  142 +
  143 +.nav-tabs > li > a,
  144 +.nav-pills > li > a {
  145 + color: #666;
  146 +}
  147 +
  148 +.nav-small > li > a {
  149 + padding: 3px 5px;
  150 + font-size: 12px;
  151 +}
  152 +
  153 +
  154 +/*
  155 + * Callouts from Bootstrap3 docs
  156 + *
  157 + * Not quite alerts, but custom and helpful notes for folks reading the docs.
  158 + * Requires a base and modifier class.
  159 + */
  160 +
  161 +/* Common styles for all types */
  162 +.bs-callout {
  163 + margin: 20px 0;
  164 + padding: 20px;
  165 + border-left: 3px solid #eee;
  166 + color: #666;
  167 + background: #f9f9f9;
  168 +}
  169 +.bs-callout h4 {
  170 + margin-top: 0;
  171 + margin-bottom: 5px;
  172 +}
  173 +.bs-callout p:last-child {
  174 + margin-bottom: 0;
  175 +}
  176 +
  177 +/* Variations */
  178 +.bs-callout-danger {
  179 + background-color: #fdf7f7;
  180 + border-color: #eed3d7;
  181 + color: #b94a48;
  182 +}
  183 +.bs-callout-warning {
  184 + background-color: #faf8f0;
  185 + border-color: #faebcc;
  186 + color: #8a6d3b;
  187 +}
  188 +.bs-callout-info {
  189 + background-color: #f4f8fa;
  190 + border-color: #bce8f1;
  191 + color: #34789a;
  192 +}
  193 +.bs-callout-success {
  194 + background-color: #dff0d8;
  195 + border-color: #5cA64d;
  196 + color: #3c763d;
  197 +}
  198 +
  199 +// Breadcrumb
  200 +ul.breadcrumb {
  201 + background: white;
  202 + border: none;
  203 + li {
  204 + display: inline;
  205 + text-shadow: 0 1px 0 white
  206 + }
  207 +
  208 + a {
  209 + font-size: 16px;
  210 + }
  211 +}
  212 +
  213 +/**
  214 + * fix to keep tooltips position in top navigation bar
  215 + *
  216 + */
  217 +.navbar .nav > li {
  218 + position: relative;
  219 + white-space: nowrap;
  220 +}
app/assets/stylesheets/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 {
app/assets/stylesheets/main/fonts.scss 0 → 100644
@@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
  1 +/** Typo **/
  2 +$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono', 'lucida console', monospace;
app/assets/stylesheets/main/layout.scss 0 → 100644
@@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
  1 +html {
  2 + overflow-y: scroll;
  3 +
  4 + &.touch .tooltip { display: none !important; }
  5 +}
  6 +
  7 +body {
  8 + -webkit-font-smoothing: antialiased;
  9 + -moz-osx-font-smoothing: grayscale;
  10 + margin-bottom: 20px;
  11 +}
  12 +
  13 +.container {
  14 + padding-top: 0;
  15 + z-index: 5;
  16 +}
  17 +
  18 +.container .content {
  19 + margin: 0 0;
  20 +}
app/assets/stylesheets/main/mixins.scss 0 → 100644
@@ -0,0 +1,148 @@ @@ -0,0 +1,148 @@
  1 +/**
  2 + * Generic mixins
  3 + */
  4 + @mixin box-shadow($shadow) {
  5 + -webkit-box-shadow: $shadow;
  6 + -moz-box-shadow: $shadow;
  7 + -ms-box-shadow: $shadow;
  8 + -o-box-shadow: $shadow;
  9 + box-shadow: $shadow;
  10 +}
  11 +
  12 +@mixin border-radius($radius) {
  13 + -webkit-border-radius: $radius;
  14 + -moz-border-radius: $radius;
  15 + -ms-border-radius: $radius;
  16 + -o-border-radius: $radius;
  17 + border-radius: $radius;
  18 +}
  19 +
  20 +@mixin border-radius-left($radius) {
  21 + @include border-radius($radius 0 0 $radius)
  22 +}
  23 +
  24 +@mixin linear-gradient($from, $to) {
  25 + background-image: -webkit-gradient(linear, 0 0, 0 100%, from($from), to($to));
  26 + background-image: -webkit-linear-gradient($from, $to);
  27 + background-image: -moz-linear-gradient($from, $to);
  28 + background-image: -ms-linear-gradient($from, $to);
  29 + background-image: -o-linear-gradient($from, $to);
  30 +}
  31 +
  32 +@mixin transition($transition) {
  33 + -webkit-transition: $transition;
  34 + -moz-transition: $transition;
  35 + -ms-transition: $transition;
  36 + -o-transition: $transition;
  37 + transition: $transition;
  38 +}
  39 +
  40 +/**
  41 + * Prefilled mixins
  42 + * Mixins with fixed values
  43 + */
  44 +@mixin bg-light-gray-gradient {
  45 + background: #f1f1f1;
  46 + background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #f5f5f5), to(#e1e1e1));
  47 + background-image: -webkit-linear-gradient(#f5f5f5 6.6%, #e1e1e1);
  48 + background-image: -moz-linear-gradient(#f5f5f5 6.6%, #e1e1e1);
  49 + background-image: -ms-linear-gradient(#f5f5f5 6.6%, #e1e1e1);
  50 + background-image: -o-linear-gradient(#f5f5f5 6.6%, #e1e1e1);
  51 +}
  52 +
  53 +@mixin bg-gray-gradient {
  54 + background: #eee;
  55 + background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf));
  56 + background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf);
  57 + background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);
  58 + background-image: -ms-linear-gradient(#eee 6.6%, #dfdfdf);
  59 + background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);
  60 +}
  61 +
  62 +@mixin bg-dark-gray-gradient {
  63 + background: #eee;
  64 + background-image: -webkit-linear-gradient(#e9e9e9, #d7d7d7);
  65 + background-image: -moz-linear-gradient(#e9e9e9, #d7d7d7);
  66 + background-image: -ms-linear-gradient(#e9e9e9, #d7d7d7);
  67 + background-image: -o-linear-gradient(#e9e9e9, #d7d7d7);
  68 +}
  69 +
  70 +@mixin shade {
  71 + @include box-shadow(0 0 3px #ddd);
  72 +}
  73 +
  74 +@mixin solid-shade {
  75 + @include box-shadow(0 0 0 3px #f1f1f1);
  76 +}
  77 +
  78 +@mixin header-font {
  79 + color: $style_color;
  80 + text-shadow: 0 1px 1px #FFF;
  81 + font-size: 16px;
  82 + line-height: 44px;
  83 + font-weight: normal;
  84 +}
  85 +
  86 +@mixin md-typography {
  87 + img {
  88 + max-width: 100%;
  89 + }
  90 +
  91 + *:first-child {
  92 + margin-top: 0;
  93 + }
  94 +
  95 + code { padding: 0 4px; }
  96 +
  97 + h1 {
  98 + margin-top: 45px;
  99 + font-size: 2.5em;
  100 + }
  101 +
  102 + h2 {
  103 + margin-top: 40px;
  104 + font-size: 2em;
  105 + }
  106 +
  107 + h3 {
  108 + margin-top: 35px;
  109 + font-size: 1.5em;
  110 + }
  111 +
  112 + h4 {
  113 + margin-top: 30px;
  114 + font-size: 1.2em;
  115 + }
  116 +
  117 + blockquote p {
  118 + color: #888;
  119 + font-size: 14px;
  120 + line-height: 1.5;
  121 + }
  122 +
  123 + table {
  124 + @extend .table;
  125 + @extend .table-bordered;
  126 + th {
  127 + background: #EEE;
  128 + }
  129 + }
  130 +
  131 + p > code {
  132 + font-size: inherit;
  133 + font-weight: inherit;
  134 + color: #555;
  135 + }
  136 +
  137 + li {
  138 + line-height: 1.5;
  139 + }
  140 +}
  141 +
  142 +@mixin page-title {
  143 + color: #333;
  144 + font-size: 20px;
  145 + line-height: 1.5;
  146 + margin-top: 0px;
  147 + margin-bottom: 15px;
  148 +}
app/assets/stylesheets/main/variables.scss 0 → 100644
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
  1 +/**
  2 + * General Colors
  3 + */
  4 +$primary_color: #2FA0BB;
  5 +$link_color: #3A89A3;
  6 +$style_color: #474D57;
  7 +$bg_style_color: #2299BB;
  8 +$hover: #D9EDF7;
  9 +
  10 +/**
  11 + * Commit Diff Colors
  12 + */
  13 +$added: #63c363;
  14 +$deleted: #f77;
app/assets/stylesheets/sections/admin.scss
@@ -20,4 +20,19 @@ @@ -20,4 +20,19 @@
20 label { width: 110px; } 20 label { width: 110px; }
21 .controls { margin-left: 130px; } 21 .controls { margin-left: 130px; }
22 .form-actions { padding-left: 130px; background: #fff } 22 .form-actions { padding-left: 130px; background: #fff }
  23 + .visibility-levels {
  24 + .controls {
  25 + margin-bottom: 9px;
  26 + }
  27 +
  28 + i {
  29 + color: inherit;
  30 + }
  31 + }
  32 +}
  33 +
  34 +.broadcast-messages {
  35 + .message {
  36 + line-height: 2;
  37 + }
23 } 38 }
app/assets/stylesheets/sections/commits.scss
@@ -16,36 +16,29 @@ @@ -16,36 +16,29 @@
16 16
17 .header { 17 .header {
18 @extend .clearfix; 18 @extend .clearfix;
  19 + background: #DDD;
  20 + border-bottom: 1px solid #CCC;
19 padding: 5px 5px 5px 10px; 21 padding: 5px 5px 5px 10px;
20 color: #555; 22 color: #555;
21 - border-bottom: 1px solid #CCC;  
22 - background: #eee;  
23 - // TODO Replace with linear-gradient mixin  
24 - background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf));  
25 - background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf);  
26 - background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);  
27 - background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);  
28 -  
29 - a{  
30 - color: $style_color;  
31 - }  
32 23
33 > span { 24 > span {
34 font-family: $monospace_font; 25 font-family: $monospace_font;
35 font-size: 14px; 26 font-size: 14px;
36 - line-height: 30px; 27 + line-height: 2;
37 } 28 }
38 29
39 - a.view-file{ 30 + .view-file {
40 font-weight: bold; 31 font-weight: bold;
  32 + float: right;
  33 + background-color: #EEE;
41 } 34 }
42 35
43 - .commit-short-id{ 36 + .commit-short-id {
44 font-family: $monospace_font; 37 font-family: $monospace_font;
45 font-size: smaller; 38 font-size: smaller;
46 } 39 }
47 40
48 - .file-mode{ 41 + .file-mode {
49 font-family: $monospace_font; 42 font-family: $monospace_font;
50 } 43 }
51 } 44 }
@@ -55,13 +48,13 @@ @@ -55,13 +48,13 @@
55 background: #FFF; 48 background: #FFF;
56 color: #333; 49 color: #333;
57 font-size: 12px; 50 font-size: 12px;
58 - .old{  
59 - span.idiff{ 51 + .old {
  52 + span.idiff {
60 background-color: #FAA; 53 background-color: #FAA;
61 } 54 }
62 } 55 }
63 - .new{  
64 - span.idiff{ 56 + .new {
  57 + span.idiff {
65 background-color: #AFA; 58 background-color: #AFA;
66 } 59 }
67 } 60 }
@@ -77,7 +70,7 @@ @@ -77,7 +70,7 @@
77 font-size: 12px; 70 font-size: 12px;
78 } 71 }
79 } 72 }
80 - .old_line, .new_line { 73 + .old_line, .new_line, .diff_line {
81 margin: 0px; 74 margin: 0px;
82 padding: 0px; 75 padding: 0px;
83 border: none; 76 border: none;
@@ -87,7 +80,7 @@ @@ -87,7 +80,7 @@
87 border-right: 1px solid #ccc; 80 border-right: 1px solid #ccc;
88 text-align: right; 81 text-align: right;
89 min-width: 35px; 82 min-width: 35px;
90 - max-width: 35px; 83 + max-width: 50px;
91 width: 35px; 84 width: 35px;
92 @include user-select(none); 85 @include user-select(none);
93 a { 86 a {
@@ -99,6 +92,15 @@ @@ -99,6 +92,15 @@
99 text-decoration: underline; 92 text-decoration: underline;
100 } 93 }
101 } 94 }
  95 + &.new {
  96 + background: #CFD;
  97 + }
  98 + &.old {
  99 + background: #FDD;
  100 + }
  101 + }
  102 + .diff_line {
  103 + padding: 0;
102 } 104 }
103 .line_holder { 105 .line_holder {
104 &.old .old_line, 106 &.old .old_line,
@@ -129,6 +131,11 @@ @@ -129,6 +131,11 @@
129 color: #ccc; 131 color: #ccc;
130 background: #fafafa; 132 background: #fafafa;
131 } 133 }
  134 + &.parallel {
  135 + display: table-cell;
  136 + overflow: hidden;
  137 + width: 50%;
  138 + }
132 } 139 }
133 } 140 }
134 .image { 141 .image {
@@ -293,6 +300,7 @@ @@ -293,6 +300,7 @@
293 background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf)); 300 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); 301 background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf);
295 background-image: -moz-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);
296 background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf); 304 background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);
297 305
298 ul, li{ 306 ul, li{
@@ -391,8 +399,8 @@ @@ -391,8 +399,8 @@
391 399
392 .commits-compare-switch{ 400 .commits-compare-switch{
393 background: url("switch_icon.png") no-repeat center center; 401 background: url("switch_icon.png") no-repeat center center;
394 - width: 22px;  
395 - height: 22px; 402 + width: 32px;
  403 + height: 32px;
396 text-indent: -9999px; 404 text-indent: -9999px;
397 float: left; 405 float: left;
398 margin-right: 9px; 406 margin-right: 9px;
@@ -419,7 +427,6 @@ @@ -419,7 +427,6 @@
419 .commit-title { 427 .commit-title {
420 margin: 0; 428 margin: 0;
421 font-size: 20px; 429 font-size: 20px;
422 - font-weight: bold;  
423 } 430 }
424 431
425 .commit-description { 432 .commit-description {
@@ -474,9 +481,13 @@ li.commit { @@ -474,9 +481,13 @@ li.commit {
474 font-family: $monospace_font; 481 font-family: $monospace_font;
475 } 482 }
476 483
  484 + .str-truncated {
  485 + max-width: 70%;
  486 + }
  487 +
477 .commit-row-message { 488 .commit-row-message {
478 - color: #555;  
479 - font-weight: bolder; 489 + color: #333;
  490 + font-weight: 500;
480 &:hover { 491 &:hover {
481 color: #444; 492 color: #444;
482 text-decoration: underline; 493 text-decoration: underline;
@@ -485,13 +496,14 @@ li.commit { @@ -485,13 +496,14 @@ li.commit {
485 } 496 }
486 497
487 .commit-row-info { 498 .commit-row-info {
  499 + color: #777;
  500 +
488 a { 501 a {
489 color: #777; 502 color: #777;
490 } 503 }
491 504
492 .committed_ago { 505 .committed_ago {
493 float: right; 506 float: right;
494 - @extend .cgray;  
495 } 507 }
496 } 508 }
497 509
@@ -505,4 +517,4 @@ li.commit { @@ -505,4 +517,4 @@ li.commit {
505 @extend .cgray; 517 @extend .cgray;
506 } 518 }
507 } 519 }
508 -}  
509 \ No newline at end of file 520 \ No newline at end of file
  521 +}
app/assets/stylesheets/sections/dashboard.scss
1 .dashboard { 1 .dashboard {
2 - @extend .row;  
3 - .activities {  
4 - }  
5 -  
6 .side { 2 .side {
7 - @extend .pull-right;  
8 -  
9 .ui-box { 3 .ui-box {
10 margin: 0px; 4 margin: 0px;
11 box-shadow: none; 5 box-shadow: none;
@@ -20,7 +14,7 @@ @@ -20,7 +14,7 @@
20 14
21 .search-text-input { 15 .search-text-input {
22 float:left; 16 float:left;
23 - @extend .span2; 17 + @extend .col-md-2;
24 } 18 }
25 .btn { 19 .btn {
26 margin-left: 5px; 20 margin-left: 5px;
@@ -32,14 +26,15 @@ @@ -32,14 +26,15 @@
32 .dash-filter { 26 .dash-filter {
33 margin: 7px 0; 27 margin: 7px 0;
34 padding: 4px 6px; 28 padding: 4px 6px;
35 - width: 202px; 29 + width: 220px;
36 float: left; 30 float: left;
  31 + height: inherit;
37 } 32 }
38 } 33 }
39 34
40 @media (max-width: 1200px) { 35 @media (max-width: 1200px) {
41 .dashboard .dash-filter { 36 .dashboard .dash-filter {
42 - width: 132px; 37 + width: 150px;
43 } 38 }
44 } 39 }
45 40
@@ -51,7 +46,7 @@ @@ -51,7 +46,7 @@
51 li { 46 li {
52 &.active { 47 &.active {
53 a { 48 a {
54 - @include linear-gradient(#f5f5f5, #eee); 49 + background-color: #EEE;
55 border-bottom: 1px solid #EEE !important; 50 border-bottom: 1px solid #EEE !important;
56 &:hover { 51 &:hover {
57 background: #eee; 52 background: #eee;
@@ -60,43 +55,64 @@ @@ -60,43 +55,64 @@
60 } 55 }
61 56
62 a { 57 a {
63 - border-color: #CCC !important; 58 + border-color: #DDD !important;
64 } 59 }
65 } 60 }
66 } 61 }
67 62
68 .project-row, .group-row { 63 .project-row, .group-row {
69 - padding: 10px 15px !important; 64 + padding: 10px 12px !important;
  65 + font-size: 14px;
  66 + line-height: 24px;
70 67
71 - .namespace-name {  
72 - color: #666;  
73 - font-weight: bold; 68 + a {
  69 + display: block;
74 } 70 }
75 71
76 .project-name, .group-name { 72 .project-name, .group-name {
77 - font-size: 16px; 73 + font-weight: 500;
78 } 74 }
79 75
80 .arrow { 76 .arrow {
81 float: right; 77 float: right;
82 - padding: 10px 5px; 78 + padding: 0px 5px;
83 margin: 0; 79 margin: 0;
84 font-size: 20px; 80 font-size: 20px;
85 color: #666; 81 color: #666;
86 } 82 }
87 83
88 .last-activity { 84 .last-activity {
  85 + float: right;
  86 + font-size: 12px;
89 color: #AAA; 87 color: #AAA;
90 display: block; 88 display: block;
91 - margin-top: 5px;  
92 .date { 89 .date {
93 color: #777; 90 color: #777;
94 } 91 }
95 } 92 }
96 } 93 }
97 94
98 -.group-row {  
99 - .arrow {  
100 - padding: 2px 5px; 95 +.project-access-icon {
  96 + margin-left: 10px;
  97 + float: left;
  98 + margin-right: 15px;
  99 + font-size: 20px;
  100 + margin-bottom: 15px;
  101 + border: 1px solid #EEE;
  102 + padding: 8px 12px;
  103 + border-radius: 50px;
  104 + background: #f5f5f5;
  105 + text-align: center;
  106 +
  107 + i {
  108 + color: #BBB;
101 } 109 }
102 } 110 }
  111 +
  112 +.dash-project-access-icon {
  113 + float: left;
  114 + margin-right: 3px;
  115 + color: #999;
  116 + margin-bottom: 10px;
  117 + width: 16px;
  118 +}
app/assets/stylesheets/sections/editor.scss
@@ -34,15 +34,4 @@ @@ -34,15 +34,4 @@
34 margin: 5px 8px 0 8px; 34 margin: 5px 8px 0 8px;
35 } 35 }
36 } 36 }
37 - .commit_message-group {  
38 - margin-top: 20px;  
39 -  
40 - label {  
41 - font-size: 16px;  
42 - line-height: 20px;  
43 - }  
44 - textarea {  
45 - @extend .span8;  
46 - }  
47 - }  
48 } 37 }
app/assets/stylesheets/sections/events.scss
@@ -47,7 +47,7 @@ @@ -47,7 +47,7 @@
47 .event-title { 47 .event-title {
48 color: #333; 48 color: #333;
49 font-weight: normal; 49 font-weight: normal;
50 - font-size: 15px; 50 + font-size: 14px;
51 .author_name { 51 .author_name {
52 color: #333; 52 color: #333;
53 } 53 }
@@ -60,14 +60,14 @@ @@ -60,14 +60,14 @@
60 color: #666; 60 color: #666;
61 } 61 }
62 .event-note { 62 .event-note {
63 - color: #555; 63 + color: #666;
64 margin-top: 5px; 64 margin-top: 5px;
65 65
66 pre { 66 pre {
67 border: none; 67 border: none;
68 background: #f9f9f9; 68 background: #f9f9f9;
69 border-radius: 0; 69 border-radius: 0;
70 - color: #555; 70 + color: #666;
71 margin: 0 20px; 71 margin: 0 20px;
72 } 72 }
73 73
@@ -75,6 +75,7 @@ @@ -75,6 +75,7 @@
75 margin-top: 4px; 75 margin-top: 4px;
76 margin-left: 0px; 76 margin-left: 0px;
77 max-width: 200px; 77 max-width: 200px;
  78 + float: none;
78 } 79 }
79 80
80 p:last-child { 81 p:last-child {
@@ -112,6 +113,7 @@ @@ -112,6 +113,7 @@
112 &.commit { 113 &.commit {
113 background: transparent; 114 background: transparent;
114 padding: 3px; 115 padding: 3px;
  116 + padding-left: 0;
115 border: none; 117 border: none;
116 color: #666; 118 color: #666;
117 .commit-row-title { 119 .commit-row-title {
@@ -121,6 +123,7 @@ @@ -121,6 +123,7 @@
121 &.commits-stat { 123 &.commits-stat {
122 display: block; 124 display: block;
123 padding: 3px; 125 padding: 3px;
  126 + padding-left: 0;
124 127
125 &:hover { 128 &:hover {
126 background: none; 129 background: none;
@@ -142,19 +145,19 @@ @@ -142,19 +145,19 @@
142 .filter_icon { 145 .filter_icon {
143 a { 146 a {
144 text-align:center; 147 text-align:center;
145 - border-left: 3px solid $primary_color;  
146 - background: #f9f9f9; 148 + background: #EEE;
147 margin-bottom: 10px; 149 margin-bottom: 10px;
148 float: left; 150 float: left;
149 - padding: 9px 7px; 151 + padding: 9px 6px;
150 font-size: 18px; 152 font-size: 18px;
151 - width: 26px; 153 + width: 40px;
  154 + @include border-radius(3px);
152 } 155 }
153 156
154 &.inactive { 157 &.inactive {
155 a { 158 a {
156 color: #DDD; 159 color: #DDD;
157 - border-left: 3px solid #EEE; 160 + background: #f9f9f9;
158 } 161 }
159 } 162 }
160 } 163 }
app/assets/stylesheets/sections/header.scss
@@ -4,17 +4,24 @@ @@ -4,17 +4,24 @@
4 */ 4 */
5 header { 5 header {
6 &.navbar-gitlab { 6 &.navbar-gitlab {
  7 + margin-bottom: 0;
  8 + min-height: 40px;
  9 +
7 .navbar-inner { 10 .navbar-inner {
8 - height: 40px;  
9 - padding: 3px;  
10 background: #F1F1F1; 11 background: #F1F1F1;
  12 + border-bottom: 1px solid #DDD;
11 filter: none; 13 filter: none;
12 14
13 .nav > li > a { 15 .nav > li > a {
14 color: $style_color; 16 color: $style_color;
15 text-shadow: 0 1px 0 #fff; 17 text-shadow: 0 1px 0 #fff;
16 font-size: 14px; 18 font-size: 14px;
17 - padding: 10px; 19 + line-height: 32px;
  20 + padding: 6px 10px;
  21 +
  22 + &:hover {
  23 + background: none;
  24 + }
18 } 25 }
19 26
20 /** NAV block with links and profile **/ 27 /** NAV block with links and profile **/
@@ -22,6 +29,59 @@ header { @@ -22,6 +29,59 @@ header {
22 float: right; 29 float: right;
23 margin-right: 0; 30 margin-right: 0;
24 } 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 + @media (max-width: $screen-xs-max) {
  50 + border-width: 0;
  51 + font-size: 18px;
  52 +
  53 + .app_logo { margin-left: -15px; }
  54 + .project_name {
  55 + display: inline-block;
  56 + overflow: hidden;
  57 + text-overflow: ellipsis;
  58 + vertical-align: top;
  59 + white-space: nowrap;
  60 + max-width: 70%;
  61 + }
  62 +
  63 + .navbar-collapse {
  64 + padding-right: 0;
  65 + padding-left: 0;
  66 + }
  67 +
  68 + .navbar-nav {
  69 + margin: 5px 0;
  70 +
  71 + .visible-xs, .visable-sm {
  72 + display: table-cell !important;
  73 + }
  74 + }
  75 +
  76 + li {
  77 + display: table-cell;
  78 + width: 1%;
  79 +
  80 + a {
  81 + text-align: center;
  82 + font-size: 18px !important;
  83 + }
  84 + }
25 } 85 }
26 } 86 }
27 87
@@ -35,9 +95,6 @@ header { @@ -35,9 +95,6 @@ header {
35 .app_logo { 95 .app_logo {
36 float: left; 96 float: left;
37 margin-right: 9px; 97 margin-right: 9px;
38 - position: relative;  
39 - top: -5px;  
40 - padding-top: 5px;  
41 98
42 a { 99 a {
43 float: left; 100 float: left;
@@ -46,10 +103,10 @@ header { @@ -46,10 +103,10 @@ header {
46 103
47 h1 { 104 h1 {
48 margin: 0; 105 margin: 0;
49 - background: url('logo-black.png') no-repeat center 1px;  
50 - background-size: 38px; 106 + background: url('logo-black.png') no-repeat center center;
  107 + background-size: 32px;
51 float: left; 108 float: left;
52 - height: 40px; 109 + height: 46px;
53 width: 40px; 110 width: 40px;
54 @include header-font; 111 @include header-font;
55 text-indent: -9999px; 112 text-indent: -9999px;
@@ -75,7 +132,7 @@ header { @@ -75,7 +132,7 @@ header {
75 132
76 .profile-pic { 133 .profile-pic {
77 position: relative; 134 position: relative;
78 - top: -4px; 135 + top: -1px;
79 img { 136 img {
80 width: 26px; 137 width: 26px;
81 height: 26px; 138 height: 26px;
@@ -91,21 +148,25 @@ header { @@ -91,21 +148,25 @@ header {
91 .search { 148 .search {
92 margin-right: 10px; 149 margin-right: 10px;
93 margin-left: 10px; 150 margin-left: 10px;
  151 + margin-top: 8px;
  152 +
  153 + form {
  154 + margin: 0;
  155 + padding: 0;
  156 + }
94 157
95 .search-input { 158 .search-input {
96 - @extend .span3;  
97 background-image: url("icon-search.png"); 159 background-image: url("icon-search.png");
98 background-repeat: no-repeat; 160 background-repeat: no-repeat;
99 background-position: 10px; 161 background-position: 10px;
  162 + height: inherit;
  163 + padding: 4px 6px;
100 padding-left: 25px; 164 padding-left: 25px;
101 font-size: 13px; 165 font-size: 13px;
102 @include border-radius(3px); 166 @include border-radius(3px);
103 border: 1px solid #c6c6c6; 167 border: 1px solid #c6c6c6;
104 box-shadow: none; 168 box-shadow: none;
105 @include transition(all 0.15s ease-in 0s); 169 @include transition(all 0.15s ease-in 0s);
106 - &:focus {  
107 - @extend .span4;  
108 - }  
109 } 170 }
110 } 171 }
111 172
@@ -120,6 +181,8 @@ header { @@ -120,6 +181,8 @@ header {
120 background: #708090; 181 background: #708090;
121 border-bottom: 1px solid #AAA; 182 border-bottom: 1px solid #AAA;
122 183
  184 + .navbar-toggle { color: #fff; }
  185 +
123 .nav > li > a { 186 .nav > li > a {
124 color: #AAA; 187 color: #AAA;
125 text-shadow: 0 1px 0 #444; 188 text-shadow: 0 1px 0 #444;
@@ -133,6 +196,8 @@ header { @@ -133,6 +196,8 @@ header {
133 196
134 .turbolink-spinner { 197 .turbolink-spinner {
135 color: #FFF; 198 color: #FFF;
  199 + font-size: 22px;
  200 + margin-right: 10px;
136 } 201 }
137 202
138 .search { 203 .search {
@@ -152,8 +217,8 @@ header { @@ -152,8 +217,8 @@ header {
152 .app_logo { 217 .app_logo {
153 a { 218 a {
154 h1 { 219 h1 {
155 - background: url('logo-white.png') no-repeat center 1px;  
156 - background-size: 38px; 220 + background: url('logo-white.png') no-repeat center center;
  221 + background-size: 32px;
157 color: #fff; 222 color: #fff;
158 text-shadow: 0 1px 1px #444; 223 text-shadow: 0 1px 1px #444;
159 } 224 }
@@ -181,12 +246,26 @@ header { @@ -181,12 +246,26 @@ header {
181 .separator { 246 .separator {
182 float: left; 247 float: left;
183 height: 46px; 248 height: 46px;
184 - width: 1px; 249 + width: 2px;
185 background: white; 250 background: white;
186 border-left: 1px solid #DDD; 251 border-left: 1px solid #DDD;
187 - margin-top: -3px;  
188 margin-left: 10px; 252 margin-left: 10px;
189 margin-right: 10px; 253 margin-right: 10px;
190 } 254 }
191 } 255 }
192 256
  257 +.search .search-input {
  258 + width: 300px;
  259 + &:focus {
  260 + width: 400px;
  261 + }
  262 +}
  263 +
  264 +@media (max-width: 1200px) {
  265 + .search .search-input {
  266 + width: 200px;
  267 + &:focus {
  268 + width: 300px;
  269 + }
  270 + }
  271 +}
app/assets/stylesheets/sections/issues.scss
@@ -60,7 +60,6 @@ input.check_all_issues { @@ -60,7 +60,6 @@ input.check_all_issues {
60 .btn.close_issue { 60 .btn.close_issue {
61 color: #B94A48; 61 color: #B94A48;
62 font-weight: bold; 62 font-weight: bold;
63 - @include shade;  
64 &:hover { 63 &:hover {
65 color: #B94A48; 64 color: #B94A48;
66 } 65 }
@@ -68,7 +67,6 @@ input.check_all_issues { @@ -68,7 +67,6 @@ input.check_all_issues {
68 .btn.reopen_issue { 67 .btn.reopen_issue {
69 color: #468847; 68 color: #468847;
70 font-weight: bold; 69 font-weight: bold;
71 - @include shade;  
72 &:hover { 70 &:hover {
73 color: #468847; 71 color: #468847;
74 } 72 }
@@ -77,8 +75,8 @@ input.check_all_issues { @@ -77,8 +75,8 @@ input.check_all_issues {
77 @media (min-width: 800px) { .issues_filters select { width: 160px; } } 75 @media (min-width: 800px) { .issues_filters select { width: 160px; } }
78 @media (min-width: 1200px) { .issues_filters select { width: 220px; } } 76 @media (min-width: 1200px) { .issues_filters select { width: 220px; } }
79 77
80 -@media (min-width: 800px) { .issues_bulk_update select { width: 120px; } }  
81 -@media (min-width: 1200px) { .issues_bulk_update select { width: 160px; } } 78 +@media (min-width: 800px) { .issues_bulk_update .select2-container { min-width: 120px; } }
  79 +@media (min-width: 1200px) { .issues_bulk_update .select2-container { min-width: 160px; } }
82 80
83 .issues-holder { 81 .issues-holder {
84 .issues_filters { 82 .issues_filters {
@@ -103,3 +101,27 @@ input.check_all_issues { @@ -103,3 +101,27 @@ input.check_all_issues {
103 .participants { 101 .participants {
104 margin-bottom: 10px; 102 margin-bottom: 10px;
105 } 103 }
  104 +
  105 +.issues_bulk_update {
  106 + .select2-container {
  107 + text-shadow: none;
  108 + }
  109 +}
  110 +
  111 +.issue-search-form {
  112 + margin: 0;
  113 + height: 24px;
  114 +
  115 + .issue_search {
  116 + border: 1px solid #DDD !important;
  117 + background-color: #f4f4f4;
  118 + }
  119 +}
  120 +
  121 +.issue-show-labels .label {
  122 + padding: 6px 10px;
  123 +}
  124 +
  125 +form.edit-issue {
  126 + margin: 0;
  127 +}
app/assets/stylesheets/sections/login.scss
1 /* Login Page */ 1 /* Login Page */
2 -body.login-page{  
3 - .container > .content {  
4 - padding-top: 20px; 2 +.login-page {
  3 + h1 {
  4 + font-size: 3em;
  5 + font-weight: 200;
5 } 6 }
6 -}  
7 -  
8 -.login-box{  
9 - width: 304px;  
10 - position: relative;  
11 - @include border-radius(5px);  
12 - margin: auto;  
13 - padding: 20px;  
14 - background: white;  
15 -}  
16 -  
17 -.login-box .login-logo{  
18 - margin: 10px 0 30px 0;  
19 - display: block;  
20 -}  
21 -  
22 -.login-box input.text{background-color: #f1f1f1; font-size: 16px; @include border-radius(0); padding: 14px 10px; width: 280px}  
23 -  
24 -.login-box input.text.top{  
25 - @include border-radius(5px 5px 0 0);  
26 - margin-bottom: 0px;  
27 -}  
28 7
29 -.login-box input.text.bottom{  
30 - @include border-radius(0 0 5px 5px);  
31 - border-top: 0;  
32 - margin-bottom: 20px;  
33 -} 8 + .login-box{
  9 + max-width: 304px;
  10 + position: relative;
  11 + @include border-radius(5px);
  12 + margin: auto;
  13 + background: white;
  14 + }
34 15
35 -.login-box input.text.middle{  
36 - border-top: 0;  
37 - margin-bottom:0px;  
38 -} 16 + .login-logo{
  17 + margin: 10px 0 30px 0;
  18 + display: block;
  19 + }
39 20
40 -.login-box a.forgot{float: right; padding-top: 6px} 21 + .form-control {
  22 + background-color: #f1f1f1;
  23 + font-size: 16px;
  24 + padding: 14px 10px;
  25 + width: 100%;
  26 + height: auto;
  27 +
  28 + &.top {
  29 + @include border-radius(5px 5px 0 0);
  30 + margin-bottom: 0px;
  31 + }
  32 +
  33 + &.bottom {
  34 + @include border-radius(0 0 5px 5px);
  35 + border-top: 0;
  36 + margin-bottom: 20px;
  37 + }
  38 +
  39 + &.middle {
  40 + border-top: 0;
  41 + margin-bottom:0px;
  42 + @include border-radius(0);
  43 + }
  44 + }
41 45
42 -.remember_me {  
43 - text-align: left; 46 + .login-box a.forgot {
  47 + float: right;
  48 + padding-top: 6px
  49 + }
44 50
45 - input {  
46 - margin: 2px; 51 + .devise-errors {
  52 + h2 {
  53 + font-size: 14px;
  54 + color: #a00;
  55 + }
47 } 56 }
48 } 57 }
app/assets/stylesheets/sections/merge_requests.scss
@@ -4,10 +4,6 @@ @@ -4,10 +4,6 @@
4 * 4 *
5 */ 5 */
6 .automerge_widget { 6 .automerge_widget {
7 - &.can_be_merged {  
8 - background: #DFF0D8;  
9 - }  
10 -  
11 form { 7 form {
12 margin-bottom: 0; 8 margin-bottom: 0;
13 .clearfix { 9 .clearfix {
@@ -15,32 +11,12 @@ @@ -15,32 +11,12 @@
15 } 11 }
16 } 12 }
17 13
18 - .accept_group {  
19 - float: left;  
20 - border: 1px solid #ADA;  
21 - padding: 2px;  
22 - @include border-radius(5px);  
23 - background: #CEB;  
24 -  
25 - .accept_merge_request {  
26 - font-size: 13px;  
27 - float: left;  
28 - }  
29 - .remove_branch_holder {  
30 - margin-left: 20px;  
31 - margin-right: 10px;  
32 - float: left;  
33 - } 14 + .accept-group {
34 label { 15 label {
35 - color: #444;  
36 - text-align: left 16 + margin: 5px;
  17 + margin-left: 20px;
37 } 18 }
38 } 19 }
39 -  
40 -  
41 - .how_to_merge_link {  
42 - @extend .primary;  
43 - }  
44 } 20 }
45 21
46 .merge-request .nav-tabs{ 22 .merge-request .nav-tabs{
@@ -53,11 +29,6 @@ @@ -53,11 +29,6 @@
53 } 29 }
54 } 30 }
55 31
56 -.merge-in-progress {  
57 - @extend .padded;  
58 - @extend .append-bottom-10;  
59 -}  
60 -  
61 .mr_source_commit, 32 .mr_source_commit,
62 .mr_target_commit { 33 .mr_target_commit {
63 .commit { 34 .commit {
@@ -110,9 +81,11 @@ @@ -110,9 +81,11 @@
110 81
111 .merge-request-angle { 82 .merge-request-angle {
112 text-align: center; 83 text-align: center;
113 - margin: 0; 84 + margin: 0 auto;
  85 + font-size: 2em;
  86 + line-height: 1.1;
114 } 87 }
115 88
116 .merge-request-form-info { 89 .merge-request-form-info {
117 - padding: 15px 0; 90 + padding-top: 15px;
118 } 91 }
app/assets/stylesheets/sections/nav.scss
@@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
6 border-bottom: 1px solid #E1E1E1; 6 border-bottom: 1px solid #E1E1E1;
7 7
8 ul { 8 ul {
  9 + padding: 0;
9 margin: auto; 10 margin: auto;
10 height: 40px; 11 height: 40px;
11 overflow: hidden; 12 overflow: hidden;
@@ -34,7 +35,7 @@ @@ -34,7 +35,7 @@
34 width: 1%; 35 width: 1%;
35 &.active { 36 &.active {
36 a { 37 a {
37 - color: $style_color; 38 + color: #333;
38 font-weight: bolder; 39 font-weight: bolder;
39 40
40 &:after { 41 &:after {
@@ -45,7 +46,7 @@ @@ -45,7 +46,7 @@
45 left: 50%; 46 left: 50%;
46 width: 0; 47 width: 0;
47 height: 0; 48 height: 0;
48 - border-color: transparent transparent #777 transparent; 49 + border-color: transparent transparent #333 transparent;
49 border-style: solid; 50 border-style: solid;
50 border-width: 6px; 51 border-width: 6px;
51 margin-left: -6px; 52 margin-left: -6px;
@@ -82,4 +83,38 @@ @@ -82,4 +83,38 @@
82 padding-top: 2px; 83 padding-top: 2px;
83 } 84 }
84 } 85 }
  86 +
  87 + @media (max-width: $screen-xs-max) {
  88 + font-size: 18px;
  89 + margin: 0;
  90 +
  91 + max-height: none;
  92 +
  93 + &, .container {
  94 + padding: 0;
  95 + border-top: 0;
  96 + }
  97 +
  98 + ul {
  99 + height: auto;
  100 +
  101 + li {
  102 + display: list-item;
  103 + width: auto;
  104 + padding: 5px 0;
  105 +
  106 + &.active {
  107 + background-color: $primary_color;
  108 +
  109 + a {
  110 + color: #fff;
  111 + font-weight: normal;
  112 + text-shadow: none;
  113 +
  114 + &:after { display: none; }
  115 + }
  116 + }
  117 + }
  118 + }
  119 + }
85 } 120 }
app/assets/stylesheets/sections/notes.scss
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 * Notes 2 * Notes
3 */ 3 */
4 4
5 -@-webkit-keyframes target-note { 5 +@-webkit-keyframes targe3-note {
6 from { background:#fffff0; } 6 from { background:#fffff0; }
7 50% { background:#ffffd3; } 7 50% { background:#ffffd3; }
8 to { background:#fffff0; } 8 to { background:#fffff0; }
@@ -92,10 +92,6 @@ ul.notes { @@ -92,10 +92,6 @@ ul.notes {
92 .note-body { 92 .note-body {
93 @include md-typography; 93 @include md-typography;
94 margin-left: 45px; 94 margin-left: 45px;
95 -  
96 - .highlight {  
97 - @include border-radius(4px);  
98 - }  
99 } 95 }
100 .note-header { 96 .note-header {
101 padding-bottom: 5px; 97 padding-bottom: 5px;
@@ -119,9 +115,9 @@ ul.notes { @@ -119,9 +115,9 @@ ul.notes {
119 } 115 }
120 116
121 .file .notes_holder { 117 .file .notes_holder {
122 - font-family: $sansFontFamily;  
123 font-size: 13px; 118 font-size: 13px;
124 line-height: 18px; 119 line-height: 18px;
  120 + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
125 121
126 td { 122 td {
127 border: 1px solid #ddd; 123 border: 1px solid #ddd;
@@ -130,9 +126,15 @@ ul.notes { @@ -130,9 +126,15 @@ ul.notes {
130 &.notes_line { 126 &.notes_line {
131 text-align: center; 127 text-align: center;
132 padding: 10px 0; 128 padding: 10px 0;
  129 + background: #eee;
  130 + }
  131 + &.notes_line2 {
  132 + text-align: center;
  133 + padding: 10px 0;
  134 + border-left: 1px solid #ddd !important;
133 } 135 }
134 &.notes_content { 136 &.notes_content {
135 - background-color: $white; 137 + background-color: #fff;
136 border-width: 1px 0; 138 border-width: 1px 0;
137 padding-top: 0; 139 padding-top: 0;
138 140
@@ -251,12 +253,12 @@ ul.notes { @@ -251,12 +253,12 @@ ul.notes {
251 .file, 253 .file,
252 .discussion { 254 .discussion {
253 .new_note { 255 .new_note {
254 - margin: 8px 5px 8px 0; 256 + margin: 0;
  257 + border: none;
255 } 258 }
256 } 259 }
257 .new_note { 260 .new_note {
258 display: none; 261 display: none;
259 -  
260 .buttons { 262 .buttons {
261 float: left; 263 float: left;
262 margin-top: 8px; 264 margin-top: 8px;
@@ -270,10 +272,9 @@ ul.notes { @@ -270,10 +272,9 @@ ul.notes {
270 272
271 // preview/edit buttons 273 // preview/edit buttons
272 > a { 274 > a {
273 - font-size: 24px;  
274 - padding: 4px;  
275 position: absolute; 275 position: absolute;
276 - right: 10px; 276 + right: 5px;
  277 + bottom: -60px;
277 } 278 }
278 .note_preview { 279 .note_preview {
279 background: #f5f5f5; 280 background: #f5f5f5;
@@ -287,7 +288,7 @@ ul.notes { @@ -287,7 +288,7 @@ ul.notes {
287 box-shadow: none; 288 box-shadow: none;
288 font-size: 14px; 289 font-size: 14px;
289 height: 80px; 290 height: 80px;
290 - width: 98.6%; 291 + width: 100%;
291 } 292 }
292 } 293 }
293 } 294 }
@@ -298,7 +299,7 @@ ul.notes { @@ -298,7 +299,7 @@ ul.notes {
298 } 299 }
299 300
300 .note-image-attach { 301 .note-image-attach {
301 - @extend .span4; 302 + @extend .col-md-4;
302 @extend .thumbnail; 303 @extend .thumbnail;
303 margin-left: 45px; 304 margin-left: 45px;
304 } 305 }
@@ -306,10 +307,8 @@ ul.notes { @@ -306,10 +307,8 @@ ul.notes {
306 307
307 .common-note-form { 308 .common-note-form {
308 margin: 0; 309 margin: 0;
309 - height: 140px;  
310 background: #F9F9F9; 310 background: #F9F9F9;
311 padding: 3px; 311 padding: 3px;
312 - padding-bottom: 25px;  
313 border: 1px solid #DDD; 312 border: 1px solid #DDD;
314 } 313 }
315 314
@@ -320,7 +319,7 @@ ul.notes { @@ -320,7 +319,7 @@ ul.notes {
320 padding: 0 5px; 319 padding: 0 5px;
321 320
322 .note-form-option { 321 .note-form-option {
323 - margin-top: 10px; 322 + margin-top: 8px;
324 margin-left: 30px; 323 margin-left: 30px;
325 @extend .pull-left; 324 @extend .pull-left;
326 } 325 }
@@ -338,7 +337,7 @@ ul.notes { @@ -338,7 +337,7 @@ ul.notes {
338 box-shadow: none; 337 box-shadow: none;
339 font-size: 14px; 338 font-size: 14px;
340 height: 80px; 339 height: 80px;
341 - width: 98.6%; 340 + width: 100%;
342 } 341 }
343 342
344 .form-actions { 343 .form-actions {
@@ -358,3 +357,7 @@ ul.notes { @@ -358,3 +357,7 @@ ul.notes {
358 .js-note-attachment-delete { 357 .js-note-attachment-delete {
359 display: none; 358 display: none;
360 } 359 }
  360 +
  361 +.parallel-comment {
  362 + padding: 6px;
  363 +}
app/assets/stylesheets/sections/profile.scss
1 .update-notifications { 1 .update-notifications {
2 - margin-bottom: 0; 2 + .radio-inline {
  3 + margin-right: 9%;
  4 + }
  5 +}
  6 +
  7 +.account-page {
  8 + fieldset {
  9 + margin-bottom: 15px;
  10 + border-bottom: 1px dashed #ddd;
  11 + padding-bottom: 15px;
  12 +
  13 + &:last-child {
  14 + border: none;
  15 + }
  16 +
  17 + legend {
  18 + border: none;
  19 + margin-bottom: 10px;
  20 + }
  21 + }
  22 +}
  23 +
  24 +.oauth_select_holder {
  25 + img {
  26 + padding: 2px;
  27 + margin-right: 10px;
  28 + }
  29 + .active {
  30 + img {
  31 + border: 1px solid #4BD;
  32 + background: $hover;
  33 + @include border-radius(5px);
  34 + }
  35 + }
  36 +}
  37 +
  38 +.btn-build-token {
  39 + float: left;
  40 + padding: 6px 20px;
  41 + margin-right: 12px;
  42 +}
  43 +
  44 +.profile-avatar-form-option {
  45 + hr {
  46 + margin: 10px 0;
  47 + }
  48 +}
  49 +
  50 +.user-show-username {
  51 + font-weight: 200;
  52 + color: #666;
  53 +}
  54 +
  55 +/*
  56 + * Appearance settings
  57 + *
  58 + */
  59 +.themes_opts {
  60 + label {
  61 + margin-right: 20px;
  62 + text-align: center;
  63 +
  64 + .prev {
  65 + @extend .thumbnail;
  66 + height: 30px;
  67 + width: 175px;
  68 + margin-bottom: 10px;
  69 +
  70 + &.classic {
  71 + background: #31363e;
  72 + }
  73 +
  74 + &.default {
  75 + background: #f1f1f1;
  76 + }
  77 +
  78 + &.modern {
  79 + background: #345;
  80 + }
  81 +
  82 + &.gray {
  83 + background: #373737;
  84 + }
  85 +
  86 + &.violet {
  87 + background: #547;
  88 + }
  89 + }
  90 + }
  91 +}
  92 +
  93 +.code_highlight_opts {
  94 + margin-top: 10px;
  95 +
3 label { 96 label {
4 - margin-bottom: 0; 97 + margin-right: 20px;
  98 + text-align: center;
  99 +
  100 + .prev {
  101 + @extend .thumbnail;
  102 + height: 151px;
  103 + width: 220px;
  104 + margin-bottom: 10px;
  105 + }
5 } 106 }
6 } 107 }
app/assets/stylesheets/sections/projects.scss
@@ -14,43 +14,118 @@ @@ -14,43 +14,118 @@
14 } 14 }
15 } 15 }
16 16
17 -.project_clone_panel {  
18 - @include border-radius(4px);  
19 - @include bg-gray-gradient;  
20 - padding: 4px 7px;  
21 - border: 1px solid #CCC;  
22 - margin-bottom: 20px; 17 +.project-home-panel {
  18 + border-bottom: 1px solid #DDD;
  19 + padding-bottom: 15px;
  20 + margin-bottom: 30px;
  21 +
  22 + &.empty-project {
  23 + border-bottom: 0px;
  24 + padding-bottom: 15px;
  25 + margin-bottom: 0px;
  26 + }
23 27
24 - .btn {  
25 - padding: 4px 12px; 28 + .project-home-title {
  29 + font-size: 18px;
  30 + color: #444;
  31 + margin: 0;
  32 + line-height: 32px;
  33 + }
  34 + .project-home-dropdown {
  35 + margin-left: 10px;
  36 + float: right;
  37 + }
  38 + .project-home-extra {
  39 + margin-top: 15px;
  40 +
  41 + .project-home-desc {
  42 + float: left;
  43 + color: #777;
  44 + margin-bottom: 10px;
  45 + }
  46 +
  47 + .project-home-links {
  48 + float: right;
  49 + a {
  50 + margin-left: 10px;
  51 + font-weight: 500;
  52 + }
  53 + }
  54 + }
  55 +
  56 + .visibility-level-label {
  57 + font-size: 17px;
  58 + background: #f1f1f1;
  59 + border-radius: 4px;
  60 + color: #888;
  61 + position: absolute;
  62 + margin-left: -55px;
  63 + text-shadow: 0 1px 1px #FFF;
  64 + width: 40px;
  65 + text-align: center;
  66 + padding: 6px;
  67 +
  68 + i {
  69 + color: inherit;
  70 + }
26 } 71 }
27 } 72 }
28 73
29 -.project_clone_holder {  
30 - input[type="text"] {  
31 - @extend .monospace;  
32 - border: 1px solid #BBB; 74 +.git-clone-holder {
  75 + .project-home-dropdown + & {
  76 + margin-right: 45px;
  77 + }
  78 +
  79 + .btn,
  80 + .form-control {
  81 + border: 1px solid #E1E1E1;
33 box-shadow: none; 82 box-shadow: none;
34 - margin-left: -1px;  
35 - background: #FFF; 83 + padding: 6px 9px;
36 } 84 }
37 -}  
38 85
39 -.project-public-holder {  
40 - .help-inline {  
41 - padding-top: 7px; 86 + .btn {
  87 + background: none;
  88 + color: #29b;
  89 +
  90 + &.active {
  91 + color: #333;
  92 + font-weight: bold;
  93 + }
42 } 94 }
43 -}  
44 95
45 -.save-project-loader {  
46 - img {  
47 - margin-top: 50px;  
48 - margin-bottom: 50px; 96 + .form-control {
  97 + cursor: auto;
  98 + @extend .monospace;
  99 + background: #FAFAFA;
  100 + width: 100%;
49 } 101 }
50 - h3 {  
51 - @extend .page-title; 102 +}
  103 +
  104 +.project-visibility-level-holder {
  105 + .radio {
  106 + margin-bottom: 10px;
  107 +
  108 + i {
  109 + margin: 0 3px;
  110 + font-size: 20px;
  111 + }
  112 +
  113 + .option-title {
  114 + font-weight: bold;
  115 + display: inline-block;
  116 + }
  117 +
  118 + .option-descr {
  119 + margin-left: 24px;
  120 + color: #666;
  121 + }
52 } 122 }
  123 +}
53 124
  125 +.save-project-loader {
  126 + margin-top: 50px;
  127 + margin-bottom: 50px;
  128 + color: #555;
54 } 129 }
55 130
56 ul.nav.nav-projects-tabs { 131 ul.nav.nav-projects-tabs {
@@ -79,18 +154,19 @@ ul.nav.nav-projects-tabs { @@ -79,18 +154,19 @@ ul.nav.nav-projects-tabs {
79 margin: 0px; 154 margin: 0px;
80 } 155 }
81 156
82 -.my-projects { 157 +.my-projects,
  158 +.public-projects {
83 li { 159 li {
84 - .project-title {  
85 - font-size: 14px;  
86 - }  
87 -  
88 .project-info { 160 .project-info {
89 margin-bottom: 10px; 161 margin-bottom: 10px;
90 } 162 }
91 163
92 - .access-icon i { 164 + .access-icon {
93 color: #AAA; 165 color: #AAA;
  166 + margin-left: 10px;
  167 + i {
  168 + color: #AAA;
  169 + }
94 } 170 }
95 } 171 }
96 } 172 }
@@ -115,3 +191,44 @@ ul.nav.nav-projects-tabs { @@ -115,3 +191,44 @@ ul.nav.nav-projects-tabs {
115 color: #777; 191 color: #777;
116 } 192 }
117 } 193 }
  194 +
  195 +.project-side {
  196 + .btn-block {
  197 + background-image: none;
  198 + .btn,
  199 + &.btn,
  200 + &.btn-group ul.dropdown-menu {
  201 + background-color: #F1f1f1;
  202 + border-color: #EEE;
  203 + &:hover {
  204 + background-color: #eee;
  205 + border-color: #DDD;
  206 + }
  207 + }
  208 + &.btn-group-justified {
  209 + .btn {
  210 + width: 100%;
  211 + }
  212 + .dropdown-toggle {
  213 + width: 26px;
  214 + }
  215 + }
  216 + ul {
  217 + width: 100%;
  218 + }
  219 + }
  220 + .project-fork-icon {
  221 + float: left;
  222 + font-size: 26px;
  223 + margin-right: 10px;
  224 + line-height: 1.5;
  225 + }
  226 +}
  227 +
  228 +.transfer-project .select2-container {
  229 + min-width: 200px;
  230 +}
  231 +
  232 +.deploy-project-label {
  233 + margin: 1px;
  234 +}