Commit 319f355aeda3fa67c1bc4451c4db5787090ab8af

Authored by GitLab
2 parents b6bd4856 f99ee99f

merge with upstream master

Showing 944 changed files with 19322 additions and 10422 deletions   Show diff stats

Too many changes.

To preserve performance only 100 of 944 files displayed.

.gitignore
... ... @@ -34,3 +34,4 @@ doc/code/*
34 34 .secret
35 35 *.log
36 36 public/uploads.*
  37 +public/assets/
... ...
.travis.yml
1 1 language: ruby
2 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 10 before_install:
5 11 - sudo apt-get install libicu-dev -y
6   - - gem install charlock_holmes -v="0.6.9"
7 12 branches:
8 13 only:
9 14 - 'master'
... ... @@ -11,8 +16,12 @@ rvm:
11 16 - 2.0.0
12 17 services:
13 18 - mysql
14   - - postgresql
  19 + - redis-server
15 20 before_script:
16 21 - "cp config/database.yml.$DB config/database.yml"
17 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
... ...
CHANGELOG
  1 +v 6.6.0
  2 + - Permissions: Developer now can manage issue tracker (modify any issue)
  3 + - Improve Code Compare page performance
  4 +
  5 +v 6.5.1
  6 + - Fix branch selectbox when create merge request from fork
  7 +
  8 +v 6.5.0
  9 + - Dropdown menus on issue#show page for assignee and milestone (Jason Blanchard)
  10 + - Add color custimization and previewing to broadcast messages
  11 + - Fixed notes anchors
  12 + - Load new comments in issues dynamically
  13 + - Added sort options to Public page
  14 + - New filters (assigned/authored/all) for Dashboard#issues/merge_requests (sponsored by Say Media)
  15 + - Add project visibility icons to dashboard
  16 + - Enable secure cookies if https used
  17 + - Protect users/confirmation with rack_attack
  18 + - Default HTTP headers to protect against MIME-sniffing, force https if enabled
  19 + - Bootstrap 3 with responsive UI
  20 + - New repository download formats: tar.bz2, zip, tar (Jason Hollingsworth)
  21 + - Restyled accept widgets for MR
  22 + - SCSS refactored
  23 + - Use jquery timeago plugin
  24 + - Fix 500 error for rdoc files
  25 + - Ability to customize merge commit message (sponsored by Say Media)
  26 + - Search autocomplete via ajax
  27 + - Add website url to user profile
  28 + - Files API supports base64 encoded content (sponsored by O'Reilly Media)
  29 + - Added support for Go's repository retrieval (Bruno Albuquerque)
  30 +
  31 +v6.4.3
  32 + - Don't use unicorn worker killer if PhusionPassenger is defined
  33 +
  34 +v6.4.2
  35 + - Fixed wrong behaviour of script/upgrade.rb
  36 +
  37 +v6.4.1
  38 + - Fixed bug with repository rename
  39 + - Fixed bug with project transfer
  40 +
  41 +v 6.4.0
  42 + - Added sorting to project issues page (Jason Blanchard)
  43 + - Assembla integration (Carlos Paramio)
  44 + - Fixed another 500 error with submodules
  45 + - UI: More compact issues page
  46 + - Minimal password length increased to 8 symbols
  47 + - Side-by-side diff view (Steven Thonus)
  48 + - Internal projects (Jason Hollingsworth)
  49 + - Allow removal of avatar (Drew Blessing)
  50 + - Project web hooks now support issues and merge request events
  51 + - Visiting project page while not logged in will redirect to sign-in instead of 404 (Jason Hollingsworth)
  52 + - Expire event cache on avatar creation/removal (Drew Blessing)
  53 + - Archiving old projects (Steven Thonus)
  54 + - Rails 4
  55 + - Add time ago tooltips to show actual date/time
  56 + - UI: Fixed UI for admin system hooks
  57 + - Ruby script for easier GitLab upgrade
  58 + - Do not remove Merge requests if fork project was removed
  59 + - Improve sign-in/signup UX
  60 + - Add resend confirmation link to sign-in page
  61 + - Set noreply@HOSTNAME for reply_to field in all emails
  62 + - Show GitLab API version on Admin#dashboard
  63 + - API Cross-origin resource sharing
  64 + - Show READMe link at project home page
  65 + - Show repo size for projects in Admin area
  66 +
  67 +v 6.3.0
  68 + - API for adding gitlab-ci service
  69 + - Init script now waits for pids to appear after (re)starting before reporting status (Rovanion Luckey)
  70 + - Restyle project home page
  71 + - Grammar fixes
  72 + - Show branches list (which branches contains commit) on commit page (Andrew Kumanyaev)
  73 + - Security improvements
  74 + - Added support for GitLab CI 4.0
  75 + - Fixed issue with 500 error when group did not exist
  76 + - Ability to leave project
  77 + - You can create file in repo using UI
  78 + - You can remove file from repo using UI
  79 + - API: dropped default_branch attribute from project during creation
  80 + - Project default_branch is not stored in db any more. It takes from repo now.
  81 + - Admin broadcast messages
  82 + - UI improvements
  83 + - Dont show last push widget if user removed this branch
  84 + - Fix 500 error for repos with newline in file name
  85 + - Extended html titles
  86 + - API: create/update/delete repo files
  87 + - Admin can transfer project to any namespace
  88 + - API: projects/all for admin users
  89 + - Fix recent branches order
  90 +
  91 +v 6.2.4
  92 + - Security: Cast API private_token to string (CVE-2013-4580)
  93 + - Security: Require gitlab-shell 1.7.8 (CVE-2013-4581, CVE-2013-4582, CVE-2013-4583)
  94 + - Fix for Git SSH access for LDAP users
  95 +
  96 +v 6.2.3
  97 + - Security: More protection against CVE-2013-4489
  98 + - Security: Require gitlab-shell 1.7.4 (CVE-2013-4490, CVE-2013-4546)
  99 + - Fix sidekiq rake tasks
  100 +
  101 +v 6.2.2
  102 + - Security: Update gitlab_git (CVE-2013-4489)
  103 +
  104 +v 6.2.1
  105 + - Security: Fix issue with generated passwords for new users
  106 +
1 107 v 6.2.0
2   - - Public projects are visible from the outside
  108 + - Public project pages are now visible to everyone (files, issues, wik, etc.)
  109 + THIS MEANS YOUR ISSUES AND WIKI FOR PUBLIC PROJECTS ARE PUBLICLY VISIBLE AFTER THE UPGRADE
3 110 - Add group access to permissions page
4 111 - Require current password to change one
5 112 - Group owner or admin can remove other group owners
... ... @@ -12,6 +119,13 @@ v 6.2.0
12 119 - Update logic for validates_merge_request for tree of MR (Andrew Kumanyaev)
13 120 - Rake tasks for web hooks management (Jonhnny Weslley)
14 121 - Extended User API to expose admin and can_create_group for user creation/updating (Boyan Tabakov)
  122 + - API: Remove group
  123 + - API: Remove project
  124 + - Avatar upload on profile page with a maximum of 100KB (Steven Thonus)
  125 + - Store the sessions in Redis instead of the cookie store
  126 + - Fixed relative links in markdown
  127 + - User must confirm their email if signup enabled
  128 + - User must confirm changed email
15 129  
16 130 v 6.1.0
17 131 - Project specific IDs for issues, mr, milestones
... ... @@ -32,7 +146,7 @@ v 6.1.0
32 146 - Add links to create branch/tag from project home page
33 147 - Add public-project? checkbox to new-project view
34 148 - Improved compare page. Added link to proceed into Merge Request
35   - - Send email to user when he was added to group
  149 + - Send an email to a user when they are added to group
36 150 - New landing page when you have 0 projects
37 151  
38 152 v 6.0.0
... ... @@ -75,6 +189,14 @@ v 6.0.0
75 189 - Improved MR comments logic
76 190 - Render readme file for projects in public area
77 191  
  192 +v 5.4.2
  193 + - Security: Cast API private_token to string (CVE-2013-4580)
  194 + - Security: Require gitlab-shell 1.7.8 (CVE-2013-4581, CVE-2013-4582, CVE-2013-4583)
  195 +
  196 +v 5.4.1
  197 + - Security: Fixes for CVE-2013-4489
  198 + - Security: Require gitlab-shell 1.7.4 (CVE-2013-4490, CVE-2013-4546)
  199 +
78 200 v 5.4.0
79 201 - Ability to edit own comments
80 202 - Documentation improvements
... ...
CONTRIBUTING.md
1 1 # Contribute to GitLab
2 2  
3   -This guide details how to use issues and pull requests to improve GitLab.
4   -
5   -- [Closing policy for issues and pull requests](#closing-policy-for-issues-and-pull-requests)
6   -- [Issue tracker](#issue-tracker)
7   -- [Pull requests](#pull-requests)
  3 +This guide details how contribute to GitLab.
8 4  
9 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 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 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 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 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 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 39 3. **Expected behavior:** Describe your issue in detail
36 40 4. **Observed behavior**
37 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 46 * Describe your setup (use relevant parts from `sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production`)
43 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 58 1. Create a feature branch
55 59 1. Write [tests](README.md#run-the-tests) and code
56 60 1. Add your changes to the [CHANGELOG](CHANGELOG)
57 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 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).
... ...
Gemfile
... ... @@ -8,14 +8,20 @@ def linux_only(require_as)
8 8 RUBY_PLATFORM.include?('linux') && require_as
9 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 18 # Supported DBs
14 19 gem "mysql2", group: :mysql
15 20 gem "pg", group: :postgres
16 21  
17 22 # Auth
18   -gem "devise", '~> 2.2'
  23 +gem "devise", '3.0.4'
  24 +gem "devise-async", '0.8.0'
19 25 gem 'omniauth', "~> 1.1.3"
20 26 gem 'omniauth-google-oauth2'
21 27 gem 'omniauth-twitter'
... ... @@ -23,26 +29,27 @@ gem 'omniauth-github'
23 29  
24 30 # Extracting information from a git repository
25 31 # Provide access to Gitlab::Git library
26   -gem "gitlab_git", '2.3.1'
  32 +gem "gitlab_git", '~> 5.1.0'
27 33  
28 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 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 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 43 # Language detection
41   -gem "github-linguist", require: "linguist"
  44 +gem "gitlab-linguist", "~> 3.0.0", require: "linguist"
42 45  
43 46 # API
44   -gem "grape", "~> 0.4.1"
  47 +gem "grape", "~> 0.6.1"
45 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 54 # Format dates and times
48 55 # based on human-friendly examples
... ... @@ -52,7 +59,7 @@ gem "stamp"
52 59 gem 'enumerize'
53 60  
54 61 # Pagination
55   -gem "kaminari", "~> 0.14.1"
  62 +gem "kaminari", "~> 0.15.1"
56 63  
57 64 # HAML
58 65 gem "haml-rails"
... ... @@ -71,13 +78,16 @@ gem "seed-fu"
71 78  
72 79 # Markdown to HTML
73 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 83 # Asciidoc to HTML
77 84 gem "asciidoctor"
78 85  
79 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 92 # State machine
83 93 gem "state_machine"
... ... @@ -109,7 +119,10 @@ gem "redis-rails"
109 119 gem 'tinder', '~> 1.9.2'
110 120  
111 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 127 # d3
115 128 gem "d3_rails", "~> 3.1.4"
... ... @@ -123,26 +136,23 @@ gem "sanitize"
123 136 # Protect against bruteforcing
124 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 157 group :development do
148 158 gem "annotate", "~> 2.6.0.beta2"
... ... @@ -165,7 +175,7 @@ end
165 175  
166 176 group :development, :test do
167 177 gem 'coveralls', require: false
168   - gem 'rails-dev-tweaks'
  178 + # gem 'rails-dev-tweaks'
169 179 gem 'spinach-rails'
170 180 gem "rspec-rails"
171 181 gem "capybara"
... ... @@ -194,7 +204,7 @@ group :development, :test do
194 204 gem 'poltergeist', '~> 1.4.1'
195 205  
196 206 gem 'spork', '~> 1.0rc'
197   - gem 'jasmine'
  207 + gem 'jasmine', '2.0.0.rc5'
198 208 end
199 209  
200 210 group :test do
... ...
Gemfile.lock
  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 8 GEM
2 9 remote: https://rubygems.org/
3 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 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 39 acts-as-taggable-on (2.4.1)
32 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 43 activerecord (>= 2.3.0)
36 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 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 53 better_errors (1.0.1)
43 54 coderay (>= 1.0.0)
44 55 erubis (>= 2.6.6)
45 56 binding_of_caller (0.7.2)
46 57 debug_inspector (>= 0.0.1)
47   - bootstrap-sass (2.3.2.2)
  58 + bootstrap-sass (3.0.3.0)
48 59 sass (~> 3.2)
49   - builder (3.0.4)
  60 + builder (3.1.4)
50 61 capybara (2.1.0)
51 62 mime-types (>= 1.16)
52 63 nokogiri (>= 1.3.3)
53 64 rack (>= 1.0.0)
54 65 rack-test (>= 0.5.4)
55 66 xpath (~> 2.0)
56   - carrierwave (0.8.0)
  67 + carrierwave (0.9.0)
57 68 activemodel (>= 3.2.0)
58 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 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 75 code_analyzer (0.4.3)
72 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 81 coffee-script (>= 2.2.0)
76   - railties (~> 3.2.0)
  82 + railties (>= 4.0.0, < 5.0)
77 83 coffee-script (2.2.0)
78 84 coffee-script-source
79 85 execjs
80   - coffee-script-source (1.6.2)
  86 + coffee-script-source (1.6.3)
81 87 colored (1.2)
82 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 90 coveralls (0.7.0)
91 91 multi_json (~> 1.3)
92 92 rest-client
93 93 simplecov (>= 0.7)
94 94 term-ansicolor
95 95 thor
96   - crack (0.4.0)
  96 + crack (0.4.1)
97 97 safe_yaml (~> 0.9.0)
98 98 d3_rails (3.1.10)
99 99 railties (>= 3.1.0)
100 100 daemons (1.1.9)
101   - database_cleaner (1.1.1)
  101 + database_cleaner (1.2.0)
102 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 105 bcrypt-ruby (~> 3.0)
106 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 115 launchy (~> 2.1)
113 116 mail (~> 2.2)
114   - enumerize (0.6.1)
  117 + email_validator (1.4.0)
  118 + activemodel
  119 + enumerize (0.7.0)
115 120 activesupport (>= 3.2)
  121 + equalizer (0.0.8)
116 122 erubis (2.7.0)
117 123 escape_utils (0.2.4)
118 124 eventmachine (1.0.3)
119 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 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 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 134 faraday_middleware (0.9.0)
130 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 138 fog (1.3.1)
134 139 builder
135 140 excon (~> 0.13.0)
... ... @@ -146,48 +151,46 @@ GEM
146 151 dotenv (>= 0.7)
147 152 thor (>= 0.13.6)
148 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 162 github-markdown (~> 0.5.3)
161 163 github-markup (>= 0.7.5, < 1.0.0)
162   - gitlab-grit (>= 2.5.1)
  164 + gitlab-grit (~> 2.6.1)
163 165 nokogiri (~> 1.5.9)
164   - pygments.rb (~> 0.4.2)
165 166 sanitize (~> 2.0.3)
166 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 171 charlock_holmes (~> 0.6.9)
171 172 diff-lcs (~> 1.1)
172 173 mime-types (~> 1.15)
173 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 184 gitlab_meta (6.0)
182   - gitlab_omniauth-ldap (1.0.3)
  185 + gitlab_omniauth-ldap (1.0.4)
183 186 net-ldap (~> 0.3.1)
184 187 omniauth (~> 1.0)
185 188 pyu-ruby-sasl (~> 0.0.3.1)
186 189 rubyntlm (~> 0.1.1)
187   - gon (4.1.1)
  190 + gon (5.0.1)
188 191 actionpack (>= 2.3.0)
189 192 json
190   - grape (0.4.1)
  193 + grape (0.6.1)
191 194 activesupport
192 195 builder
193 196 hashie (>= 1.2.0)
... ... @@ -196,91 +199,91 @@ GEM
196 199 rack (>= 1.3.0)
197 200 rack-accept
198 201 rack-mount
199   - virtus
  202 + virtus (>= 1.0.0)
200 203 grape-entity (0.3.0)
201 204 activesupport
202 205 multi_json (>= 1.3.2)
203 206 growl (1.0.3)
204   - guard (1.8.1)
  207 + guard (2.2.4)
205 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 216 guard-spinach (0.0.2)
214 217 guard (>= 1.1)
215 218 spinach
216   - haml (4.0.3)
  219 + haml (4.0.4)
217 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 227 hike (1.2.3)
225   - hipchat (0.9.0)
  228 + hipchat (0.14.0)
226 229 httparty
227 230 httparty
228 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 234 multi_xml (>= 0.5.2)
232 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 245 jquery-rails (2.1.3)
243 246 railties (>= 3.1.0, < 5.0)
244 247 thor (~> 0.14)
245   - jquery-turbolinks (1.0.0)
  248 + jquery-turbolinks (2.0.1)
246 249 railties (>= 3.1.0)
247 250 turbolinks
248 251 jquery-ui-rails (2.0.2)
249 252 jquery-rails
250 253 railties (>= 3.1.0)
251   - json (1.7.7)
  254 + json (1.8.1)
252 255 jwt (0.1.8)
253 256 multi_json (>= 1.5)
254   - kaminari (0.14.1)
  257 + kaminari (0.15.1)
255 258 actionpack (>= 3.0.0)
256 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 262 addressable (~> 2.3)
260   - letter_opener (1.1.1)
  263 + letter_opener (1.1.2)
261 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 268 rb-fsevent (>= 0.9.3)
265 269 rb-inotify (>= 0.9)
266   - rb-kqueue (>= 0.2)
267   - lumberjack (1.0.3)
  270 + lumberjack (1.0.4)
268 271 mail (2.5.4)
269 272 mime-types (~> 1.16)
270 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 277 modernizr (2.6.2)
275 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 281 multipart-post (1.2.0)
279 282 mysql2 (0.3.11)
280 283 net-ldap (0.3.1)
281 284 net-scp (1.0.4)
282 285 net-ssh (>= 1.99.1)
283   - net-ssh (2.6.8)
  286 + net-ssh (2.7.0)
284 287 nokogiri (1.5.10)
285 288 oauth (0.4.7)
286 289 oauth2 (0.8.1)
... ... @@ -292,10 +295,10 @@ GEM
292 295 omniauth (1.1.4)
293 296 hashie (>= 1.2, < 3)
294 297 rack
295   - omniauth-github (1.1.0)
  298 + omniauth-github (1.1.1)
296 299 omniauth (~> 1.0)
297 300 omniauth-oauth2 (~> 1.1)
298   - omniauth-google-oauth2 (0.1.19)
  301 + omniauth-google-oauth2 (0.2.1)
299 302 omniauth (~> 1.0)
300 303 omniauth-oauth2
301 304 omniauth-oauth (1.0.1)
... ... @@ -304,56 +307,53 @@ GEM
304 307 omniauth-oauth2 (1.1.1)
305 308 oauth2 (~> 0.8.0)
306 309 omniauth (~> 1.0)
307   - omniauth-twitter (0.0.17)
  310 + omniauth-twitter (1.0.1)
308 311 multi_json (~> 1.3)
309 312 omniauth-oauth (~> 1.0)
310   - orm_adapter (0.4.0)
  313 + orm_adapter (0.5.0)
311 314 pg (0.15.1)
  315 + phantomjs (1.9.2.0)
312 316 poltergeist (1.4.1)
313 317 capybara (~> 2.1.0)
314 318 cliver (~> 0.2.1)
315 319 multi_json (~> 1.0)
316 320 websocket-driver (>= 0.2.0)
317 321 polyglot (0.3.3)
318   - posix-spawn (0.3.6)
319   - pry (0.9.12.2)
320   - coderay (~> 1.0.5)
  322 + posix-spawn (0.3.8)
  323 + protected_attributes (1.0.5)
  324 + activemodel (>= 4.0.1, < 5.0)
  325 + pry (0.9.12.4)
  326 + coderay (~> 1.0)
321 327 method_source (~> 0.8)
322 328 slop (~> 3.4)
323   - pygments.rb (0.4.2)
324   - posix-spawn (~> 0.3.6)
325   - yajl-ruby (~> 1.1.0)
326 329 pyu-ruby-sasl (0.0.3.3)
327 330 quiet_assets (1.0.2)
328 331 railties (>= 3.1, < 5.0)
329   - rack (1.4.5)
  332 + racc (1.4.10)
  333 + rack (1.5.2)
330 334 rack-accept (0.4.5)
331 335 rack (>= 0.4)
332   - rack-attack (2.2.1)
  336 + rack-attack (2.3.0)
333 337 rack
334   - rack-cache (1.2)
335   - rack (>= 0.4)
  338 + rack-cors (0.2.9)
336 339 rack-mini-profiler (0.1.31)
337 340 rack (>= 1.1.3)
338 341 rack-mount (0.8.3)
339 342 rack (>= 1.0.0)
340   - rack-protection (1.5.0)
341   - rack
342   - rack-ssl (1.3.3)
  343 + rack-protection (1.5.1)
343 344 rack
344 345 rack-test (0.6.2)
345 346 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)
  347 + rails (4.0.2)
  348 + actionmailer (= 4.0.2)
  349 + actionpack (= 4.0.2)
  350 + activerecord (= 4.0.2)
  351 + activesupport (= 4.0.2)
  352 + bundler (>= 1.3.0, < 2.0)
  353 + railties (= 4.0.2)
  354 + sprockets-rails (~> 2.0.0)
  355 + rails-observers (0.1.2)
  356 + activemodel (~> 4.0)
357 357 rails_best_practices (1.14.4)
358 358 activesupport
359 359 awesome_print
... ... @@ -363,235 +363,237 @@ GEM
363 363 i18n
364 364 require_all
365 365 ruby-progressbar
366   - railties (3.2.13)
367   - actionpack (= 3.2.13)
368   - activesupport (= 3.2.13)
369   - rack-ssl (~> 1.3.2)
  366 + railties (4.0.2)
  367 + actionpack (= 4.0.2)
  368 + activesupport (= 4.0.2)
370 369 rake (>= 0.8.7)
371   - rdoc (~> 3.4)
372   - thor (>= 0.14.6, < 2.0)
373   - raindrops (0.11.0)
  370 + thor (>= 0.18.1, < 2.0)
  371 + raindrops (0.12.0)
374 372 rake (10.1.0)
375 373 raphael-rails (2.1.2)
376 374 rb-fsevent (0.9.3)
377   - rb-inotify (0.9.0)
378   - ffi (>= 0.5.0)
379   - rb-kqueue (0.2.0)
  375 + rb-inotify (0.9.2)
380 376 ffi (>= 0.5.0)
381 377 rdoc (3.12.2)
382 378 json (~> 1.4)
383 379 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)
  380 + redis (3.0.6)
  381 + redis-actionpack (4.0.0)
  382 + actionpack (~> 4)
  383 + redis-rack (~> 1.5.0)
  384 + redis-store (~> 1.1.0)
  385 + redis-activesupport (4.0.0)
  386 + activesupport (~> 4)
  387 + redis-store (~> 1.1.0)
  388 + redis-namespace (1.4.1)
  389 + redis (~> 3.0.4)
  390 + redis-rack (1.5.0)
  391 + rack (~> 1.5)
  392 + redis-store (~> 1.1.0)
  393 + redis-rails (4.0.0)
  394 + redis-actionpack (~> 4)
  395 + redis-activesupport (~> 4)
391 396 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 397 redis-store (1.1.4)
402 398 redis (>= 2.2)
403 399 ref (1.0.5)
404   - require_all (1.3.1)
  400 + require_all (1.3.2)
405 401 rest-client (1.6.7)
406 402 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)
  403 + rspec (2.14.1)
  404 + rspec-core (~> 2.14.0)
  405 + rspec-expectations (~> 2.14.0)
  406 + rspec-mocks (~> 2.14.0)
  407 + rspec-core (2.14.7)
  408 + rspec-expectations (2.14.4)
413 409 diff-lcs (>= 1.1.3, < 2.0)
414   - rspec-mocks (2.13.1)
415   - rspec-rails (2.13.2)
  410 + rspec-mocks (2.14.4)
  411 + rspec-rails (2.14.0)
416 412 actionpack (>= 3.0)
417 413 activesupport (>= 3.0)
418 414 railties (>= 3.0)
419   - rspec-core (~> 2.13.0)
420   - rspec-expectations (~> 2.13.0)
421   - rspec-mocks (~> 2.13.0)
  415 + rspec-core (~> 2.14.0)
  416 + rspec-expectations (~> 2.14.0)
  417 + rspec-mocks (~> 2.14.0)
422 418 ruby-hmac (0.4.0)
423 419 ruby-progressbar (1.2.0)
424 420 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)
  421 + rugged (0.19.0)
  422 + safe_yaml (0.9.7)
  423 + sanitize (2.0.6)
  424 + nokogiri (>= 1.4.4)
  425 + sass (3.2.12)
  426 + sass-rails (4.0.1)
  427 + railties (>= 4.0.0, < 5.0)
432 428 sass (>= 3.1.10)
433   - tilt (~> 1.3)
  429 + sprockets-rails (~> 2.0.0)
434 430 sdoc (0.3.20)
435 431 json (>= 1.1.3)
436 432 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
  433 + seed-fu (2.3.0)
  434 + activerecord (>= 3.1, < 4.1)
  435 + activesupport (>= 3.1, < 4.1)
  436 + select2-rails (3.5.2)
442 437 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 438 settingslogic (2.0.9)
449   - sexp_processor (4.3.0)
  439 + sexp_processor (4.4.0)
450 440 shoulda-matchers (2.1.0)
451 441 activesupport (>= 3.0.0)
452   - sidekiq (2.14.0)
453   - celluloid (>= 0.14.1)
  442 + sidekiq (2.17.0)
  443 + celluloid (>= 0.15.2)
454 444 connection_pool (>= 1.0.0)
455 445 json
456 446 redis (>= 3.0.4)
457   - redis-namespace
  447 + redis-namespace (>= 1.3.1)
458 448 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)
  449 + simplecov (0.8.2)
  450 + docile (~> 1.1.0)
  451 + multi_json
  452 + simplecov-html (~> 0.8.0)
  453 + simplecov-html (0.8.0)
  454 + sinatra (1.4.4)
464 455 rack (~> 1.4)
465 456 rack-protection (~> 1.4)
466 457 tilt (~> 1.3, >= 1.3.4)
467 458 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)
  459 + slim (2.0.2)
  460 + temple (~> 0.6.6)
  461 + tilt (>= 1.3.3, < 2.1)
  462 + slop (3.4.7)
  463 + spinach (0.8.7)
473 464 colorize (= 0.5.8)
474   - gherkin-ruby (~> 0.3.0)
  465 + gherkin-ruby (>= 0.3.1)
475 466 spinach-rails (0.2.1)
476 467 capybara (>= 2.0.0)
477 468 railties (>= 3)
478 469 spinach (>= 0.4)
479   - spork (1.0.0rc2)
480   - sprockets (2.2.2)
  470 + spork (1.0.0rc4)
  471 + sprockets (2.10.1)
481 472 hike (~> 1.2)
482 473 multi_json (~> 1.0)
483 474 rack (~> 1.0)
484 475 tilt (~> 1.1, != 1.3.0)
  476 + sprockets-rails (2.0.1)
  477 + actionpack (>= 3.0)
  478 + activesupport (>= 3.0)
  479 + sprockets (~> 2.8)
485 480 stamp (0.5.0)
486 481 state_machine (1.2.0)
487 482 stringex (1.5.1)
488   - temple (0.6.5)
  483 + temple (0.6.7)
489 484 term-ansicolor (1.2.2)
490 485 tins (~> 0.8)
491   - test_after_commit (0.2.1)
492   - therubyracer (0.11.4)
493   - libv8 (~> 3.11.8.12)
  486 + test_after_commit (0.2.2)
  487 + therubyracer (0.12.0)
  488 + libv8 (~> 3.16.14.0)
494 489 ref
495   - thin (1.5.1)
  490 + thin (1.6.1)
496 491 daemons (>= 1.0.9)
497   - eventmachine (>= 0.12.6)
  492 + eventmachine (>= 1.0.0)
498 493 rack (>= 1.0.0)
499 494 thor (0.18.1)
  495 + thread_safe (0.1.3)
  496 + atomic
500 497 tilt (1.4.1)
501 498 timers (1.1.0)
502   - tinder (1.9.2)
  499 + tinder (1.9.3)
503 500 eventmachine (~> 1.0)
504 501 faraday (~> 0.8)
505 502 faraday_middleware (~> 0.9)
506   - hashie (~> 1.0)
507   - json (~> 1.7.5)
  503 + hashie (>= 1.0, < 3)
  504 + json (~> 1.8.0)
508 505 mime-types (~> 1.19)
509   - multi_json (~> 1.5)
  506 + multi_json (~> 1.7)
510 507 twitter-stream (~> 0.1)
511   - tins (0.11.0)
512   - treetop (1.4.14)
  508 + tins (0.13.1)
  509 + treetop (1.4.15)
513 510 polyglot
514 511 polyglot (>= 0.3.1)
515   - turbolinks (1.2.0)
  512 + turbolinks (2.0.0)
516 513 coffee-rails
517 514 twitter-stream (0.1.16)
518 515 eventmachine (>= 0.12.8)
519 516 http_parser.rb (~> 0.5.1)
520 517 simple_oauth (~> 0.1.4)
521   - tzinfo (0.3.37)
522   - uglifier (2.1.1)
  518 + tzinfo (0.3.38)
  519 + uglifier (2.3.2)
523 520 execjs (>= 0.3.0)
524   - multi_json (~> 1.0, >= 1.0.2)
  521 + json (>= 1.8.0)
525 522 underscore-rails (1.4.4)
526 523 unicorn (4.6.3)
527 524 kgio (~> 2.6)
528 525 rack
529 526 raindrops (~> 0.7)
530   - virtus (0.5.5)
531   - backports (~> 3.3)
  527 + unicorn-worker-killer (0.4.2)
  528 + unicorn (~> 4)
  529 + virtus (1.0.1)
  530 + axiom-types (~> 0.0.5)
  531 + coercible (~> 1.0)
532 532 descendants_tracker (~> 0.0.1)
  533 + equalizer (~> 0.0.7)
533 534 warden (1.2.3)
534 535 rack (>= 1.0)
535   - webmock (1.11.0)
  536 + webmock (1.16.0)
536 537 addressable (>= 2.2.7)
537 538 crack (>= 0.3.2)
538   - websocket (1.0.7)
539   - websocket-driver (0.3.0)
  539 + websocket-driver (0.3.1)
540 540 xpath (2.0.0)
541 541 nokogiri (~> 1.3)
542   - yajl-ruby (1.1.0)
543 542  
544 543 PLATFORMS
545 544 ruby
546 545  
547 546 DEPENDENCIES
  547 + actionpack-action_caching
  548 + actionpack-page_caching
548 549 acts-as-taggable-on
549 550 annotate (~> 2.6.0.beta2)
550 551 asciidoctor
551 552 awesome_print
552 553 better_errors
553 554 binding_of_caller
554   - bootstrap-sass
  555 + bootstrap-sass (~> 3.0)
555 556 capybara
556 557 carrierwave
557   - chosen-rails (= 1.0.0)
558 558 coffee-rails
559 559 colored
560 560 coveralls
561 561 d3_rails (~> 3.1.4)
562 562 database_cleaner
563   - devise (~> 2.2)
  563 + devise (= 3.0.4)
  564 + devise-async (= 0.8.0)
564 565 email_spec
  566 + email_validator (~> 1.4.0)
565 567 enumerize
566 568 factory_girl_rails
567 569 ffaker
568 570 fog (~> 1.3.1)
569   - font-awesome-rails
  571 + font-awesome-rails (~> 3.2)
570 572 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)
  573 + gemoji (~> 1.3.0)
  574 + github-markup (~> 0.7.4)!
  575 + gitlab-flowdock-git-hook (~> 0.4.2)
  576 + gitlab-gollum-lib (~> 1.1.0)
  577 + gitlab-grack (~> 2.0.0.pre)
  578 + gitlab-linguist (~> 3.0.0)
  579 + gitlab_git (~> 5.1.0)
578 580 gitlab_meta (= 6.0)
579   - gitlab_omniauth-ldap (= 1.0.3)
580   - gon
581   - grape (~> 0.4.1)
  581 + gitlab_omniauth-ldap (= 1.0.4)
  582 + gon (~> 5.0.0)
  583 + grape (~> 0.6.1)
582 584 grape-entity (~> 0.3.0)
583 585 growl
584 586 guard-rspec
585 587 guard-spinach
586 588 haml-rails
587   - hipchat (~> 0.9.0)
  589 + hipchat (~> 0.14.0)
588 590 httparty
589   - jasmine
590   - jquery-atwho-rails (= 0.3.0)
  591 + jasmine (= 2.0.0.rc5)
  592 + jquery-atwho-rails (~> 0.3.3)
591 593 jquery-rails (= 2.1.3)
592 594 jquery-turbolinks
593 595 jquery-ui-rails (= 2.0.2)
594   - kaminari (~> 0.14.1)
  596 + kaminari (~> 0.15.1)
595 597 launchy
596 598 letter_opener
597 599 minitest (~> 4.7.0)
... ... @@ -603,12 +605,14 @@ DEPENDENCIES
603 605 omniauth-twitter
604 606 pg
605 607 poltergeist (~> 1.4.1)
  608 + protected_attributes
606 609 pry
607 610 quiet_assets (~> 1.0.1)
608 611 rack-attack
  612 + rack-cors
609 613 rack-mini-profiler
610   - rails (= 3.2.13)
611   - rails-dev-tweaks
  614 + rails (~> 4.0.0)
  615 + rails-observers
612 616 rails_best_practices
613 617 raphael-rails (~> 2.1.2)
614 618 rb-fsevent
... ... @@ -640,4 +644,5 @@ DEPENDENCIES
640 644 uglifier
641 645 underscore-rails (~> 1.4.4)
642 646 unicorn (~> 4.6.3)
  647 + unicorn-worker-killer
643 648 webmock
... ...
PROCESS.md
... ... @@ -8,25 +8,25 @@ Below we describe the contributing process to GitLab for two reasons. So that co
8 8  
9 9 ### Issue team
10 10 - Looks for issues without workflow labels and triages issue
11   -- Monitors pull requests
12   -- Closes invalid issues and pull requests with a comment (duplicates, [feature requests](#feature-requests), [fixed in newer version](#issue-fixed-in-newer-version), [issue report for old version](#issue-report-for-old-version), not a problem in GitLab, etc.)
  11 +- Monitors merge requests
  12 +- Closes invalid issues and merge requests with a comment (duplicates, [feature requests](#feature-requests), [fixed in newer version](#issue-fixed-in-newer-version), [issue report for old version](#issue-report-for-old-version), not a problem in GitLab, etc.)
13 13 - Assigns appropriate [labels](#how-we-handle-issues)
14   -- Asks for feedback from issue reporter/pull request initiator ([invalid issue reports](#improperly-formatted-issue), [format code](#code-format), etc.)
  14 +- Asks for feedback from issue reporter/merge request initiator ([invalid issue reports](#improperly-formatted-issue), [format code](#code-format), etc.)
15 15 - Asks for feedback from the relevant developer(s) based on the [list of members and their specialities](http://gitlab.org/team/)
16   -- Monitors all issues/pull requests for feedback (but especially ones commented on since automatically watching them):
  16 +- Monitors all issues/merge requests for feedback (but especially ones commented on since automatically watching them):
17 17 - Closes issues with no feedback from the reporter for two weeks
18   -- Closes stale pull requests
  18 +- Closes stale merge requests
19 19  
20 20 ### Development team
21 21  
22   -- Responds to issues and pull requests the issue team mentions them in
  22 +- Responds to issues and merge requests the issue team mentions them in
23 23 - Monitors for new issues in _Awaiting developer action/feedback_ with no developer activity (once a week)
24   -- Monitors for new pull requests (at least once a week)
25   -- Manages their work queue by looking at issues and pull requests assigned to them
  24 +- Monitors for new merge requests (at least once a week)
  25 +- Manages their work queue by looking at issues and merge requests assigned to them
26 26 - Close fixed issues (via commit messages or manually)
27 27 - Codes [new features](http://feedback.gitlab.com/forums/176466-general/filters/top)!
28 28 - Response guidelines
29   -- Be kind to people trying to contribute. Be aware that people can be a non-native or a native English speaker, they might not understand thing or they might be very sensitive to how your word things. Use emoji to express your feelings (heart, star, smile, etc.). Some good tips about giving feedback to pull requests is in the [Thoughtbot code review guide](https://github.com/thoughtbot/guides/tree/master/code-review).
  29 +- Be kind to people trying to contribute. Be aware that people can be a non-native or a native English speaker, they might not understand thing or they might be very sensitive to how your word things. Use emoji to express your feelings (heart, star, smile, etc.). Some good tips about giving feedback to merge requests is in the [Thoughtbot code review guide](https://github.com/thoughtbot/guides/tree/master/code-review).
30 30  
31 31 ## Priorities of the issue team
32 32  
... ... @@ -45,8 +45,8 @@ Workflow labels are purposely not very detailed since that would be hard to keep
45 45  
46 46 - _Awaiting feedback_: Feedback pending from the reporter
47 47 - _Awaiting confirmation of fix_: The issue should already be solved in **master** (generally you can avoid this workflow item and just close the issue right away)
48   -- _Attached PR_: There is a PR attached and the discussion should happen there
49   - - We need to let issues stay in sync with the PR's. We can do this with a "Closing #XXXX" or "Fixes #XXXX" comment in the PR. We can't close the issue when there is a pull request because sometimes a PR is not good and we just close the PR, then the issue must stay.
  48 +- _Attached MR_: There is a MR attached and the discussion should happen there
  49 + - We need to let issues stay in sync with the MR's. We can do this with a "Closing #XXXX" or "Fixes #XXXX" comment in the MR. We can't close the issue when there is a merge request because sometimes a MR is not good and we just close the MR, then the issue must stay.
50 50 - _Awaiting developer action/feedback_: Issue needs to be fixed or clarified by a developer
51 51  
52 52 ## Functional labels
... ... @@ -59,7 +59,7 @@ If an issue is complex and needs the attention of a specific person, assignment
59 59  
60 60 ## Label colors
61 61 - Light orange `#fef2c0`: workflow labels for issue team members (awaiting feedback, awaiting confirmation of fix)
62   -- Bright orange `#eb6420`: workflow labels for core team members (attached PR, awaiting developer action/feedback)
  62 +- Bright orange `#eb6420`: workflow labels for core team members (attached MR, awaiting developer action/feedback)
63 63 - Light blue `#82C5FF`: functional labels
64 64 - Green labels `#009800`: issues that can generally be ignored. For example, issues given the following labels normally can be closed immediately:
65 65 - Feature request (see copy & paste response: [Feature requests](#feature-requests))
... ... @@ -69,19 +69,19 @@ If an issue is complex and needs the attention of a specific person, assignment
69 69  
70 70 ### Improperly formatted issue
71 71  
72   -Thanks for the issue report. Please reformat your issue to conform to the issue tracker guidelines found in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
  72 +Thanks for the issue report. Please reformat your issue to conform to the issue tracker guidelines found in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
73 73  
74 74 ### Feature requests
75 75  
76   -Thanks for your interest in GitLab. We don't use the GitHub issue tracker for feature requests. Please use http://feedback.gitlab.com/ for this purpose or create a pull request implementing this feature. Have a look at the \[contribution guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) for more information.
  76 +Thanks for your interest in GitLab. We don't use the issue tracker for feature requests. Please use http://feedback.gitlab.com/ for this purpose or create a merge request implementing this feature. Have a look at the \[contribution guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md) for more information.
77 77  
78 78 ### Issue report for old version
79 79  
80   -Thanks for the issue report but we only support issues for the latest stable version of GitLab. I'm closing this issue but if you still experience this problem in the latest stable version, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
  80 +Thanks for the issue report but we only support issues for the latest stable version of GitLab. I'm closing this issue but if you still experience this problem in the latest stable version, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
81 81  
82 82 ### Support requests and configuration questions
83 83  
84   -Thanks for your interest in GitLab. We don't use the GitHub issue tracker for support requests and configuration questions. Please use the \[support forum\]\(https://groups.google.com/forum/#!forum/gitlabhq), \[Stack Overflow\]\(http://stackoverflow.com/questions/tagged/gitlab), the unofficial #gitlab IRC channel on Freenode or the http://www.gitlab.com paid services for this purpose. Have a look at the \[contribution guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) for more information.
  84 +Thanks for your interest in GitLab. We don't use the issue tracker for support requests and configuration questions. Please use the \[support forum\]\(https://groups.google.com/forum/#!forum/gitlabhq), \[Stack Overflow\]\(http://stackoverflow.com/questions/tagged/gitlab), the unofficial #gitlab IRC channel on Freenode or the http://www.gitlab.com paid services for this purpose. Have a look at the \[contribution guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md) for more information.
85 85  
86 86 ### Code format
87 87  
... ... @@ -89,17 +89,17 @@ Please use ``` to format console output, logs, and code as it&#39;s very hard to rea
89 89  
90 90 ### Issue fixed in newer version
91 91  
92   -Thanks for the issue report. This issue has already been fixed in newer versions of GitLab. Due to the size of this project and our limited resources we are only able to support the latest stable release as outlined in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker). In order to get this bug fix and enjoy many new features please \[upgrade\]\(http://blog.gitlab.org/). If you still experience issues at that time please open a new issue following our issue tracker guidelines found in the \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
  92 +Thanks for the issue report. This issue has already been fixed in newer versions of GitLab. Due to the size of this project and our limited resources we are only able to support the latest stable release as outlined in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker). In order to get this bug fix and enjoy many new features please \[upgrade\]\(http://blog.gitlab.org/). If you still experience issues at that time please open a new issue following our issue tracker guidelines found in the \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
93 93  
94   -### Improperly formatted pull request
  94 +### Improperly formatted merge request
95 95  
96   -Thanks for your interest in improving the GitLab codebase! Please update your pull request according to the \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#pull-request-guidelines).
  96 +Thanks for your interest in improving the GitLab codebase! Please update your merge request according to the \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#pull-request-guidelines).
97 97  
98 98 ### Inactivity close of an issue
99 99  
100   -It's been at least 2 weeks (and a new release) since we heard from you. I'm closing this issue but if you still experience this problem, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
  100 +It's been at least 2 weeks (and a new release) since we heard from you. I'm closing this issue but if you still experience this problem, please open a new issue (but also reference the old issue(s)). Make sure to also include the necessary debugging information conforming to the issue tracker guidelines found in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#issue-tracker-guidelines).
101 101  
102   -### Inactivity close of a pull request
  102 +### Inactivity close of a merge request
103 103  
104   -This pull request has been closed because a request for more information has not been reacted to for more than 2 weeks. If you respond and conform to the pull request guidelines in our \[contributing guidelines\]\(https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md#pull-requests) we will reopen this pull request.
  104 +This merge request has been closed because a request for more information has not been reacted to for more than 2 weeks. If you respond and conform to the merge request guidelines in our \[contributing guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#pull-requests) we will reopen this merge request.
105 105  
... ...
README.md
1 1 ## GitLab: self hosted Git management software
2 2  
3   -![logo](https://raw.github.com/gitlabhq/gitlabhq/master/public/gitlab_logo.png)
  3 +![logo](https://gitlab.com/gitlab-org/gitlab-ce/raw/master/public/gitlab_logo.png)
4 4  
5 5 ![animated-screenshots](https://gist.github.com/fnkr/2f9badd56bfe0ed04ee7/raw/4f48806fbae97f556c2f78d8c2d299c04500cb0d/compiled.gif)
6 6  
... ... @@ -32,7 +32,9 @@
32 32  
33 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 39 ### Requirements
38 40  
... ... @@ -46,40 +48,32 @@
46 48  
47 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 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 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 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 77 ### Run in production mode
84 78  
85 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 93 or start each component separately
100 94  
101 95 bundle exec rails s
102   - bundle exec rake sidekiq:start
  96 + script/background_jobs start
103 97  
104 98 ### Run the tests
105 99  
... ... @@ -110,7 +104,7 @@ or start each component separately
110 104  
111 105 * Run all tests
112 106  
113   - bundle exec rake gitlab:test
  107 + bundle exec rake gitlab:test RAILS_ENV=test
114 108  
115 109 * [RSpec](http://rspec.info/) unit and functional tests
116 110  
... ... @@ -127,14 +121,17 @@ or start each component separately
127 121  
128 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 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 136 ### Getting help
140 137  
... ... @@ -144,23 +141,23 @@ or start each component separately
144 141  
145 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 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 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/)
... ...
VERSION
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 8 else
9 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 28 $('.log-tabs a').click (e) ->
12 29 e.preventDefault()
13 30 $(this).tab('show')
... ...
app/assets/javascripts/api.js.coffee
... ... @@ -2,6 +2,7 @@
2 2 users_path: "/api/:version/users.json"
3 3 user_path: "/api/:version/users/:id.json"
4 4 notes_path: "/api/:version/projects/:id/notes.json"
  5 + namespaces_path: "/api/:version/namespaces.json"
5 6  
6 7 # Get 20 (depends on api) recent notes
7 8 # and sort the ascending from oldest to newest
... ... @@ -49,6 +50,20 @@
49 50 ).done (users) ->
50 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 67 buildUrl: (url) ->
53 68 url = gon.relative_url_root + url if gon.relative_url_root?
54 69 return url.replace(':version', gon.api_version)
... ...
app/assets/javascripts/application.js
... ... @@ -19,12 +19,12 @@
19 19 //= require jquery.turbolinks
20 20 //= require bootstrap
21 21 //= require modernizr
22   -//= require chosen-jquery
23 22 //= require select2
24 23 //= require raphael
25 24 //= require g.raphael-min
26 25 //= require g.bar-min
27 26 //= require branch-graph
  27 +//= require highlightjs.min
28 28 //= require ace-src-noconflict/ace
29 29 //= require_tree .
30 30 //= require d3
... ...
app/assets/javascripts/behaviors/toggler_behavior.coffee
... ... @@ -3,7 +3,7 @@ $ -&gt;
3 3 container = $(@).closest(".js-toggler-container")
4 4  
5 5 container.toggleClass("on")
6   -
  6 +
7 7 $("body").on "click", ".js-toggle-visibility-link", (e) ->
8 8 $(@).find('i').
9 9 toggleClass('icon-chevron-down').
... ... @@ -11,7 +11,7 @@ $ -&gt;
11 11 container = $(".js-toggle-visibility-container")
12 12 container.toggleClass("hide")
13 13 e.preventDefault()
14   -
  14 +
15 15 $("body").on "click", ".js-toggle-button", (e) ->
16 16 $(@).closest(".js-toggle-container").find(".js-toggle-content").toggle()
17 17 e.preventDefault()
... ...
app/assets/javascripts/blob.js.coffee
1 1 class BlobView
2 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 21 # See if there are lines selected
4 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 40 first_line = parseInt(matches?[1])
9 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 69 # Highlight the correct lines on load
18 70 highlightBlobLines()
19 71  
20 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 76 @BlobView = BlobView
... ...
app/assets/javascripts/branch-graph.js.coffee
... ... @@ -194,11 +194,14 @@ class BranchGraph
194 194 fill: @colors[commit.space]
195 195 stroke: "none"
196 196 )
197   - r.rect(@offsetX + @unitSpace * @mspace + 10, y - 10, 20, 20).attr(
198   - fill: "url(#{commit.author.icon})"
  197 +
  198 + avatar_box_x = @offsetX + @unitSpace * @mspace + 10
  199 + avatar_box_y = y - 10
  200 + r.rect(avatar_box_x, avatar_box_y, 20, 20).attr(
199 201 stroke: @colors[commit.space]
200 202 "stroke-width": 2
201 203 )
  204 + r.image(commit.author.icon, avatar_box_x, avatar_box_y, 20, 20)
202 205 r.text(@offsetX + @unitSpace * @mspace + 35, y, commit.message.split("\n")[0]).attr(
203 206 "text-anchor": "start"
204 207 font: "14px Monaco, monospace"
... ...
app/assets/javascripts/commits.js.coffee
... ... @@ -4,13 +4,13 @@ class CommitsList
4 4 limit: 0
5 5 offset: 0
6 6 @disable = false
7   -
  7 +
8 8 @showProgress: ->
9 9 $('.loading').show()
10   -
  10 +
11 11 @hideProgress: ->
12 12 $('.loading').hide()
13   -
  13 +
14 14 @init: (ref, limit) ->
15 15 $(".day-commits-table li.commit").live 'click', (event) ->
16 16 if event.target.nodeName != "A"
... ... @@ -21,7 +21,7 @@ class CommitsList
21 21 @data.ref = ref
22 22 @data.limit = limit
23 23 @data.offset = limit
24   -
  24 +
25 25 this.initLoadMore()
26 26 this.showProgress()
27 27  
... ... @@ -32,7 +32,9 @@ class CommitsList
32 32 url: location.href
33 33 data: @data
34 34 complete: this.hideProgress
35   - dataType: "script"
  35 + success: (data) ->
  36 + CommitsList.append(data.count, data.html)
  37 + dataType: "json"
36 38  
37 39 @append: (count, html) ->
38 40 $("#commits-list").append(html)
... ... @@ -40,7 +42,7 @@ class CommitsList
40 42 @data.offset += count
41 43 else
42 44 @disable = true
43   -
  45 +
44 46 @initLoadMore: ->
45 47 $(document).unbind('scroll')
46 48 $(document).endlessScroll
... ...
app/assets/javascripts/dispatcher.js.coffee
... ... @@ -4,6 +4,7 @@ $ -&gt;
4 4 class Dispatcher
5 5 constructor: () ->
6 6 @initSearch()
  7 + @initHighlight()
7 8 @initPageScripts()
8 9  
9 10 initPageScripts: ->
... ... @@ -47,5 +48,16 @@ class Dispatcher
47 48  
48 49  
49 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 4 $(this).fadeOut()
5 5  
6 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 18 \ No newline at end of file
... ...
app/assets/javascripts/issues.js.coffee
... ... @@ -22,19 +22,17 @@
22 22 backgroundColor: '#DDD'
23 23 opacity: .4
24 24 )
25   -
  25 +
26 26 reload: ->
27 27 Issues.initSelects()
28 28 Issues.initChecks()
29 29 $('#filter_issue_search').val($('#issue_search').val())
30 30  
31 31 initSelects: ->
32   - $("#update_status").chosen()
33   - $("#update_assignee_id").chosen()
34   - $("#update_milestone_id").chosen()
35   - $("#label_name").chosen()
36   - $("#assignee_id").chosen()
37   - $("#milestone_id").chosen()
  32 + $("select#update_status").select2(width: 'resolve', dropdownAutoWidth: true)
  33 + $("select#update_assignee_id").select2(width: 'resolve', dropdownAutoWidth: true)
  34 + $("select#update_milestone_id").select2(width: 'resolve', dropdownAutoWidth: true)
  35 + $("select#label_name").select2(width: 'resolve', dropdownAutoWidth: true)
38 36 $("#milestone_id, #assignee_id, #label_name").on "change", ->
39 37 $(this).closest("form").submit()
40 38  
... ... @@ -54,7 +52,16 @@
54 52 unless terms is last_terms
55 53 last_terms = terms
56 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 66 checkChanged: ->
60 67 checked_issues = $(".selected_issue:checked")
... ... @@ -70,3 +77,9 @@
70 77 $("#update_issues_ids").val []
71 78 $(".issues_bulk_update").hide()
72 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 1 window.slugify = (text) ->
5 2 text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase()
6 3  
... ... @@ -56,7 +53,7 @@ window.unbindEvents = -&gt;
56 53  
57 54 document.addEventListener("page:fetch", startSpinner)
58 55 document.addEventListener("page:fetch", unbindEvents)
59   -document.addEventListener("page:receive", stopSpinner)
  56 +document.addEventListener("page:change", stopSpinner)
60 57  
61 58 $ ->
62 59 # Click a .one_click_select field, select the contents
... ... @@ -70,8 +67,8 @@ $ -&gt;
70 67 $('.appear-data').fadeIn()
71 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 73 # Initialize tooltips
77 74 $('.has_tooltip').tooltip()
... ... @@ -84,6 +81,7 @@ $ -&gt;
84 81 $(@).parents('form').submit()
85 82  
86 83 $("abbr.timeago").timeago()
  84 + $('.js-timeago').timeago()
87 85  
88 86 # Flash
89 87 if (flash = $(".flash-container")).length > 0
... ... @@ -123,13 +121,11 @@ $ -&gt;
123 121 $(@).next('table').show()
124 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 129 # Disable an element and add the 'disabled' Bootstrap class
134 130 $.fn.extend disable: ->
135 131 $(@).attr('disabled', 'disabled').addClass('disabled')
... ...
app/assets/javascripts/merge_requests.js.coffee
... ... @@ -2,8 +2,8 @@
2 2 # * Filter merge requests
3 3 #
4 4 @merge_requestsPage = ->
5   - $('#assignee_id').chosen()
6   - $('#milestone_id').chosen()
  5 + $('#assignee_id').select2()
  6 + $('#milestone_id').select2()
7 7 $('#milestone_id, #assignee_id').on 'change', ->
8 8 $(this).closest('form').submit()
9 9  
... ... @@ -21,9 +21,11 @@ class MergeRequest
21 21 this.initMergeWidget()
22 22 this.$('.show-all-commits').on 'click', =>
23 23 this.showAllCommits()
24   -
  24 +
25 25 modal = $('#modal_merge_info').modal(show: false)
26 26  
  27 + disableButtonIfEmptyField '#merge_commit_message', '.accept_merge_request'
  28 +
27 29 # Local jQuery finder
28 30 $: (selector) ->
29 31 this.$el.find(selector)
... ... @@ -83,12 +85,12 @@ class MergeRequest
83 85 url: this.$('.nav-tabs .diffs-tab a').attr('href')
84 86 beforeSend: =>
85 87 this.$('.status').addClass 'loading'
86   -
87 88 complete: =>
88 89 @diffs_loaded = true
89 90 this.$('.status').removeClass 'loading'
90   -
91   - dataType: 'script'
  91 + success: (data) =>
  92 + this.$(".diffs").html(data.html)
  93 + dataType: 'json'
92 94  
93 95 showAllCommits: ->
94 96 this.$('.first-commits').remove()
... ...
app/assets/javascripts/namespace_select.js.coffee 0 → 100644
... ... @@ -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   -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 @@
  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 @@
  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 19 data: "limit=" + @limit + "&offset=" + @offset
20 20 complete: ->
21 21 $(".loading").hide()
22   -
23   - dataType: "script"
  22 + success: (data) ->
  23 + Pager.append(data.count, data.html)
  24 + dataType: "json"
24 25  
25 26 append: (count, html) ->
26 27 $(".content_list").append html
... ...
app/assets/javascripts/profile.js.coffee
... ... @@ -16,3 +16,13 @@ $ -&gt;
16 16  
17 17 $('.update-notifications').on 'ajax:complete', ->
18 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 6  
7 7 @initEvents()
8 8  
9   -
  9 +
10 10 initEvents: ->
11 11 disableButtonIfEmptyField '#project_name', '.project-submit'
12   -
  12 +
13 13 $('#project_issues_enabled').change ->
14 14 if ($(this).is(':checked') == true)
15 15 $('#project_issues_tracker').removeAttr('disabled')
... ... @@ -29,14 +29,20 @@ class Project
29 29  
30 30 $ ->
31 31 # Git clone panel switcher
32   - scope = $ '.project_clone_holder'
  32 + scope = $ '.git-clone-holder'
33 33 if scope.length > 0
34 34 $('a, button', scope).click ->
35 35 $('a, button', scope).removeClass 'active'
36 36 $(@).addClass 'active'
37 37 $('#project_clone', scope).val $(@).data 'clone'
38   - $(".clone").text("").append 'git remote add origin ' + $(@).data 'clone'
  38 + $(".clone").text("").append $(@).data 'clone'
39 39  
40 40 # Ref switcher
41 41 $('.project-refs-select').on 'change', ->
42 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 1 class SearchAutocomplete
2   - constructor: (json) ->
  2 + constructor: (search_autocomplete_path, project_id, project_ref) ->
  3 + project_id = '' unless project_id
  4 + project_ref = '' unless project_ref
  5 + query = "?project_id=" + project_id + "&project_ref=" + project_ref
  6 +
3 7 $("#search").autocomplete
4   - source: json
  8 + source: search_autocomplete_path + query
  9 + minLength: 1
5 10 select: (event, ui) ->
6 11 location.href = ui.item.url
7 12  
... ...
app/assets/javascripts/stat_graph_contributors_graph.js.coffee
... ... @@ -46,11 +46,7 @@ class window.ContributorsGraph
46 46  
47 47 class window.ContributorsMasterGraph extends ContributorsGraph
48 48 constructor: (@data) ->
49   - if $(window).width() > 1214
50   - @width = 1100
51   - else
52   - @width = 870
53   -
  49 + @width = $('.container').width() - 70
54 50 @height = 200
55 51 @x = null
56 52 @y = null
... ... @@ -88,7 +84,6 @@ class window.ContributorsMasterGraph extends ContributorsGraph
88 84 x(d.date)
89 85 ).y0(@height).y1((d) ->
90 86 xa = d.commits = d.commits ? d.additions ? d.deletions
91   - console.log(xa)
92 87 y(xa)
93 88 ).interpolate("basis")
94 89 create_brush: ->
... ... @@ -124,11 +119,7 @@ class window.ContributorsMasterGraph extends ContributorsGraph
124 119  
125 120 class window.ContributorsAuthorGraph extends ContributorsGraph
126 121 constructor: (@data) ->
127   - if $(window).width() > 1214
128   - @width = 490
129   - else
130   - @width = 380
131   -
  122 + @width = $('.container').width()/2 - 100
132 123 @height = 200
133 124 @x = null
134 125 @y = null
... ...
app/assets/javascripts/users_select.js.coffee
1 1 $ ->
2 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 16 userFormatSelection = (user) ->
15 17 user.name
... ...
app/assets/stylesheets/application.scss
... ... @@ -4,19 +4,46 @@
4 4 * the top of the compiled file, but it's generally better to create a new file per style scope.
5 5 *= require jquery.ui.gitlab
6 6 *= require jquery.atwho
7   - *= require chosen
8 7 *= require select2
  8 + *= require highlightjs.min
9 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 47 @import "sections/header.scss";
21 48 @import "sections/nav.scss";
22 49 @import "sections/commits.scss";
... ... @@ -39,6 +66,9 @@
39 66 @import "sections/dashboard.scss";
40 67 @import "sections/stat_graph.scss";
41 68  
  69 +/**
  70 + * Code ighlight
  71 + */
42 72 @import "highlight/white.scss";
43 73 @import "highlight/dark.scss";
44 74 @import "highlight/solarized_dark.scss";
... ... @@ -57,4 +87,3 @@
57 87 * Styles for JS behaviors.
58 88 */
59 89 @import "behaviors.scss";
60   -
... ...
app/assets/stylesheets/common.scss
... ... @@ -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 @@
  1 +.avatar {
  2 + float: left;
  3 + margin-right: 12px;
  4 + width: 40px;
  5 + padding: 1px;
  6 + @include border-radius(4px);
  7 +
  8 + &.avatar-inline {
  9 + float: none;
  10 + margin-left: 3px;
  11 +
  12 + &.s16 { margin-right: 2px; }
  13 + &.s24 { margin-right: 2px; }
  14 + }
  15 +
  16 + &.s16 { width: 16px; height: 16px; margin-right: 6px; }
  17 + &.s24 { width: 24px; height: 24px; margin-right: 8px; }
  18 + &.s26 { width: 26px; height: 26px; margin-right: 8px; }
  19 + &.s32 { width: 32px; height: 32px; margin-right: 10px; }
  20 + &.s60 { width: 60px; height: 60px; margin-right: 12px; }
  21 + &.s90 { width: 90px; height: 90px; margin-right: 15px; }
  22 + &.s160 { width: 160px; height: 160px; margin-right: 20px; }
  23 +}
... ...
app/assets/stylesheets/generic/blocks.scss 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +.light-well {
  2 + background: #f9f9f9;
  3 + padding: 15px;
  4 +}
... ...
app/assets/stylesheets/generic/buttons.scss 0 → 100644
... ... @@ -0,0 +1,169 @@
  1 +.btn {
  2 + display: inline-block;
  3 + margin-bottom: 0;
  4 + font-weight: normal;
  5 + text-align: center;
  6 + vertical-align: middle;
  7 + cursor: pointer;
  8 + background-image: none;
  9 + border: 1px solid transparent;
  10 + white-space: nowrap;
  11 + padding: 6px 12px;
  12 + font-size: 13px;
  13 + line-height: 18px;
  14 + border-radius: 4px;
  15 + -webkit-user-select: none;
  16 + -moz-user-select: none;
  17 + -ms-user-select: none;
  18 + -o-user-select: none;
  19 + user-select: none;
  20 + color: #444444;
  21 + background-color: #fff;
  22 + border-color: #ccc;
  23 + text-shadow: none;
  24 +
  25 + &.hover,
  26 + &:hover {
  27 + color: #444444;
  28 + text-decoration: none;
  29 + background-color: #ebebeb;
  30 + border-color: #adadad;
  31 + }
  32 +
  33 + &.focus,
  34 + &:focus {
  35 + color: #444444;
  36 + text-decoration: none;
  37 + outline: thin dotted #333;
  38 + outline: 5px auto -webkit-focus-ring-color;
  39 + outline-offset: -2px;
  40 + }
  41 +
  42 + &.active,
  43 + &:active {
  44 + outline: 0;
  45 + background-image: none;
  46 + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  47 + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  48 + }
  49 +
  50 + &.disabled,
  51 + &[disabled] {
  52 + cursor: not-allowed;
  53 + pointer-events: none;
  54 + opacity: 0.65;
  55 + filter: alpha(opacity=65);
  56 + -webkit-box-shadow: none;
  57 + box-shadow: none;
  58 + }
  59 +
  60 + &.btn-primary {
  61 + color: #ffffff;
  62 + background-color: #429bca;
  63 + border-color: #358ebd;
  64 +
  65 + &.hover,
  66 + &:hover,
  67 + &.disabled,
  68 + &[disabled] {
  69 + color: #ffffff;
  70 + background-color: #3286b1;
  71 + border-color: #286e8e;
  72 + }
  73 + }
  74 +
  75 + &.btn-success {
  76 + color: #ffffff;
  77 + background-color: #5cb85c;
  78 + border-color: #4cae4c;
  79 +
  80 +
  81 + &.hover,
  82 + &:hover,
  83 + &.disabled,
  84 + &[disabled] {
  85 + color: #ffffff;
  86 + background-color: #47a447;
  87 + border-color: #398439;
  88 + }
  89 + }
  90 +
  91 + &.btn-danger {
  92 + color: #ffffff;
  93 + background-color: #d9534f;
  94 + border-color: #d43f3a;
  95 +
  96 +
  97 + &.hover,
  98 + &:hover,
  99 + &.disabled,
  100 + &[disabled] {
  101 + color: #ffffff;
  102 + background-color: #d2322d;
  103 + border-color: #ac2925;
  104 + }
  105 + }
  106 +
  107 + &.btn-new {
  108 + @extend .btn-success;
  109 + }
  110 +
  111 + &.btn-create {
  112 + @extend .wide;
  113 + @extend .btn-success;
  114 + }
  115 +
  116 + &.btn-save {
  117 + @extend .wide;
  118 + @extend .btn-primary;
  119 + }
  120 +
  121 + &.btn-close,
  122 + &.btn-remove {
  123 + @extend .btn-danger;
  124 + }
  125 +
  126 + &.btn-cancel {
  127 + float: right;
  128 + }
  129 +
  130 + &.wide {
  131 + padding-left: 20px;
  132 + padding-right: 20px;
  133 + }
  134 +
  135 + &.btn-small {
  136 + padding: 2px 10px;
  137 + font-size: 12px;
  138 + }
  139 +
  140 + &.btn-tiny {
  141 + font-size: 11px;
  142 + padding: 2px 6px;
  143 + line-height: 16px;
  144 + margin: 2px;
  145 + }
  146 +}
  147 +
  148 +.btn-block {
  149 + width: 100%;
  150 + margin: 0;
  151 + margin-bottom: 15px;
  152 + &.btn {
  153 + padding: 6px 0;
  154 + }
  155 +}
  156 +
  157 +.btn,
  158 +.btn-group {
  159 + &.grouped {
  160 + margin-right: 7px;
  161 + float: left;
  162 + &:last-child {
  163 + margin-right: 0px;
  164 + }
  165 + }
  166 +}
  167 +
  168 +.btn-group-small > .btn { @extend .btn.btn-small; }
  169 +.btn-group-tiny > .btn { @extend .btn.btn-tiny; }
... ...
app/assets/stylesheets/generic/common.scss 0 → 100644
... ... @@ -0,0 +1,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 @@
  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 @@
  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 @@
  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 @@
  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 @@
  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 @@
  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 @@
  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 @@
  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   -/** 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   -.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   -/**
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   -.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   -/** 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   -/**
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   -/** 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   -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   -/**
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   -/**
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   -/**
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   -/**
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   -/**
2   - * General Colors
3   - */
4   -$primary_color: #2FA0BB;
5   -$link_color: #3A89A3;
6   -$style_color: #474D57;
7   -$hover: #D9EDF7;
8   -
9   -/**
10   - * Commit Diff Colors
11   - */
12   -$added: #63c363;
13   -$deleted: #f77;
app/assets/stylesheets/gl_bootstrap.scss 0 → 100644
... ... @@ -0,0 +1,220 @@
  1 +/*
  2 + * Twitter bootstrap with GitLab customizations/additions
  3 + *
  4 + * Some unused bootstrap compontents like panels are not included.
  5 + * Other components like tabs are modified to GitLab style.
  6 + *
  7 + */
  8 +
  9 +$font-size-base: 13px !default;
  10 +$nav-pills-active-link-hover-bg: $bg_style_color;
  11 +$pagination-active-bg: $bg_style_color;
  12 +
  13 +// Core variables and mixins
  14 +@import "bootstrap/variables";
  15 +@import "bootstrap/mixins";
  16 +
  17 +// Reset
  18 +@import "bootstrap/normalize";
  19 +@import "bootstrap/print";
  20 +
  21 +// Core CSS
  22 +@import "bootstrap/scaffolding";
  23 +@import "bootstrap/type";
  24 +@import "bootstrap/code";
  25 +@import "bootstrap/grid";
  26 +@import "bootstrap/tables";
  27 +@import "bootstrap/forms";
  28 +
  29 +// Components
  30 +@import "bootstrap/component-animations";
  31 +@import "bootstrap/dropdowns";
  32 +@import "bootstrap/button-groups";
  33 +@import "bootstrap/input-groups";
  34 +@import "bootstrap/navs";
  35 +@import "bootstrap/navbar";
  36 +@import "bootstrap/breadcrumbs";
  37 +@import "bootstrap/pagination";
  38 +@import "bootstrap/pager";
  39 +@import "bootstrap/labels";
  40 +@import "bootstrap/badges";
  41 +@import "bootstrap/jumbotron";
  42 +@import "bootstrap/thumbnails";
  43 +@import "bootstrap/alerts";
  44 +@import "bootstrap/progress-bars";
  45 +@import "bootstrap/list-group";
  46 +@import "bootstrap/wells";
  47 +@import "bootstrap/close";
  48 +
  49 +// Components w/ JavaScript
  50 +@import "bootstrap/modals";
  51 +@import "bootstrap/tooltip";
  52 +@import "bootstrap/popovers";
  53 +@import "bootstrap/carousel";
  54 +
  55 +// Utility classes
  56 +.clearfix {
  57 + @include clearfix();
  58 +}
  59 +.center-block {
  60 + @include center-block();
  61 +}
  62 +.pull-right {
  63 + float: right !important;
  64 +}
  65 +.pull-left {
  66 + float: left !important;
  67 +}
  68 +.hide {
  69 + display: none;
  70 +}
  71 +.show {
  72 + display: block !important;
  73 +}
  74 +.invisible {
  75 + visibility: hidden;
  76 +}
  77 +.text-hide {
  78 + @include text-hide();
  79 +}
  80 +.hidden {
  81 + display: none !important;
  82 + visibility: hidden !important;
  83 +}
  84 +.affix {
  85 + position: fixed;
  86 +}
  87 +
  88 +@import "bootstrap/responsive-utilities";
  89 +
  90 +// Labels
  91 +.label {
  92 + padding: 2px 4px;
  93 + font-size: 12px;
  94 + font-style: normal;
  95 + font-weight: normal;
  96 + display: inline-block;
  97 +
  98 + &.label-gray {
  99 + background-color: #eee;
  100 + color: #999;
  101 + text-shadow: none;
  102 + }
  103 +
  104 + &.label-inverse {
  105 + background-color: #333333;
  106 + }
  107 +}
  108 +
  109 +// Nav tabs
  110 +.nav.nav-tabs {
  111 + li {
  112 + > a {
  113 + padding: 8px 20px;
  114 + margin-right: 7px;
  115 + line-height: 20px;
  116 + border-color: #EEE;
  117 + color: #888;
  118 + border-bottom: 1px solid #ddd;
  119 + .badge {
  120 + background-color: #eee;
  121 + color: #888;
  122 + text-shadow: 0 1px 1px #fff;
  123 + }
  124 + i[class^="icon-"] {
  125 + line-height: 14px;
  126 + }
  127 + }
  128 + &.active {
  129 + > a {
  130 + border-color: #CCC;
  131 + border-bottom: 1px solid #fff;
  132 + color: #333;
  133 + font-weight: bold;
  134 + }
  135 + }
  136 + }
  137 +
  138 + &.nav-small-tabs > li > a {
  139 + padding: 6px 9px;
  140 + }
  141 +}
  142 +
  143 +.nav-tabs > li > a,
  144 +.nav-pills > li > a {
  145 + color: #666;
  146 +}
  147 +
  148 +.nav-small > li > a {
  149 + padding: 3px 5px;
  150 + font-size: 12px;
  151 +}
  152 +
  153 +
  154 +/*
  155 + * Callouts from Bootstrap3 docs
  156 + *
  157 + * Not quite alerts, but custom and helpful notes for folks reading the docs.
  158 + * Requires a base and modifier class.
  159 + */
  160 +
  161 +/* Common styles for all types */
  162 +.bs-callout {
  163 + margin: 20px 0;
  164 + padding: 20px;
  165 + border-left: 3px solid #eee;
  166 + color: #666;
  167 + background: #f9f9f9;
  168 +}
  169 +.bs-callout h4 {
  170 + margin-top: 0;
  171 + margin-bottom: 5px;
  172 +}
  173 +.bs-callout p:last-child {
  174 + margin-bottom: 0;
  175 +}
  176 +
  177 +/* Variations */
  178 +.bs-callout-danger {
  179 + background-color: #fdf7f7;
  180 + border-color: #eed3d7;
  181 + color: #b94a48;
  182 +}
  183 +.bs-callout-warning {
  184 + background-color: #faf8f0;
  185 + border-color: #faebcc;
  186 + color: #8a6d3b;
  187 +}
  188 +.bs-callout-info {
  189 + background-color: #f4f8fa;
  190 + border-color: #bce8f1;
  191 + color: #34789a;
  192 +}
  193 +.bs-callout-success {
  194 + background-color: #dff0d8;
  195 + border-color: #5cA64d;
  196 + color: #3c763d;
  197 +}
  198 +
  199 +// Breadcrumb
  200 +ul.breadcrumb {
  201 + background: white;
  202 + border: none;
  203 + li {
  204 + display: inline;
  205 + text-shadow: 0 1px 0 white
  206 + }
  207 +
  208 + a {
  209 + font-size: 16px;
  210 + }
  211 +}
  212 +
  213 +/**
  214 + * fix to keep tooltips position in top navigation bar
  215 + *
  216 + */
  217 +.navbar .nav > li {
  218 + position: relative;
  219 + white-space: nowrap;
  220 +}
... ...
app/assets/stylesheets/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 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 20 pre {
15 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 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 16 pre {
6 17 background-color: #002B36;
7 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 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 12 pre {
6 13 background-color: #fff;
7 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 178 .shadow {
... ...
app/assets/stylesheets/main/fonts.scss 0 → 100644
... ... @@ -0,0 +1,2 @@
  1 +/** Typo **/
  2 +$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono', 'lucida console', monospace;
... ...
app/assets/stylesheets/main/layout.scss 0 → 100644
... ... @@ -0,0 +1,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 @@
  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 @@
  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 20 label { width: 110px; }
21 21 .controls { margin-left: 130px; }
22 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 16  
17 17 .header {
18 18 @extend .clearfix;
  19 + background: #DDD;
  20 + border-bottom: 1px solid #CCC;
19 21 padding: 5px 5px 5px 10px;
20 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 24 > span {
34 25 font-family: $monospace_font;
35 26 font-size: 14px;
36   - line-height: 30px;
  27 + line-height: 2;
37 28 }
38 29  
39   - a.view-file{
  30 + .view-file {
40 31 font-weight: bold;
  32 + float: right;
  33 + background-color: #EEE;
41 34 }
42 35  
43   - .commit-short-id{
  36 + .commit-short-id {
44 37 font-family: $monospace_font;
45 38 font-size: smaller;
46 39 }
47 40  
48   - .file-mode{
  41 + .file-mode {
49 42 font-family: $monospace_font;
50 43 }
51 44 }
... ... @@ -55,13 +48,13 @@
55 48 background: #FFF;
56 49 color: #333;
57 50 font-size: 12px;
58   - .old{
59   - span.idiff{
  51 + .old {
  52 + span.idiff {
60 53 background-color: #FAA;
61 54 }
62 55 }
63   - .new{
64   - span.idiff{
  56 + .new {
  57 + span.idiff {
65 58 background-color: #AFA;
66 59 }
67 60 }
... ... @@ -77,7 +70,7 @@
77 70 font-size: 12px;
78 71 }
79 72 }
80   - .old_line, .new_line {
  73 + .old_line, .new_line, .diff_line {
81 74 margin: 0px;
82 75 padding: 0px;
83 76 border: none;
... ... @@ -87,7 +80,7 @@
87 80 border-right: 1px solid #ccc;
88 81 text-align: right;
89 82 min-width: 35px;
90   - max-width: 35px;
  83 + max-width: 50px;
91 84 width: 35px;
92 85 @include user-select(none);
93 86 a {
... ... @@ -99,6 +92,15 @@
99 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 105 .line_holder {
104 106 &.old .old_line,
... ... @@ -129,6 +131,11 @@
129 131 color: #ccc;
130 132 background: #fafafa;
131 133 }
  134 + &.parallel {
  135 + display: table-cell;
  136 + overflow: hidden;
  137 + width: 50%;
  138 + }
132 139 }
133 140 }
134 141 .image {
... ... @@ -293,6 +300,7 @@
293 300 background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf));
294 301 background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf);
295 302 background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);
  303 + background-image: -ms-linear-gradient(#eee 6.6%, #dfdfdf);
296 304 background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);
297 305  
298 306 ul, li{
... ... @@ -391,8 +399,8 @@
391 399  
392 400 .commits-compare-switch{
393 401 background: url("switch_icon.png") no-repeat center center;
394   - width: 22px;
395   - height: 22px;
  402 + width: 32px;
  403 + height: 32px;
396 404 text-indent: -9999px;
397 405 float: left;
398 406 margin-right: 9px;
... ... @@ -419,7 +427,6 @@
419 427 .commit-title {
420 428 margin: 0;
421 429 font-size: 20px;
422   - font-weight: bold;
423 430 }
424 431  
425 432 .commit-description {
... ... @@ -474,9 +481,13 @@ li.commit {
474 481 font-family: $monospace_font;
475 482 }
476 483  
  484 + .str-truncated {
  485 + max-width: 70%;
  486 + }
  487 +
477 488 .commit-row-message {
478   - color: #555;
479   - font-weight: bolder;
  489 + color: #333;
  490 + font-weight: 500;
480 491 &:hover {
481 492 color: #444;
482 493 text-decoration: underline;
... ... @@ -485,13 +496,14 @@ li.commit {
485 496 }
486 497  
487 498 .commit-row-info {
  499 + color: #777;
  500 +
488 501 a {
489 502 color: #777;
490 503 }
491 504  
492 505 .committed_ago {
493 506 float: right;
494   - @extend .cgray;
495 507 }
496 508 }
497 509  
... ... @@ -505,4 +517,4 @@ li.commit {
505 517 @extend .cgray;
506 518 }
507 519 }
508   -}
509 520 \ No newline at end of file
  521 +}
... ...
app/assets/stylesheets/sections/dashboard.scss
1 1 .dashboard {
2   - @extend .row;
3   - .activities {
4   - }
5   -
6 2 .side {
7   - @extend .pull-right;
8   -
9 3 .ui-box {
10 4 margin: 0px;
11 5 box-shadow: none;
... ... @@ -20,7 +14,7 @@
20 14  
21 15 .search-text-input {
22 16 float:left;
23   - @extend .span2;
  17 + @extend .col-md-2;
24 18 }
25 19 .btn {
26 20 margin-left: 5px;
... ... @@ -32,14 +26,15 @@
32 26 .dash-filter {
33 27 margin: 7px 0;
34 28 padding: 4px 6px;
35   - width: 202px;
  29 + width: 220px;
36 30 float: left;
  31 + height: inherit;
37 32 }
38 33 }
39 34  
40 35 @media (max-width: 1200px) {
41 36 .dashboard .dash-filter {
42   - width: 132px;
  37 + width: 150px;
43 38 }
44 39 }
45 40  
... ... @@ -51,7 +46,7 @@
51 46 li {
52 47 &.active {
53 48 a {
54   - @include linear-gradient(#f5f5f5, #eee);
  49 + background-color: #EEE;
55 50 border-bottom: 1px solid #EEE !important;
56 51 &:hover {
57 52 background: #eee;
... ... @@ -60,43 +55,64 @@
60 55 }
61 56  
62 57 a {
63   - border-color: #CCC !important;
  58 + border-color: #DDD !important;
64 59 }
65 60 }
66 61 }
67 62  
68 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 72 .project-name, .group-name {
77   - font-size: 16px;
  73 + font-weight: 500;
78 74 }
79 75  
80 76 .arrow {
81 77 float: right;
82   - padding: 10px 5px;
  78 + padding: 0px 5px;
83 79 margin: 0;
84 80 font-size: 20px;
85 81 color: #666;
86 82 }
87 83  
88 84 .last-activity {
  85 + float: right;
  86 + font-size: 12px;
89 87 color: #AAA;
90 88 display: block;
91   - margin-top: 5px;
92 89 .date {
93 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 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 47 .event-title {
48 48 color: #333;
49 49 font-weight: normal;
50   - font-size: 15px;
  50 + font-size: 14px;
51 51 .author_name {
52 52 color: #333;
53 53 }
... ... @@ -60,14 +60,14 @@
60 60 color: #666;
61 61 }
62 62 .event-note {
63   - color: #555;
  63 + color: #666;
64 64 margin-top: 5px;
65 65  
66 66 pre {
67 67 border: none;
68 68 background: #f9f9f9;
69 69 border-radius: 0;
70   - color: #555;
  70 + color: #666;
71 71 margin: 0 20px;
72 72 }
73 73  
... ... @@ -75,6 +75,7 @@
75 75 margin-top: 4px;
76 76 margin-left: 0px;
77 77 max-width: 200px;
  78 + float: none;
78 79 }
79 80  
80 81 p:last-child {
... ... @@ -112,6 +113,7 @@
112 113 &.commit {
113 114 background: transparent;
114 115 padding: 3px;
  116 + padding-left: 0;
115 117 border: none;
116 118 color: #666;
117 119 .commit-row-title {
... ... @@ -121,6 +123,7 @@
121 123 &.commits-stat {
122 124 display: block;
123 125 padding: 3px;
  126 + padding-left: 0;
124 127  
125 128 &:hover {
126 129 background: none;
... ... @@ -142,19 +145,19 @@
142 145 .filter_icon {
143 146 a {
144 147 text-align:center;
145   - border-left: 3px solid $primary_color;
146   - background: #f9f9f9;
  148 + background: #EEE;
147 149 margin-bottom: 10px;
148 150 float: left;
149   - padding: 9px 7px;
  151 + padding: 9px 6px;
150 152 font-size: 18px;
151   - width: 26px;
  153 + width: 40px;
  154 + @include border-radius(3px);
152 155 }
153 156  
154 157 &.inactive {
155 158 a {
156 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 4 */
5 5 header {
6 6 &.navbar-gitlab {
  7 + margin-bottom: 0;
  8 + min-height: 40px;
  9 +
7 10 .navbar-inner {
8   - height: 40px;
9   - padding: 3px;
10 11 background: #F1F1F1;
  12 + border-bottom: 1px solid #DDD;
11 13 filter: none;
12 14  
13 15 .nav > li > a {
14 16 color: $style_color;
15 17 text-shadow: 0 1px 0 #fff;
16 18 font-size: 14px;
17   - padding: 10px;
  19 + line-height: 32px;
  20 + padding: 6px 10px;
  21 +
  22 + &:hover {
  23 + background: none;
  24 + }
18 25 }
19 26  
20 27 /** NAV block with links and profile **/
... ... @@ -22,6 +29,59 @@ header {
22 29 float: right;
23 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 95 .app_logo {
36 96 float: left;
37 97 margin-right: 9px;
38   - position: relative;
39   - top: -5px;
40   - padding-top: 5px;
41 98  
42 99 a {
43 100 float: left;
... ... @@ -46,10 +103,10 @@ header {
46 103  
47 104 h1 {
48 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 108 float: left;
52   - height: 40px;
  109 + height: 46px;
53 110 width: 40px;
54 111 @include header-font;
55 112 text-indent: -9999px;
... ... @@ -75,7 +132,7 @@ header {
75 132  
76 133 .profile-pic {
77 134 position: relative;
78   - top: -4px;
  135 + top: -1px;
79 136 img {
80 137 width: 26px;
81 138 height: 26px;
... ... @@ -91,21 +148,25 @@ header {
91 148 .search {
92 149 margin-right: 10px;
93 150 margin-left: 10px;
  151 + margin-top: 8px;
  152 +
  153 + form {
  154 + margin: 0;
  155 + padding: 0;
  156 + }
94 157  
95 158 .search-input {
96   - @extend .span3;
97 159 background-image: url("icon-search.png");
98 160 background-repeat: no-repeat;
99 161 background-position: 10px;
  162 + height: inherit;
  163 + padding: 4px 6px;
100 164 padding-left: 25px;
101 165 font-size: 13px;
102 166 @include border-radius(3px);
103 167 border: 1px solid #c6c6c6;
104 168 box-shadow: none;
105 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 181 background: #708090;
121 182 border-bottom: 1px solid #AAA;
122 183  
  184 + .navbar-toggle { color: #fff; }
  185 +
123 186 .nav > li > a {
124 187 color: #AAA;
125 188 text-shadow: 0 1px 0 #444;
... ... @@ -133,6 +196,8 @@ header {
133 196  
134 197 .turbolink-spinner {
135 198 color: #FFF;
  199 + font-size: 22px;
  200 + margin-right: 10px;
136 201 }
137 202  
138 203 .search {
... ... @@ -152,8 +217,8 @@ header {
152 217 .app_logo {
153 218 a {
154 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 222 color: #fff;
158 223 text-shadow: 0 1px 1px #444;
159 224 }
... ... @@ -181,12 +246,26 @@ header {
181 246 .separator {
182 247 float: left;
183 248 height: 46px;
184   - width: 1px;
  249 + width: 2px;
185 250 background: white;
186 251 border-left: 1px solid #DDD;
187   - margin-top: -3px;
188 252 margin-left: 10px;
189 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 60 .btn.close_issue {
61 61 color: #B94A48;
62 62 font-weight: bold;
63   - @include shade;
64 63 &:hover {
65 64 color: #B94A48;
66 65 }
... ... @@ -68,7 +67,6 @@ input.check_all_issues {
68 67 .btn.reopen_issue {
69 68 color: #468847;
70 69 font-weight: bold;
71   - @include shade;
72 70 &:hover {
73 71 color: #468847;
74 72 }
... ... @@ -77,8 +75,8 @@ input.check_all_issues {
77 75 @media (min-width: 800px) { .issues_filters select { width: 160px; } }
78 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 81 .issues-holder {
84 82 .issues_filters {
... ... @@ -103,3 +101,27 @@ input.check_all_issues {
103 101 .participants {
104 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 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 4 *
5 5 */
6 6 .automerge_widget {
7   - &.can_be_merged {
8   - background: #DFF0D8;
9   - }
10   -
11 7 form {
12 8 margin-bottom: 0;
13 9 .clearfix {
... ... @@ -15,32 +11,12 @@
15 11 }
16 12 }
17 13  
18   - .accept_group {
19   - float: left;
20   - border: 1px solid #ADA;
21   - padding: 2px;
22   - @include border-radius(5px);
23   - background: #CEB;
24   -
25   - .accept_merge_request {
26   - font-size: 13px;
27   - float: left;
28   - }
29   - .remove_branch_holder {
30   - margin-left: 20px;
31   - margin-right: 10px;
32   - float: left;
33   - }
  14 + .accept-group {
34 15 label {
35   - color: #444;
36   - text-align: left
  16 + margin: 5px;
  17 + margin-left: 20px;
37 18 }
38 19 }
39   -
40   -
41   - .how_to_merge_link {
42   - @extend .primary;
43   - }
44 20 }
45 21  
46 22 .merge-request .nav-tabs{
... ... @@ -53,11 +29,6 @@
53 29 }
54 30 }
55 31  
56   -.merge-in-progress {
57   - @extend .padded;
58   - @extend .append-bottom-10;
59   -}
60   -
61 32 .mr_source_commit,
62 33 .mr_target_commit {
63 34 .commit {
... ... @@ -110,9 +81,11 @@
110 81  
111 82 .merge-request-angle {
112 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 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 border-bottom: 1px solid #E1E1E1;
7 7  
8 8 ul {
  9 + padding: 0;
9 10 margin: auto;
10 11 height: 40px;
11 12 overflow: hidden;
... ... @@ -34,7 +35,7 @@
34 35 width: 1%;
35 36 &.active {
36 37 a {
37   - color: $style_color;
  38 + color: #333;
38 39 font-weight: bolder;
39 40  
40 41 &:after {
... ... @@ -45,7 +46,7 @@
45 46 left: 50%;
46 47 width: 0;
47 48 height: 0;
48   - border-color: transparent transparent #777 transparent;
  49 + border-color: transparent transparent #333 transparent;
49 50 border-style: solid;
50 51 border-width: 6px;
51 52 margin-left: -6px;
... ... @@ -82,4 +83,38 @@
82 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 2 * Notes
3 3 */
4 4  
5   -@-webkit-keyframes target-note {
  5 +@-webkit-keyframes targe3-note {
6 6 from { background:#fffff0; }
7 7 50% { background:#ffffd3; }
8 8 to { background:#fffff0; }
... ... @@ -92,10 +92,6 @@ ul.notes {
92 92 .note-body {
93 93 @include md-typography;
94 94 margin-left: 45px;
95   -
96   - .highlight {
97   - @include border-radius(4px);
98   - }
99 95 }
100 96 .note-header {
101 97 padding-bottom: 5px;
... ... @@ -119,9 +115,9 @@ ul.notes {
119 115 }
120 116  
121 117 .file .notes_holder {
122   - font-family: $sansFontFamily;
123 118 font-size: 13px;
124 119 line-height: 18px;
  120 + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
125 121  
126 122 td {
127 123 border: 1px solid #ddd;
... ... @@ -130,9 +126,15 @@ ul.notes {
130 126 &.notes_line {
131 127 text-align: center;
132 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 136 &.notes_content {
135   - background-color: $white;
  137 + background-color: #fff;
136 138 border-width: 1px 0;
137 139 padding-top: 0;
138 140  
... ... @@ -251,12 +253,12 @@ ul.notes {
251 253 .file,
252 254 .discussion {
253 255 .new_note {
254   - margin: 8px 5px 8px 0;
  256 + margin: 0;
  257 + border: none;
255 258 }
256 259 }
257 260 .new_note {
258 261 display: none;
259   -
260 262 .buttons {
261 263 float: left;
262 264 margin-top: 8px;
... ... @@ -270,10 +272,9 @@ ul.notes {
270 272  
271 273 // preview/edit buttons
272 274 > a {
273   - font-size: 24px;
274   - padding: 4px;
275 275 position: absolute;
276   - right: 10px;
  276 + right: 5px;
  277 + bottom: -60px;
277 278 }
278 279 .note_preview {
279 280 background: #f5f5f5;
... ... @@ -287,7 +288,7 @@ ul.notes {
287 288 box-shadow: none;
288 289 font-size: 14px;
289 290 height: 80px;
290   - width: 98.6%;
  291 + width: 100%;
291 292 }
292 293 }
293 294 }
... ... @@ -298,7 +299,7 @@ ul.notes {
298 299 }
299 300  
300 301 .note-image-attach {
301   - @extend .span4;
  302 + @extend .col-md-4;
302 303 @extend .thumbnail;
303 304 margin-left: 45px;
304 305 }
... ... @@ -306,10 +307,8 @@ ul.notes {
306 307  
307 308 .common-note-form {
308 309 margin: 0;
309   - height: 140px;
310 310 background: #F9F9F9;
311 311 padding: 3px;
312   - padding-bottom: 25px;
313 312 border: 1px solid #DDD;
314 313 }
315 314  
... ... @@ -320,7 +319,7 @@ ul.notes {
320 319 padding: 0 5px;
321 320  
322 321 .note-form-option {
323   - margin-top: 10px;
  322 + margin-top: 8px;
324 323 margin-left: 30px;
325 324 @extend .pull-left;
326 325 }
... ... @@ -338,7 +337,7 @@ ul.notes {
338 337 box-shadow: none;
339 338 font-size: 14px;
340 339 height: 80px;
341   - width: 98.6%;
  340 + width: 100%;
342 341 }
343 342  
344 343 .form-actions {
... ... @@ -358,3 +357,7 @@ ul.notes {
358 357 .js-note-attachment-delete {
359 358 display: none;
360 359 }
  360 +
  361 +.parallel-comment {
  362 + padding: 6px;
  363 +}
... ...
app/assets/stylesheets/sections/profile.scss
1 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 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 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 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 131 ul.nav.nav-projects-tabs {
... ... @@ -79,18 +154,19 @@ ul.nav.nav-projects-tabs {
79 154 margin: 0px;
80 155 }
81 156  
82   -.my-projects {
  157 +.my-projects,
  158 +.public-projects {
83 159 li {
84   - .project-title {
85   - font-size: 14px;
86   - }
87   -
88 160 .project-info {
89 161 margin-bottom: 10px;
90 162 }
91 163  
92   - .access-icon i {
  164 + .access-icon {
93 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 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 +}
... ...