Commit 319f355aeda3fa67c1bc4451c4db5787090ab8af
Exists in
spb-stable
and in
3 other branches
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
.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'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 | - | |
| 3 | + | |
| 4 | 4 | |
| 5 | 5 |  |
| 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
app/assets/images/ajax_loader.gif
7.74 KB
app/assets/images/ajax_loader_gray.gif
8.17 KB
app/assets/images/ajax_loader_tree.gif
6.38 KB
app/assets/images/bg-header.png
app/assets/images/dark-scheme-preview.png
app/assets/images/favicon.ico
No preview for this file type
app/assets/images/file_txt.png
app/assets/images/icon-search.png
app/assets/images/images.png
app/assets/images/logo-black.png
app/assets/images/logo-white.png
app/assets/images/monokai-scheme-preview.png
app/assets/images/no_avatar.png
4.77 KB
app/assets/images/onion_skin_sprites.gif
app/assets/images/solarized-dark-scheme-preview.png
app/assets/images/swipemode_sprites.gif
app/assets/images/switch_icon.png
app/assets/images/trans_bg.gif
app/assets/images/white-scheme-preview.png
app/assets/javascripts/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 @@ $ -> |
| 3 | 3 | container = $(@).closest(".js-toggler-container") |
| 4 | 4 | |
| 5 | 5 | container.toggleClass("on") |
| 6 | - | |
| 6 | + | |
| 7 | 7 | $("body").on "click", ".js-toggle-visibility-link", (e) -> |
| 8 | 8 | $(@).find('i'). |
| 9 | 9 | toggleClass('icon-chevron-down'). |
| ... | ... | @@ -11,7 +11,7 @@ $ -> |
| 11 | 11 | container = $(".js-toggle-visibility-container") |
| 12 | 12 | container.toggleClass("hide") |
| 13 | 13 | e.preventDefault() |
| 14 | - | |
| 14 | + | |
| 15 | 15 | $("body").on "click", ".js-toggle-button", (e) -> |
| 16 | 16 | $(@).closest(".js-toggle-container").find(".js-toggle-content").toggle() |
| 17 | 17 | e.preventDefault() | ... | ... |
app/assets/javascripts/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 @@ $ -> |
| 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 = -> |
| 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 @@ $ -> |
| 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 @@ $ -> |
| 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 @@ $ -> |
| 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() | ... | ... |
| ... | ... | @@ -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 | -}; |
| ... | ... | @@ -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 | ... | ... |
| ... | ... | @@ -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 @@ $ -> |
| 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 | -} |
| ... | ... | @@ -0,0 +1,23 @@ |
| 1 | +.avatar { | |
| 2 | + float: left; | |
| 3 | + margin-right: 12px; | |
| 4 | + width: 40px; | |
| 5 | + padding: 1px; | |
| 6 | + @include border-radius(4px); | |
| 7 | + | |
| 8 | + &.avatar-inline { | |
| 9 | + float: none; | |
| 10 | + margin-left: 3px; | |
| 11 | + | |
| 12 | + &.s16 { margin-right: 2px; } | |
| 13 | + &.s24 { margin-right: 2px; } | |
| 14 | + } | |
| 15 | + | |
| 16 | + &.s16 { width: 16px; height: 16px; margin-right: 6px; } | |
| 17 | + &.s24 { width: 24px; height: 24px; margin-right: 8px; } | |
| 18 | + &.s26 { width: 26px; height: 26px; margin-right: 8px; } | |
| 19 | + &.s32 { width: 32px; height: 32px; margin-right: 10px; } | |
| 20 | + &.s60 { width: 60px; height: 60px; margin-right: 12px; } | |
| 21 | + &.s90 { width: 90px; height: 90px; margin-right: 15px; } | |
| 22 | + &.s160 { width: 160px; height: 160px; margin-right: 20px; } | |
| 23 | +} | ... | ... |
| ... | ... | @@ -0,0 +1,169 @@ |
| 1 | +.btn { | |
| 2 | + display: inline-block; | |
| 3 | + margin-bottom: 0; | |
| 4 | + font-weight: normal; | |
| 5 | + text-align: center; | |
| 6 | + vertical-align: middle; | |
| 7 | + cursor: pointer; | |
| 8 | + background-image: none; | |
| 9 | + border: 1px solid transparent; | |
| 10 | + white-space: nowrap; | |
| 11 | + padding: 6px 12px; | |
| 12 | + font-size: 13px; | |
| 13 | + line-height: 18px; | |
| 14 | + border-radius: 4px; | |
| 15 | + -webkit-user-select: none; | |
| 16 | + -moz-user-select: none; | |
| 17 | + -ms-user-select: none; | |
| 18 | + -o-user-select: none; | |
| 19 | + user-select: none; | |
| 20 | + color: #444444; | |
| 21 | + background-color: #fff; | |
| 22 | + border-color: #ccc; | |
| 23 | + text-shadow: none; | |
| 24 | + | |
| 25 | + &.hover, | |
| 26 | + &:hover { | |
| 27 | + color: #444444; | |
| 28 | + text-decoration: none; | |
| 29 | + background-color: #ebebeb; | |
| 30 | + border-color: #adadad; | |
| 31 | + } | |
| 32 | + | |
| 33 | + &.focus, | |
| 34 | + &:focus { | |
| 35 | + color: #444444; | |
| 36 | + text-decoration: none; | |
| 37 | + outline: thin dotted #333; | |
| 38 | + outline: 5px auto -webkit-focus-ring-color; | |
| 39 | + outline-offset: -2px; | |
| 40 | + } | |
| 41 | + | |
| 42 | + &.active, | |
| 43 | + &:active { | |
| 44 | + outline: 0; | |
| 45 | + background-image: none; | |
| 46 | + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); | |
| 47 | + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); | |
| 48 | + } | |
| 49 | + | |
| 50 | + &.disabled, | |
| 51 | + &[disabled] { | |
| 52 | + cursor: not-allowed; | |
| 53 | + pointer-events: none; | |
| 54 | + opacity: 0.65; | |
| 55 | + filter: alpha(opacity=65); | |
| 56 | + -webkit-box-shadow: none; | |
| 57 | + box-shadow: none; | |
| 58 | + } | |
| 59 | + | |
| 60 | + &.btn-primary { | |
| 61 | + color: #ffffff; | |
| 62 | + background-color: #429bca; | |
| 63 | + border-color: #358ebd; | |
| 64 | + | |
| 65 | + &.hover, | |
| 66 | + &:hover, | |
| 67 | + &.disabled, | |
| 68 | + &[disabled] { | |
| 69 | + color: #ffffff; | |
| 70 | + background-color: #3286b1; | |
| 71 | + border-color: #286e8e; | |
| 72 | + } | |
| 73 | + } | |
| 74 | + | |
| 75 | + &.btn-success { | |
| 76 | + color: #ffffff; | |
| 77 | + background-color: #5cb85c; | |
| 78 | + border-color: #4cae4c; | |
| 79 | + | |
| 80 | + | |
| 81 | + &.hover, | |
| 82 | + &:hover, | |
| 83 | + &.disabled, | |
| 84 | + &[disabled] { | |
| 85 | + color: #ffffff; | |
| 86 | + background-color: #47a447; | |
| 87 | + border-color: #398439; | |
| 88 | + } | |
| 89 | + } | |
| 90 | + | |
| 91 | + &.btn-danger { | |
| 92 | + color: #ffffff; | |
| 93 | + background-color: #d9534f; | |
| 94 | + border-color: #d43f3a; | |
| 95 | + | |
| 96 | + | |
| 97 | + &.hover, | |
| 98 | + &:hover, | |
| 99 | + &.disabled, | |
| 100 | + &[disabled] { | |
| 101 | + color: #ffffff; | |
| 102 | + background-color: #d2322d; | |
| 103 | + border-color: #ac2925; | |
| 104 | + } | |
| 105 | + } | |
| 106 | + | |
| 107 | + &.btn-new { | |
| 108 | + @extend .btn-success; | |
| 109 | + } | |
| 110 | + | |
| 111 | + &.btn-create { | |
| 112 | + @extend .wide; | |
| 113 | + @extend .btn-success; | |
| 114 | + } | |
| 115 | + | |
| 116 | + &.btn-save { | |
| 117 | + @extend .wide; | |
| 118 | + @extend .btn-primary; | |
| 119 | + } | |
| 120 | + | |
| 121 | + &.btn-close, | |
| 122 | + &.btn-remove { | |
| 123 | + @extend .btn-danger; | |
| 124 | + } | |
| 125 | + | |
| 126 | + &.btn-cancel { | |
| 127 | + float: right; | |
| 128 | + } | |
| 129 | + | |
| 130 | + &.wide { | |
| 131 | + padding-left: 20px; | |
| 132 | + padding-right: 20px; | |
| 133 | + } | |
| 134 | + | |
| 135 | + &.btn-small { | |
| 136 | + padding: 2px 10px; | |
| 137 | + font-size: 12px; | |
| 138 | + } | |
| 139 | + | |
| 140 | + &.btn-tiny { | |
| 141 | + font-size: 11px; | |
| 142 | + padding: 2px 6px; | |
| 143 | + line-height: 16px; | |
| 144 | + margin: 2px; | |
| 145 | + } | |
| 146 | +} | |
| 147 | + | |
| 148 | +.btn-block { | |
| 149 | + width: 100%; | |
| 150 | + margin: 0; | |
| 151 | + margin-bottom: 15px; | |
| 152 | + &.btn { | |
| 153 | + padding: 6px 0; | |
| 154 | + } | |
| 155 | +} | |
| 156 | + | |
| 157 | +.btn, | |
| 158 | +.btn-group { | |
| 159 | + &.grouped { | |
| 160 | + margin-right: 7px; | |
| 161 | + float: left; | |
| 162 | + &:last-child { | |
| 163 | + margin-right: 0px; | |
| 164 | + } | |
| 165 | + } | |
| 166 | +} | |
| 167 | + | |
| 168 | +.btn-group-small > .btn { @extend .btn.btn-small; } | |
| 169 | +.btn-group-tiny > .btn { @extend .btn.btn-tiny; } | ... | ... |
| ... | ... | @@ -0,0 +1,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 | +} | ... | ... |
| ... | ... | @@ -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 | + | ... | ... |
| ... | ... | @@ -0,0 +1,53 @@ |
| 1 | +input[type='search'].search-text-input { | |
| 2 | + background-image: url("icon-search.png"); | |
| 3 | + background-repeat: no-repeat; | |
| 4 | + background-position: 10px; | |
| 5 | + padding-left: 25px; | |
| 6 | +} | |
| 7 | + | |
| 8 | +input[type='text'].danger { | |
| 9 | + background: #F2DEDE!important; | |
| 10 | + border-color: #D66; | |
| 11 | + text-shadow: 0 1px 1px #fff | |
| 12 | +} | |
| 13 | + | |
| 14 | +fieldset legend { | |
| 15 | + font-size: 16px; | |
| 16 | +} | |
| 17 | + | |
| 18 | +.datetime-controls { | |
| 19 | + select { | |
| 20 | + width: 100px; | |
| 21 | + } | |
| 22 | +} | |
| 23 | + | |
| 24 | +.form-actions { | |
| 25 | + padding: 17px 20px 18px; | |
| 26 | + margin-top: 18px; | |
| 27 | + margin-bottom: 18px; | |
| 28 | + background-color: whitesmoke; | |
| 29 | + border-top: 1px solid #e5e5e5; | |
| 30 | + padding-left: 17%; | |
| 31 | +} | |
| 32 | + | |
| 33 | +label { | |
| 34 | + &.control-label { | |
| 35 | + @extend .col-sm-2; | |
| 36 | + } | |
| 37 | + | |
| 38 | + &.inline-label { | |
| 39 | + margin: 0; | |
| 40 | + } | |
| 41 | +} | |
| 42 | + | |
| 43 | +.inline-input-group { | |
| 44 | + width: 250px; | |
| 45 | +} | |
| 46 | + | |
| 47 | +.input-mx-250 { | |
| 48 | + max-width: 250px; | |
| 49 | +} | |
| 50 | + | |
| 51 | +.input-mn-300 { | |
| 52 | + min-width: 300px; | |
| 53 | +} | ... | ... |
| ... | ... | @@ -0,0 +1,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 | +} | ... | ... |
| ... | ... | @@ -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 | +} | ... | ... |
| ... | ... | @@ -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 | +} | ... | ... |
| ... | ... | @@ -0,0 +1,80 @@ |
| 1 | +/** Select2 selectbox style override **/ | |
| 2 | + | |
| 3 | +.select2-container, .select2-container.select2-drop-above { | |
| 4 | + .select2-choice { | |
| 5 | + background: #FFF; | |
| 6 | + border-color: #BBB; | |
| 7 | + | |
| 8 | + .select2-arrow { | |
| 9 | + background: #FFF; | |
| 10 | + } | |
| 11 | + } | |
| 12 | +} | |
| 13 | + | |
| 14 | +.select2-drop-active { | |
| 15 | + border: 1px solid #BBB; | |
| 16 | + margin-top: 4px; | |
| 17 | + | |
| 18 | + .select2-search input { | |
| 19 | + background: #fafafa; | |
| 20 | + border-color: #DDD; | |
| 21 | + } | |
| 22 | + | |
| 23 | + .select2-results { | |
| 24 | + max-height: 350px; | |
| 25 | + .select2-highlighted { | |
| 26 | + background: $bg_style_color; | |
| 27 | + } | |
| 28 | + } | |
| 29 | +} | |
| 30 | + | |
| 31 | +select { | |
| 32 | + &.select2 { | |
| 33 | + width: 100px; | |
| 34 | + } | |
| 35 | + | |
| 36 | + &.select2-sm { | |
| 37 | + width: 100px; | |
| 38 | + } | |
| 39 | +} | |
| 40 | + | |
| 41 | +@media (min-width: $screen-sm-min) { | |
| 42 | + select { | |
| 43 | + &.select2 { | |
| 44 | + width: 150px; | |
| 45 | + } | |
| 46 | + &.select2-sm { | |
| 47 | + width: 120px; | |
| 48 | + } | |
| 49 | + } | |
| 50 | +} | |
| 51 | + | |
| 52 | +/* Medium devices (desktops, 992px and up) */ | |
| 53 | +@media (min-width: $screen-md-min) { | |
| 54 | + select { | |
| 55 | + &.select2 { | |
| 56 | + width: 170px; | |
| 57 | + } | |
| 58 | + &.select2-sm { | |
| 59 | + width: 140px; | |
| 60 | + } | |
| 61 | + } | |
| 62 | +} | |
| 63 | + | |
| 64 | +/* Large devices (large desktops, 1200px and up) */ | |
| 65 | +@media (min-width: $screen-lg-min) { | |
| 66 | + select { | |
| 67 | + &.select2 { | |
| 68 | + width: 200px; | |
| 69 | + } | |
| 70 | + &.select2-sm { | |
| 71 | + width: 150px; | |
| 72 | + } | |
| 73 | + } | |
| 74 | +} | |
| 75 | + | |
| 76 | + | |
| 77 | +/** Branch/tag selector **/ | |
| 78 | +.project-refs-form .select2-container { | |
| 79 | + margin-right: 10px; | |
| 80 | +} | ... | ... |
| ... | ... | @@ -0,0 +1,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 | +} | ... | ... |
| ... | ... | @@ -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
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
| ... | ... | @@ -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 { | ... | ... |
| ... | ... | @@ -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 | +} | ... | ... |
| ... | ... | @@ -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/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
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 | +} | ... | ... |