Merge branch 'master' into jrochkind/gitlab-ce-fix_2839_send_abuse_report_notify
This commit is contained in:
commit
df9062d0b5
|
@ -25,7 +25,6 @@ config/initializers/rack_attack.rb
|
|||
config/initializers/smtp_settings.rb
|
||||
config/resque.yml
|
||||
config/unicorn.rb
|
||||
config/mail_room.yml
|
||||
config/secrets.yml
|
||||
coverage/*
|
||||
db/*.sqlite3
|
||||
|
|
|
@ -24,6 +24,14 @@ spec:api:
|
|||
- ruby
|
||||
- mysql
|
||||
|
||||
spec:benchmark:
|
||||
script:
|
||||
- RAILS_ENV=test bundle exec rake spec:benchmark
|
||||
tags:
|
||||
- ruby
|
||||
- mysql
|
||||
allow_failure: true
|
||||
|
||||
spec:other:
|
||||
script:
|
||||
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:other
|
||||
|
|
53
CHANGELOG
53
CHANGELOG
|
@ -1,9 +1,24 @@
|
|||
Please view this file on the master branch, on stable branches it's out of date.
|
||||
|
||||
v 8.2.0 (unreleased)
|
||||
- Show last project commit to default branch on project home page
|
||||
- Highlight comment based on anchor in URL
|
||||
|
||||
v 8.1.0 (unreleased)
|
||||
- Fix nonatomic database update potentially causing project star counts to go negative (Stan Hu)
|
||||
- Fix error preventing displaying of commit data for a directory with a leading dot (Stan Hu)
|
||||
- Speed up load times of issue detail pages by roughly 1.5x
|
||||
- Add a system note and update relevant merge requests when a branch is deleted or re-added (Stan Hu)
|
||||
- Make diff file view easier to use on mobile screens (Stan Hu)
|
||||
- Improved performance of finding users by username or Email address
|
||||
- Fix bug where merge request comments created by API would not trigger notifications (Stan Hu)
|
||||
- Add support for creating directories from Files page (Stan Hu)
|
||||
- Allow removing of project without confirmation when JavaScript is disabled (Stan Hu)
|
||||
- Support filtering by "Any" milestone or issue and fix "No Milestone" and "No Label" filters (Stan Hu)
|
||||
- Improved performance of the trending projects page
|
||||
- Improved performance of finding projects by their namespace
|
||||
- Fix bug where transferring a project would result in stale commit links (Stan Hu)
|
||||
- Include full path of source and target branch names in New Merge Request page (Stan Hu)
|
||||
- Fix Message-ID header to be RFC 2111-compliant to prevent e-mails being dropped (Stan Hu)
|
||||
- Add user preference to view activities as default dashboard (Stan Hu)
|
||||
- Add option to admin area to sign in as a specific user (Pavel Forkert)
|
||||
- Show CI status on all pages where commits list is rendered
|
||||
|
@ -11,7 +26,11 @@ v 8.1.0 (unreleased)
|
|||
- Move CI charts to project graphs area
|
||||
- Fix cases where Markdown did not render links in activity feed (Stan Hu)
|
||||
- Add first and last to pagination (Zeger-Jan van de Weg)
|
||||
- Added Commit Status API
|
||||
- Added Builds View
|
||||
- Added when to .gitlab-ci.yml
|
||||
- Show CI status on commit page
|
||||
- Added CI_BUILD_TAG, _STAGE, _NAME and _TRIGGERED to CI builds
|
||||
- Show CI status on Your projects page and Starred projects page
|
||||
- Remove "Continuous Integration" page from dashboard
|
||||
- Add notes and SSL verification entries to hook APIs (Ben Boeckel)
|
||||
|
@ -21,6 +40,7 @@ v 8.1.0 (unreleased)
|
|||
- Move CI triggers page to project settings area
|
||||
- Move CI project settings page to CE project settings area
|
||||
- Fix bug when removed file was not appearing in merge request diff
|
||||
- Show warning when build cannot be served by any of the available CI runners
|
||||
- Note the original location of a moved project when notifying users of the move
|
||||
- Improve error message when merging fails
|
||||
- Add support of multibyte characters in LDAP UID (Roman Petrov)
|
||||
|
@ -29,11 +49,42 @@ v 8.1.0 (unreleased)
|
|||
- Ensure code blocks are properly highlighted after a note is updated
|
||||
- Fix wrong access level badge on MR comments
|
||||
- Hide password in the service settings form
|
||||
- Move CI web hooks page to project settings area
|
||||
- Fix User Identities API. It now allows you to properly create or update user's identities.
|
||||
- Add user preference to change layout width (Peter Göbel)
|
||||
- Use commit status in merge request widget as preffered source of CI status
|
||||
- Integrate CI commit and build pages into project pages
|
||||
- Move CI services page to project settings area
|
||||
- Add "Quick Submit" behavior to input fields throughout the application. Use
|
||||
Cmd+Enter on Mac and Ctrl+Enter on Windows/Linux.
|
||||
- Fix position of hamburger in header for smaller screens (Han Loong Liauw)
|
||||
- Fix bug where Emojis in Markdown would truncate remaining text (Sakata Sinji)
|
||||
- Persist filters when sorting on admin user page (Jerry Lukins)
|
||||
- Allow dashboard and group issues/MRs to be filtered by label
|
||||
- Add spellcheck=false to certain input fields
|
||||
- Invalidate stored service password if the endpoint URL is changed
|
||||
- Project names are not fully shown if group name is too big, even on group page view
|
||||
- Apply new design for Files page
|
||||
- Add "New Page" button to Wiki Pages tab (Stan Hu)
|
||||
- Only render 404 page from /public
|
||||
- Hide passwords from services API (Alex Lossent)
|
||||
- Fix: Images cannot show when projects' path was changed
|
||||
- Fix padding of outdated discussion item.
|
||||
|
||||
v 8.0.4
|
||||
- Fix Message-ID header to be RFC 2111-compliant to prevent e-mails being dropped (Stan Hu)
|
||||
- Fix referrals for :back and relative URL installs
|
||||
- Fix anchors to comments in diffs
|
||||
- Remove CI token from build traces
|
||||
- Fix "Assign All" button on Runner admin page
|
||||
- Fix search in Files
|
||||
- Add full project namespace to payload of system webhooks (Ricardo Band)
|
||||
|
||||
v 8.0.3
|
||||
- Fix URL shown in Slack notifications
|
||||
- Fix bug where projects would appear to be stuck in the forked import state (Stan Hu)
|
||||
- Fix Error 500 in creating merge requests with > 1000 diffs (Stan Hu)
|
||||
- Add work_in_progress key to MR web hooks (Ben Boeckel)
|
||||
|
||||
v 8.0.2
|
||||
- Fix default avatar not rendering in network graph (Stan Hu)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
0.3.0
|
69
Gemfile
69
Gemfile
|
@ -1,13 +1,5 @@
|
|||
source "https://rubygems.org"
|
||||
|
||||
def darwin_only(require_as)
|
||||
RUBY_PLATFORM.include?('darwin') && require_as
|
||||
end
|
||||
|
||||
def linux_only(require_as)
|
||||
RUBY_PLATFORM.include?('linux') && require_as
|
||||
end
|
||||
|
||||
gem 'rails', '4.1.12'
|
||||
|
||||
# Specify a sprockets version due to security issue
|
||||
|
@ -22,20 +14,20 @@ gem "mysql2", '~> 0.3.16', group: :mysql
|
|||
gem "pg", '~> 0.18.2', group: :postgres
|
||||
|
||||
# Authentication libraries
|
||||
gem "devise", '~> 3.5.2'
|
||||
gem "devise-async", '~> 0.9.0'
|
||||
gem 'omniauth', "~> 1.2.2"
|
||||
gem 'omniauth-google-oauth2', '~> 0.2.5'
|
||||
gem 'omniauth-twitter', '~> 1.0.1'
|
||||
gem 'omniauth-github', '~> 1.1.1'
|
||||
gem 'omniauth-shibboleth', '~> 1.1.1'
|
||||
gem 'omniauth-kerberos', '~> 0.2.0', group: :kerberos
|
||||
gem 'omniauth-gitlab', '~> 1.0.0'
|
||||
gem 'omniauth-bitbucket', '~> 0.0.2'
|
||||
gem 'omniauth-saml', '~> 1.4.0'
|
||||
gem 'doorkeeper', '~> 2.1.3'
|
||||
gem 'devise', '~> 3.5.2'
|
||||
gem 'devise-async', '~> 0.9.0'
|
||||
gem 'doorkeeper', '~> 2.1.3'
|
||||
gem 'omniauth', '~> 1.2.2'
|
||||
gem 'omniauth-bitbucket', '~> 0.0.2'
|
||||
gem 'omniauth-github', '~> 1.1.1'
|
||||
gem 'omniauth-gitlab', '~> 1.0.0'
|
||||
gem 'omniauth-google-oauth2', '~> 0.2.0'
|
||||
gem 'omniauth-kerberos', '~> 0.3.0', group: :kerberos
|
||||
gem 'omniauth-saml', '~> 1.4.0'
|
||||
gem 'omniauth-shibboleth', '~> 1.2.0'
|
||||
gem 'omniauth-twitter', '~> 1.2.0'
|
||||
gem 'omniauth_crowd'
|
||||
gem "rack-oauth2", "~> 1.0.5"
|
||||
gem 'rack-oauth2', '~> 1.0.5'
|
||||
|
||||
# Two-factor authentication
|
||||
gem 'devise-two-factor', '~> 2.0.0'
|
||||
|
@ -47,7 +39,7 @@ gem "browser", '~> 1.0.0'
|
|||
|
||||
# Extracting information from a git repository
|
||||
# Provide access to Gitlab::Git library
|
||||
gem "gitlab_git", '~> 7.2.17'
|
||||
gem "gitlab_git", '~> 7.2.19'
|
||||
|
||||
# LDAP Auth
|
||||
# GitLab fork with several improvements to original library. For full list of changes
|
||||
|
@ -65,9 +57,9 @@ gem 'gollum-lib', '~> 4.0.2'
|
|||
gem "gitlab-linguist", "~> 3.0.1", require: "linguist"
|
||||
|
||||
# API
|
||||
gem "grape", "~> 0.6.1"
|
||||
gem "grape-entity", "~> 0.4.2"
|
||||
gem 'rack-cors', '~> 0.2.9', require: 'rack/cors'
|
||||
gem 'grape', '~> 0.6.1'
|
||||
gem 'grape-entity', '~> 0.4.2'
|
||||
gem 'rack-cors', '~> 0.4.0', require: 'rack/cors'
|
||||
|
||||
# Format dates and times
|
||||
# based on human-friendly examples
|
||||
|
@ -80,7 +72,7 @@ gem 'enumerize', '~> 0.7.0'
|
|||
gem "kaminari", "~> 0.16.3"
|
||||
|
||||
# HAML
|
||||
gem "haml-rails", '~> 0.5.3'
|
||||
gem "haml-rails", '~> 0.9.0'
|
||||
|
||||
# Files attachments
|
||||
gem "carrierwave", '~> 0.9.0'
|
||||
|
@ -102,7 +94,7 @@ gem "seed-fu", '~> 2.3.5'
|
|||
gem 'html-pipeline', '~> 1.11.0'
|
||||
gem 'task_list', '~> 1.0.2', require: 'task_list/railtie'
|
||||
gem 'github-markup', '~> 1.3.1'
|
||||
gem 'redcarpet', '~> 3.3.2'
|
||||
gem 'redcarpet', '~> 3.3.3'
|
||||
gem 'RedCloth', '~> 4.2.9'
|
||||
gem 'rdoc', '~>3.6'
|
||||
gem 'org-ruby', '~> 0.9.12'
|
||||
|
@ -128,7 +120,6 @@ gem 'after_commit_queue'
|
|||
gem 'acts-as-taggable-on', '~> 3.4'
|
||||
|
||||
# Background jobs
|
||||
gem 'slim', '~> 2.0.2'
|
||||
gem 'sinatra', '~> 1.4.4', require: nil
|
||||
gem 'sidekiq', '3.3.0'
|
||||
gem 'sidetiq', '~> 0.6.3'
|
||||
|
@ -151,7 +142,7 @@ gem 'version_sorter', '~> 2.0.0'
|
|||
gem "redis-rails", '~> 4.0.0'
|
||||
|
||||
# Campfire integration
|
||||
gem 'tinder', '~> 1.9.2'
|
||||
gem 'tinder', '~> 1.10.0'
|
||||
|
||||
# HipChat integration
|
||||
gem 'hipchat', '~> 1.5.0'
|
||||
|
@ -163,7 +154,7 @@ gem "gitlab-flowdock-git-hook", "~> 1.0.1"
|
|||
gem "gemnasium-gitlab-service", "~> 0.2"
|
||||
|
||||
# Slack integration
|
||||
gem "slack-notifier", "~> 1.0.0"
|
||||
gem "slack-notifier", "~> 1.2.0"
|
||||
|
||||
# Asana integration
|
||||
gem 'asana', '~> 0.0.6'
|
||||
|
@ -197,7 +188,7 @@ gem 'charlock_holmes', '~> 0.6.9.4'
|
|||
|
||||
gem "sass-rails", '~> 4.0.5'
|
||||
gem "coffee-rails", '~> 4.1.0'
|
||||
gem "uglifier", '~> 2.3.2'
|
||||
gem "uglifier", '~> 2.7.2'
|
||||
gem 'turbolinks', '~> 2.5.0'
|
||||
gem 'jquery-turbolinks', '~> 2.0.1'
|
||||
|
||||
|
@ -225,6 +216,9 @@ group :development do
|
|||
gem 'quiet_assets', '~> 1.0.2'
|
||||
gem 'rack-mini-profiler', '~> 0.9.0', require: false
|
||||
gem 'rerun', '~> 0.10.0'
|
||||
gem 'bullet', require: false
|
||||
gem 'active_record_query_trace', require: false
|
||||
gem 'rack-lineprof', platform: :mri
|
||||
|
||||
# Better errors handler
|
||||
gem 'better_errors', '~> 1.0.1'
|
||||
|
@ -291,7 +285,7 @@ gem 'newrelic-grape'
|
|||
|
||||
gem 'octokit', '~> 3.7.0'
|
||||
|
||||
gem "mail_room", "~> 0.5.2"
|
||||
gem "mail_room", "~> 0.6.1"
|
||||
|
||||
gem 'email_reply_parser', '~> 0.5.8'
|
||||
|
||||
|
@ -300,19 +294,8 @@ gem 'activerecord-deprecated_finders', '~> 1.0.3'
|
|||
gem 'activerecord-session_store', '~> 0.1.0'
|
||||
gem "nested_form", '~> 0.3.2'
|
||||
|
||||
# Scheduled
|
||||
gem 'whenever', '~> 0.8.4', require: false
|
||||
|
||||
# OAuth
|
||||
gem 'oauth2', '~> 1.0.0'
|
||||
|
||||
# Soft deletion
|
||||
gem "paranoia", "~> 2.0"
|
||||
|
||||
group :development, :test do
|
||||
gem 'guard-rspec', '~> 4.2.0'
|
||||
|
||||
gem 'rb-fsevent', require: darwin_only('rb-fsevent')
|
||||
gem 'growl', require: darwin_only('growl')
|
||||
gem 'rb-inotify', require: linux_only('rb-inotify')
|
||||
end
|
||||
|
|
120
Gemfile.lock
120
Gemfile.lock
|
@ -17,6 +17,7 @@ GEM
|
|||
activesupport (= 4.1.12)
|
||||
builder (~> 3.1)
|
||||
erubis (~> 2.7.0)
|
||||
active_record_query_trace (1.5)
|
||||
activemodel (4.1.12)
|
||||
activesupport (= 4.1.12)
|
||||
builder (~> 3.1)
|
||||
|
@ -87,6 +88,9 @@ GEM
|
|||
terminal-table (~> 1.4)
|
||||
browser (1.0.0)
|
||||
builder (3.2.2)
|
||||
bullet (4.14.9)
|
||||
activesupport (>= 3.0.0)
|
||||
uniform_notifier (~> 1.9.0)
|
||||
byebug (6.0.2)
|
||||
cal-heatmap-rails (0.0.1)
|
||||
capybara (2.4.4)
|
||||
|
@ -105,7 +109,6 @@ GEM
|
|||
celluloid (0.16.0)
|
||||
timers (~> 4.0.0)
|
||||
charlock_holmes (0.6.9.4)
|
||||
chronic (0.10.2)
|
||||
chunky_png (1.3.4)
|
||||
cliver (0.3.2)
|
||||
coderay (1.1.0)
|
||||
|
@ -135,6 +138,7 @@ GEM
|
|||
daemons (1.2.3)
|
||||
database_cleaner (1.4.1)
|
||||
debug_inspector (0.0.2)
|
||||
debugger-ruby_core_source (1.3.8)
|
||||
default_value_for (3.0.1)
|
||||
activerecord (>= 3.2.0, < 5.0)
|
||||
descendants_tracker (0.0.4)
|
||||
|
@ -182,8 +186,8 @@ GEM
|
|||
factory_girl_rails (4.3.0)
|
||||
factory_girl (~> 4.3.0)
|
||||
railties (>= 3.0.0)
|
||||
faraday (0.8.10)
|
||||
multipart-post (~> 1.2.0)
|
||||
faraday (0.9.2)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
faraday_middleware (0.10.0)
|
||||
faraday (>= 0.7.4, < 0.10)
|
||||
fastercsv (1.5.5)
|
||||
|
@ -279,7 +283,7 @@ GEM
|
|||
mime-types (~> 1.19)
|
||||
gitlab_emoji (0.1.1)
|
||||
gemojione (~> 2.0)
|
||||
gitlab_git (7.2.17)
|
||||
gitlab_git (7.2.19)
|
||||
activesupport (~> 4.0)
|
||||
charlock_holmes (~> 0.6)
|
||||
gitlab-linguist (~> 3.0)
|
||||
|
@ -315,27 +319,15 @@ GEM
|
|||
grape-entity (0.4.8)
|
||||
activesupport
|
||||
multi_json (>= 1.3.2)
|
||||
growl (1.0.3)
|
||||
guard (2.13.0)
|
||||
formatador (>= 0.2.4)
|
||||
listen (>= 2.7, <= 4.0)
|
||||
lumberjack (~> 1.0)
|
||||
nenv (~> 0.1)
|
||||
notiffany (~> 0.0)
|
||||
pry (>= 0.9.12)
|
||||
shellany (~> 0.0)
|
||||
thor (>= 0.18.1)
|
||||
guard-rspec (4.2.10)
|
||||
guard (~> 2.1)
|
||||
rspec (>= 2.14, < 4.0)
|
||||
haml (4.0.7)
|
||||
tilt
|
||||
haml-rails (0.5.3)
|
||||
haml-rails (0.9.0)
|
||||
actionpack (>= 4.0.1)
|
||||
activesupport (>= 4.0.1)
|
||||
haml (>= 3.1, < 5.0)
|
||||
haml (>= 4.0.6, < 5.0)
|
||||
html2haml (>= 1.0.1)
|
||||
railties (>= 4.0.1)
|
||||
hashie (2.1.2)
|
||||
hashie (3.4.2)
|
||||
highline (1.6.21)
|
||||
hike (1.2.3)
|
||||
hipchat (1.5.2)
|
||||
|
@ -345,6 +337,11 @@ GEM
|
|||
html-pipeline (1.11.0)
|
||||
activesupport (>= 2)
|
||||
nokogiri (~> 1.4)
|
||||
html2haml (2.0.0)
|
||||
erubis (~> 2.7.0)
|
||||
haml (~> 4.0.0)
|
||||
nokogiri (~> 1.6.0)
|
||||
ruby_parser (~> 3.5)
|
||||
http-cookie (1.0.2)
|
||||
domain_name (~> 0.5)
|
||||
http_parser.rb (0.5.3)
|
||||
|
@ -382,12 +379,11 @@ GEM
|
|||
celluloid (~> 0.16.0)
|
||||
rb-fsevent (>= 0.9.3)
|
||||
rb-inotify (>= 0.9)
|
||||
lumberjack (1.0.9)
|
||||
macaddr (1.7.1)
|
||||
systemu (~> 2.6.2)
|
||||
mail (2.6.3)
|
||||
mime-types (>= 1.16, < 3)
|
||||
mail_room (0.5.2)
|
||||
mail_room (0.6.1)
|
||||
method_source (0.8.2)
|
||||
mime-types (1.25.1)
|
||||
mimemagic (0.3.0)
|
||||
|
@ -396,9 +392,8 @@ GEM
|
|||
mousetrap-rails (1.4.6)
|
||||
multi_json (1.11.2)
|
||||
multi_xml (0.5.5)
|
||||
multipart-post (1.2.0)
|
||||
multipart-post (2.0.0)
|
||||
mysql2 (0.3.20)
|
||||
nenv (0.2.0)
|
||||
nested_form (0.3.2)
|
||||
net-ldap (0.11)
|
||||
net-scp (1.2.1)
|
||||
|
@ -411,9 +406,6 @@ GEM
|
|||
newrelic_rpm (3.9.4.245)
|
||||
nokogiri (1.6.6.2)
|
||||
mini_portile (~> 0.6.0)
|
||||
notiffany (0.0.7)
|
||||
nenv (~> 0.1)
|
||||
shellany (~> 0.0)
|
||||
nprogress-rails (0.1.2.3)
|
||||
oauth (0.4.7)
|
||||
oauth2 (1.0.0)
|
||||
|
@ -440,7 +432,7 @@ GEM
|
|||
omniauth-google-oauth2 (0.2.6)
|
||||
omniauth (> 1.0)
|
||||
omniauth-oauth2 (~> 1.1)
|
||||
omniauth-kerberos (0.2.0)
|
||||
omniauth-kerberos (0.3.0)
|
||||
omniauth-multipassword
|
||||
timfel-krb5-auth (~> 0.8)
|
||||
omniauth-multipassword (0.4.2)
|
||||
|
@ -454,11 +446,11 @@ GEM
|
|||
omniauth-saml (1.4.1)
|
||||
omniauth (~> 1.1)
|
||||
ruby-saml (~> 1.0.0)
|
||||
omniauth-shibboleth (1.1.2)
|
||||
omniauth-shibboleth (1.2.1)
|
||||
omniauth (>= 1.0.0)
|
||||
omniauth-twitter (1.0.1)
|
||||
multi_json (~> 1.3)
|
||||
omniauth-oauth (~> 1.0)
|
||||
omniauth-twitter (1.2.1)
|
||||
json (~> 1.3)
|
||||
omniauth-oauth (~> 1.1)
|
||||
omniauth_crowd (2.2.3)
|
||||
activesupport
|
||||
nokogiri (>= 1.4.4)
|
||||
|
@ -496,7 +488,11 @@ GEM
|
|||
rack (>= 0.4)
|
||||
rack-attack (4.3.0)
|
||||
rack
|
||||
rack-cors (0.2.9)
|
||||
rack-cors (0.4.0)
|
||||
rack-lineprof (0.0.3)
|
||||
rack (~> 1.5)
|
||||
rblineprof (~> 0.3.6)
|
||||
term-ansicolor (~> 1.3)
|
||||
rack-mini-profiler (0.9.7)
|
||||
rack (>= 1.1.3)
|
||||
rack-mount (0.8.3)
|
||||
|
@ -535,13 +531,15 @@ GEM
|
|||
rb-fsevent (0.9.5)
|
||||
rb-inotify (0.9.5)
|
||||
ffi (>= 0.5.0)
|
||||
rblineprof (0.3.6)
|
||||
debugger-ruby_core_source (~> 1.3)
|
||||
rbvmomi (1.8.2)
|
||||
builder
|
||||
nokogiri (>= 1.4.1)
|
||||
trollop
|
||||
rdoc (3.12.2)
|
||||
json (~> 1.4)
|
||||
redcarpet (3.3.2)
|
||||
redcarpet (3.3.3)
|
||||
redis (3.2.1)
|
||||
redis-actionpack (4.0.0)
|
||||
actionpack (~> 4)
|
||||
|
@ -642,7 +640,6 @@ GEM
|
|||
sexp_processor (4.6.0)
|
||||
sham_rack (1.3.6)
|
||||
rack
|
||||
shellany (0.0.1)
|
||||
shoulda-matchers (2.8.0)
|
||||
activesupport (>= 3.0.0)
|
||||
sidekiq (3.3.0)
|
||||
|
@ -666,10 +663,7 @@ GEM
|
|||
rack-protection (~> 1.4)
|
||||
tilt (>= 1.3, < 3)
|
||||
six (0.2.0)
|
||||
slack-notifier (1.0.0)
|
||||
slim (2.0.3)
|
||||
temple (~> 0.6.6)
|
||||
tilt (>= 1.3.3, < 2.1)
|
||||
slack-notifier (1.2.1)
|
||||
slop (3.6.0)
|
||||
spinach (0.8.10)
|
||||
colorize
|
||||
|
@ -705,7 +699,6 @@ GEM
|
|||
railties (>= 3.2.5, < 5)
|
||||
teaspoon-jasmine (2.2.0)
|
||||
teaspoon (>= 1.0.0)
|
||||
temple (0.6.10)
|
||||
term-ansicolor (1.3.2)
|
||||
tins (~> 1.0)
|
||||
terminal-table (1.5.2)
|
||||
|
@ -721,13 +714,13 @@ GEM
|
|||
timers (4.0.4)
|
||||
hitimes
|
||||
timfel-krb5-auth (0.8.3)
|
||||
tinder (1.9.4)
|
||||
tinder (1.10.1)
|
||||
eventmachine (~> 1.0)
|
||||
faraday (~> 0.8.9)
|
||||
faraday (~> 0.9.0)
|
||||
faraday_middleware (~> 0.9)
|
||||
hashie (>= 1.0, < 3)
|
||||
hashie (>= 1.0)
|
||||
json (~> 1.8.0)
|
||||
mime-types (~> 1.19)
|
||||
mime-types
|
||||
multi_json (~> 1.7)
|
||||
twitter-stream (~> 0.1)
|
||||
tins (1.6.0)
|
||||
|
@ -740,7 +733,7 @@ GEM
|
|||
simple_oauth (~> 0.1.4)
|
||||
tzinfo (1.2.2)
|
||||
thread_safe (~> 0.1)
|
||||
uglifier (2.3.3)
|
||||
uglifier (2.7.2)
|
||||
execjs (>= 0.3.0)
|
||||
json (>= 1.8.0)
|
||||
underscore-rails (1.4.4)
|
||||
|
@ -754,6 +747,7 @@ GEM
|
|||
unicorn-worker-killer (0.4.3)
|
||||
get_process_mem (~> 0)
|
||||
unicorn (~> 4)
|
||||
uniform_notifier (1.9.0)
|
||||
uuid (2.3.8)
|
||||
macaddr (~> 1.0)
|
||||
version_sorter (2.0.0)
|
||||
|
@ -770,9 +764,6 @@ GEM
|
|||
websocket-driver (0.6.2)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.2)
|
||||
whenever (0.8.4)
|
||||
activesupport (>= 2.3.4)
|
||||
chronic (>= 0.6.3)
|
||||
wikicloth (0.8.1)
|
||||
builder
|
||||
expression_parser
|
||||
|
@ -786,6 +777,7 @@ PLATFORMS
|
|||
DEPENDENCIES
|
||||
RedCloth (~> 4.2.9)
|
||||
ace-rails-ap (~> 2.0.1)
|
||||
active_record_query_trace
|
||||
activerecord-deprecated_finders (~> 1.0.3)
|
||||
activerecord-session_store (~> 0.1.0)
|
||||
acts-as-taggable-on (~> 3.4)
|
||||
|
@ -802,6 +794,7 @@ DEPENDENCIES
|
|||
bootstrap-sass (~> 3.0)
|
||||
brakeman (= 3.0.1)
|
||||
browser (~> 1.0.0)
|
||||
bullet
|
||||
byebug
|
||||
cal-heatmap-rails (~> 0.0.1)
|
||||
capybara (~> 2.4.0)
|
||||
|
@ -836,16 +829,14 @@ DEPENDENCIES
|
|||
gitlab-flowdock-git-hook (~> 1.0.1)
|
||||
gitlab-linguist (~> 3.0.1)
|
||||
gitlab_emoji (~> 0.1)
|
||||
gitlab_git (~> 7.2.17)
|
||||
gitlab_git (~> 7.2.19)
|
||||
gitlab_meta (= 7.0)
|
||||
gitlab_omniauth-ldap (~> 1.2.1)
|
||||
gollum-lib (~> 4.0.2)
|
||||
gon (~> 5.0.0)
|
||||
grape (~> 0.6.1)
|
||||
grape-entity (~> 0.4.2)
|
||||
growl
|
||||
guard-rspec (~> 4.2.0)
|
||||
haml-rails (~> 0.5.3)
|
||||
haml-rails (~> 0.9.0)
|
||||
hipchat (~> 1.5.0)
|
||||
html-pipeline (~> 1.11.0)
|
||||
httparty (~> 0.13.3)
|
||||
|
@ -856,7 +847,7 @@ DEPENDENCIES
|
|||
jquery-ui-rails (~> 4.2.1)
|
||||
kaminari (~> 0.16.3)
|
||||
letter_opener (~> 1.1.2)
|
||||
mail_room (~> 0.5.2)
|
||||
mail_room (~> 0.6.1)
|
||||
minitest (~> 5.7.0)
|
||||
mousetrap-rails (~> 1.4.6)
|
||||
mysql2 (~> 0.3.16)
|
||||
|
@ -870,11 +861,11 @@ DEPENDENCIES
|
|||
omniauth-bitbucket (~> 0.0.2)
|
||||
omniauth-github (~> 1.1.1)
|
||||
omniauth-gitlab (~> 1.0.0)
|
||||
omniauth-google-oauth2 (~> 0.2.5)
|
||||
omniauth-kerberos (~> 0.2.0)
|
||||
omniauth-google-oauth2 (~> 0.2.0)
|
||||
omniauth-kerberos (~> 0.3.0)
|
||||
omniauth-saml (~> 1.4.0)
|
||||
omniauth-shibboleth (~> 1.1.1)
|
||||
omniauth-twitter (~> 1.0.1)
|
||||
omniauth-shibboleth (~> 1.2.0)
|
||||
omniauth-twitter (~> 1.2.0)
|
||||
omniauth_crowd
|
||||
org-ruby (~> 0.9.12)
|
||||
paranoia (~> 2.0)
|
||||
|
@ -883,15 +874,14 @@ DEPENDENCIES
|
|||
pry-rails
|
||||
quiet_assets (~> 1.0.2)
|
||||
rack-attack (~> 4.3.0)
|
||||
rack-cors (~> 0.2.9)
|
||||
rack-cors (~> 0.4.0)
|
||||
rack-lineprof
|
||||
rack-mini-profiler (~> 0.9.0)
|
||||
rack-oauth2 (~> 1.0.5)
|
||||
rails (= 4.1.12)
|
||||
raphael-rails (~> 2.1.2)
|
||||
rb-fsevent
|
||||
rb-inotify
|
||||
rdoc (~> 3.6)
|
||||
redcarpet (~> 3.3.2)
|
||||
redcarpet (~> 3.3.3)
|
||||
redis-rails (~> 4.0.0)
|
||||
request_store (~> 1.2.0)
|
||||
rerun (~> 0.10.0)
|
||||
|
@ -912,8 +902,7 @@ DEPENDENCIES
|
|||
simplecov (~> 0.10.0)
|
||||
sinatra (~> 1.4.4)
|
||||
six (~> 0.2.0)
|
||||
slack-notifier (~> 1.0.0)
|
||||
slim (~> 2.0.2)
|
||||
slack-notifier (~> 1.2.0)
|
||||
spinach-rails (~> 0.2.1)
|
||||
spring (~> 1.3.6)
|
||||
spring-commands-rspec (~> 1.0.4)
|
||||
|
@ -927,9 +916,9 @@ DEPENDENCIES
|
|||
teaspoon-jasmine (~> 2.2.0)
|
||||
test_after_commit (~> 0.2.2)
|
||||
thin (~> 1.6.1)
|
||||
tinder (~> 1.9.2)
|
||||
tinder (~> 1.10.0)
|
||||
turbolinks (~> 2.5.0)
|
||||
uglifier (~> 2.3.2)
|
||||
uglifier (~> 2.7.2)
|
||||
underscore-rails (~> 1.4.4)
|
||||
unf (~> 0.1.4)
|
||||
unicorn (~> 4.8.2)
|
||||
|
@ -937,7 +926,6 @@ DEPENDENCIES
|
|||
version_sorter (~> 2.0.0)
|
||||
virtus (~> 1.0.1)
|
||||
webmock (~> 1.21.0)
|
||||
whenever (~> 0.8.4)
|
||||
wikicloth (= 0.8.1)
|
||||
|
||||
BUNDLED WITH
|
||||
|
|
|
@ -79,7 +79,11 @@ Thanks for the issue report but we only support issues for the latest stable ver
|
|||
|
||||
### Support requests and configuration questions
|
||||
|
||||
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 #gitlab IRC channel on Freenode or the http://about.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.
|
||||
Thanks for your interest in GitLab. We don't use the issue tracker for support
|
||||
requests and configuration questions. Please check our
|
||||
\[getting help\]\(https://about.gitlab.com/getting-help/) page to see all of the available
|
||||
support options. Also, have a look at the \[contribution guidelines\]\(https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md)
|
||||
for more information.
|
||||
|
||||
### Code format
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ GitLab is a Ruby on Rails application that runs on the following software:
|
|||
- Ubuntu/Debian/CentOS/RHEL
|
||||
- Ruby (MRI) 2.1
|
||||
- Git 1.7.10+
|
||||
- Redis 2.0+
|
||||
- Redis 2.4+
|
||||
- MySQL or PostgreSQL
|
||||
|
||||
For more information please see the [architecture documentation](http://doc.gitlab.com/ce/development/architecture.html).
|
||||
|
|
|
@ -180,6 +180,7 @@ $ ->
|
|||
$('.navbar-toggle').on 'click', ->
|
||||
$('.header-content .title').toggle()
|
||||
$('.header-content .navbar-collapse').toggle()
|
||||
$('.navbar-toggle').toggleClass('active')
|
||||
|
||||
# Show/hide comments on diff
|
||||
$("body").on "click", ".js-toggle-diff-comments", (e) ->
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
# Quick Submit behavior
|
||||
#
|
||||
# When an input field with the `js-quick-submit` class receives a "Meta+Enter"
|
||||
# (Mac) or "Ctrl+Enter" (Linux/Windows) key combination, its parent form is
|
||||
# submitted.
|
||||
#
|
||||
#= require extensions/jquery
|
||||
#
|
||||
# ### Example Markup
|
||||
#
|
||||
# <form action="/foo">
|
||||
# <input type="text" class="js-quick-submit" />
|
||||
# <textarea class="js-quick-submit"></textarea>
|
||||
# </form>
|
||||
#
|
||||
$(document).on 'keydown.quick_submit', '.js-quick-submit', (e) ->
|
||||
return if (e.originalEvent && e.originalEvent.repeat) || e.repeat
|
||||
return unless e.keyCode == 13 # Enter
|
||||
|
||||
if navigator.userAgent.match(/Macintosh/)
|
||||
return unless (e.metaKey && !e.altKey && !e.ctrlKey && !e.shiftKey)
|
||||
else
|
||||
return unless (e.ctrlKey && !e.altKey && !e.metaKey && !e.shiftKey)
|
||||
|
||||
e.preventDefault()
|
||||
|
||||
$form = $(e.target).closest('form')
|
||||
$form.find('input[type=submit], button[type=submit]').disable()
|
||||
$form.submit()
|
|
@ -34,6 +34,5 @@ $.fn.requiresInput = ->
|
|||
|
||||
$form.on 'change input', fieldSelector, requireInput
|
||||
|
||||
# Triggered on standard document `ready` and on Turbolinks `page:load` events
|
||||
$(document).on 'ready page:load', ->
|
||||
$ ->
|
||||
$('form.js-requires-input').requiresInput()
|
||||
|
|
|
@ -47,6 +47,7 @@ class @BlobFileDropzone
|
|||
return
|
||||
|
||||
this.on 'sending', (file, xhr, formData) ->
|
||||
formData.append('new_branch', form.find('#new_branch').val())
|
||||
formData.append('commit_message', form.find('#commit_message').val())
|
||||
return
|
||||
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
var Chart=function(s){function v(a,c,b){a=A((a-c.graphMin)/(c.steps*c.stepValue),1,0);return b*c.steps*a}function x(a,c,b,e){function h(){g+=f;var k=a.animation?A(d(g),null,0):1;e.clearRect(0,0,q,u);a.scaleOverlay?(b(k),c()):(c(),b(k));if(1>=g)D(h);else if("function"==typeof a.onAnimationComplete)a.onAnimationComplete()}var f=a.animation?1/A(a.animationSteps,Number.MAX_VALUE,1):1,d=B[a.animationEasing],g=a.animation?0:1;"function"!==typeof c&&(c=function(){});D(h)}function C(a,c,b,e,h,f){var d;a=
|
||||
Math.floor(Math.log(e-h)/Math.LN10);h=Math.floor(h/(1*Math.pow(10,a)))*Math.pow(10,a);e=Math.ceil(e/(1*Math.pow(10,a)))*Math.pow(10,a)-h;a=Math.pow(10,a);for(d=Math.round(e/a);d<b||d>c;)a=d<b?a/2:2*a,d=Math.round(e/a);c=[];z(f,c,d,h,a);return{steps:d,stepValue:a,graphMin:h,labels:c}}function z(a,c,b,e,h){if(a)for(var f=1;f<b+1;f++)c.push(E(a,{value:(e+h*f).toFixed(0!=h%1?h.toString().split(".")[1].length:0)}))}function A(a,c,b){return!isNaN(parseFloat(c))&&isFinite(c)&&a>c?c:!isNaN(parseFloat(b))&&
|
||||
isFinite(b)&&a<b?b:a}function y(a,c){var b={},e;for(e in a)b[e]=a[e];for(e in c)b[e]=c[e];return b}function E(a,c){var b=!/\W/.test(a)?F[a]=F[a]||E(document.getElementById(a).innerHTML):new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return c?
|
||||
b(c):b}var r=this,B={linear:function(a){return a},easeInQuad:function(a){return a*a},easeOutQuad:function(a){return-1*a*(a-2)},easeInOutQuad:function(a){return 1>(a/=0.5)?0.5*a*a:-0.5*(--a*(a-2)-1)},easeInCubic:function(a){return a*a*a},easeOutCubic:function(a){return 1*((a=a/1-1)*a*a+1)},easeInOutCubic:function(a){return 1>(a/=0.5)?0.5*a*a*a:0.5*((a-=2)*a*a+2)},easeInQuart:function(a){return a*a*a*a},easeOutQuart:function(a){return-1*((a=a/1-1)*a*a*a-1)},easeInOutQuart:function(a){return 1>(a/=0.5)?
|
||||
0.5*a*a*a*a:-0.5*((a-=2)*a*a*a-2)},easeInQuint:function(a){return 1*(a/=1)*a*a*a*a},easeOutQuint:function(a){return 1*((a=a/1-1)*a*a*a*a+1)},easeInOutQuint:function(a){return 1>(a/=0.5)?0.5*a*a*a*a*a:0.5*((a-=2)*a*a*a*a+2)},easeInSine:function(a){return-1*Math.cos(a/1*(Math.PI/2))+1},easeOutSine:function(a){return 1*Math.sin(a/1*(Math.PI/2))},easeInOutSine:function(a){return-0.5*(Math.cos(Math.PI*a/1)-1)},easeInExpo:function(a){return 0==a?1:1*Math.pow(2,10*(a/1-1))},easeOutExpo:function(a){return 1==
|
||||
a?1:1*(-Math.pow(2,-10*a/1)+1)},easeInOutExpo:function(a){return 0==a?0:1==a?1:1>(a/=0.5)?0.5*Math.pow(2,10*(a-1)):0.5*(-Math.pow(2,-10*--a)+2)},easeInCirc:function(a){return 1<=a?a:-1*(Math.sqrt(1-(a/=1)*a)-1)},easeOutCirc:function(a){return 1*Math.sqrt(1-(a=a/1-1)*a)},easeInOutCirc:function(a){return 1>(a/=0.5)?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-=2)*a)+1)},easeInElastic:function(a){var c=1.70158,b=0,e=1;if(0==a)return 0;if(1==(a/=1))return 1;b||(b=0.3);e<Math.abs(1)?(e=1,c=b/4):c=b/(2*
|
||||
Math.PI)*Math.asin(1/e);return-(e*Math.pow(2,10*(a-=1))*Math.sin((1*a-c)*2*Math.PI/b))},easeOutElastic:function(a){var c=1.70158,b=0,e=1;if(0==a)return 0;if(1==(a/=1))return 1;b||(b=0.3);e<Math.abs(1)?(e=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/e);return e*Math.pow(2,-10*a)*Math.sin((1*a-c)*2*Math.PI/b)+1},easeInOutElastic:function(a){var c=1.70158,b=0,e=1;if(0==a)return 0;if(2==(a/=0.5))return 1;b||(b=1*0.3*1.5);e<Math.abs(1)?(e=1,c=b/4):c=b/(2*Math.PI)*Math.asin(1/e);return 1>a?-0.5*e*Math.pow(2,10*
|
||||
(a-=1))*Math.sin((1*a-c)*2*Math.PI/b):0.5*e*Math.pow(2,-10*(a-=1))*Math.sin((1*a-c)*2*Math.PI/b)+1},easeInBack:function(a){return 1*(a/=1)*a*(2.70158*a-1.70158)},easeOutBack:function(a){return 1*((a=a/1-1)*a*(2.70158*a+1.70158)+1)},easeInOutBack:function(a){var c=1.70158;return 1>(a/=0.5)?0.5*a*a*(((c*=1.525)+1)*a-c):0.5*((a-=2)*a*(((c*=1.525)+1)*a+c)+2)},easeInBounce:function(a){return 1-B.easeOutBounce(1-a)},easeOutBounce:function(a){return(a/=1)<1/2.75?1*7.5625*a*a:a<2/2.75?1*(7.5625*(a-=1.5/2.75)*
|
||||
a+0.75):a<2.5/2.75?1*(7.5625*(a-=2.25/2.75)*a+0.9375):1*(7.5625*(a-=2.625/2.75)*a+0.984375)},easeInOutBounce:function(a){return 0.5>a?0.5*B.easeInBounce(2*a):0.5*B.easeOutBounce(2*a-1)+0.5}},q=s.canvas.width,u=s.canvas.height;window.devicePixelRatio&&(s.canvas.style.width=q+"px",s.canvas.style.height=u+"px",s.canvas.height=u*window.devicePixelRatio,s.canvas.width=q*window.devicePixelRatio,s.scale(window.devicePixelRatio,window.devicePixelRatio));this.PolarArea=function(a,c){r.PolarArea.defaults={scaleOverlay:!0,
|
||||
scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleShowLine:!0,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowLabelBackdrop:!0,scaleBackdropColor:"rgba(255,255,255,0.75)",scaleBackdropPaddingY:2,scaleBackdropPaddingX:2,segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,animation:!0,animationSteps:100,animationEasing:"easeOutBounce",
|
||||
animateRotate:!0,animateScale:!1,onAnimationComplete:null};var b=c?y(r.PolarArea.defaults,c):r.PolarArea.defaults;return new G(a,b,s)};this.Radar=function(a,c){r.Radar.defaults={scaleOverlay:!1,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleShowLine:!0,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!1,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowLabelBackdrop:!0,scaleBackdropColor:"rgba(255,255,255,0.75)",
|
||||
scaleBackdropPaddingY:2,scaleBackdropPaddingX:2,angleShowLineOut:!0,angleLineColor:"rgba(0,0,0,.1)",angleLineWidth:1,pointLabelFontFamily:"'Arial'",pointLabelFontStyle:"normal",pointLabelFontSize:12,pointLabelFontColor:"#666",pointDot:!0,pointDotRadius:3,pointDotStrokeWidth:1,datasetStroke:!0,datasetStrokeWidth:2,datasetFill:!0,animation:!0,animationSteps:60,animationEasing:"easeOutQuart",onAnimationComplete:null};var b=c?y(r.Radar.defaults,c):r.Radar.defaults;return new H(a,b,s)};this.Pie=function(a,
|
||||
c){r.Pie.defaults={segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,animation:!0,animationSteps:100,animationEasing:"easeOutBounce",animateRotate:!0,animateScale:!1,onAnimationComplete:null};var b=c?y(r.Pie.defaults,c):r.Pie.defaults;return new I(a,b,s)};this.Doughnut=function(a,c){r.Doughnut.defaults={segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,percentageInnerCutout:50,animation:!0,animationSteps:100,animationEasing:"easeOutBounce",animateRotate:!0,animateScale:!1,
|
||||
onAnimationComplete:null};var b=c?y(r.Doughnut.defaults,c):r.Doughnut.defaults;return new J(a,b,s)};this.Line=function(a,c){r.Line.defaults={scaleOverlay:!1,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowGridLines:!0,scaleGridLineColor:"rgba(0,0,0,.05)",scaleGridLineWidth:1,bezierCurve:!0,
|
||||
pointDot:!0,pointDotRadius:4,pointDotStrokeWidth:2,datasetStroke:!0,datasetStrokeWidth:2,datasetFill:!0,animation:!0,animationSteps:60,animationEasing:"easeOutQuart",onAnimationComplete:null};var b=c?y(r.Line.defaults,c):r.Line.defaults;return new K(a,b,s)};this.Bar=function(a,c){r.Bar.defaults={scaleOverlay:!1,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleFontFamily:"'Arial'",
|
||||
scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",scaleShowGridLines:!0,scaleGridLineColor:"rgba(0,0,0,.05)",scaleGridLineWidth:1,barShowStroke:!0,barStrokeWidth:2,barValueSpacing:5,barDatasetSpacing:1,animation:!0,animationSteps:60,animationEasing:"easeOutQuart",onAnimationComplete:null};var b=c?y(r.Bar.defaults,c):r.Bar.defaults;return new L(a,b,s)};var G=function(a,c,b){var e,h,f,d,g,k,j,l,m;g=Math.min.apply(Math,[q,u])/2;g-=Math.max.apply(Math,[0.5*c.scaleFontSize,0.5*c.scaleLineWidth]);
|
||||
d=2*c.scaleFontSize;c.scaleShowLabelBackdrop&&(d+=2*c.scaleBackdropPaddingY,g-=1.5*c.scaleBackdropPaddingY);l=g;d=d?d:5;e=Number.MIN_VALUE;h=Number.MAX_VALUE;for(f=0;f<a.length;f++)a[f].value>e&&(e=a[f].value),a[f].value<h&&(h=a[f].value);f=Math.floor(l/(0.66*d));d=Math.floor(0.5*(l/d));m=c.scaleShowLabels?c.scaleLabel:null;c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(m,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(l,f,d,e,h,
|
||||
m);k=g/j.steps;x(c,function(){for(var a=0;a<j.steps;a++)if(c.scaleShowLine&&(b.beginPath(),b.arc(q/2,u/2,k*(a+1),0,2*Math.PI,!0),b.strokeStyle=c.scaleLineColor,b.lineWidth=c.scaleLineWidth,b.stroke()),c.scaleShowLabels){b.textAlign="center";b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;var e=j.labels[a];if(c.scaleShowLabelBackdrop){var d=b.measureText(e).width;b.fillStyle=c.scaleBackdropColor;b.beginPath();b.rect(Math.round(q/2-d/2-c.scaleBackdropPaddingX),Math.round(u/2-k*(a+
|
||||
1)-0.5*c.scaleFontSize-c.scaleBackdropPaddingY),Math.round(d+2*c.scaleBackdropPaddingX),Math.round(c.scaleFontSize+2*c.scaleBackdropPaddingY));b.fill()}b.textBaseline="middle";b.fillStyle=c.scaleFontColor;b.fillText(e,q/2,u/2-k*(a+1))}},function(e){var d=-Math.PI/2,g=2*Math.PI/a.length,f=1,h=1;c.animation&&(c.animateScale&&(f=e),c.animateRotate&&(h=e));for(e=0;e<a.length;e++)b.beginPath(),b.arc(q/2,u/2,f*v(a[e].value,j,k),d,d+h*g,!1),b.lineTo(q/2,u/2),b.closePath(),b.fillStyle=a[e].color,b.fill(),
|
||||
c.segmentShowStroke&&(b.strokeStyle=c.segmentStrokeColor,b.lineWidth=c.segmentStrokeWidth,b.stroke()),d+=h*g},b)},H=function(a,c,b){var e,h,f,d,g,k,j,l,m;a.labels||(a.labels=[]);g=Math.min.apply(Math,[q,u])/2;d=2*c.scaleFontSize;for(e=l=0;e<a.labels.length;e++)b.font=c.pointLabelFontStyle+" "+c.pointLabelFontSize+"px "+c.pointLabelFontFamily,h=b.measureText(a.labels[e]).width,h>l&&(l=h);g-=Math.max.apply(Math,[l,1.5*(c.pointLabelFontSize/2)]);g-=c.pointLabelFontSize;l=g=A(g,null,0);d=d?d:5;e=Number.MIN_VALUE;
|
||||
h=Number.MAX_VALUE;for(f=0;f<a.datasets.length;f++)for(m=0;m<a.datasets[f].data.length;m++)a.datasets[f].data[m]>e&&(e=a.datasets[f].data[m]),a.datasets[f].data[m]<h&&(h=a.datasets[f].data[m]);f=Math.floor(l/(0.66*d));d=Math.floor(0.5*(l/d));m=c.scaleShowLabels?c.scaleLabel:null;c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(m,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(l,f,d,e,h,m);k=g/j.steps;x(c,function(){var e=2*Math.PI/
|
||||
a.datasets[0].data.length;b.save();b.translate(q/2,u/2);if(c.angleShowLineOut){b.strokeStyle=c.angleLineColor;b.lineWidth=c.angleLineWidth;for(var d=0;d<a.datasets[0].data.length;d++)b.rotate(e),b.beginPath(),b.moveTo(0,0),b.lineTo(0,-g),b.stroke()}for(d=0;d<j.steps;d++){b.beginPath();if(c.scaleShowLine){b.strokeStyle=c.scaleLineColor;b.lineWidth=c.scaleLineWidth;b.moveTo(0,-k*(d+1));for(var f=0;f<a.datasets[0].data.length;f++)b.rotate(e),b.lineTo(0,-k*(d+1));b.closePath();b.stroke()}c.scaleShowLabels&&
|
||||
(b.textAlign="center",b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily,b.textBaseline="middle",c.scaleShowLabelBackdrop&&(f=b.measureText(j.labels[d]).width,b.fillStyle=c.scaleBackdropColor,b.beginPath(),b.rect(Math.round(-f/2-c.scaleBackdropPaddingX),Math.round(-k*(d+1)-0.5*c.scaleFontSize-c.scaleBackdropPaddingY),Math.round(f+2*c.scaleBackdropPaddingX),Math.round(c.scaleFontSize+2*c.scaleBackdropPaddingY)),b.fill()),b.fillStyle=c.scaleFontColor,b.fillText(j.labels[d],0,-k*(d+
|
||||
1)))}for(d=0;d<a.labels.length;d++){b.font=c.pointLabelFontStyle+" "+c.pointLabelFontSize+"px "+c.pointLabelFontFamily;b.fillStyle=c.pointLabelFontColor;var f=Math.sin(e*d)*(g+c.pointLabelFontSize),h=Math.cos(e*d)*(g+c.pointLabelFontSize);b.textAlign=e*d==Math.PI||0==e*d?"center":e*d>Math.PI?"right":"left";b.textBaseline="middle";b.fillText(a.labels[d],f,-h)}b.restore()},function(d){var e=2*Math.PI/a.datasets[0].data.length;b.save();b.translate(q/2,u/2);for(var g=0;g<a.datasets.length;g++){b.beginPath();
|
||||
b.moveTo(0,d*-1*v(a.datasets[g].data[0],j,k));for(var f=1;f<a.datasets[g].data.length;f++)b.rotate(e),b.lineTo(0,d*-1*v(a.datasets[g].data[f],j,k));b.closePath();b.fillStyle=a.datasets[g].fillColor;b.strokeStyle=a.datasets[g].strokeColor;b.lineWidth=c.datasetStrokeWidth;b.fill();b.stroke();if(c.pointDot){b.fillStyle=a.datasets[g].pointColor;b.strokeStyle=a.datasets[g].pointStrokeColor;b.lineWidth=c.pointDotStrokeWidth;for(f=0;f<a.datasets[g].data.length;f++)b.rotate(e),b.beginPath(),b.arc(0,d*-1*
|
||||
v(a.datasets[g].data[f],j,k),c.pointDotRadius,2*Math.PI,!1),b.fill(),b.stroke()}b.rotate(e)}b.restore()},b)},I=function(a,c,b){for(var e=0,h=Math.min.apply(Math,[u/2,q/2])-5,f=0;f<a.length;f++)e+=a[f].value;x(c,null,function(d){var g=-Math.PI/2,f=1,j=1;c.animation&&(c.animateScale&&(f=d),c.animateRotate&&(j=d));for(d=0;d<a.length;d++){var l=j*a[d].value/e*2*Math.PI;b.beginPath();b.arc(q/2,u/2,f*h,g,g+l);b.lineTo(q/2,u/2);b.closePath();b.fillStyle=a[d].color;b.fill();c.segmentShowStroke&&(b.lineWidth=
|
||||
c.segmentStrokeWidth,b.strokeStyle=c.segmentStrokeColor,b.stroke());g+=l}},b)},J=function(a,c,b){for(var e=0,h=Math.min.apply(Math,[u/2,q/2])-5,f=h*(c.percentageInnerCutout/100),d=0;d<a.length;d++)e+=a[d].value;x(c,null,function(d){var k=-Math.PI/2,j=1,l=1;c.animation&&(c.animateScale&&(j=d),c.animateRotate&&(l=d));for(d=0;d<a.length;d++){var m=l*a[d].value/e*2*Math.PI;b.beginPath();b.arc(q/2,u/2,j*h,k,k+m,!1);b.arc(q/2,u/2,j*f,k+m,k,!0);b.closePath();b.fillStyle=a[d].color;b.fill();c.segmentShowStroke&&
|
||||
(b.lineWidth=c.segmentStrokeWidth,b.strokeStyle=c.segmentStrokeColor,b.stroke());k+=m}},b)},K=function(a,c,b){var e,h,f,d,g,k,j,l,m,t,r,n,p,s=0;g=u;b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;t=1;for(d=0;d<a.labels.length;d++)e=b.measureText(a.labels[d]).width,t=e>t?e:t;q/a.labels.length<t?(s=45,q/a.labels.length<Math.cos(s)*t?(s=90,g-=t):g-=Math.sin(s)*t):g-=c.scaleFontSize;d=c.scaleFontSize;g=g-5-d;e=Number.MIN_VALUE;h=Number.MAX_VALUE;for(f=0;f<a.datasets.length;f++)for(l=
|
||||
0;l<a.datasets[f].data.length;l++)a.datasets[f].data[l]>e&&(e=a.datasets[f].data[l]),a.datasets[f].data[l]<h&&(h=a.datasets[f].data[l]);f=Math.floor(g/(0.66*d));d=Math.floor(0.5*(g/d));l=c.scaleShowLabels?c.scaleLabel:"";c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(l,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(g,f,d,e,h,l);k=Math.floor(g/j.steps);d=1;if(c.scaleShowLabels){b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;
|
||||
for(e=0;e<j.labels.length;e++)h=b.measureText(j.labels[e]).width,d=h>d?h:d;d+=10}r=q-d-t;m=Math.floor(r/(a.labels.length-1));n=q-t/2-r;p=g+c.scaleFontSize/2;x(c,function(){b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(q-t/2+5,p);b.lineTo(q-t/2-r-5,p);b.stroke();0<s?(b.save(),b.textAlign="right"):b.textAlign="center";b.fillStyle=c.scaleFontColor;for(var d=0;d<a.labels.length;d++)b.save(),0<s?(b.translate(n+d*m,p+c.scaleFontSize),b.rotate(-(s*(Math.PI/180))),b.fillText(a.labels[d],
|
||||
0,0),b.restore()):b.fillText(a.labels[d],n+d*m,p+c.scaleFontSize+3),b.beginPath(),b.moveTo(n+d*m,p+3),c.scaleShowGridLines&&0<d?(b.lineWidth=c.scaleGridLineWidth,b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+d*m,5)):b.lineTo(n+d*m,p+3),b.stroke();b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(n,p+5);b.lineTo(n,5);b.stroke();b.textAlign="right";b.textBaseline="middle";for(d=0;d<j.steps;d++)b.beginPath(),b.moveTo(n-3,p-(d+1)*k),c.scaleShowGridLines?(b.lineWidth=c.scaleGridLineWidth,
|
||||
b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+r+5,p-(d+1)*k)):b.lineTo(n-0.5,p-(d+1)*k),b.stroke(),c.scaleShowLabels&&b.fillText(j.labels[d],n-8,p-(d+1)*k)},function(d){function e(b,c){return p-d*v(a.datasets[b].data[c],j,k)}for(var f=0;f<a.datasets.length;f++){b.strokeStyle=a.datasets[f].strokeColor;b.lineWidth=c.datasetStrokeWidth;b.beginPath();b.moveTo(n,p-d*v(a.datasets[f].data[0],j,k));for(var g=1;g<a.datasets[f].data.length;g++)c.bezierCurve?b.bezierCurveTo(n+m*(g-0.5),e(f,g-1),n+m*(g-0.5),
|
||||
e(f,g),n+m*g,e(f,g)):b.lineTo(n+m*g,e(f,g));b.stroke();c.datasetFill?(b.lineTo(n+m*(a.datasets[f].data.length-1),p),b.lineTo(n,p),b.closePath(),b.fillStyle=a.datasets[f].fillColor,b.fill()):b.closePath();if(c.pointDot){b.fillStyle=a.datasets[f].pointColor;b.strokeStyle=a.datasets[f].pointStrokeColor;b.lineWidth=c.pointDotStrokeWidth;for(g=0;g<a.datasets[f].data.length;g++)b.beginPath(),b.arc(n+m*g,p-d*v(a.datasets[f].data[g],j,k),c.pointDotRadius,0,2*Math.PI,!0),b.fill(),b.stroke()}}},b)},L=function(a,
|
||||
c,b){var e,h,f,d,g,k,j,l,m,t,r,n,p,s,w=0;g=u;b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;t=1;for(d=0;d<a.labels.length;d++)e=b.measureText(a.labels[d]).width,t=e>t?e:t;q/a.labels.length<t?(w=45,q/a.labels.length<Math.cos(w)*t?(w=90,g-=t):g-=Math.sin(w)*t):g-=c.scaleFontSize;d=c.scaleFontSize;g=g-5-d;e=Number.MIN_VALUE;h=Number.MAX_VALUE;for(f=0;f<a.datasets.length;f++)for(l=0;l<a.datasets[f].data.length;l++)a.datasets[f].data[l]>e&&(e=a.datasets[f].data[l]),a.datasets[f].data[l]<
|
||||
h&&(h=a.datasets[f].data[l]);f=Math.floor(g/(0.66*d));d=Math.floor(0.5*(g/d));l=c.scaleShowLabels?c.scaleLabel:"";c.scaleOverride?(j={steps:c.scaleSteps,stepValue:c.scaleStepWidth,graphMin:c.scaleStartValue,labels:[]},z(l,j.labels,j.steps,c.scaleStartValue,c.scaleStepWidth)):j=C(g,f,d,e,h,l);k=Math.floor(g/j.steps);d=1;if(c.scaleShowLabels){b.font=c.scaleFontStyle+" "+c.scaleFontSize+"px "+c.scaleFontFamily;for(e=0;e<j.labels.length;e++)h=b.measureText(j.labels[e]).width,d=h>d?h:d;d+=10}r=q-d-t;m=
|
||||
Math.floor(r/a.labels.length);s=(m-2*c.scaleGridLineWidth-2*c.barValueSpacing-(c.barDatasetSpacing*a.datasets.length-1)-(c.barStrokeWidth/2*a.datasets.length-1))/a.datasets.length;n=q-t/2-r;p=g+c.scaleFontSize/2;x(c,function(){b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(q-t/2+5,p);b.lineTo(q-t/2-r-5,p);b.stroke();0<w?(b.save(),b.textAlign="right"):b.textAlign="center";b.fillStyle=c.scaleFontColor;for(var d=0;d<a.labels.length;d++)b.save(),0<w?(b.translate(n+
|
||||
d*m,p+c.scaleFontSize),b.rotate(-(w*(Math.PI/180))),b.fillText(a.labels[d],0,0),b.restore()):b.fillText(a.labels[d],n+d*m+m/2,p+c.scaleFontSize+3),b.beginPath(),b.moveTo(n+(d+1)*m,p+3),b.lineWidth=c.scaleGridLineWidth,b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+(d+1)*m,5),b.stroke();b.lineWidth=c.scaleLineWidth;b.strokeStyle=c.scaleLineColor;b.beginPath();b.moveTo(n,p+5);b.lineTo(n,5);b.stroke();b.textAlign="right";b.textBaseline="middle";for(d=0;d<j.steps;d++)b.beginPath(),b.moveTo(n-3,p-(d+1)*
|
||||
k),c.scaleShowGridLines?(b.lineWidth=c.scaleGridLineWidth,b.strokeStyle=c.scaleGridLineColor,b.lineTo(n+r+5,p-(d+1)*k)):b.lineTo(n-0.5,p-(d+1)*k),b.stroke(),c.scaleShowLabels&&b.fillText(j.labels[d],n-8,p-(d+1)*k)},function(d){b.lineWidth=c.barStrokeWidth;for(var e=0;e<a.datasets.length;e++){b.fillStyle=a.datasets[e].fillColor;b.strokeStyle=a.datasets[e].strokeColor;for(var f=0;f<a.datasets[e].data.length;f++){var g=n+c.barValueSpacing+m*f+s*e+c.barDatasetSpacing*e+c.barStrokeWidth*e;b.beginPath();
|
||||
b.moveTo(g,p);b.lineTo(g,p-d*v(a.datasets[e].data[f],j,k)+c.barStrokeWidth/2);b.lineTo(g+s,p-d*v(a.datasets[e].data[f],j,k)+c.barStrokeWidth/2);b.lineTo(g+s,p);c.barShowStroke&&b.stroke();b.closePath();b.fill()}}},b)},D=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,1E3/60)},F={}};
|
|
@ -1,6 +1,3 @@
|
|||
$(document).on 'click', '.badge-codes-toggle', ->
|
||||
$('.badge-codes-block').toggleClass("hide")
|
||||
return false
|
||||
|
||||
$(document).on 'click', '.sync-now', ->
|
||||
$(this).find('i').addClass('fa-spin')
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#
|
||||
# ### Example Markup
|
||||
#
|
||||
# <div id="tree-content-holder">
|
||||
# <div id="blob-content-holder">
|
||||
# <div class="file-content">
|
||||
# <div class="line-numbers">
|
||||
# <a href="#L1" id="L1" data-line-number="1">1</a>
|
||||
|
@ -53,7 +53,7 @@ class @LineHighlighter
|
|||
$.scrollTo("#L#{range[0]}", offset: -150)
|
||||
|
||||
bindEvents: ->
|
||||
$('#tree-content-holder').on 'mousedown', 'a[data-line-number]', @clickHandler
|
||||
$('#blob-content-holder').on 'mousedown', 'a[data-line-number]', @clickHandler
|
||||
|
||||
# While it may seem odd to bind to the mousedown event and then throw away
|
||||
# the click event, there is a method to our madness.
|
||||
|
@ -62,7 +62,7 @@ class @LineHighlighter
|
|||
# active state even when the event is cancelled, resulting in an ugly border
|
||||
# around the link and/or a persisted underline text decoration.
|
||||
|
||||
$('#tree-content-holder').on 'click', 'a[data-line-number]', (event) ->
|
||||
$('#blob-content-holder').on 'click', 'a[data-line-number]', (event) ->
|
||||
event.preventDefault()
|
||||
|
||||
clickHandler: (event) =>
|
||||
|
|
|
@ -66,6 +66,11 @@ class @MergeRequestTabs
|
|||
|
||||
@setCurrentAction(action)
|
||||
|
||||
scrollToElement: (container) ->
|
||||
if window.location.hash
|
||||
$el = $("#{container} #{window.location.hash}")
|
||||
$('body').scrollTo($el.offset().top) if $el.length
|
||||
|
||||
# Activate a tab based on the current action
|
||||
activateTab: (action) ->
|
||||
action = 'notes' if action == 'show'
|
||||
|
@ -122,6 +127,7 @@ class @MergeRequestTabs
|
|||
document.getElementById('commits').innerHTML = data.html
|
||||
$('.js-timeago').timeago()
|
||||
@commitsLoaded = true
|
||||
@scrollToElement("#commits")
|
||||
|
||||
loadDiff: (source) ->
|
||||
return if @diffsLoaded
|
||||
|
@ -131,14 +137,18 @@ class @MergeRequestTabs
|
|||
success: (data) =>
|
||||
document.getElementById('diffs').innerHTML = data.html
|
||||
@diffsLoaded = true
|
||||
@scrollToElement("#diffs")
|
||||
|
||||
toggleLoading: ->
|
||||
$('.mr-loading-status .loading').toggle()
|
||||
# Show or hide the loading spinner
|
||||
#
|
||||
# status - Boolean, true to show, false to hide
|
||||
toggleLoading: (status) ->
|
||||
$('.mr-loading-status .loading').toggle(status)
|
||||
|
||||
_get: (options) ->
|
||||
defaults = {
|
||||
beforeSend: @toggleLoading
|
||||
complete: @toggleLoading
|
||||
beforeSend: => @toggleLoading(true)
|
||||
complete: => @toggleLoading(false)
|
||||
dataType: 'json'
|
||||
type: 'GET'
|
||||
}
|
||||
|
|
|
@ -63,12 +63,6 @@ class @Notes
|
|||
# fetch notes when tab becomes visible
|
||||
$(document).on "visibilitychange", @visibilityChange
|
||||
|
||||
# Chrome doesn't fire keypress or keyup for Command+Enter, so we need keydown.
|
||||
$(document).on 'keydown', '.js-note-text', (e) ->
|
||||
return if e.originalEvent.repeat
|
||||
if e.keyCode == 10 || ((e.metaKey || e.ctrlKey) && e.keyCode == 13)
|
||||
$(@).closest('form').submit()
|
||||
|
||||
cleanBinding: ->
|
||||
$(document).off "ajax:success", ".js-main-target-form"
|
||||
$(document).off "ajax:success", ".js-discussion-note-form"
|
||||
|
@ -82,7 +76,6 @@ class @Notes
|
|||
$(document).off "click", ".js-discussion-reply-button"
|
||||
$(document).off "click", ".js-add-diff-note-button"
|
||||
$(document).off "visibilitychange"
|
||||
$(document).off "keydown", ".js-note-text"
|
||||
$(document).off "keyup", ".js-note-text"
|
||||
$(document).off "click", ".js-note-target-reopen"
|
||||
$(document).off "click", ".js-note-target-close"
|
||||
|
|
|
@ -7,6 +7,7 @@ class @ShortcutsNavigation extends Shortcuts
|
|||
Mousetrap.bind('g e', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-project-activity'))
|
||||
Mousetrap.bind('g f', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-tree'))
|
||||
Mousetrap.bind('g c', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-commits'))
|
||||
Mousetrap.bind('g b', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-builds'))
|
||||
Mousetrap.bind('g n', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-network'))
|
||||
Mousetrap.bind('g g', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-graphs'))
|
||||
Mousetrap.bind('g i', -> ShortcutsNavigation.findAndFollowLink('.shortcuts-issues'))
|
||||
|
|
|
@ -16,6 +16,9 @@ class @TreeView
|
|||
li = $("tr.tree-item")
|
||||
liSelected = null
|
||||
$('body').keydown (e) ->
|
||||
if $("input:focus").length > 0 && (e.which == 38 || e.which == 40)
|
||||
return false
|
||||
|
||||
if e.which is 40
|
||||
if liSelected
|
||||
next = liSelected.next()
|
||||
|
@ -38,4 +41,4 @@ class @TreeView
|
|||
$(liSelected).focus()
|
||||
else if e.which is 13
|
||||
path = $('.tree-item.selected .tree-item-file-name a').attr('href')
|
||||
Turbolinks.visit(path)
|
||||
if path then Turbolinks.visit(path)
|
||||
|
|
|
@ -11,59 +11,41 @@
|
|||
*= require cal-heatmap
|
||||
*/
|
||||
|
||||
|
||||
@import "base/fonts";
|
||||
@import "base/variables";
|
||||
@import "base/mixins";
|
||||
@import "base/layout";
|
||||
|
||||
|
||||
/**
|
||||
* Customized Twitter bootstrap
|
||||
/*
|
||||
* Welcome to GitLab css!
|
||||
* If you need to add or modify UI component that is common for many pages
|
||||
* like a table or typography then make changes in the framework/ directory.
|
||||
* If you need to add unique style that should affect only one page - use pages/
|
||||
* directory.
|
||||
*/
|
||||
@import 'base/gl_variables';
|
||||
@import 'base/gl_bootstrap';
|
||||
|
||||
/**
|
||||
/*
|
||||
* GitLab UI framework
|
||||
*/
|
||||
@import "framework";
|
||||
|
||||
/*
|
||||
* NProgress load bar css
|
||||
*/
|
||||
@import 'nprogress';
|
||||
@import 'nprogress-bootstrap';
|
||||
|
||||
/**
|
||||
/*
|
||||
* Font icons
|
||||
*
|
||||
*/
|
||||
@import "font-awesome";
|
||||
|
||||
/**
|
||||
* UI themes:
|
||||
*/
|
||||
@import "themes/**/*";
|
||||
|
||||
/**
|
||||
* Generic css (forms, nav etc):
|
||||
*/
|
||||
@import "generic/**/*";
|
||||
|
||||
/**
|
||||
/*
|
||||
* Page specific styles (issues, projects etc):
|
||||
*/
|
||||
|
||||
@import "pages/**/*";
|
||||
|
||||
/**
|
||||
/*
|
||||
* Code highlight
|
||||
*/
|
||||
@import "highlight/**/*";
|
||||
|
||||
/**
|
||||
/*
|
||||
* Styles for JS behaviors.
|
||||
*/
|
||||
@import "behaviors.scss";
|
||||
|
||||
/**
|
||||
* CI specific styles:
|
||||
*/
|
||||
@import "ci/**/*";
|
||||
|
||||
@import "behaviors.scss";
|
|
@ -1,46 +0,0 @@
|
|||
$hover: #FFFAF1;
|
||||
$gl-text-color: #54565B;
|
||||
$gl-text-green: #4A2;
|
||||
$gl-text-red: #D12F19;
|
||||
$gl-text-orange: #D90;
|
||||
$gl-header-color: #4c4e54;
|
||||
$gl-link-color: #333c48;
|
||||
$md-text-color: #444;
|
||||
$md-link-color: #3084bb;
|
||||
$nprogress-color: #c0392b;
|
||||
$gl-font-size: 15px;
|
||||
$list-font-size: 15px;
|
||||
$sidebar_collapsed_width: 62px;
|
||||
$sidebar_width: 230px;
|
||||
$avatar_radius: 50%;
|
||||
$code_font_size: 13px;
|
||||
$code_line_height: 1.5;
|
||||
$border-color: #dce0e6;
|
||||
$background-color: #F7F8FA;
|
||||
$header-height: 58px;
|
||||
$fixed-layout-width: 1200px;
|
||||
$gl-gray: #7f8fa4;
|
||||
$gl-padding: 16px;
|
||||
$gl-avatar-size: 46px;
|
||||
|
||||
|
||||
/*
|
||||
* State colors:
|
||||
*/
|
||||
$gl-primary: #446e9b;
|
||||
$gl-success: #44c679;
|
||||
$gl-info: #00aaff;
|
||||
$gl-warning: #EB9532;
|
||||
$gl-danger: #d9534f;
|
||||
|
||||
/*
|
||||
* Commit Diff Colors
|
||||
*/
|
||||
$added: #63c363;
|
||||
$deleted: #f77;
|
||||
|
||||
/*
|
||||
* Fonts
|
||||
*/
|
||||
$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'DejaVu Sans Mono', 'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida console', monospace;
|
||||
$regular_font: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
@ -0,0 +1,33 @@
|
|||
@import "framework/fonts";
|
||||
@import "framework/variables";
|
||||
@import "framework/mixins";
|
||||
@import "framework/layout";
|
||||
@import 'framework/tw_bootstrap_variables';
|
||||
@import 'framework/tw_bootstrap';
|
||||
|
||||
@import "framework/avatar.scss";
|
||||
@import "framework/blocks.scss";
|
||||
@import "framework/buttons.scss";
|
||||
@import "framework/calendar.scss";
|
||||
@import "framework/callout.scss";
|
||||
@import "framework/common.scss";
|
||||
@import "framework/files.scss";
|
||||
@import "framework/filters.scss";
|
||||
@import "framework/flash.scss";
|
||||
@import "framework/forms.scss";
|
||||
@import "framework/gfm.scss";
|
||||
@import "framework/gitlab-theme.scss";
|
||||
@import "framework/header.scss";
|
||||
@import "framework/highlight.scss";
|
||||
@import "framework/issue_box.scss";
|
||||
@import "framework/jquery.scss";
|
||||
@import "framework/lists.scss";
|
||||
@import "framework/markdown_area.scss";
|
||||
@import "framework/mobile.scss";
|
||||
@import "framework/pagination.scss";
|
||||
@import "framework/selects.scss";
|
||||
@import "framework/sidebar.scss";
|
||||
@import "framework/tables.scss";
|
||||
@import "framework/timeline.scss";
|
||||
@import "framework/typography.scss";
|
||||
@import "framework/zen.scss";
|
|
@ -18,6 +18,7 @@
|
|||
line-height: 36px;
|
||||
}
|
||||
|
||||
.content-block,
|
||||
.gray-content-block {
|
||||
margin: -$gl-padding;
|
||||
background-color: $background-color;
|
||||
|
@ -27,6 +28,10 @@
|
|||
border-bottom: 1px solid $border-color;
|
||||
color: $gl-gray;
|
||||
|
||||
&.white {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
&.top-block {
|
||||
border-top: none;
|
||||
}
|
|
@ -0,0 +1,171 @@
|
|||
@mixin btn-default {
|
||||
@include border-radius(2px);
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
text-transform: uppercase;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
line-height: 18px;
|
||||
padding: 11px $gl-padding;
|
||||
letter-spacing: .4px;
|
||||
|
||||
&:focus,
|
||||
&:active {
|
||||
outline: none;
|
||||
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||
}
|
||||
}
|
||||
|
||||
@mixin btn-middle {
|
||||
@include btn-default;
|
||||
@include border-radius(2px);
|
||||
padding: 11px 24px;
|
||||
}
|
||||
|
||||
@mixin btn-color($light, $border-light, $normal, $border-normal, $dark, $border-dark, $color) {
|
||||
background-color: $light;
|
||||
border-color: $border-light;
|
||||
color: $color;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: $normal;
|
||||
border-color: $border-normal;
|
||||
color: $color;
|
||||
}
|
||||
|
||||
&:active {
|
||||
@include box-shadow (inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||
|
||||
background-color: $dark;
|
||||
border-color: $border-dark;
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin btn-green {
|
||||
@include btn-color($green-light, $border-green-light, $green-normal, $border-green-normal, $green-dark, $border-green-dark, #FFFFFF);
|
||||
}
|
||||
|
||||
@mixin btn-blue {
|
||||
@include btn-color($blue-light, $border-blue-light, $blue-normal, $border-blue-normal, $blue-dark, $border-blue-dark, #FFFFFF);
|
||||
}
|
||||
|
||||
@mixin btn-orange {
|
||||
@include btn-color($orange-light, $border-orange-light, $orange-normal, $border-orange-normal, $orange-dark, $border-orange-dark, #FFFFFF);
|
||||
}
|
||||
|
||||
@mixin btn-red {
|
||||
@include btn-color($red-light, $border-red-light, $red-normal, $border-red-normal, $red-dark, $border-red-dark, #FFFFFF);
|
||||
}
|
||||
|
||||
@mixin btn-gray {
|
||||
@include btn-color($gray-light, $border-gray-light, $gray-normal, $border-gray-normal, $gray-dark, $border-gray-dark, #313236);
|
||||
}
|
||||
|
||||
@mixin btn-white {
|
||||
@include btn-color($white-light, $border-white-light, $white-normal, $border-white-normal, $white-dark, $border-white-dark, #313236);
|
||||
}
|
||||
|
||||
.btn {
|
||||
@include btn-default;
|
||||
@include btn-white;
|
||||
|
||||
&.btn-sm {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
&.btn-xs {
|
||||
padding: 1px 5px;
|
||||
}
|
||||
|
||||
&.btn-success,
|
||||
&.btn-new,
|
||||
&.btn-create,
|
||||
&.btn-save,
|
||||
&.btn-green {
|
||||
@include btn-green;
|
||||
}
|
||||
|
||||
&.btn-gray {
|
||||
@include btn-gray;
|
||||
}
|
||||
|
||||
&.btn-primary,
|
||||
&.btn-info {
|
||||
@include btn-blue;
|
||||
}
|
||||
|
||||
&.btn-warning {
|
||||
@include btn-orange;
|
||||
}
|
||||
|
||||
&.btn-danger,
|
||||
&.btn-remove,
|
||||
&.btn-red {
|
||||
@include btn-red;
|
||||
}
|
||||
|
||||
&.btn-cancel {
|
||||
float: right;
|
||||
}
|
||||
|
||||
&.btn-close {
|
||||
color: $gl-danger;
|
||||
border-color: $gl-danger;
|
||||
&:hover {
|
||||
color: #B94A48;
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-reopen {
|
||||
color: $gl-success;
|
||||
border-color: $gl-success;
|
||||
&:hover {
|
||||
color: #468847;
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-grouped {
|
||||
margin-right: 7px;
|
||||
float: left;
|
||||
&:last-child {
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-block {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
margin-bottom: 15px;
|
||||
&.btn {
|
||||
padding: 6px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-group {
|
||||
&.btn-grouped {
|
||||
margin-right: 7px;
|
||||
float: left;
|
||||
&:last-child {
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-group-next {
|
||||
.btn {
|
||||
padding: 9px 0px;
|
||||
font-size: 15px;
|
||||
color: #7f8fa4;
|
||||
border-color: #e7e9ed;
|
||||
width: 140px;
|
||||
|
||||
&.active {
|
||||
border-color: $gl-info;
|
||||
background: $gl-info;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -381,6 +381,10 @@ table {
|
|||
&.no-bottom {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&.no-top {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.dropzone .dz-preview .dz-progress {
|
||||
|
@ -390,3 +394,7 @@ table {
|
|||
.dropzone .dz-preview .dz-progress .dz-upload {
|
||||
background: $gl-success !important;
|
||||
}
|
||||
|
||||
.space-right {
|
||||
margin-right: 10px;
|
||||
}
|
|
@ -29,12 +29,6 @@ input[type='text'].danger {
|
|||
border-top: 1px solid $border-color;
|
||||
}
|
||||
|
||||
@media (min-width: $screen-sm-min) {
|
||||
.form-actions {
|
||||
padding-left: 17%;
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
&.control-label {
|
||||
@extend .col-sm-2;
|
||||
|
@ -84,3 +78,17 @@ label {
|
|||
.wiki-content {
|
||||
margin-top: 35px;
|
||||
}
|
||||
|
||||
.form-group .control-label {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.form-control::-webkit-input-placeholder {
|
||||
color: #7f8fa4;
|
||||
}
|
||||
|
||||
.input-group {
|
||||
.input-group-addon {
|
||||
background-color: #f7f8fa;
|
||||
}
|
||||
}
|
|
@ -22,4 +22,5 @@
|
|||
|
||||
.gfm-commit, .gfm-commit_range {
|
||||
font-family: $monospace_font;
|
||||
font-size: 90%;
|
||||
}
|
|
@ -50,15 +50,17 @@ header {
|
|||
|
||||
.navbar-toggle {
|
||||
color: #666;
|
||||
margin: 0;
|
||||
margin: 6px 0;
|
||||
border-radius: 0;
|
||||
position: absolute;
|
||||
right: 2px;
|
||||
top: 15px;
|
||||
|
||||
&:hover {
|
||||
background-color: #EEE;
|
||||
}
|
||||
&.active {
|
||||
color: #7f8fa4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -87,6 +89,7 @@ header {
|
|||
|
||||
.navbar-collapse {
|
||||
float: right;
|
||||
border-top: none;
|
||||
}
|
||||
}
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
*/
|
||||
|
||||
.issue-box {
|
||||
@include border-radius(3px);
|
||||
@include border-radius(2px);
|
||||
|
||||
display: inline-block;
|
||||
padding: 10px $gl-padding;
|
|
@ -1,34 +1,19 @@
|
|||
html {
|
||||
overflow-y: scroll;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
|
||||
&.touch .tooltip { display: none !important; }
|
||||
|
||||
body {
|
||||
padding-top: $header-height;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
text-rendering: geometricPrecision;
|
||||
}
|
||||
}
|
||||
|
||||
.container {
|
||||
padding-top: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
.content {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.content section {
|
||||
height: 100%;
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.container .content {
|
||||
margin: 0 0;
|
||||
}
|
||||
|
@ -40,9 +25,3 @@ html {
|
|||
.container-limited {
|
||||
max-width: $fixed-layout-width;
|
||||
}
|
||||
|
||||
.max-height {
|
||||
height: 100%;
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
|
@ -117,8 +117,12 @@ ul.content-list {
|
|||
}
|
||||
|
||||
.controls {
|
||||
padding-top: 10px;
|
||||
padding-top: 4px;
|
||||
float: right;
|
||||
|
||||
.btn {
|
||||
padding: 10px 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -54,147 +54,6 @@
|
|||
@include box-shadow(0 0 0 3px #f1f1f1);
|
||||
}
|
||||
|
||||
@mixin md-typography {
|
||||
color: $md-text-color;
|
||||
|
||||
a {
|
||||
color: $md-link-color;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
*:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: $monospace_font;
|
||||
white-space: pre;
|
||||
word-wrap: normal;
|
||||
padding: 1px 2px;
|
||||
}
|
||||
|
||||
kbd {
|
||||
display: inline-block;
|
||||
padding: 3px 5px;
|
||||
font-size: 11px;
|
||||
line-height: 10px;
|
||||
color: #555;
|
||||
vertical-align: middle;
|
||||
background-color: #FCFCFC;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: #CCC #CCC #BBB;
|
||||
border-image: none;
|
||||
border-radius: 3px;
|
||||
box-shadow: 0px -1px 0px #BBB inset;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1.3em;
|
||||
font-weight: 600;
|
||||
margin: 24px 0 12px 0;
|
||||
padding: 0 0 10px 0;
|
||||
border-bottom: 1px solid #e7e9ed;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.2em;
|
||||
font-weight: 600;
|
||||
margin: 24px 0 12px 0;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 24px 0 12px 0;
|
||||
font-size: 1.25em;
|
||||
}
|
||||
|
||||
h4 {
|
||||
margin: 24px 0 12px 0;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
h5 {
|
||||
margin: 24px 0 12px 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
h6 {
|
||||
margin: 24px 0 12px 0;
|
||||
font-size: 0.90em;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
padding: 8px 21px;
|
||||
margin: 12px 0 12px;
|
||||
border-left: 3px solid #e7e9ed;
|
||||
}
|
||||
|
||||
blockquote p {
|
||||
color: #7f8fa4 !important;
|
||||
font-size: 15px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
p {
|
||||
color:#5c5d5e;
|
||||
margin:6px 0 0 0;
|
||||
}
|
||||
|
||||
table {
|
||||
@extend .table;
|
||||
@extend .table-bordered;
|
||||
margin: 12px 0 12px 0;
|
||||
color: #5c5d5e;
|
||||
th {
|
||||
background: #f8fafc;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
margin: 12px 0 12px 0 !important;
|
||||
background-color: #f8fafc !important;
|
||||
font-size: 13px !important;
|
||||
color: #5b6169 !important;
|
||||
line-height: 1.6em !important;
|
||||
@include border-radius(2px);
|
||||
}
|
||||
|
||||
p > code {
|
||||
font-weight: inherit;
|
||||
}
|
||||
|
||||
|
||||
ul {
|
||||
color: #5c5d5e;
|
||||
}
|
||||
|
||||
li {
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
a[href*="/uploads/"], a[href*="storage.googleapis.com/google-code-attachments/"] {
|
||||
&:before {
|
||||
margin-right: 4px;
|
||||
|
||||
font: normal normal normal 14px/1 FontAwesome;
|
||||
font-size: inherit;
|
||||
text-rendering: auto;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
content: "\f0c6";
|
||||
}
|
||||
|
||||
&:hover:before {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@mixin str-truncated($max_width: 82%) {
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
|
@ -23,7 +23,7 @@
|
|||
margin-right: 0;
|
||||
}
|
||||
|
||||
.issues-filters,
|
||||
.issues-details-filters,
|
||||
.dash-projects-filters,
|
||||
.check-all-holder {
|
||||
display: none;
|
||||
|
@ -83,6 +83,7 @@
|
|||
|
||||
.center-top-menu {
|
||||
height: 45px;
|
||||
margin-bottom: 30px;
|
||||
|
||||
li a {
|
||||
font-size: 14px;
|
||||
|
@ -90,9 +91,11 @@
|
|||
}
|
||||
}
|
||||
|
||||
.projects-search-form {
|
||||
margin: 0 -5px !important;
|
||||
.activity-filter-block {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.projects-search-form {
|
||||
.btn {
|
||||
display: none;
|
||||
}
|
||||
|
@ -100,6 +103,11 @@
|
|||
}
|
||||
|
||||
@media (max-width: $screen-sm-max) {
|
||||
.page-with-sidebar .content-wrapper {
|
||||
padding: 0;
|
||||
padding-top: 1px;
|
||||
}
|
||||
|
||||
.issues-filters {
|
||||
.milestone-filter, .labels-filter {
|
||||
display: none;
|
|
@ -8,7 +8,7 @@
|
|||
font-size: $gl-font-size;
|
||||
line-height: 1.42857143;
|
||||
|
||||
@include border-radius(4px);
|
||||
@include border-radius(2px);
|
||||
|
||||
.select2-arrow {
|
||||
background: #FFF;
|
||||
|
@ -18,8 +18,39 @@
|
|||
}
|
||||
}
|
||||
|
||||
.select2-container .select2-choice, .select2-container.select2-drop-above .select2-choice{
|
||||
color: #7f8fa4;
|
||||
border: 1px solid #e7e9ed;
|
||||
}
|
||||
|
||||
.select2-drop {
|
||||
@include box-shadow(rgba(76, 86, 103, 0.247059) 0px 0px 1px 0px, rgba(31, 37, 50, 0.317647) 0px 2px 18px 0px);
|
||||
@include border-radius (0px);
|
||||
|
||||
padding: 16px;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.select2-results .select2-result-label {
|
||||
padding: 9px;
|
||||
}
|
||||
|
||||
.select2-drop{
|
||||
color: #7f8fa4;
|
||||
}
|
||||
|
||||
.select2-highlighted {
|
||||
background: #3084bb !important;
|
||||
}
|
||||
|
||||
.select2-results li.select2-result-with-children > .select2-result-label {
|
||||
font-weight: 600;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
|
||||
.select2-container-multi .select2-choices {
|
||||
@include border-radius(4px);
|
||||
@include border-radius(2px);
|
||||
border-color: #CCC;
|
||||
}
|
||||
|
||||
|
@ -63,7 +94,7 @@
|
|||
|
||||
.ajax-users-dropdown, .ajax-project-users-dropdown {
|
||||
.select2-search {
|
||||
padding-top: 4px;
|
||||
padding-top: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -97,9 +128,6 @@
|
|||
}
|
||||
.user-name {
|
||||
}
|
||||
.user-username {
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
|
||||
.namespace-result {
|
||||
|
@ -114,5 +142,5 @@
|
|||
}
|
||||
|
||||
.ajax-users-dropdown {
|
||||
min-width: 225px !important;
|
||||
}
|
||||
min-width: 250px !important;
|
||||
}
|
|
@ -1,7 +1,4 @@
|
|||
.page-with-sidebar {
|
||||
min-height: 100%;
|
||||
height: 100%;
|
||||
|
||||
.sidebar-wrapper {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
|
@ -21,19 +18,15 @@
|
|||
}
|
||||
|
||||
.content-wrapper {
|
||||
min-height: 900px;
|
||||
display: table;
|
||||
min-height: 100vh;
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
background: #EAEBEC;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
|
||||
.container-fluid {
|
||||
background: #FFF;
|
||||
padding: $gl-padding;
|
||||
height: 100%;
|
||||
min-height: 100%;
|
||||
min-height: 90vh;
|
||||
|
||||
&.container-blank {
|
||||
background: none;
|
|
@ -1,5 +1,21 @@
|
|||
table {
|
||||
&.table {
|
||||
.dropdown-menu a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.success,
|
||||
.warning,
|
||||
.danger,
|
||||
.info {
|
||||
color: #fff;
|
||||
|
||||
a:not(.btn) {
|
||||
text-decoration: underline;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
tr {
|
||||
td, th {
|
||||
padding: 8px 10px;
|
||||
|
@ -12,7 +28,7 @@ table {
|
|||
border-bottom: 1px solid $border-color !important;
|
||||
}
|
||||
td {
|
||||
border-color: #F1F1F1 !important;
|
||||
border-color: $table-border-color !important;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
}
|
|
@ -10,8 +10,12 @@
|
|||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
color: $gl-gray;
|
||||
border-bottom: 1px solid #f1f2f4;
|
||||
border-right: 1px solid #f1f2f4;
|
||||
border-bottom: 1px solid #ECEEF1;
|
||||
border-right: 1px solid #ECEEF1;
|
||||
|
||||
&:target {
|
||||
background: $hover;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
|
@ -32,8 +32,6 @@
|
|||
@import "bootstrap/pager";
|
||||
@import "bootstrap/labels";
|
||||
@import "bootstrap/badges";
|
||||
@import "bootstrap/jumbotron";
|
||||
@import "bootstrap/thumbnails";
|
||||
@import "bootstrap/alerts";
|
||||
@import "bootstrap/progress-bars";
|
||||
@import "bootstrap/list-group";
|
||||
|
@ -251,23 +249,3 @@
|
|||
.text-info:hover {
|
||||
color: $brand-info;
|
||||
}
|
||||
|
||||
// Tables =====================================================================
|
||||
|
||||
table.table {
|
||||
.dropdown-menu a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.success,
|
||||
.warning,
|
||||
.danger,
|
||||
.info {
|
||||
color: #fff;
|
||||
|
||||
a:not(.btn) {
|
||||
text-decoration: underline;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -22,8 +22,8 @@ $brand-info: $gl-info;
|
|||
$brand-warning: $gl-warning;
|
||||
$brand-danger: $gl-danger;
|
||||
|
||||
$border-radius-base: 3px !default;
|
||||
$border-radius-large: 5px !default;
|
||||
$border-radius-base: 2px !default;
|
||||
$border-radius-large: 2px !default;
|
||||
$border-radius-small: 2px !default;
|
||||
|
||||
|
||||
|
@ -156,3 +156,5 @@ $nav-link-padding: 13px $gl-padding;
|
|||
$pre-bg: #f8fafc !default;
|
||||
$pre-color: $gl-gray !default;
|
||||
$pre-border-color: #e7e9ed;
|
||||
|
||||
$table-bg-accent: $background-color;
|
|
@ -0,0 +1,263 @@
|
|||
@mixin md-typography {
|
||||
color: $md-text-color;
|
||||
word-wrap: break-word;
|
||||
|
||||
a {
|
||||
color: $md-link-color;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
*:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: $monospace_font;
|
||||
white-space: pre;
|
||||
word-wrap: normal;
|
||||
padding: 1px 2px;
|
||||
}
|
||||
|
||||
kbd {
|
||||
display: inline-block;
|
||||
padding: 3px 5px;
|
||||
font-size: 11px;
|
||||
line-height: 10px;
|
||||
color: #555;
|
||||
vertical-align: middle;
|
||||
background-color: #FCFCFC;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: #CCC #CCC #BBB;
|
||||
border-image: none;
|
||||
border-radius: 3px;
|
||||
box-shadow: 0px -1px 0px #BBB inset;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1.3em;
|
||||
font-weight: 600;
|
||||
margin: 24px 0 12px 0;
|
||||
padding: 0 0 10px 0;
|
||||
border-bottom: 1px solid #e7e9ed;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.2em;
|
||||
font-weight: 600;
|
||||
margin: 24px 0 12px 0;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 24px 0 12px 0;
|
||||
font-size: 1.25em;
|
||||
}
|
||||
|
||||
h4 {
|
||||
margin: 24px 0 12px 0;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
h5 {
|
||||
margin: 24px 0 12px 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
h6 {
|
||||
margin: 24px 0 12px 0;
|
||||
font-size: 0.90em;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
color: #7f8fa4;
|
||||
font-size: inherit;
|
||||
padding: 8px 21px;
|
||||
margin: 12px 0 12px;
|
||||
border-left: 3px solid #e7e9ed;
|
||||
}
|
||||
|
||||
blockquote p {
|
||||
color: #7f8fa4 !important;
|
||||
font-size: inherit;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
p {
|
||||
color:#5c5d5e;
|
||||
margin:6px 0 0 0;
|
||||
}
|
||||
|
||||
table {
|
||||
@extend .table;
|
||||
@extend .table-bordered;
|
||||
margin: 12px 0 12px 0;
|
||||
color: #5c5d5e;
|
||||
th {
|
||||
background: #f8fafc;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
margin: 12px 0 12px 0 !important;
|
||||
background-color: #f8fafc;
|
||||
font-size: 13px !important;
|
||||
color: #5b6169;
|
||||
line-height: 1.6em !important;
|
||||
@include border-radius(2px);
|
||||
}
|
||||
|
||||
p > code {
|
||||
font-weight: inherit;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
padding: 0;
|
||||
margin: 6px 0 6px 18px !important;
|
||||
}
|
||||
|
||||
li {
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
a[href*="/uploads/"], a[href*="storage.googleapis.com/google-code-attachments/"] {
|
||||
&:before {
|
||||
margin-right: 4px;
|
||||
|
||||
font: normal normal normal 14px/1 FontAwesome;
|
||||
font-size: inherit;
|
||||
text-rendering: auto;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
content: "\f0c6";
|
||||
}
|
||||
|
||||
&:hover:before {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Link to current header. */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
position: relative;
|
||||
|
||||
a.anchor {
|
||||
// Setting `display: none` would prevent the anchor being scrolled to, so
|
||||
// instead we set the height to 0 and it gets updated on hover.
|
||||
height: 0;
|
||||
}
|
||||
|
||||
&:hover > a.anchor {
|
||||
$size: 16px;
|
||||
position: absolute;
|
||||
right: 100%;
|
||||
top: 50%;
|
||||
margin-top: -$size/2;
|
||||
margin-right: 0px;
|
||||
padding-right: 20px;
|
||||
display: inline-block;
|
||||
width: $size;
|
||||
height: $size;
|
||||
background-image: image-url("icon-link.png");
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Headers
|
||||
*
|
||||
*/
|
||||
body {
|
||||
text-rendering:optimizeLegibility;
|
||||
-webkit-text-shadow: rgba(255,255,255,0.01) 0 0 1px;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
margin-top: 0px;
|
||||
line-height: 1.3;
|
||||
font-size: 1.25em;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.page-title-empty {
|
||||
margin-top: 0px;
|
||||
line-height: 1.3;
|
||||
font-size: 1.25em;
|
||||
font-weight: 600;
|
||||
margin: 12px 7px 12px 7px;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: $gl-header-color;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/** CODE **/
|
||||
pre {
|
||||
font-family: $monospace_font;
|
||||
|
||||
&.dark {
|
||||
background: #333;
|
||||
color: $background-color;
|
||||
}
|
||||
|
||||
&.plain-readme {
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.monospace {
|
||||
font-family: $monospace_font;
|
||||
}
|
||||
|
||||
code {
|
||||
&.key-fingerprint {
|
||||
background: $body-bg;
|
||||
color: $text-color;
|
||||
}
|
||||
}
|
||||
|
||||
a > code {
|
||||
color: $link-color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply Markdown typography
|
||||
*
|
||||
*/
|
||||
.wiki {
|
||||
@include md-typography;
|
||||
}
|
||||
|
||||
.md-area {
|
||||
@include md-typography;
|
||||
}
|
||||
|
||||
.md {
|
||||
@include md-typography;
|
||||
}
|
||||
|
||||
/**
|
||||
* Textareas intended for GFM
|
||||
*
|
||||
*/
|
||||
textarea.js-gfm-input {
|
||||
font-family: $monospace_font;
|
||||
}
|
||||
|
||||
.md-preview {
|
||||
}
|
||||
|
||||
.strikethrough {
|
||||
text-decoration: line-through;
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
$hover: #FFFAF1;
|
||||
$gl-text-color: #54565B;
|
||||
$gl-text-green: #4A2;
|
||||
$gl-text-red: #D12F19;
|
||||
$gl-text-orange: #D90;
|
||||
$gl-header-color: #4c4e54;
|
||||
$gl-link-color: #333c48;
|
||||
$md-text-color: #444;
|
||||
$md-link-color: #3084bb;
|
||||
$nprogress-color: #c0392b;
|
||||
$gl-font-size: 15px;
|
||||
$list-font-size: 15px;
|
||||
$sidebar_collapsed_width: 62px;
|
||||
$sidebar_width: 230px;
|
||||
$avatar_radius: 50%;
|
||||
$code_font_size: 13px;
|
||||
$code_line_height: 1.5;
|
||||
$border-color: #dce0e6;
|
||||
$table-border-color: #eef0f2;
|
||||
$background-color: #F7F8FA;
|
||||
$header-height: 58px;
|
||||
$fixed-layout-width: 1200px;
|
||||
$gl-gray: #7f8fa4;
|
||||
$gl-padding: 16px;
|
||||
$gl-avatar-size: 46px;
|
||||
|
||||
/*
|
||||
* Color schema
|
||||
*/
|
||||
|
||||
$white-light: #FFFFFF;
|
||||
$white-normal: #DCE0E5;
|
||||
$white-dark: #E4E7ED;
|
||||
|
||||
$gray-light: #F0F2F5;
|
||||
$gray-normal: #DCE0E5;
|
||||
$gray-dark: #E4E7ED;
|
||||
|
||||
$green-light: #31AF64;
|
||||
$green-normal: #2FAA60;
|
||||
$green-dark: #2CA05B;
|
||||
|
||||
$blue-light: #2EA8E5;
|
||||
$blue-normal: #2D9FD8;
|
||||
$blue-dark: #2897CE;
|
||||
|
||||
$orange-light: #FC6443;
|
||||
$orange-normal: #E75E40;
|
||||
$orange-dark: #CE5237;
|
||||
|
||||
$red-light: #F43263;
|
||||
$red-normal: #E52C5A;
|
||||
$red-dark: #D22852;
|
||||
|
||||
$border-white-light: #E3E7EC;
|
||||
$border-white-normal: #D6DAE2;
|
||||
$border-white-dark: #C6CACF;
|
||||
|
||||
$border-gray-light: #DCE0E5;
|
||||
$border-gray-normal: #D6DAE2;
|
||||
$border-gray-dark: #C6CACF;
|
||||
|
||||
$border-green-light: #2FAA60;
|
||||
$border-green-normal: #2CA05B;
|
||||
$border-green-dark: #279654;
|
||||
|
||||
$border-blue-light: #2D9FD8;
|
||||
$border-blue-normal: #2897CE;
|
||||
$border-blue-dark: #258DC1;
|
||||
|
||||
$border-orange-light: #ED5C3D;
|
||||
$border-orange-normal: #CE5237;
|
||||
$border-orange-dark: #C14E35;
|
||||
|
||||
$border-red-light: #E52C5A;
|
||||
$border-red-normal: #D22852;
|
||||
$border-red-dark: #CA264F;
|
||||
|
||||
|
||||
/*
|
||||
* State colors:
|
||||
*/
|
||||
$gl-primary: $blue-normal;
|
||||
$gl-success: $green-normal;
|
||||
$gl-info: $blue-normal;
|
||||
$gl-warning: $orange-normal;
|
||||
$gl-danger: $red-normal;
|
||||
|
||||
/*
|
||||
* Commit Diff Colors
|
||||
*/
|
||||
$added: #63c363;
|
||||
$deleted: #f77;
|
||||
|
||||
/*
|
||||
* Fonts
|
||||
*/
|
||||
$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'DejaVu Sans Mono', 'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida console', monospace;
|
||||
$regular_font: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
@ -1,232 +0,0 @@
|
|||
body {
|
||||
text-rendering: geometricPrecision;
|
||||
}
|
||||
.btn {
|
||||
@extend .btn-default;
|
||||
|
||||
&.btn-new {
|
||||
@extend .btn-success;
|
||||
}
|
||||
|
||||
&.btn-create {
|
||||
@extend .btn-success;
|
||||
}
|
||||
|
||||
&.btn-save {
|
||||
@extend .btn-success;
|
||||
}
|
||||
|
||||
&.btn-remove {
|
||||
@extend .btn-danger;
|
||||
}
|
||||
|
||||
&.btn-cancel {
|
||||
float: right;
|
||||
}
|
||||
|
||||
&.btn-close {
|
||||
color: $gl-danger;
|
||||
border-color: $gl-danger;
|
||||
&:hover {
|
||||
color: #B94A48;
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-reopen {
|
||||
color: $gl-success;
|
||||
border-color: $gl-success;
|
||||
&:hover {
|
||||
color: #468847;
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-grouped {
|
||||
margin-right: 7px;
|
||||
float: left;
|
||||
&:last-child {
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
&.btn-save {
|
||||
@extend .btn-primary;
|
||||
}
|
||||
|
||||
&.btn-new, &.btn-create {
|
||||
@extend .btn-success;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-block {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
margin-bottom: 15px;
|
||||
&.btn {
|
||||
padding: 6px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-group {
|
||||
&.btn-grouped {
|
||||
margin-right: 7px;
|
||||
float: left;
|
||||
&:last-child {
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-group-next {
|
||||
.btn {
|
||||
padding: 9px 0px;
|
||||
font-size: 15px;
|
||||
color: #7f8fa4;
|
||||
border-color: #e7e9ed;
|
||||
width: 140px;
|
||||
|
||||
&.active {
|
||||
border-color: $gl-info;
|
||||
background: $gl-info;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin btn-info {
|
||||
@include border-radius(2px);
|
||||
@include transition (all 0.2s ease 0s);
|
||||
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
text-transform: uppercase;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
line-height: 18px;
|
||||
padding: 11px 16px;
|
||||
letter-spacing: .4px;
|
||||
|
||||
&:hover {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
&:active {
|
||||
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin btn-middle {
|
||||
@include border-radius(2px);
|
||||
@include transition (all 0.2s ease 0s);
|
||||
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
text-transform: uppercase;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
line-height: 18px;
|
||||
padding: 11px 24px;
|
||||
letter-spacing: .4px;
|
||||
|
||||
&:hover {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
&:active {
|
||||
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@mixin btn-green {
|
||||
background-color: #28b061;
|
||||
border: 1px solid #26a65c;
|
||||
color: #fff;
|
||||
|
||||
&:hover {
|
||||
background-color: #26ab5d;
|
||||
border: 1px solid #229954;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background-color: #26ab5d;
|
||||
border: 1px solid #229954;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
&:active {
|
||||
@include box-shadow (inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||
|
||||
background-color: #23a158 !important;
|
||||
border: 1px solid #229954 !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
}
|
||||
|
||||
/*Butons*/
|
||||
|
||||
@mixin bnt-project {
|
||||
background-color: #f0f2f5;
|
||||
border-color: #dce0e5;
|
||||
color: #313236;
|
||||
|
||||
&:hover {
|
||||
border-color:#dce0e5;
|
||||
background-color: #ebeef2;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
border-color: #dce0e5;
|
||||
background-color: #ebeef2;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
&:active {
|
||||
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||
|
||||
color: #313236 !important;
|
||||
border-color: #c6cacf !important;
|
||||
background-color: #e4e7ed !important;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin btn-remove {
|
||||
background-color: #f72e60;
|
||||
border-color: #ee295a;
|
||||
|
||||
&:hover {
|
||||
background-color: #e82757;
|
||||
border-color: #e32555;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background-color: #e82757;
|
||||
border-color: #e32555;
|
||||
}
|
||||
|
||||
&:active {
|
||||
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||
background-color: #d42450 !important;
|
||||
border-color: #e12554 !important;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,130 +0,0 @@
|
|||
/**
|
||||
* Headers
|
||||
*
|
||||
*/
|
||||
body {
|
||||
text-rendering:optimizeLegibility;
|
||||
-webkit-text-shadow: rgba(255,255,255,0.01) 0 0 1px;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
margin-top: 0px;
|
||||
line-height: 1.3;
|
||||
font-size: 1.25em;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.page-title-empty {
|
||||
margin-top: 0px;
|
||||
line-height: 1.3;
|
||||
font-size: 1.25em;
|
||||
font-weight: 600;
|
||||
margin: 12px 7px 12px 7px;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: $gl-header-color;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/** CODE **/
|
||||
pre {
|
||||
font-family: $monospace_font;
|
||||
|
||||
&.dark {
|
||||
background: #333;
|
||||
color: $background-color;
|
||||
}
|
||||
|
||||
&.plain-readme {
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.monospace {
|
||||
font-family: $monospace_font;
|
||||
}
|
||||
|
||||
code {
|
||||
&.key-fingerprint {
|
||||
background: $body-bg;
|
||||
color: $text-color;
|
||||
}
|
||||
}
|
||||
|
||||
a > code {
|
||||
color: $link-color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wiki typography
|
||||
*
|
||||
*/
|
||||
.wiki {
|
||||
@include md-typography;
|
||||
|
||||
word-wrap: break-word;
|
||||
padding: 7px;
|
||||
|
||||
/* Link to current header. */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
position: relative;
|
||||
|
||||
a.anchor {
|
||||
// Setting `display: none` would prevent the anchor being scrolled to, so
|
||||
// instead we set the height to 0 and it gets updated on hover.
|
||||
height: 0;
|
||||
}
|
||||
|
||||
&:hover > a.anchor {
|
||||
$size: 16px;
|
||||
position: absolute;
|
||||
right: 100%;
|
||||
top: 50%;
|
||||
margin-top: -$size/2;
|
||||
margin-right: 0px;
|
||||
padding-right: 20px;
|
||||
display: inline-block;
|
||||
width: $size;
|
||||
height: $size;
|
||||
background-image: image-url("icon-link.png");
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
}
|
||||
|
||||
ul,ol {
|
||||
padding: 0;
|
||||
margin: 6px 0 6px 18px !important;
|
||||
}
|
||||
ol {
|
||||
color: #5c5d5e;
|
||||
}
|
||||
}
|
||||
|
||||
.md-area {
|
||||
@include md-typography;
|
||||
}
|
||||
|
||||
.md {
|
||||
@include md-typography;
|
||||
}
|
||||
|
||||
/**
|
||||
* Textareas intended for GFM
|
||||
*
|
||||
*/
|
||||
textarea.js-gfm-input {
|
||||
font-family: $monospace_font;
|
||||
}
|
||||
|
||||
.md-preview {
|
||||
}
|
||||
|
||||
.strikethrough {
|
||||
text-decoration: line-through;
|
||||
}
|
|
@ -1,11 +1,10 @@
|
|||
/* https://github.com/MozMorris/tomorrow-pygments */
|
||||
pre.code.highlight.dark,
|
||||
.code.dark {
|
||||
|
||||
background-color: #1d1f21;
|
||||
color: #c5c8c6;
|
||||
background-color: #1d1f21 !important;
|
||||
color: #c5c8c6 !important;
|
||||
|
||||
pre.code,
|
||||
pre.highlight,
|
||||
.line-numbers,
|
||||
.line-numbers a {
|
||||
background-color: #1d1f21 !important;
|
||||
|
@ -23,8 +22,8 @@ pre.code.highlight.dark,
|
|||
|
||||
// Search result highlight
|
||||
span.highlight_word {
|
||||
background: #ffe792;
|
||||
color: #000000;
|
||||
background-color: #ffe792 !important;
|
||||
color: #000000 !important;
|
||||
}
|
||||
|
||||
.hll { background-color: #373b41 }
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
/* https://github.com/richleland/pygments-css/blob/master/monokai.css */
|
||||
pre.code.monokai,
|
||||
.code.monokai {
|
||||
|
||||
background: #272822;
|
||||
color: #f8f8f2;
|
||||
background-color: #272822 !important;
|
||||
color: #f8f8f2 !important;
|
||||
|
||||
pre.highlight,
|
||||
.line-numbers,
|
||||
.line-numbers a {
|
||||
background:#272822 !important;
|
||||
color:#f8f8f2 !important;
|
||||
background-color :#272822 !important;
|
||||
color: #f8f8f2 !important;
|
||||
}
|
||||
|
||||
pre.code {
|
||||
|
@ -23,8 +22,8 @@ pre.code.monokai,
|
|||
|
||||
// Search result highlight
|
||||
span.highlight_word {
|
||||
background: #ffe792;
|
||||
color: #000000;
|
||||
background-color: #ffe792 !important;
|
||||
color: #000000 !important;
|
||||
}
|
||||
|
||||
.hll { background-color: #49483e }
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
/* https://gist.github.com/qguv/7936275 */
|
||||
pre.code.highlight.solarized-dark,
|
||||
.code.solarized-dark {
|
||||
|
||||
background-color: #002b36;
|
||||
color: #93a1a1;
|
||||
background-color: #002b36 !important;
|
||||
color: #93a1a1 !important;
|
||||
|
||||
pre.code,
|
||||
pre.highlight,
|
||||
.line-numbers,
|
||||
.line-numbers a {
|
||||
background-color: #002b36 !important;
|
||||
|
@ -23,7 +22,7 @@ pre.code.highlight.solarized-dark,
|
|||
|
||||
// Search result highlight
|
||||
span.highlight_word {
|
||||
background: #094554;
|
||||
background-color: #094554 !important;
|
||||
}
|
||||
|
||||
/* Solarized Dark
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
/* https://gist.github.com/qguv/7936275 */
|
||||
pre.code.highlight.solarized-light,
|
||||
.code.solarized-light {
|
||||
|
||||
background-color: #fdf6e3;
|
||||
color: #586e75;
|
||||
background-color: #fdf6e3 !important;
|
||||
color: #586e75 !important;
|
||||
|
||||
pre.code,
|
||||
pre.highlight,
|
||||
.line-numbers,
|
||||
.line-numbers a {
|
||||
background-color: #fdf6e3 !important;
|
||||
|
@ -23,7 +22,7 @@ pre.code.highlight.solarized-light,
|
|||
|
||||
// Search result highlight
|
||||
span.highlight_word {
|
||||
background: #eee8d5;
|
||||
background-color: #eee8d5 !important;
|
||||
}
|
||||
|
||||
/* Solarized Light
|
||||
|
|
|
@ -1,24 +1,20 @@
|
|||
/* https://github.com/aahan/pygments-github-style */
|
||||
pre.code.highlight.white,
|
||||
.code.white {
|
||||
background-color: #f8fafc;
|
||||
font-size: 13px;
|
||||
color: #5b6169;
|
||||
line-height: 1.6em;
|
||||
|
||||
background-color: #f8fafc !important;
|
||||
color: #5b6169 !important;
|
||||
|
||||
pre.highlight,
|
||||
.line-numbers,
|
||||
.line-numbers a {
|
||||
background-color: $background-color !important;
|
||||
color: $gl-gray !important;
|
||||
}
|
||||
|
||||
pre.highlight {
|
||||
background-color: #fff !important;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
pre.code {
|
||||
border-left: 1px solid $border-color;
|
||||
background-color: #fff !important;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
// highlight line via anchor
|
||||
|
@ -28,7 +24,7 @@ pre.code.highlight.white,
|
|||
|
||||
// Search result highlight
|
||||
span.highlight_word {
|
||||
background: #fafe3d;
|
||||
background-color: #fafe3d !important;
|
||||
}
|
||||
|
||||
.hll { background-color: #f8f8f8 }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.ci-body {
|
||||
.build-page {
|
||||
pre.trace {
|
||||
background: #111111;
|
||||
color: #fff;
|
||||
|
@ -67,4 +67,9 @@
|
|||
color: #3084bb !important;
|
||||
}
|
||||
}
|
||||
|
||||
.build-top-menu {
|
||||
margin-top: 0;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
}
|
|
@ -107,3 +107,16 @@
|
|||
z-index: 2;
|
||||
}
|
||||
}
|
||||
|
||||
.commit-ci-menu {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
margin-top: 5px;
|
||||
height: 56px;
|
||||
margin: -16px;
|
||||
padding: 16px;
|
||||
text-align: center;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
.commits-compare-switch{
|
||||
@extend .btn;
|
||||
@include btn-default;
|
||||
@include btn-white;
|
||||
background: image-url("switch_icon.png") no-repeat center center;
|
||||
text-indent: -9999px;
|
||||
float: left;
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// Common
|
||||
.diff-file {
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
|
@ -12,24 +13,17 @@
|
|||
color: #555;
|
||||
z-index: 10;
|
||||
|
||||
> span {
|
||||
.diff-title {
|
||||
font-family: $monospace_font;
|
||||
word-break: break-all;
|
||||
margin-right: 200px;
|
||||
display: block;
|
||||
|
||||
.file-mode {
|
||||
margin-left: 10px;
|
||||
color: #777;
|
||||
}
|
||||
}
|
||||
|
||||
.diff-btn-group {
|
||||
float: right;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 15px;
|
||||
|
||||
.diff-controls {
|
||||
.btn {
|
||||
padding: 0px 10px;
|
||||
font-size: 13px;
|
||||
|
@ -90,12 +84,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
tr.line_holder.parallel{
|
||||
tr.line_holder.parallel {
|
||||
.old_line, .new_line, .diff_line {
|
||||
min-width: 50px;
|
||||
}
|
||||
|
||||
td.line_content.parallel{
|
||||
td.line_content.parallel {
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
@ -105,7 +99,7 @@
|
|||
padding: 0px;
|
||||
border: none;
|
||||
background: $background-color;
|
||||
color: rgba(0,0,0,0.3);
|
||||
color: rgba(0, 0, 0, 0.3);
|
||||
padding: 0px 5px;
|
||||
border-right: 1px solid $border-color;
|
||||
text-align: right;
|
||||
|
@ -117,7 +111,7 @@
|
|||
float: left;
|
||||
width: 35px;
|
||||
font-weight: normal;
|
||||
color: rgba(0,0,0,0.3);
|
||||
color: rgba(0, 0, 0, 0.3);
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
@ -168,7 +162,7 @@
|
|||
background: #ddd;
|
||||
text-align: center;
|
||||
padding: 30px;
|
||||
.wrap{
|
||||
.wrap {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
|
@ -176,7 +170,7 @@
|
|||
display: inline-block;
|
||||
background-color: #fff;
|
||||
line-height: 0;
|
||||
img{
|
||||
img {
|
||||
border: 1px solid #FFF;
|
||||
background: image-url('trans_bg.gif');
|
||||
max-width: 100%;
|
||||
|
@ -189,21 +183,21 @@
|
|||
border: 1px solid $added;
|
||||
}
|
||||
}
|
||||
.image-info{
|
||||
.image-info {
|
||||
font-size: 12px;
|
||||
margin: 5px 0 0 0;
|
||||
color: grey;
|
||||
}
|
||||
|
||||
.view.swipe{
|
||||
.view.swipe {
|
||||
position: relative;
|
||||
|
||||
.swipe-frame{
|
||||
.swipe-frame {
|
||||
display: block;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
}
|
||||
.swipe-wrap{
|
||||
.swipe-wrap {
|
||||
overflow: hidden;
|
||||
border-left: 1px solid #999;
|
||||
position: absolute;
|
||||
|
@ -211,33 +205,33 @@
|
|||
top: 13px;
|
||||
right: 7px;
|
||||
}
|
||||
.frame{
|
||||
.frame {
|
||||
top: 0;
|
||||
right: 0;
|
||||
position: absolute;
|
||||
&.deleted{
|
||||
&.deleted {
|
||||
margin: 0;
|
||||
display: block;
|
||||
top: 13px;
|
||||
right: 7px;
|
||||
}
|
||||
}
|
||||
.swipe-bar{
|
||||
.swipe-bar {
|
||||
display: block;
|
||||
height: 100%;
|
||||
width: 15px;
|
||||
z-index: 100;
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
&:hover{
|
||||
.top-handle{
|
||||
&:hover {
|
||||
.top-handle {
|
||||
background-position: -15px 3px;
|
||||
}
|
||||
.bottom-handle{
|
||||
.bottom-handle {
|
||||
background-position: -15px -11px;
|
||||
}
|
||||
};
|
||||
.top-handle{
|
||||
}
|
||||
.top-handle {
|
||||
display: block;
|
||||
height: 14px;
|
||||
width: 15px;
|
||||
|
@ -245,7 +239,7 @@
|
|||
top: 0px;
|
||||
background: image-url('swipemode_sprites.gif') 0 3px no-repeat;
|
||||
}
|
||||
.bottom-handle{
|
||||
.bottom-handle {
|
||||
display: block;
|
||||
height: 14px;
|
||||
width: 15px;
|
||||
|
@ -254,9 +248,10 @@
|
|||
background: image-url('swipemode_sprites.gif') 0 -11px no-repeat;
|
||||
}
|
||||
}
|
||||
} //.view.swipe
|
||||
.view.onion-skin{
|
||||
.onion-skin-frame{
|
||||
}
|
||||
//.view.swipe
|
||||
.view.onion-skin {
|
||||
.onion-skin-frame {
|
||||
display: block;
|
||||
margin: auto;
|
||||
position: relative;
|
||||
|
@ -267,7 +262,7 @@
|
|||
top: 0px;
|
||||
left: 0px;
|
||||
}
|
||||
.controls{
|
||||
.controls {
|
||||
display: block;
|
||||
height: 14px;
|
||||
width: 300px;
|
||||
|
@ -277,7 +272,7 @@
|
|||
left: 50%;
|
||||
margin-left: -150px;
|
||||
|
||||
.drag-track{
|
||||
.drag-track {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 12px;
|
||||
|
@ -317,39 +312,40 @@
|
|||
background: image-url('onion_skin_sprites.gif') -2px -10px no-repeat;
|
||||
}
|
||||
}
|
||||
} //.view.onion-skin
|
||||
}
|
||||
//.view.onion-skin
|
||||
}
|
||||
.view-modes{
|
||||
.view-modes {
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
background: #EEE;
|
||||
|
||||
ul, li{
|
||||
ul, li {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
li{
|
||||
li {
|
||||
color: grey;
|
||||
border-left: 1px solid #c1c1c1;
|
||||
padding: 0 12px 0 16px;
|
||||
cursor: pointer;
|
||||
&:first-child{
|
||||
&:first-child {
|
||||
border-left: none;
|
||||
}
|
||||
&:hover{
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
&.active{
|
||||
&:hover{
|
||||
&.active {
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
cursor: default;
|
||||
color: #333;
|
||||
}
|
||||
&.disabled{
|
||||
&.disabled {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
@ -373,3 +369,37 @@
|
|||
float: right;
|
||||
margin-top: -5px;
|
||||
}
|
||||
|
||||
// Mobile
|
||||
@media (max-width: 480px) {
|
||||
.diff-title {
|
||||
margin: 0;
|
||||
|
||||
.file-mode {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.diff-controls {
|
||||
position: static;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
// Bigger screens
|
||||
@media (min-width: 481px) {
|
||||
.diff-title {
|
||||
margin-right: 200px;
|
||||
|
||||
.file-mode {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.diff-controls {
|
||||
float: right;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 15px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,3 +68,7 @@ body.modal-open {
|
|||
.modal .modal-dialog {
|
||||
width: 860px;
|
||||
}
|
||||
|
||||
.documentation {
|
||||
padding: 7px;
|
||||
}
|
||||
|
|
|
@ -54,21 +54,22 @@
|
|||
margin-top: -15px;
|
||||
padding: 10px 0;
|
||||
margin-bottom: 0;
|
||||
color: $gl-gray;
|
||||
color: #5c5d5e;
|
||||
font-size: 16px;
|
||||
|
||||
.author {
|
||||
color: $gl-gray;
|
||||
color: #5c5d5e;
|
||||
}
|
||||
|
||||
.issue-id {
|
||||
font-size: 19px;
|
||||
color: $gl-text-color;
|
||||
color: #5c5d5e;
|
||||
}
|
||||
}
|
||||
|
||||
.issue-title {
|
||||
margin: 0;
|
||||
font-size: 23px;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
.description {
|
||||
|
|
|
@ -3,12 +3,11 @@
|
|||
*
|
||||
*/
|
||||
.mr-state-widget {
|
||||
background: #f8fafc;
|
||||
background: #F7F8FA;
|
||||
margin-bottom: 20px;
|
||||
color: $gl-gray;
|
||||
border: 1px solid #eef0f2;
|
||||
@include box-shadow(0 1px 1px rgba(0, 0, 0, 0.05));
|
||||
@include border-radius(3px);
|
||||
border: 1px solid #dce0e6;
|
||||
@include border-radius(2px);
|
||||
|
||||
form {
|
||||
margin-bottom: 0;
|
||||
|
@ -77,10 +76,16 @@
|
|||
padding: 15px;
|
||||
}
|
||||
|
||||
.normal {
|
||||
color: #5c5d5e;
|
||||
}
|
||||
|
||||
.mr-widget-body {
|
||||
h4 {
|
||||
font-weight: bold;
|
||||
font-weight: 600;
|
||||
font-size: 17px;
|
||||
margin: 5px 0;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
p:last-child {
|
||||
|
@ -97,14 +102,26 @@
|
|||
}
|
||||
}
|
||||
|
||||
.merge-request .merge-request-tabs{
|
||||
.merge-request .merge-request-tabs {
|
||||
@include nav-menu;
|
||||
margin: -$gl-padding;
|
||||
padding: $gl-padding;
|
||||
text-align: center;
|
||||
border-top: 1px solid #e7e9ed;
|
||||
margin-top: 18px;
|
||||
margin-bottom: 3px;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
// Mobile
|
||||
@media (max-width: 480px) {
|
||||
.merge-request .merge-request-tabs {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
li {
|
||||
a {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mr_source_commit,
|
||||
|
@ -120,10 +137,12 @@
|
|||
}
|
||||
|
||||
.label-branch {
|
||||
color: #222;
|
||||
color: #313236;
|
||||
font-family: $monospace_font;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
font-size: 14px;
|
||||
margin: 0 3px;
|
||||
}
|
||||
|
||||
.mr-list {
|
||||
|
|
|
@ -65,19 +65,18 @@
|
|||
|
||||
.note-image-attach {
|
||||
@extend .col-md-4;
|
||||
@extend .thumbnail;
|
||||
margin-left: 45px;
|
||||
float: none;
|
||||
}
|
||||
|
||||
.common-note-form {
|
||||
margin: 0;
|
||||
background: #f8fafc;
|
||||
background: #F7F8FA;
|
||||
padding: $gl-padding;
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
border-right: 1px solid #f1f2f4;
|
||||
border-top: 1px solid #f1f2f4;
|
||||
border-right: 1px solid #ECEEF1;
|
||||
border-top: 1px solid #ECEEF1;
|
||||
margin-bottom: -$gl-padding;
|
||||
}
|
||||
|
||||
|
@ -168,7 +167,7 @@
|
|||
.comment-hints {
|
||||
color: #999;
|
||||
background: #FFF;
|
||||
padding: 5px;
|
||||
padding: 7px;
|
||||
margin-top: -11px;
|
||||
border: 1px solid $border-color;
|
||||
font-size: 13px;
|
||||
|
|
|
@ -18,7 +18,7 @@ ul.notes {
|
|||
font-size: 14px;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
background: #f8fafc;
|
||||
background: #FDFDFD;
|
||||
|
||||
.timeline-icon {
|
||||
.avatar {
|
||||
|
@ -30,7 +30,6 @@ ul.notes {
|
|||
.discussion-header,
|
||||
.note-header {
|
||||
@extend .cgray;
|
||||
padding-bottom: 15px;
|
||||
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
|
@ -75,6 +74,10 @@ ul.notes {
|
|||
}
|
||||
}
|
||||
|
||||
.discussion-body {
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
.discussion {
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
|
|
|
@ -13,11 +13,15 @@
|
|||
.edit_project {
|
||||
fieldset.features {
|
||||
.control-label {
|
||||
font-weight: bold;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.project-edit-content {
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
.project-name-holder {
|
||||
.help-inline {
|
||||
vertical-align: top;
|
||||
|
@ -59,6 +63,7 @@
|
|||
}
|
||||
|
||||
p {
|
||||
padding: 0 $gl-padding;
|
||||
color: #5c5d5e;
|
||||
}
|
||||
}
|
||||
|
@ -92,8 +97,7 @@
|
|||
margin-bottom: 0px;
|
||||
|
||||
.btn {
|
||||
@include bnt-project;
|
||||
@include btn-info;
|
||||
@include btn-gray;
|
||||
|
||||
.count {
|
||||
display: inline-block;
|
||||
|
@ -149,7 +153,7 @@
|
|||
|
||||
.input-group-btn {
|
||||
.btn {
|
||||
@include bnt-project;
|
||||
@include btn-gray;
|
||||
@include btn-middle;
|
||||
|
||||
&:hover {
|
||||
|
@ -183,8 +187,8 @@
|
|||
margin: 0 12px 0 12px;
|
||||
|
||||
.btn{
|
||||
@include bnt-project;
|
||||
@include btn-info;
|
||||
@include btn-gray;
|
||||
@include btn-default;
|
||||
}
|
||||
|
||||
.dropdown-toggle {
|
||||
|
@ -251,18 +255,19 @@
|
|||
margin-bottom: 10px;
|
||||
|
||||
i {
|
||||
margin: 0 3px;
|
||||
margin: 2px 0;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.option-title {
|
||||
font-weight: bold;
|
||||
font-weight: normal;
|
||||
display: inline-block;
|
||||
color: #313236;
|
||||
}
|
||||
|
||||
.option-descr {
|
||||
margin-left: 36px;
|
||||
color: $gray;
|
||||
margin-left: 29px;
|
||||
color: #54565b;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -376,8 +381,8 @@ table.table.protected-branches-list tr.no-border {
|
|||
}
|
||||
|
||||
.nav > li > a {
|
||||
@include btn-info;
|
||||
@include bnt-project;
|
||||
@include btn-default;
|
||||
@include btn-gray;
|
||||
|
||||
background-color: transparent;
|
||||
border: 1px solid #f7f8fa;
|
||||
|
@ -437,7 +442,7 @@ pre.light-well {
|
|||
|
||||
.btn-remove {
|
||||
@include btn-middle;
|
||||
@include btn-remove;
|
||||
@include btn-red;
|
||||
|
||||
float: left !important;
|
||||
}
|
||||
|
@ -507,6 +512,37 @@ pre.light-well {
|
|||
}
|
||||
}
|
||||
|
||||
.inline-form {
|
||||
display: inline-block;
|
||||
.project-last-commit {
|
||||
margin: 0 7px;
|
||||
|
||||
.ci-status {
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
.commit-row-message {
|
||||
color: $gl-gray;
|
||||
}
|
||||
|
||||
.commit_short_id {
|
||||
margin-right: 5px;
|
||||
color: $gl-link-color;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.commit-author-link {
|
||||
margin-left: 7px;
|
||||
text-decoration: none;
|
||||
.avatar {
|
||||
float: none;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.commit-author-name {
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.project-show-readme .readme-holder {
|
||||
padding: 7px;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.tree-holder {
|
||||
.tree-content-holder {
|
||||
float: left;
|
||||
width: 100%;
|
||||
.tree-table-holder {
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
}
|
||||
|
||||
.tree_progress {
|
||||
|
@ -13,10 +13,15 @@
|
|||
}
|
||||
|
||||
.tree-table {
|
||||
@extend .table;
|
||||
@include border-radius(0);
|
||||
margin-bottom: 0;
|
||||
|
||||
tr {
|
||||
> td, > th {
|
||||
padding: 10px $gl-padding;
|
||||
line-height: 32px;
|
||||
border-color: $table-border-color !important;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
td {
|
||||
background: $hover;
|
||||
|
@ -27,9 +32,9 @@
|
|||
}
|
||||
&.selected {
|
||||
td {
|
||||
background: $background-color;
|
||||
border-top: 1px solid #EEE;
|
||||
border-bottom: 1px solid #EEE;
|
||||
background: $gray-dark;
|
||||
border-top: 1px solid $border-gray-dark;
|
||||
border-bottom: 1px solid $border-gray-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -85,19 +90,6 @@
|
|||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.readme-holder {
|
||||
margin: 0 auto;
|
||||
|
||||
.readme-file-title {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 20px;
|
||||
color: #777;
|
||||
border-bottom: 1px solid #DDD;
|
||||
padding: 10px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.blob-commit-info {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.ci-body {
|
||||
.build-page {
|
||||
// color codes are based on http://en.wikipedia.org/wiki/File:Xterm_256color_chart.svg
|
||||
// see also: https://gist.github.com/jasonm23/2868981
|
||||
|
|
@ -57,7 +57,6 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
|
|||
:version_check_enabled,
|
||||
:admin_notification_email,
|
||||
:user_oauth_applications,
|
||||
:ci_enabled,
|
||||
restricted_visibility_levels: [],
|
||||
import_sources: []
|
||||
)
|
||||
|
|
|
@ -39,7 +39,13 @@ class Admin::ServicesController < Admin::ApplicationController
|
|||
end
|
||||
|
||||
def application_services_params
|
||||
params.permit(:id,
|
||||
application_services_params = params.permit(:id,
|
||||
service: Projects::ServicesController::ALLOWED_PARAMS)
|
||||
if application_services_params[:service].is_a?(Hash)
|
||||
Projects::ServicesController::FILTER_BLANK_PARAMS.each do |param|
|
||||
application_services_params[:service].delete(param) if application_services_params[:service][param].blank?
|
||||
end
|
||||
end
|
||||
application_services_params
|
||||
end
|
||||
end
|
||||
|
|
|
@ -30,7 +30,7 @@ class ApplicationController < ActionController::Base
|
|||
|
||||
rescue_from ActiveRecord::RecordNotFound do |exception|
|
||||
log_exception(exception)
|
||||
render "errors/not_found", layout: "errors", status: 404
|
||||
render_404
|
||||
end
|
||||
|
||||
protected
|
||||
|
@ -149,12 +149,8 @@ class ApplicationController < ActionController::Base
|
|||
render "errors/access_denied", layout: "errors", status: 404
|
||||
end
|
||||
|
||||
def not_found!
|
||||
render "errors/not_found", layout: "errors", status: 404
|
||||
end
|
||||
|
||||
def git_not_found!
|
||||
render "errors/git_not_found", layout: "errors", status: 404
|
||||
render html: "errors/git_not_found", layout: "errors", status: 404
|
||||
end
|
||||
|
||||
def method_missing(method_sym, *arguments, &block)
|
||||
|
|
|
@ -6,7 +6,7 @@ module Ci
|
|||
@runners = Ci::Runner.order('id DESC')
|
||||
@runners = @runners.search(params[:search]) if params[:search].present?
|
||||
@runners = @runners.page(params[:page]).per(30)
|
||||
@active_runners_cnt = Ci::Runner.where("contacted_at > ?", 1.minutes.ago).count
|
||||
@active_runners_cnt = Ci::Runner.online.count
|
||||
end
|
||||
|
||||
def show
|
||||
|
@ -66,7 +66,7 @@ module Ci
|
|||
end
|
||||
|
||||
def runner_params
|
||||
params.require(:runner).permit(:token, :description, :tag_list, :contacted_at, :active)
|
||||
params.require(:runner).permit(:token, :description, :tag_list, :active)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
module Ci
|
||||
class ApplicationController < ::ApplicationController
|
||||
before_action :check_enable_flag!
|
||||
|
||||
def self.railtie_helpers_paths
|
||||
"app/helpers/ci"
|
||||
end
|
||||
|
@ -10,13 +8,6 @@ module Ci
|
|||
|
||||
private
|
||||
|
||||
def check_enable_flag!
|
||||
unless current_application_settings.ci_enabled
|
||||
redirect_to(disabled_ci_projects_path)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
def authenticate_public_page!
|
||||
unless project.public
|
||||
authenticate_user!
|
||||
|
|
|
@ -1,78 +0,0 @@
|
|||
module Ci
|
||||
class BuildsController < Ci::ApplicationController
|
||||
before_action :authenticate_user!, except: [:status, :show]
|
||||
before_action :authenticate_public_page!, only: :show
|
||||
before_action :project
|
||||
before_action :authorize_access_project!, except: [:status, :show]
|
||||
before_action :authorize_manage_project!, except: [:status, :show, :retry, :cancel]
|
||||
before_action :authorize_manage_builds!, only: [:retry, :cancel]
|
||||
before_action :build, except: [:show]
|
||||
layout 'ci/build'
|
||||
|
||||
def show
|
||||
if params[:id] =~ /\A\d+\Z/
|
||||
@build = build
|
||||
else
|
||||
# try to find commit by sha
|
||||
commit = commit_by_sha
|
||||
|
||||
if commit
|
||||
# Redirect to commit page
|
||||
redirect_to ci_project_ref_commit_path(@project, @build.commit.ref, @build.commit.sha)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
raise ActiveRecord::RecordNotFound unless @build
|
||||
|
||||
@builds = @project.commits.find_by_sha(@build.sha).builds.order('id DESC')
|
||||
@builds = @builds.where("id not in (?)", @build.id).page(params[:page]).per(20)
|
||||
@commit = @build.commit
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.json do
|
||||
render json: @build.to_json(methods: :trace_html)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def retry
|
||||
if @build.commands.blank?
|
||||
return page_404
|
||||
end
|
||||
|
||||
build = Ci::Build.retry(@build)
|
||||
|
||||
if params[:return_to]
|
||||
redirect_to URI.parse(params[:return_to]).path
|
||||
else
|
||||
redirect_to ci_project_build_path(project, build)
|
||||
end
|
||||
end
|
||||
|
||||
def status
|
||||
render json: @build.to_json(only: [:status, :id, :sha, :coverage], methods: :sha)
|
||||
end
|
||||
|
||||
def cancel
|
||||
@build.cancel
|
||||
|
||||
redirect_to ci_project_build_path(@project, @build)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def project
|
||||
@project = Ci::Project.find(params[:project_id])
|
||||
end
|
||||
|
||||
def build
|
||||
@build ||= project.builds.unscoped.find_by(id: params[:id])
|
||||
end
|
||||
|
||||
def commit_by_sha
|
||||
@project.commits.find_by(sha: params[:id])
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,38 +0,0 @@
|
|||
module Ci
|
||||
class CommitsController < Ci::ApplicationController
|
||||
before_action :authenticate_user!, except: [:status, :show]
|
||||
before_action :authenticate_public_page!, only: :show
|
||||
before_action :project
|
||||
before_action :authorize_access_project!, except: [:status, :show, :cancel]
|
||||
before_action :authorize_manage_builds!, only: [:cancel]
|
||||
before_action :commit, only: :show
|
||||
layout 'ci/commit'
|
||||
|
||||
def show
|
||||
@builds = @commit.builds
|
||||
end
|
||||
|
||||
def status
|
||||
commit = Ci::Project.find(params[:project_id]).commits.find_by_sha_and_ref!(params[:id], params[:ref_id])
|
||||
render json: commit.to_json(only: [:id, :sha], methods: [:status, :coverage])
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render json: { status: "not_found" }
|
||||
end
|
||||
|
||||
def cancel
|
||||
commit.builds.running_or_pending.each(&:cancel)
|
||||
|
||||
redirect_to ci_project_ref_commits_path(project, commit.ref, commit.sha)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def project
|
||||
@project ||= Ci::Project.find(params[:project_id])
|
||||
end
|
||||
|
||||
def commit
|
||||
@commit ||= Ci::Project.find(params[:project_id]).commits.find_by_sha_and_ref!(params[:id], params[:ref_id])
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,26 +1,15 @@
|
|||
module Ci
|
||||
class ProjectsController < Ci::ApplicationController
|
||||
before_action :authenticate_user!, except: [:build, :badge, :show]
|
||||
before_action :authenticate_public_page!, only: :show
|
||||
before_action :project, only: [:build, :show, :badge, :toggle_shared_runners, :dumped_yaml]
|
||||
before_action :authorize_access_project!, except: [:build, :badge, :show, :new, :disabled]
|
||||
before_action :project, except: [:index]
|
||||
before_action :authenticate_user!, except: [:index, :build, :badge]
|
||||
before_action :authorize_access_project!, except: [:index, :badge]
|
||||
before_action :authorize_manage_project!, only: [:toggle_shared_runners, :dumped_yaml]
|
||||
before_action :authenticate_token!, only: [:build]
|
||||
before_action :no_cache, only: [:badge]
|
||||
skip_before_action :check_enable_flag!, only: [:disabled]
|
||||
protect_from_forgery except: :build
|
||||
|
||||
layout 'ci/project', except: [:index, :disabled]
|
||||
|
||||
def disabled
|
||||
end
|
||||
protect_from_forgery
|
||||
|
||||
def show
|
||||
@ref = params[:ref]
|
||||
|
||||
@commits = @project.commits.reverse_order
|
||||
@commits = @commits.where(ref: @ref) if @ref
|
||||
@commits = @commits.page(params[:page]).per(20)
|
||||
# Temporary compatibility with CI badges pointing to CI project page
|
||||
redirect_to namespace_project_path(project.gl_project.namespace, project.gl_project)
|
||||
end
|
||||
|
||||
# Project status badge
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
module Ci
|
||||
class ServicesController < Ci::ApplicationController
|
||||
before_action :authenticate_user!
|
||||
before_action :project
|
||||
before_action :authorize_access_project!
|
||||
before_action :authorize_manage_project!
|
||||
before_action :service, only: [:edit, :update, :test]
|
||||
|
||||
respond_to :html
|
||||
|
||||
layout 'ci/project'
|
||||
|
||||
def index
|
||||
@project.build_missing_services
|
||||
@services = @project.services.reload
|
||||
end
|
||||
|
||||
def edit
|
||||
end
|
||||
|
||||
def update
|
||||
if @service.update_attributes(service_params)
|
||||
redirect_to edit_ci_project_service_path(@project, @service.to_param)
|
||||
else
|
||||
render 'edit'
|
||||
end
|
||||
end
|
||||
|
||||
def test
|
||||
last_build = @project.builds.last
|
||||
|
||||
if @service.execute(last_build)
|
||||
message = { notice: 'We successfully tested the service' }
|
||||
else
|
||||
message = { alert: 'We tried to test the service but error occurred' }
|
||||
end
|
||||
|
||||
redirect_to :back, message
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def project
|
||||
@project = Ci::Project.find(params[:project_id])
|
||||
end
|
||||
|
||||
def service
|
||||
@service ||= @project.services.find { |service| service.to_param == params[:id] }
|
||||
end
|
||||
|
||||
def service_params
|
||||
params.require(:service).permit(
|
||||
:type, :active, :webhook, :notify_only_broken_builds,
|
||||
:email_recipients, :email_only_broken_builds, :email_add_pusher,
|
||||
:hipchat_token, :hipchat_room, :hipchat_server
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,53 +0,0 @@
|
|||
module Ci
|
||||
class WebHooksController < Ci::ApplicationController
|
||||
before_action :authenticate_user!
|
||||
before_action :project
|
||||
before_action :authorize_access_project!
|
||||
before_action :authorize_manage_project!
|
||||
|
||||
layout 'ci/project'
|
||||
|
||||
def index
|
||||
@web_hooks = @project.web_hooks
|
||||
@web_hook = Ci::WebHook.new
|
||||
end
|
||||
|
||||
def create
|
||||
@web_hook = @project.web_hooks.new(web_hook_params)
|
||||
@web_hook.save
|
||||
|
||||
if @web_hook.valid?
|
||||
redirect_to ci_project_web_hooks_path(@project)
|
||||
else
|
||||
@web_hooks = @project.web_hooks.select(&:persisted?)
|
||||
render :index
|
||||
end
|
||||
end
|
||||
|
||||
def test
|
||||
Ci::TestHookService.new.execute(hook, current_user)
|
||||
|
||||
redirect_to :back
|
||||
end
|
||||
|
||||
def destroy
|
||||
hook.destroy
|
||||
|
||||
redirect_to ci_project_web_hooks_path(@project)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def hook
|
||||
@web_hook ||= @project.web_hooks.find(params[:id])
|
||||
end
|
||||
|
||||
def project
|
||||
@project = Ci::Project.find(params[:project_id])
|
||||
end
|
||||
|
||||
def web_hook_params
|
||||
params.require(:web_hook).permit(:url)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -88,7 +88,7 @@ class GroupsController < Groups::ApplicationController
|
|||
def destroy
|
||||
DestroyGroupService.new(@group, current_user).execute
|
||||
|
||||
redirect_to root_path, alert: "Group '#{@group.name} was deleted."
|
||||
redirect_to root_path, alert: "Group '#{@group.name}' was successfully deleted."
|
||||
end
|
||||
|
||||
protected
|
||||
|
|
|
@ -62,7 +62,7 @@ class Import::BitbucketController < Import::BaseController
|
|||
end
|
||||
|
||||
def verify_bitbucket_import_enabled
|
||||
not_found! unless bitbucket_import_enabled?
|
||||
render_404 unless bitbucket_import_enabled?
|
||||
end
|
||||
|
||||
def bitbucket_auth
|
||||
|
|
|
@ -99,6 +99,6 @@ class Import::FogbugzController < Import::BaseController
|
|||
end
|
||||
|
||||
def verify_fogbugz_import_enabled
|
||||
not_found! unless fogbugz_import_enabled?
|
||||
render_404 unless fogbugz_import_enabled?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -47,7 +47,7 @@ class Import::GithubController < Import::BaseController
|
|||
end
|
||||
|
||||
def verify_github_import_enabled
|
||||
not_found! unless github_import_enabled?
|
||||
render_404 unless github_import_enabled?
|
||||
end
|
||||
|
||||
def github_auth
|
||||
|
|
|
@ -44,7 +44,7 @@ class Import::GitlabController < Import::BaseController
|
|||
end
|
||||
|
||||
def verify_gitlab_import_enabled
|
||||
not_found! unless gitlab_import_enabled?
|
||||
render_404 unless gitlab_import_enabled?
|
||||
end
|
||||
|
||||
def gitlab_auth
|
||||
|
|
|
@ -42,7 +42,7 @@ class Import::GitoriousController < Import::BaseController
|
|||
end
|
||||
|
||||
def verify_gitorious_import_enabled
|
||||
not_found! unless gitorious_import_enabled?
|
||||
render_404 unless gitorious_import_enabled?
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -106,7 +106,7 @@ class Import::GoogleCodeController < Import::BaseController
|
|||
end
|
||||
|
||||
def verify_google_code_import_enabled
|
||||
not_found! unless google_code_import_enabled?
|
||||
render_404 unless google_code_import_enabled?
|
||||
end
|
||||
|
||||
def user_map
|
||||
|
|
|
@ -31,6 +31,7 @@ class Profiles::PreferencesController < Profiles::ApplicationController
|
|||
def preferences_params
|
||||
params.require(:user).permit(
|
||||
:color_scheme_id,
|
||||
:layout,
|
||||
:dashboard,
|
||||
:project_view,
|
||||
:theme_id
|
||||
|
|
|
@ -12,7 +12,7 @@ class Projects::AvatarsController < Projects::ApplicationController
|
|||
filename: @blob.name
|
||||
)
|
||||
else
|
||||
not_found!
|
||||
render_404
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ class Projects::BlobController < Projects::ApplicationController
|
|||
|
||||
before_action :require_non_empty_project, except: [:new, :create]
|
||||
before_action :authorize_download_code!
|
||||
before_action :authorize_push_code!, only: [:destroy]
|
||||
before_action :authorize_push_code!, only: [:destroy, :create]
|
||||
before_action :assign_blob_vars
|
||||
before_action :commit, except: [:new, :create]
|
||||
before_action :blob, except: [:new, :create]
|
||||
|
@ -25,7 +25,7 @@ class Projects::BlobController < Projects::ApplicationController
|
|||
result = Files::CreateService.new(@project, current_user, @commit_params).execute
|
||||
|
||||
if result[:status] == :success
|
||||
flash[:notice] = "Your changes have been successfully committed"
|
||||
flash[:notice] = "The changes have been successfully committed"
|
||||
respond_to do |format|
|
||||
format.html { redirect_to namespace_project_blob_path(@project.namespace, @project, File.join(@target_branch, @file_path)) }
|
||||
format.json { render json: { message: "success", filePath: namespace_project_blob_path(@project.namespace, @project, File.join(@target_branch, @file_path)) } }
|
||||
|
@ -34,7 +34,7 @@ class Projects::BlobController < Projects::ApplicationController
|
|||
flash[:alert] = result[:message]
|
||||
respond_to do |format|
|
||||
format.html { render :new }
|
||||
format.json { render json: { message: "failed", filePath: namespace_project_new_blob_path(@project.namespace, @project, @id) } }
|
||||
format.json { render json: { message: "failed", filePath: namespace_project_blob_path(@project.namespace, @project, @id) } }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -113,14 +113,14 @@ class Projects::BlobController < Projects::ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
return not_found!
|
||||
return render_404
|
||||
end
|
||||
end
|
||||
|
||||
def commit
|
||||
@commit = @repository.commit(@ref)
|
||||
|
||||
return not_found! unless @commit
|
||||
return render_404 unless @commit
|
||||
end
|
||||
|
||||
def assign_blob_vars
|
||||
|
@ -128,7 +128,7 @@ class Projects::BlobController < Projects::ApplicationController
|
|||
@ref, @path = extract_ref(@id)
|
||||
|
||||
rescue InvalidPathError
|
||||
not_found!
|
||||
render_404
|
||||
end
|
||||
|
||||
def after_edit_path
|
||||
|
@ -154,7 +154,7 @@ class Projects::BlobController < Projects::ApplicationController
|
|||
|
||||
def editor_variables
|
||||
@current_branch = @ref
|
||||
@target_branch = (sanitized_new_branch_name || @ref)
|
||||
@target_branch = params[:new_branch].present? ? sanitized_new_branch_name : @ref
|
||||
|
||||
@file_path =
|
||||
if action_name.to_s == 'create'
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
class Projects::BuildsController < Projects::ApplicationController
|
||||
before_action :ci_project
|
||||
before_action :build, except: [:index, :cancel_all]
|
||||
|
||||
before_action :authorize_admin_project!, except: [:index, :show, :status]
|
||||
|
||||
layout "project"
|
||||
|
||||
def index
|
||||
@scope = params[:scope]
|
||||
@all_builds = project.ci_builds
|
||||
@builds =
|
||||
case @scope
|
||||
when 'all'
|
||||
@all_builds
|
||||
when 'finished'
|
||||
@all_builds.finished
|
||||
else
|
||||
@all_builds.running_or_pending
|
||||
end
|
||||
@builds = @builds.order('created_at DESC').page(params[:page]).per(30)
|
||||
end
|
||||
|
||||
def cancel_all
|
||||
@project.ci_builds.running_or_pending.each(&:cancel)
|
||||
|
||||
redirect_to namespace_project_builds_path(project.namespace, project)
|
||||
end
|
||||
|
||||
def show
|
||||
@builds = @ci_project.commits.find_by_sha(@build.sha).builds.order('id DESC')
|
||||
@builds = @builds.where("id not in (?)", @build.id).page(params[:page]).per(20)
|
||||
@commit = @build.commit
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.json do
|
||||
render json: @build.to_json(methods: :trace_html)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def retry
|
||||
if @build.commands.blank?
|
||||
return page_404
|
||||
end
|
||||
|
||||
build = Ci::Build.retry(@build)
|
||||
|
||||
if params[:return_to]
|
||||
redirect_to URI.parse(params[:return_to]).path
|
||||
else
|
||||
redirect_to build_path(build)
|
||||
end
|
||||
end
|
||||
|
||||
def status
|
||||
render json: @build.to_json(only: [:status, :id, :sha, :coverage], methods: :sha)
|
||||
end
|
||||
|
||||
def cancel
|
||||
@build.cancel
|
||||
|
||||
redirect_to build_path(@build)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def build
|
||||
@build ||= ci_project.builds.unscoped.find_by!(id: params[:id])
|
||||
end
|
||||
|
||||
def build_path(build)
|
||||
namespace_project_build_path(build.gl_project.namespace, build.gl_project, build)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,49 @@
|
|||
class Projects::CiServicesController < Projects::ApplicationController
|
||||
before_action :ci_project
|
||||
before_action :authorize_admin_project!
|
||||
|
||||
layout "project_settings"
|
||||
|
||||
def index
|
||||
@ci_project.build_missing_services
|
||||
@services = @ci_project.services.reload
|
||||
end
|
||||
|
||||
def edit
|
||||
service
|
||||
end
|
||||
|
||||
def update
|
||||
if @service.update_attributes(service_params)
|
||||
redirect_to edit_namespace_project_ci_service_path(@project, @project.namespace, @service.to_param)
|
||||
else
|
||||
render 'edit'
|
||||
end
|
||||
end
|
||||
|
||||
def test
|
||||
last_build = @project.builds.last
|
||||
|
||||
if @service.execute(last_build)
|
||||
message = { notice: 'We successfully tested the service' }
|
||||
else
|
||||
message = { alert: 'We tried to test the service but error occurred' }
|
||||
end
|
||||
|
||||
redirect_to :back, message
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def service
|
||||
@service ||= @ci_project.services.find { |service| service.to_param == params[:id] }
|
||||
end
|
||||
|
||||
def service_params
|
||||
params.require(:service).permit(
|
||||
:type, :active, :webhook, :notify_only_broken_builds,
|
||||
:email_recipients, :email_only_broken_builds, :email_add_pusher,
|
||||
:hipchat_token, :hipchat_room, :hipchat_server
|
||||
)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,45 @@
|
|||
class Projects::CiWebHooksController < Projects::ApplicationController
|
||||
before_action :ci_project
|
||||
before_action :authorize_admin_project!
|
||||
|
||||
layout "project_settings"
|
||||
|
||||
def index
|
||||
@web_hooks = @ci_project.web_hooks
|
||||
@web_hook = Ci::WebHook.new
|
||||
end
|
||||
|
||||
def create
|
||||
@web_hook = @ci_project.web_hooks.new(web_hook_params)
|
||||
@web_hook.save
|
||||
|
||||
if @web_hook.valid?
|
||||
redirect_to namespace_project_ci_web_hooks_path(@project.namespace, @project)
|
||||
else
|
||||
@web_hooks = @ci_project.web_hooks.select(&:persisted?)
|
||||
render :index
|
||||
end
|
||||
end
|
||||
|
||||
def test
|
||||
Ci::TestHookService.new.execute(hook, current_user)
|
||||
|
||||
redirect_to :back
|
||||
end
|
||||
|
||||
def destroy
|
||||
hook.destroy
|
||||
|
||||
redirect_to namespace_project_ci_web_hooks_path(@project.namespace, @project)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def hook
|
||||
@web_hook ||= @ci_project.web_hooks.find(params[:id])
|
||||
end
|
||||
|
||||
def web_hook_params
|
||||
params.require(:web_hook).permit(:url)
|
||||
end
|
||||
end
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue