Merge branch 'master' into housekeeping-doc
This commit is contained in:
commit
308abc8db0
|
|
@ -8,7 +8,7 @@ before_script:
|
|||
- touch log/application.log
|
||||
- touch log/test.log
|
||||
- bundle install --without postgres production --jobs $(nproc) "${FLAGS[@]}"
|
||||
- bundle exec rake db:reset db:create RAILS_ENV=test
|
||||
- RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load db:migrate
|
||||
|
||||
spec:feature:
|
||||
script:
|
||||
|
|
@ -118,7 +118,7 @@ flay:
|
|||
- mysql
|
||||
|
||||
bundler:audit:
|
||||
script:
|
||||
script:
|
||||
- "bundle exec bundle-audit update"
|
||||
- "bundle exec bundle-audit check"
|
||||
tags:
|
||||
|
|
|
|||
63
CHANGELOG
63
CHANGELOG
|
|
@ -1,6 +1,24 @@
|
|||
Please view this file on the master branch, on stable branches it's out of date.
|
||||
|
||||
v 8.5.0 (unreleased)
|
||||
- Add "visibility" flag to GET /projects api endpoint
|
||||
- Upgrade gitlab_git to 7.2.23 to fix commit message mentions in first branch push
|
||||
- New UI for pagination
|
||||
|
||||
v 8.4.0 (unreleased)
|
||||
- Allow LDAP users to change their email if it was not set by the LDAP server
|
||||
- Ensure Gravatar host looks like an actual host
|
||||
- Consider re-assign as a mention from a notification point of view
|
||||
- Add pagination headers to already paginated API resources
|
||||
- Properly generate diff of orphan commits, like the first commit in a repository
|
||||
- Improve the consistency of commit titles, branch names, tag names, issue/MR titles, on their respective project pages
|
||||
- Autocomplete data is now always loaded, instead of when focusing a comment text area
|
||||
- Improved performance of finding issues for an entire group
|
||||
- Added custom application performance measuring system powered by InfluxDB
|
||||
- Add syntax highlighting to diffs
|
||||
- Gracefully handle invalid UTF-8 sequences in Markdown links (Stan Hu)
|
||||
- Bump fog to 1.36.0 (Stan Hu)
|
||||
- Add user's last used IP addresses to admin page (Stan Hu)
|
||||
- Add housekeeping function to project settings page
|
||||
- The default GitLab logo now acts as a loading indicator
|
||||
- Fix caching issue where build status was not updating in project dashboard (Stan Hu)
|
||||
|
|
@ -8,8 +26,11 @@ v 8.4.0 (unreleased)
|
|||
- Fix missing date of month in network graph when commits span a month (Stan Hu)
|
||||
- Expire view caches when application settings change (e.g. Gravatar disabled) (Stan Hu)
|
||||
- Don't notify users twice if they are both project watchers and subscribers (Stan Hu)
|
||||
- Remove gray background from layout in UI
|
||||
- Fix signup for OAuth providers that don't provide a name
|
||||
- Implement new UI for group page
|
||||
- Implement search inside emoji picker
|
||||
- Let the CI runner know about builds that this build depends on
|
||||
- Add API support for looking up a user by username (Stan Hu)
|
||||
- Add project permissions to all project API endpoints (Stan Hu)
|
||||
- Link to milestone in "Milestone changed" system note
|
||||
|
|
@ -26,6 +47,9 @@ v 8.4.0 (unreleased)
|
|||
- Show 'All' tab by default in the builds page
|
||||
- Add Open Graph and Twitter Card data to all pages
|
||||
- Fix API project lookups when querying with a namespace with dots (Stan Hu)
|
||||
- Enable forcing Two-Factor authentication sitewide, with optional grace period
|
||||
- Import GitHub Pull Requests into GitLab
|
||||
- Change single user API endpoint to return more detailed data (Michael Potthoff)
|
||||
- Update version check images to use SVG
|
||||
- Validate README format before displaying
|
||||
- Enable Microsoft Azure OAuth2 support (Janis Meybohm)
|
||||
|
|
@ -33,21 +57,47 @@ v 8.4.0 (unreleased)
|
|||
- Add file finder feature in tree view (Kyungchul Shin)
|
||||
- Ajax filter by message for commits page
|
||||
- API: Add support for deleting a tag via the API (Robert Schilling)
|
||||
- Allow subsequent validations in CI Linter
|
||||
- Show referenced MRs & Issues only when the current viewer can access them
|
||||
- Fix Encoding::CompatibilityError bug when markdown content has some complex URL (Jason Lee)
|
||||
- Add API support for managing project's builds
|
||||
- Add API support for managing project's build triggers
|
||||
- Add API support for managing project's build variables
|
||||
- Allow broadcast messages to be edited
|
||||
- Autosize Markdown textareas
|
||||
- Import GitHub wiki into GitLab
|
||||
- Add reporters ability to download and browse build artifacts (Andrew Johnson)
|
||||
- Autofill referring url in message box when reporting user abuse.
|
||||
- Remove leading comma on award emoji when the user is the first to award the emoji (Zeger-Jan van de Weg)
|
||||
- Add build artifacts browser
|
||||
- Improve UX in builds artifacts browser
|
||||
- Increase default size of `data` column in `events` table when using MySQL
|
||||
- Expose button to CI Lint tool on project builds page
|
||||
- Fix: Creator should be added as a master of the project on creation
|
||||
- Added X-GitLab-... headers to emails from CI and Email On Push services (Anton Baklanov)
|
||||
- Add IP check against DNSBLs at account sign-up
|
||||
- Added cache:key to .gitlab-ci.yml allowing to fine tune the caching
|
||||
|
||||
v 8.3.3 (unreleased)
|
||||
v 8.3.4
|
||||
- Use gitlab-workhorse 0.5.4 (fixes API routing bug)
|
||||
|
||||
v 8.3.3
|
||||
- Preserve CE behavior with JIRA integration by only calling API if URL is set
|
||||
- Fix duplicated branch creation/deletion events when using Web UI (Stan Hu)
|
||||
- Add configurable LDAP server query timeout
|
||||
- Get "Merge when build succeeds" to work when commits were pushed to MR target branch while builds were running
|
||||
- Suppress e-mails on failed builds if allow_failure is set (Stan Hu)
|
||||
- Fix project transfer e-mail sending incorrect paths in e-mail notification (Stan Hu)
|
||||
- Better support for referencing and closing issues in Asana service (Mike Wyatt)
|
||||
- Enable "Add key" button when user fills in a proper key (Stan Hu)
|
||||
- Fix error in processing reply-by-email messages (Jason Lee)
|
||||
- Fix Error 500 when visiting build page of project with nil runners_token (Stan Hu)
|
||||
- Use WOFF versions of SourceSansPro fonts
|
||||
- Fix regression when builds were not generated for tags created through web/api interface
|
||||
- Fix: maintain milestone filter between Open and Closed tabs (Greg Smethells)
|
||||
- Fix missing artifacts and build traces for build created before 8.3
|
||||
|
||||
v 8.3.2
|
||||
- Change single user API endpoint to return more detailed data (Michael Potthoff)
|
||||
|
||||
v 8.3.2 (unreleased)
|
||||
- Disable --follow in `git log` to avoid loading duplicate commit data in infinite scroll (Stan Hu)
|
||||
- Add support for Google reCAPTCHA in user registration
|
||||
|
||||
|
|
@ -56,8 +106,6 @@ v 8.3.1
|
|||
- Fix Error 500 when doing a search in dashboard before visiting any project (Stan Hu)
|
||||
- Fix LDAP identity and user retrieval when special characters are used
|
||||
- Move Sidekiq-cron configuration to gitlab.yml
|
||||
- Enable forcing Two-Factor authentication sitewide, with optional grace period
|
||||
- Import GitHub Pull Requests into GitLab
|
||||
|
||||
v 8.3.0
|
||||
- Bump rack-attack to 4.3.1 for security fix (Stan Hu)
|
||||
|
|
@ -65,6 +113,7 @@ v 8.3.0
|
|||
- Add open_issues_count to project API (Stan Hu)
|
||||
- Expand character set of usernames created by Omniauth (Corey Hinshaw)
|
||||
- Add button to automatically merge a merge request when the build succeeds (Zeger-Jan van de Weg)
|
||||
- Add unsubscribe link in the email footer (Zeger-Jan van de Weg)
|
||||
- Provide better diagnostic message upon project creation errors (Stan Hu)
|
||||
- Bump devise to 3.5.3 to fix reset token expiring after account creation (Stan Hu)
|
||||
- Remove api credentials from link to build_page
|
||||
|
|
@ -78,6 +127,7 @@ v 8.3.0
|
|||
- Fix: Assignee selector is empty when 'Unassigned' is selected (Jose Corcuera)
|
||||
- Add rake tasks for git repository maintainance (Zeger-Jan van de Weg)
|
||||
- Fix 500 error when update group member permission
|
||||
- Fix: As an admin, cannot add oneself as a member to a group/project
|
||||
- Trim leading and trailing whitespace of milestone and issueable titles (Jose Corcuera)
|
||||
- Recognize issue/MR/snippet/commit links as references
|
||||
- Backport JIRA features from EE to CE
|
||||
|
|
@ -139,7 +189,6 @@ v 8.2.2
|
|||
- Fix Error 500 when viewing user's personal projects from admin page (Stan Hu)
|
||||
- Fix: Raw private snippets access workflow
|
||||
- Prevent "413 Request entity too large" errors when pushing large files with LFS
|
||||
- Fix: As an admin, cannot add oneself as a member to a group/project
|
||||
- Fix invalid links within projects dashboard header
|
||||
- Make current user the first user in assignee dropdown in issues detail page (Stan Hu)
|
||||
- Fix: duplicate email notifications on issue comments
|
||||
|
|
|
|||
|
|
@ -334,9 +334,9 @@ merge request:
|
|||
1. [CoffeeScript](https://github.com/thoughtbot/guides/tree/master/style/coffeescript)
|
||||
1. [Shell commands](doc/development/shell_commands.md) created by GitLab
|
||||
contributors to enhance security
|
||||
1. [Markdown](http://www.cirosantilli.com/markdown-styleguide)
|
||||
1. [Database Migrations](doc/development/migration_style_guide.md)
|
||||
1. [Documentation styleguide](doc_styleguide.md)
|
||||
1. [Markdown](http://www.cirosantilli.com/markdown-styleguide)
|
||||
1. [Documentation styleguide](doc/development/doc_styleguide.md)
|
||||
1. Interface text should be written subjectively instead of objectively. It
|
||||
should be the GitLab core team addressing a person. It should be written in
|
||||
present time and never use past tense (has been/was). For example instead
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
0.5.1
|
||||
0.6.1
|
||||
|
|
|
|||
11
Gemfile
11
Gemfile
|
|
@ -18,7 +18,7 @@ gem "mysql2", '~> 0.3.16', group: :mysql
|
|||
gem "pg", '~> 0.18.2', group: :postgres
|
||||
|
||||
# Authentication libraries
|
||||
gem 'devise', '~> 3.5.3'
|
||||
gem 'devise', '~> 3.5.4'
|
||||
gem 'devise-async', '~> 0.9.0'
|
||||
gem 'doorkeeper', '~> 2.2.0'
|
||||
gem 'omniauth', '~> 1.2.2'
|
||||
|
|
@ -49,7 +49,7 @@ gem "browser", '~> 1.0.0'
|
|||
|
||||
# Extracting information from a git repository
|
||||
# Provide access to Gitlab::Git library
|
||||
gem "gitlab_git", '~> 7.2.22'
|
||||
gem "gitlab_git", '~> 7.2.23'
|
||||
|
||||
# LDAP Auth
|
||||
# GitLab fork with several improvements to original library. For full list of changes
|
||||
|
|
@ -80,7 +80,7 @@ gem "carrierwave", '~> 0.9.0'
|
|||
gem 'dropzonejs-rails', '~> 0.7.1'
|
||||
|
||||
# for aws storage
|
||||
gem "fog", "~> 1.25.0"
|
||||
gem "fog", "~> 1.36.0"
|
||||
gem "unf", '~> 0.1.4'
|
||||
|
||||
# Authorization
|
||||
|
|
@ -247,7 +247,7 @@ group :development, :test do
|
|||
gem 'byebug', platform: :mri
|
||||
gem 'pry-rails'
|
||||
|
||||
gem 'awesome_print', '~> 1.2.0'
|
||||
gem 'awesome_print', '~> 1.2.0', require: false
|
||||
gem 'fuubar', '~> 2.0.0'
|
||||
|
||||
gem 'database_cleaner', '~> 1.4.0'
|
||||
|
|
@ -293,6 +293,9 @@ end
|
|||
|
||||
group :production do
|
||||
gem "gitlab_meta", '7.0'
|
||||
|
||||
# Sentry integration
|
||||
gem 'sentry-raven'
|
||||
end
|
||||
|
||||
gem "newrelic_rpm", '~> 3.9.4.245'
|
||||
|
|
|
|||
97
Gemfile.lock
97
Gemfile.lock
|
|
@ -157,7 +157,7 @@ GEM
|
|||
activerecord (>= 3.2.0, < 5.0)
|
||||
descendants_tracker (0.0.4)
|
||||
thread_safe (~> 0.3, >= 0.3.1)
|
||||
devise (3.5.3)
|
||||
devise (3.5.4)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 3.2.6, < 5)
|
||||
|
|
@ -219,21 +219,45 @@ GEM
|
|||
flowdock (0.7.1)
|
||||
httparty (~> 0.7)
|
||||
multi_json
|
||||
fog (1.25.0)
|
||||
fog (1.36.0)
|
||||
fog-aliyun (>= 0.1.0)
|
||||
fog-atmos
|
||||
fog-aws (>= 0.6.0)
|
||||
fog-brightbox (~> 0.4)
|
||||
fog-core (~> 1.25)
|
||||
fog-core (~> 1.32)
|
||||
fog-dynect (~> 0.0.2)
|
||||
fog-ecloud (~> 0.1)
|
||||
fog-google (<= 0.1.0)
|
||||
fog-json
|
||||
fog-local
|
||||
fog-powerdns (>= 0.1.1)
|
||||
fog-profitbricks
|
||||
fog-radosgw (>= 0.0.2)
|
||||
fog-riakcs
|
||||
fog-sakuracloud (>= 0.0.4)
|
||||
fog-serverlove
|
||||
fog-softlayer
|
||||
fog-storm_on_demand
|
||||
fog-terremark
|
||||
fog-vmfusion
|
||||
fog-voxel
|
||||
fog-xenserver
|
||||
fog-xml (~> 0.1.1)
|
||||
ipaddress (~> 0.5)
|
||||
nokogiri (~> 1.5, >= 1.5.11)
|
||||
opennebula
|
||||
fog-aliyun (0.1.0)
|
||||
fog-core (~> 1.27)
|
||||
fog-json (~> 1.0)
|
||||
ipaddress (~> 0.8)
|
||||
xml-simple (~> 1.1)
|
||||
fog-atmos (0.1.0)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-aws (0.8.1)
|
||||
fog-core (~> 1.27)
|
||||
fog-json (~> 1.0)
|
||||
fog-xml (~> 0.1)
|
||||
ipaddress (~> 0.8)
|
||||
fog-brightbox (0.10.1)
|
||||
fog-core (~> 1.22)
|
||||
fog-json
|
||||
|
|
@ -242,21 +266,48 @@ GEM
|
|||
builder
|
||||
excon (~> 0.45)
|
||||
formatador (~> 0.2)
|
||||
fog-dynect (0.0.2)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-xml
|
||||
fog-ecloud (0.3.0)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-google (0.1.0)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-xml
|
||||
fog-json (1.0.2)
|
||||
fog-core (~> 1.0)
|
||||
multi_json (~> 1.10)
|
||||
fog-local (0.2.1)
|
||||
fog-core (~> 1.27)
|
||||
fog-powerdns (0.1.1)
|
||||
fog-core (~> 1.27)
|
||||
fog-json (~> 1.0)
|
||||
fog-xml (~> 0.1)
|
||||
fog-profitbricks (0.0.5)
|
||||
fog-core
|
||||
fog-xml
|
||||
nokogiri
|
||||
fog-radosgw (0.0.4)
|
||||
fog-radosgw (0.0.5)
|
||||
fog-core (>= 1.21.0)
|
||||
fog-json
|
||||
fog-xml (>= 0.0.1)
|
||||
fog-sakuracloud (1.5.0)
|
||||
fog-riakcs (0.1.0)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-softlayer (1.0.2)
|
||||
fog-xml
|
||||
fog-sakuracloud (1.7.5)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-serverlove (0.1.2)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-softlayer (1.0.3)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-storm_on_demand (0.1.1)
|
||||
fog-core
|
||||
fog-json
|
||||
fog-terremark (0.1.0)
|
||||
|
|
@ -268,6 +319,9 @@ GEM
|
|||
fog-voxel (0.1.0)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-xenserver (0.2.2)
|
||||
fog-core
|
||||
fog-xml
|
||||
fog-xml (0.1.2)
|
||||
fog-core
|
||||
nokogiri (~> 1.5, >= 1.5.11)
|
||||
|
|
@ -302,7 +356,7 @@ GEM
|
|||
posix-spawn (~> 0.3)
|
||||
gitlab_emoji (0.2.0)
|
||||
gemojione (~> 2.1)
|
||||
gitlab_git (7.2.22)
|
||||
gitlab_git (7.2.23)
|
||||
activesupport (~> 4.0)
|
||||
charlock_holmes (~> 0.7.3)
|
||||
github-linguist (~> 4.7.0)
|
||||
|
|
@ -377,7 +431,7 @@ GEM
|
|||
influxdb (0.2.3)
|
||||
cause
|
||||
json
|
||||
ipaddress (0.8.0)
|
||||
ipaddress (0.8.2)
|
||||
jquery-atwho-rails (1.3.2)
|
||||
jquery-rails (4.0.5)
|
||||
rails-dom-testing (~> 1.0)
|
||||
|
|
@ -492,10 +546,6 @@ GEM
|
|||
activesupport
|
||||
nokogiri (>= 1.4.4)
|
||||
omniauth (~> 1.0)
|
||||
opennebula (4.14.2)
|
||||
json
|
||||
nokogiri
|
||||
rbvmomi
|
||||
org-ruby (0.9.12)
|
||||
rubypants (~> 0.2)
|
||||
orm_adapter (0.5.0)
|
||||
|
|
@ -564,17 +614,13 @@ GEM
|
|||
thor (>= 0.18.1, < 2.0)
|
||||
rainbow (2.0.0)
|
||||
raindrops (0.15.0)
|
||||
rake (10.4.2)
|
||||
rake (10.5.0)
|
||||
raphael-rails (2.1.2)
|
||||
rb-fsevent (0.9.6)
|
||||
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)
|
||||
recaptcha (1.0.2)
|
||||
|
|
@ -602,8 +648,8 @@ GEM
|
|||
request_store (1.2.1)
|
||||
rerun (0.11.0)
|
||||
listen (~> 3.0)
|
||||
responders (2.1.0)
|
||||
railties (>= 4.2.0, < 5)
|
||||
responders (2.1.1)
|
||||
railties (>= 4.2.0, < 5.1)
|
||||
rest-client (1.8.0)
|
||||
http-cookie (>= 1.0.2, < 2.0)
|
||||
mime-types (>= 1.16, < 3.0)
|
||||
|
|
@ -679,6 +725,8 @@ GEM
|
|||
activesupport (>= 3.1, < 4.3)
|
||||
select2-rails (3.5.9.3)
|
||||
thor (~> 0.14)
|
||||
sentry-raven (0.15.3)
|
||||
faraday (>= 0.7.6)
|
||||
settingslogic (2.0.9)
|
||||
sexp_processor (4.6.0)
|
||||
sham_rack (1.3.6)
|
||||
|
|
@ -773,7 +821,6 @@ GEM
|
|||
multi_json (~> 1.7)
|
||||
twitter-stream (~> 0.1)
|
||||
tins (1.6.0)
|
||||
trollop (2.1.2)
|
||||
turbolinks (2.5.3)
|
||||
coffee-rails
|
||||
twitter-stream (0.1.16)
|
||||
|
|
@ -822,6 +869,7 @@ GEM
|
|||
builder
|
||||
expression_parser
|
||||
rinku
|
||||
xml-simple (1.1.5)
|
||||
xpath (2.0.0)
|
||||
nokogiri (~> 1.3)
|
||||
|
||||
|
|
@ -865,7 +913,7 @@ DEPENDENCIES
|
|||
d3_rails (~> 3.5.0)
|
||||
database_cleaner (~> 1.4.0)
|
||||
default_value_for (~> 3.0.0)
|
||||
devise (~> 3.5.3)
|
||||
devise (~> 3.5.4)
|
||||
devise-async (~> 0.9.0)
|
||||
devise-two-factor (~> 2.0.0)
|
||||
diffy (~> 3.0.3)
|
||||
|
|
@ -877,7 +925,7 @@ DEPENDENCIES
|
|||
ffaker (~> 2.0.0)
|
||||
flay
|
||||
flog
|
||||
fog (~> 1.25.0)
|
||||
fog (~> 1.36.0)
|
||||
font-awesome-rails (~> 4.2)
|
||||
foreman
|
||||
fuubar (~> 2.0.0)
|
||||
|
|
@ -886,7 +934,7 @@ DEPENDENCIES
|
|||
github-markup (~> 1.3.1)
|
||||
gitlab-flowdock-git-hook (~> 1.0.1)
|
||||
gitlab_emoji (~> 0.2.0)
|
||||
gitlab_git (~> 7.2.22)
|
||||
gitlab_git (~> 7.2.23)
|
||||
gitlab_meta (= 7.0)
|
||||
gitlab_omniauth-ldap (~> 1.2.1)
|
||||
gollum-lib (~> 4.1.0)
|
||||
|
|
@ -962,6 +1010,7 @@ DEPENDENCIES
|
|||
sdoc (~> 0.3.20)
|
||||
seed-fu (~> 2.3.5)
|
||||
select2-rails (~> 3.5.9)
|
||||
sentry-raven
|
||||
settingslogic (~> 2.0.9)
|
||||
sham_rack
|
||||
shoulda-matchers (~> 2.8.0)
|
||||
|
|
|
|||
4
Procfile
4
Procfile
|
|
@ -2,6 +2,6 @@
|
|||
# https://gitlab.com/gitlab-org/omnibus-gitlab or the init scripts in
|
||||
# lib/support/init.d, which call scripts in bin/ .
|
||||
#
|
||||
web: bundle exec unicorn_rails -p ${PORT:="3000"} -E ${RAILS_ENV:="development"} -c ${UNICORN_CONFIG:="config/unicorn.rb"}
|
||||
worker: bundle exec sidekiq -q post_receive -q mailers -q archive_repo -q system_hook -q project_web_hook -q gitlab_shell -q incoming_email -q runner -q common -q default
|
||||
web: RAILS_ENV=development bin/web start_foreground
|
||||
worker: RAILS_ENV=development bin/background_jobs start_foreground
|
||||
# mail_room: bundle exec mail_room -q -c config/mail_room.yml
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,7 +1,7 @@
|
|||
class @Activities
|
||||
constructor: ->
|
||||
Pager.init 20, true
|
||||
$(".event-filter .btn").bind "click", (event) =>
|
||||
$(".event-filter a").bind "click", (event) =>
|
||||
event.preventDefault()
|
||||
@toggleFilter($(event.currentTarget))
|
||||
@reloadActivities()
|
||||
|
|
@ -12,7 +12,7 @@ class @Activities
|
|||
|
||||
|
||||
toggleFilter: (sender) ->
|
||||
sender.toggleClass "active"
|
||||
sender.closest('li').toggleClass "active"
|
||||
event_filters = $.cookie("event_filter")
|
||||
filter = sender.attr("id").split("_")[0]
|
||||
if event_filters
|
||||
|
|
|
|||
|
|
@ -10,19 +10,19 @@ class @Admin
|
|||
|
||||
$('body').on 'click', '.js-toggle-colors-link', (e) ->
|
||||
e.preventDefault()
|
||||
$('.js-toggle-colors-link').hide()
|
||||
$('.js-toggle-colors-container').show()
|
||||
$('.js-toggle-colors-container').toggle()
|
||||
|
||||
$('input#broadcast_message_color').on 'input', ->
|
||||
previewColor = $('input#broadcast_message_color').val()
|
||||
previewColor = $(@).val()
|
||||
$('div.broadcast-message-preview').css('background-color', previewColor)
|
||||
|
||||
$('input#broadcast_message_font').on 'input', ->
|
||||
previewColor = $('input#broadcast_message_font').val()
|
||||
previewColor = $(@).val()
|
||||
$('div.broadcast-message-preview').css('color', previewColor)
|
||||
|
||||
$('textarea#broadcast_message_message').on 'input', ->
|
||||
previewMessage = $('textarea#broadcast_message_message').val()
|
||||
previewMessage = $(@).val()
|
||||
previewMessage = "Your message here" if previewMessage.trim() == ''
|
||||
$('div.broadcast-message-preview span').text(previewMessage)
|
||||
|
||||
$('.log-tabs a').click (e) ->
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ class @AwardsHandler
|
|||
event.preventDefault()
|
||||
$(".emoji-menu").show()
|
||||
|
||||
$("html").click ->
|
||||
$("html").on 'click', (event) ->
|
||||
if !$(event.target).closest(".emoji-menu").length
|
||||
if $(".emoji-menu").is(":visible")
|
||||
$(".emoji-menu").hide()
|
||||
|
|
@ -19,7 +19,7 @@ class @AwardsHandler
|
|||
@addAwardToEmojiBar(emoji)
|
||||
|
||||
$(".emoji-menu").hide()
|
||||
|
||||
|
||||
addAwardToEmojiBar: (emoji) ->
|
||||
@addEmojiToFrequentlyUsedList(emoji)
|
||||
|
||||
|
|
@ -44,7 +44,6 @@ class @AwardsHandler
|
|||
decrementCounter: (emoji) ->
|
||||
counter = @findEmojiIcon(emoji).siblings(".counter")
|
||||
emojiIcon = counter.parent()
|
||||
|
||||
if parseInt(counter.text()) > 1
|
||||
counter.text(parseInt(counter.text()) - 1)
|
||||
emojiIcon.removeClass("active")
|
||||
|
|
@ -60,13 +59,16 @@ class @AwardsHandler
|
|||
removeMeFromAuthorList: (emoji) ->
|
||||
award_block = @findEmojiIcon(emoji).parent()
|
||||
authors = award_block.attr("data-original-title").split(", ")
|
||||
authors = _.without(authors, "me").join(", ")
|
||||
award_block.attr("title", authors)
|
||||
authors.splice(authors.indexOf("me"),1)
|
||||
award_block.closest(".award").attr("data-original-title", authors.join(", "))
|
||||
@resetTooltip(award_block)
|
||||
|
||||
addMeToAuthorList: (emoji) ->
|
||||
award_block = @findEmojiIcon(emoji).parent()
|
||||
authors = award_block.attr("data-original-title").split(", ")
|
||||
origTitle = award_block.attr("data-original-title").trim()
|
||||
authors = []
|
||||
if origTitle
|
||||
authors = origTitle.split(', ')
|
||||
authors.push("me")
|
||||
award_block.attr("title", authors.join(", "))
|
||||
@resetTooltip(award_block)
|
||||
|
|
@ -78,7 +80,7 @@ class @AwardsHandler
|
|||
setTimeout (->
|
||||
award.tooltip()
|
||||
), 200
|
||||
|
||||
|
||||
|
||||
createEmoji: (emoji) ->
|
||||
emojiCssClass = @resolveNameToCssClass(emoji)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
#= require autosize
|
||||
|
||||
$ ->
|
||||
autosize($('.js-autosize'))
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
class @BuildArtifacts
|
||||
constructor: () ->
|
||||
@disablePropagation()
|
||||
@setupEntryClick()
|
||||
|
||||
disablePropagation: ->
|
||||
$('.top-block').on 'click', '.download', (e) ->
|
||||
e.stopPropagation()
|
||||
$('.tree-holder').on 'click', 'tr[data-link] a', (e) ->
|
||||
e.stopImmediatePropagation()
|
||||
|
||||
setupEntryClick: ->
|
||||
$('.tree-holder').on 'click', 'tr[data-link]', (e) ->
|
||||
window.location = @dataset.link
|
||||
|
|
@ -87,7 +87,6 @@ class Dispatcher
|
|||
new GroupAvatar()
|
||||
when 'projects:tree:show'
|
||||
new TreeView()
|
||||
shortcut_handler = new ShortcutsTree()
|
||||
when 'projects:find_file:show'
|
||||
shortcut_handler = true
|
||||
when 'projects:blob:show'
|
||||
|
|
@ -101,6 +100,8 @@ class Dispatcher
|
|||
shortcut_handler = true
|
||||
when 'projects:forks:new'
|
||||
new ProjectFork()
|
||||
when 'projects:artifacts:browse'
|
||||
new BuildArtifacts()
|
||||
when 'users:show'
|
||||
new User()
|
||||
new Activities()
|
||||
|
|
|
|||
|
|
@ -6,22 +6,40 @@ class @Issue
|
|||
constructor: ->
|
||||
# Prevent duplicate event bindings
|
||||
@disableTaskList()
|
||||
|
||||
@fixAffixScroll()
|
||||
if $('a.btn-close').length
|
||||
@initTaskList()
|
||||
@initIssueBtnEventListeners()
|
||||
|
||||
fixAffixScroll: ->
|
||||
fixAffix = ->
|
||||
$discussion = $('.issuable-discussion')
|
||||
$sidebar = $('.issuable-sidebar')
|
||||
if $sidebar.hasClass('no-affix')
|
||||
$sidebar.removeClass(['affix-top','affix'])
|
||||
discussionHeight = $discussion.height()
|
||||
sidebarHeight = $sidebar.height()
|
||||
if sidebarHeight > discussionHeight
|
||||
$discussion.height(sidebarHeight + 50)
|
||||
$sidebar.addClass('no-affix')
|
||||
$(window).on('resize', fixAffix)
|
||||
fixAffix()
|
||||
|
||||
initTaskList: ->
|
||||
$('.detail-page-description .js-task-list-container').taskList('enable')
|
||||
$(document).on 'tasklist:changed', '.detail-page-description .js-task-list-container', @updateTaskList
|
||||
|
||||
initIssueBtnEventListeners: ->
|
||||
_this = @
|
||||
issueFailMessage = 'Unable to update this issue at this time.'
|
||||
$('a.btn-close, a.btn-reopen').on 'click', (e) ->
|
||||
e.preventDefault()
|
||||
e.stopImmediatePropagation()
|
||||
$this = $(this)
|
||||
isClose = $this.hasClass('btn-close')
|
||||
shouldSubmit = $this.hasClass('btn-comment')
|
||||
if shouldSubmit
|
||||
_this.submitNoteForm($this.closest('form'))
|
||||
$this.prop('disabled', true)
|
||||
url = $this.attr('href')
|
||||
$.ajax
|
||||
|
|
@ -32,12 +50,13 @@ class @Issue
|
|||
new Flash(issueFailMessage, 'alert')
|
||||
success: (data, textStatus, jqXHR) ->
|
||||
if data.saved
|
||||
$this.addClass('hidden')
|
||||
if isClose
|
||||
$('a.btn-close').addClass('hidden')
|
||||
$('a.btn-reopen').removeClass('hidden')
|
||||
$('div.status-box-closed').removeClass('hidden')
|
||||
$('div.status-box-open').addClass('hidden')
|
||||
else
|
||||
$('a.btn-reopen').addClass('hidden')
|
||||
$('a.btn-close').removeClass('hidden')
|
||||
$('div.status-box-closed').addClass('hidden')
|
||||
$('div.status-box-open').removeClass('hidden')
|
||||
|
|
@ -45,6 +64,11 @@ class @Issue
|
|||
new Flash(issueFailMessage, 'alert')
|
||||
$this.prop('disabled', false)
|
||||
|
||||
submitNoteForm: (form) =>
|
||||
noteText = form.find("textarea.js-note-text").val()
|
||||
if noteText.trim().length > 0
|
||||
form.submit()
|
||||
|
||||
disableTaskList: ->
|
||||
$('.detail-page-description .js-task-list-container').taskList('disable')
|
||||
$(document).off 'tasklist:changed', '.detail-page-description .js-task-list-container'
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ start = ->
|
|||
clearHighlights()
|
||||
pieceIndex = 0
|
||||
pieces.reverse() unless pieces[0] == firstPiece
|
||||
clearInterval(currentTimer) if currentTimer
|
||||
currentTimer = setInterval(work, delay)
|
||||
|
||||
stop = ->
|
||||
|
|
|
|||
|
|
@ -15,10 +15,13 @@ class @MergeRequest
|
|||
this.$('.show-all-commits').on 'click', =>
|
||||
this.showAllCommits()
|
||||
|
||||
@fixAffixScroll();
|
||||
|
||||
@initTabs()
|
||||
|
||||
# Prevent duplicate event bindings
|
||||
@disableTaskList()
|
||||
@initMRBtnListeners()
|
||||
|
||||
if $("a.btn-close").length
|
||||
@initTaskList()
|
||||
|
|
@ -27,6 +30,20 @@ class @MergeRequest
|
|||
$: (selector) ->
|
||||
this.$el.find(selector)
|
||||
|
||||
fixAffixScroll: ->
|
||||
fixAffix = ->
|
||||
$discussion = $('.issuable-discussion')
|
||||
$sidebar = $('.issuable-sidebar')
|
||||
if $sidebar.hasClass('no-affix')
|
||||
$sidebar.removeClass(['affix-top','affix'])
|
||||
discussionHeight = $discussion.height()
|
||||
sidebarHeight = $sidebar.height()
|
||||
if sidebarHeight > discussionHeight
|
||||
$discussion.height(sidebarHeight + 50)
|
||||
$sidebar.addClass('no-affix')
|
||||
$(window).on('resize', fixAffix)
|
||||
fixAffix()
|
||||
|
||||
initTabs: ->
|
||||
if @opts.action != 'new'
|
||||
# `MergeRequests#new` has no tab-persisting or lazy-loading behavior
|
||||
|
|
@ -43,6 +60,28 @@ class @MergeRequest
|
|||
$('.detail-page-description .js-task-list-container').taskList('enable')
|
||||
$(document).on 'tasklist:changed', '.detail-page-description .js-task-list-container', @updateTaskList
|
||||
|
||||
initMRBtnListeners: ->
|
||||
_this = @
|
||||
$('a.btn-close, a.btn-reopen').on 'click', (e) ->
|
||||
$this = $(this)
|
||||
shouldSubmit = $this.hasClass('btn-comment')
|
||||
if shouldSubmit && $this.data('submitted')
|
||||
return
|
||||
if shouldSubmit
|
||||
if $this.hasClass('btn-comment-and-close') || $this.hasClass('btn-comment-and-reopen')
|
||||
e.preventDefault()
|
||||
e.stopImmediatePropagation()
|
||||
_this.submitNoteForm($this.closest('form'),$this)
|
||||
|
||||
|
||||
submitNoteForm: (form, $button) =>
|
||||
noteText = form.find("textarea.js-note-text").val()
|
||||
if noteText.trim().length > 0
|
||||
form.submit()
|
||||
$button.data('submitted',true)
|
||||
$button.trigger('click')
|
||||
|
||||
|
||||
disableTaskList: ->
|
||||
$('.detail-page-description .js-task-list-container').taskList('disable')
|
||||
$(document).off 'tasklist:changed', '.detail-page-description .js-task-list-container'
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#
|
||||
# ### Example Markup
|
||||
#
|
||||
# <ul class="nav nav-tabs merge-request-tabs">
|
||||
# <ul class="nav-links merge-request-tabs">
|
||||
# <li class="notes-tab active">
|
||||
# <a data-action="notes" data-target="#notes" data-toggle="tab" href="/foo/bar/merge_requests/1">
|
||||
# Discussion
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#= require autosave
|
||||
#= require autosize
|
||||
#= require dropzone
|
||||
#= require dropzone_input
|
||||
#= require gfm_auto_complete
|
||||
|
|
@ -33,8 +34,6 @@ class @Notes
|
|||
$(document).on "click", ".note-edit-cancel", @cancelEdit
|
||||
|
||||
# Reopen and close actions for Issue/MR combined with note form submit
|
||||
$(document).on "click", ".js-note-target-reopen", @targetReopen
|
||||
$(document).on "click", ".js-note-target-close", @targetClose
|
||||
$(document).on "click", ".js-comment-button", @updateCloseButton
|
||||
$(document).on "keyup", ".js-note-text", @updateTargetButtons
|
||||
|
||||
|
|
@ -248,6 +247,7 @@ class @Notes
|
|||
else
|
||||
previewButton.removeClass("turn-on").addClass "turn-off"
|
||||
|
||||
autosize(textarea)
|
||||
new Autosave textarea, [
|
||||
"Note"
|
||||
form.find("#note_commit_id").val()
|
||||
|
|
@ -320,6 +320,7 @@ class @Notes
|
|||
form.show()
|
||||
textarea = form.find("textarea")
|
||||
textarea.focus()
|
||||
autosize(textarea)
|
||||
|
||||
# HACK (rspeicher/DouweM): Work around a Chrome 43 bug(?).
|
||||
# The textarea has the correct value, Chrome just won't show it unless we
|
||||
|
|
@ -355,7 +356,7 @@ class @Notes
|
|||
$('.note[id="' + note_id + '"]').each ->
|
||||
note = $(this)
|
||||
notes = note.closest(".notes")
|
||||
count = notes.closest(".notes_holder").find(".discussion-notes-count")
|
||||
count = notes.closest(".issuable-details").find(".notes-tab .badge")
|
||||
|
||||
# check if this is the last note for this line
|
||||
if notes.find(".note").length is 1
|
||||
|
|
@ -365,9 +366,10 @@ class @Notes
|
|||
|
||||
# for diff lines
|
||||
notes.closest("tr").remove()
|
||||
else
|
||||
# update notes count
|
||||
count.get(0).lastChild.nodeValue = " #{notes.children().length - 1}"
|
||||
|
||||
# update notes count
|
||||
oldNum = parseInt(count.text())
|
||||
count.text(oldNum - 1)
|
||||
|
||||
note.remove()
|
||||
|
||||
|
|
@ -512,17 +514,6 @@ class @Notes
|
|||
visibilityChange: =>
|
||||
@refresh()
|
||||
|
||||
targetReopen: (e) =>
|
||||
@submitNoteForm($(e.target).parents('form'))
|
||||
|
||||
targetClose: (e) =>
|
||||
@submitNoteForm($(e.target).parents('form'))
|
||||
|
||||
submitNoteForm: (form) =>
|
||||
noteText = form.find(".js-note-text").val()
|
||||
if noteText.trim().length > 0
|
||||
form.submit()
|
||||
|
||||
updateCloseButton: (e) =>
|
||||
textarea = $(e.target)
|
||||
form = textarea.parents('form')
|
||||
|
|
@ -531,13 +522,16 @@ class @Notes
|
|||
updateTargetButtons: (e) =>
|
||||
textarea = $(e.target)
|
||||
form = textarea.parents('form')
|
||||
|
||||
if textarea.val().trim().length > 0
|
||||
form.find('.js-note-target-reopen').text('Comment & reopen')
|
||||
form.find('.js-note-target-close').text('Comment & close')
|
||||
form.find('.js-note-target-reopen').addClass('btn-comment-and-reopen')
|
||||
form.find('.js-note-target-close').addClass('btn-comment-and-close')
|
||||
else
|
||||
form.find('.js-note-target-reopen').text('Reopen')
|
||||
form.find('.js-note-target-close').text('Close')
|
||||
form.find('.js-note-target-reopen').removeClass('btn-comment-and-reopen')
|
||||
form.find('.js-note-target-close').removeClass('btn-comment-and-close')
|
||||
|
||||
initTaskList: ->
|
||||
@enableTaskList()
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ class @Shortcuts
|
|||
Mousetrap.reset()
|
||||
Mousetrap.bind('?', @selectiveHelp)
|
||||
Mousetrap.bind('s', Shortcuts.focusSearch)
|
||||
Mousetrap.bind('t', -> Turbolinks.visit(findFileURL)) if findFileURL?
|
||||
|
||||
selectiveHelp: (e) =>
|
||||
Shortcuts.showHelp(e, @enabledHelp)
|
||||
|
|
|
|||
|
|
@ -1,4 +0,0 @@
|
|||
class @ShortcutsTree extends ShortcutsNavigation
|
||||
constructor: ->
|
||||
super()
|
||||
Mousetrap.bind('t', -> ShortcutsTree.findAndFollowLink('.shortcuts-find-file'))
|
||||
|
|
@ -6,7 +6,7 @@ class @Star
|
|||
$starIcon = $this.find('i')
|
||||
|
||||
toggleStar = (isStarred) ->
|
||||
$this.parent().find('span.count').text data.star_count
|
||||
$this.parent().find('.star-count').text data.star_count
|
||||
if isStarred
|
||||
$starSpan.removeClass('starred').text 'Star'
|
||||
$starIcon.removeClass('fa-star').addClass 'fa-star-o'
|
||||
|
|
@ -19,4 +19,4 @@ class @Star
|
|||
return
|
||||
).on 'ajax:error', (e, xhr, status, error) ->
|
||||
new Flash('Star toggle failed. Try again later.', 'alert')
|
||||
return
|
||||
return
|
||||
|
|
|
|||
|
|
@ -1,17 +1,18 @@
|
|||
#= require latinise
|
||||
|
||||
class @Wikis
|
||||
constructor: ->
|
||||
$('.build-new-wiki').bind "click", (e) ->
|
||||
$('[data-error~=slug]').addClass("hidden")
|
||||
$('p.hint').show()
|
||||
$('.build-new-wiki').bind 'click', (e) =>
|
||||
$('[data-error~=slug]').addClass('hidden')
|
||||
field = $('#new_wiki_path')
|
||||
valid_slug_pattern = /^[\w\/-]+$/
|
||||
slug = @slugify(field.val())
|
||||
|
||||
slug = field.val()
|
||||
if slug.match valid_slug_pattern
|
||||
if (slug.length > 0)
|
||||
path = field.attr('data-wikis-path')
|
||||
if(slug.length > 0)
|
||||
location.href = path + "/" + slug
|
||||
else
|
||||
e.preventDefault()
|
||||
$('p.hint').hide()
|
||||
$('[data-error~=slug]').removeClass("hidden")
|
||||
location.href = path + '/' + slug
|
||||
|
||||
dasherize: (value) ->
|
||||
value.replace(/[_\s]+/g, '-')
|
||||
|
||||
slugify: (value) =>
|
||||
@dasherize(value.trim().toLowerCase().latinise())
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
@import "framework/lists.scss";
|
||||
@import "framework/markdown_area.scss";
|
||||
@import "framework/mobile.scss";
|
||||
@import "framework/nav.scss";
|
||||
@import "framework/pagination.scss";
|
||||
@import "framework/panels.scss";
|
||||
@import "framework/selects.scss";
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@
|
|||
line-height: 36px;
|
||||
}
|
||||
|
||||
.content-block,
|
||||
.gray-content-block {
|
||||
margin: -$gl-padding;
|
||||
margin-top: 0;
|
||||
margin-bottom: -$gl-padding;
|
||||
background-color: $background-color;
|
||||
padding: $gl-padding;
|
||||
margin-bottom: 0px;
|
||||
|
|
@ -86,10 +86,7 @@
|
|||
.cover-block {
|
||||
text-align: center;
|
||||
background: $background-color;
|
||||
margin: -$gl-padding;
|
||||
margin-bottom: 0;
|
||||
padding: 44px $gl-padding;
|
||||
border-bottom: 1px solid $border-color;
|
||||
padding-top: 44px;
|
||||
position: relative;
|
||||
|
||||
.avatar-holder {
|
||||
|
|
@ -136,3 +133,19 @@
|
|||
.block-connector {
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.nav-block {
|
||||
.controls {
|
||||
float: right;
|
||||
margin-top: 11px;
|
||||
}
|
||||
}
|
||||
|
||||
.content-block {
|
||||
padding: $gl-padding 0;
|
||||
border-bottom: 1px solid $border-color;
|
||||
|
||||
&.oneline-block {
|
||||
line-height: 42px;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,8 @@
|
|||
@mixin btn-default {
|
||||
@include border-radius(3px);
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
font-size: 15px;
|
||||
font-size: $gl-font-size;
|
||||
font-weight: 500;
|
||||
line-height: 18px;
|
||||
padding: 11px $gl-padding;
|
||||
letter-spacing: .4px;
|
||||
padding: $gl-vert-padding $gl-padding;
|
||||
|
||||
&:focus,
|
||||
&:active {
|
||||
|
|
@ -17,8 +13,6 @@
|
|||
|
||||
@mixin btn-middle {
|
||||
@include btn-default;
|
||||
@include border-radius(3px);
|
||||
padding: 11px 24px;
|
||||
}
|
||||
|
||||
@mixin btn-color($light, $border-light, $normal, $border-normal, $dark, $border-dark, $color) {
|
||||
|
|
@ -74,16 +68,15 @@
|
|||
@include btn-default;
|
||||
@include btn-white;
|
||||
|
||||
&.btn-small,
|
||||
&.btn-sm {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
&.btn-nr {
|
||||
padding: 7px 10px;
|
||||
padding: 4px 10px;
|
||||
font-size: 13px;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
&.btn-xs {
|
||||
padding: 1px 5px;
|
||||
padding: 2px 5px;
|
||||
}
|
||||
|
||||
&.btn-success,
|
||||
|
|
@ -131,6 +124,12 @@
|
|||
&:last-child {
|
||||
margin-right: 0px;
|
||||
}
|
||||
&.btn-xs {
|
||||
margin-right: 3px;
|
||||
}
|
||||
}
|
||||
&.disabled {
|
||||
pointer-events: auto !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -153,33 +152,42 @@
|
|||
}
|
||||
}
|
||||
|
||||
.btn-group-next {
|
||||
.btn {
|
||||
padding: 9px 0px;
|
||||
font-size: 15px;
|
||||
color: #7f8fa4;
|
||||
border-color: #e7e9ed;
|
||||
width: 140px;
|
||||
|
||||
.badge {
|
||||
font-weight: normal;
|
||||
background-color: #eee;
|
||||
color: #78a;
|
||||
}
|
||||
|
||||
&.active {
|
||||
border-color: $gl-info;
|
||||
background: $gl-info;
|
||||
color: #fff;
|
||||
|
||||
.badge {
|
||||
color: $gl-info;
|
||||
background-color: white;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-clipboard {
|
||||
border: none;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.input-group-btn {
|
||||
.btn {
|
||||
@include btn-gray;
|
||||
@include btn-middle;
|
||||
|
||||
&:hover {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&:active {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&.btn-clipboard {
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.active {
|
||||
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||
|
||||
border: 1px solid #c6cacf !important;
|
||||
background-color: #e4e7ed !important;
|
||||
}
|
||||
|
||||
.btn-green {
|
||||
@include btn-green
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,6 +75,8 @@ hr {
|
|||
@include str-truncated;
|
||||
}
|
||||
|
||||
.item-title { font-weight: 600; }
|
||||
|
||||
/** FLASH message **/
|
||||
.author_link {
|
||||
color: $gl-link-color;
|
||||
|
|
@ -374,75 +376,6 @@ table {
|
|||
}
|
||||
}
|
||||
|
||||
.center-top-menu, .left-top-menu {
|
||||
@include nav-menu;
|
||||
text-align: center;
|
||||
margin-top: 5px;
|
||||
margin-bottom: $gl-padding;
|
||||
height: auto;
|
||||
margin-top: -$gl-padding;
|
||||
|
||||
&.no-bottom {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&.no-top {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
li a {
|
||||
display: inline-block;
|
||||
padding-top: $gl-padding;
|
||||
padding-bottom: 11px;
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
|
||||
&.bottom-border {
|
||||
border-bottom: 1px solid $border-color;
|
||||
height: 57px;
|
||||
}
|
||||
|
||||
&.wide {
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
}
|
||||
}
|
||||
|
||||
.left-top-menu {
|
||||
text-align: left;
|
||||
border-bottom: 1px solid #EEE;
|
||||
}
|
||||
|
||||
.center-middle-menu {
|
||||
@include nav-menu;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
margin: -$gl-padding;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
height: 58px;
|
||||
border-bottom: 1px solid $border-color;
|
||||
|
||||
li {
|
||||
&:after {
|
||||
content: "|";
|
||||
color: $border-gray-light;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
&:after {
|
||||
content: none;
|
||||
}
|
||||
}
|
||||
|
||||
> a {
|
||||
display: inline-block;
|
||||
text-transform: uppercase;
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dropzone .dz-preview .dz-progress {
|
||||
border-color: $border-color !important;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,11 +3,8 @@
|
|||
*
|
||||
*/
|
||||
.file-holder {
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
border: none;
|
||||
border-top: 1px solid #E7E9EE;
|
||||
border-bottom: 1px solid #E7E9EE;
|
||||
border: 1px solid $border-color;
|
||||
|
||||
&.readme-holder {
|
||||
border-bottom: 0;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
.filter-item {
|
||||
margin-right: 15px;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
@media (min-width: 800px) {
|
||||
|
|
|
|||
|
|
@ -8,10 +8,12 @@
|
|||
.flash-notice {
|
||||
@extend .alert;
|
||||
@extend .alert-info;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.flash-alert {
|
||||
@extend .alert;
|
||||
@extend .alert-danger;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,23 +3,39 @@
|
|||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), font-url('SourceSansPro-Light.ttf.woff');
|
||||
src:
|
||||
local('Source Sans Pro Light'),
|
||||
local('SourceSansPro-Light'),
|
||||
font-url('SourceSansPro-Light.ttf.woff2') format('woff2'),
|
||||
font-url('SourceSansPro-Light.ttf.woff') format('woff');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro'), local('SourceSansPro-Regular'), font-url('SourceSansPro-Regular.ttf.woff');
|
||||
src:
|
||||
local('Source Sans Pro'),
|
||||
local('SourceSansPro-Regular'),
|
||||
font-url('SourceSansPro-Regular.ttf.woff2') format('woff2'),
|
||||
font-url('SourceSansPro-Regular.ttf.woff') format('woff');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro Semibold'), local('SourceSansPro-Semibold'), font-url('SourceSansPro-Semibold.ttf.woff');
|
||||
src:
|
||||
local('Source Sans Pro Semibold'),
|
||||
local('SourceSansPro-Semibold'),
|
||||
font-url('SourceSansPro-Semibold.ttf.woff2') format('woff2'),
|
||||
font-url('SourceSansPro-Semibold.ttf.woff') format('woff');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), font-url('SourceSansPro-Bold.ttf.woff');
|
||||
src:
|
||||
local('Source Sans Pro Bold'),
|
||||
local('SourceSansPro-Bold'),
|
||||
font-url('SourceSansPro-Bold.ttf.woff2') format('woff2'),
|
||||
font-url('SourceSansPro-Bold.ttf.woff') format('woff');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,8 +74,10 @@ label {
|
|||
|
||||
.form-control {
|
||||
@include box-shadow(none);
|
||||
height: 42px;
|
||||
padding: 8px $gl-padding;
|
||||
}
|
||||
|
||||
.form-control-inline {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.wiki-content {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ header {
|
|||
min-height: $header-height;
|
||||
background-color: #fff;
|
||||
border: none;
|
||||
border-bottom: 1px solid #EEE;
|
||||
|
||||
.container-fluid {
|
||||
width: 100% !important;
|
||||
|
|
|
|||
|
|
@ -53,3 +53,14 @@
|
|||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.ui-sortable-handle {
|
||||
cursor: move;
|
||||
cursor: -webkit-grab;
|
||||
cursor: -moz-grab;
|
||||
|
||||
&:active {
|
||||
cursor: -webkit-grabbing;
|
||||
cursor: -moz-grabbing;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@ html {
|
|||
}
|
||||
|
||||
body {
|
||||
background-color: #F3F3F3 !important;
|
||||
|
||||
&.navless {
|
||||
background-color: white !important;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@
|
|||
|
||||
|
||||
/** light list with border-bottom between li **/
|
||||
ul.bordered-list {
|
||||
ul.bordered-list, ul.unstyled-list {
|
||||
@include basic-list;
|
||||
|
||||
&.top-list {
|
||||
|
|
@ -88,6 +88,10 @@ ul.bordered-list {
|
|||
}
|
||||
}
|
||||
|
||||
ul.unstyled-list > li {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
ul.task-list {
|
||||
li.task-list-item {
|
||||
list-style-type: none;
|
||||
|
|
@ -105,10 +109,8 @@ ul.content-list {
|
|||
padding: 0;
|
||||
|
||||
> li {
|
||||
padding: $gl-padding;
|
||||
padding: $gl-padding 0;
|
||||
border-color: $table-border-color;
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
color: $gl-gray;
|
||||
|
||||
.avatar {
|
||||
|
|
@ -129,6 +131,7 @@ ul.content-list {
|
|||
.panel > .content-list {
|
||||
li {
|
||||
margin: 0;
|
||||
padding: $gl-padding;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -144,7 +147,7 @@ ul.controls {
|
|||
> li {
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
|
||||
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,13 +65,6 @@
|
|||
position: relative;
|
||||
}
|
||||
|
||||
.md-header {
|
||||
ul {
|
||||
float: left;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
}
|
||||
|
||||
.referenced-users {
|
||||
color: #4c4e54;
|
||||
padding-top: 10px;
|
||||
|
|
@ -85,28 +78,12 @@
|
|||
box-shadow: none;
|
||||
}
|
||||
|
||||
.new_note,
|
||||
.edit_note,
|
||||
.detail-page-description,
|
||||
.milestone-description,
|
||||
.wiki-content,
|
||||
.merge-request-form {
|
||||
.nav-tabs {
|
||||
margin-bottom: 0;
|
||||
border: none;
|
||||
|
||||
li a,
|
||||
li.active a {
|
||||
border: 1px solid #DDD;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.markdown-area {
|
||||
@include border-radius(0);
|
||||
background: #FFF;
|
||||
border: 1px solid #ddd;
|
||||
min-height: 140px;
|
||||
max-height: 430px;
|
||||
padding: 5px;
|
||||
box-shadow: none;
|
||||
width: 100%;
|
||||
|
|
|
|||
|
|
@ -118,38 +118,3 @@
|
|||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
@mixin nav-menu {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
height: 56px;
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
|
||||
a {
|
||||
padding: 14px;
|
||||
font-size: 15px;
|
||||
line-height: 28px;
|
||||
color: #959494;
|
||||
border-bottom: 2px solid transparent;
|
||||
|
||||
&:hover, &:active, &:focus {
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.active a {
|
||||
color: #616060;
|
||||
border-bottom: 2px solid #4688f1;
|
||||
}
|
||||
|
||||
.badge {
|
||||
font-weight: normal;
|
||||
background-color: #eee;
|
||||
color: #78a;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.nav.nav-tabs > li > a {
|
||||
.nav-links > li > a {
|
||||
padding: 10px;
|
||||
font-size: 12px;
|
||||
margin-right: 3px;
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
display: none;
|
||||
}
|
||||
|
||||
.center-top-menu, .left-top-menu {
|
||||
.nav-links, .nav-links {
|
||||
li a {
|
||||
font-size: 14px;
|
||||
padding: 19px 10px;
|
||||
|
|
@ -100,11 +100,6 @@
|
|||
}
|
||||
|
||||
@media (max-width: $screen-sm-max) {
|
||||
.page-with-sidebar .content-wrapper {
|
||||
padding: 0;
|
||||
padding-top: 1px;
|
||||
}
|
||||
|
||||
.issues-filters {
|
||||
.milestone-filter, .labels-filter {
|
||||
display: none;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
.nav-links {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
height: auto;
|
||||
border-bottom: 1px solid $border-color;
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
|
||||
a {
|
||||
display: inline-block;
|
||||
padding: 14px;
|
||||
padding-top: $gl-padding;
|
||||
padding-bottom: 11px;
|
||||
margin-bottom: -1px;
|
||||
font-size: 15px;
|
||||
line-height: 28px;
|
||||
color: #959494;
|
||||
border-bottom: 2px solid transparent;
|
||||
|
||||
&:hover, &:active, &:focus {
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.active a {
|
||||
color: #000000;
|
||||
border-bottom: 2px solid #4688f1;
|
||||
}
|
||||
|
||||
.badge {
|
||||
font-weight: normal;
|
||||
background-color: #eee;
|
||||
color: #78a;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +1,11 @@
|
|||
.gl-pagination {
|
||||
text-align: center;
|
||||
border-top: 1px solid $border-color;
|
||||
background-color: $background-color;
|
||||
margin: -$gl-padding;
|
||||
margin: 0;
|
||||
margin-top: 0;
|
||||
|
||||
.pagination {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: block;
|
||||
|
||||
li.first,
|
||||
li.last,
|
||||
li.next,
|
||||
li.prev {
|
||||
> a {
|
||||
color: $link-color;
|
||||
|
||||
&:hover {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
li > a,
|
||||
li > span {
|
||||
border: none;
|
||||
margin: 0;
|
||||
@include border-radius(0 !important);
|
||||
padding: 13px 19px;
|
||||
border-right: 1px solid $border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
.select2-choice {
|
||||
background: #FFF;
|
||||
border-color: #DDD;
|
||||
height: 42px;
|
||||
padding: 8px $gl-padding;
|
||||
height: 36px;
|
||||
padding: 6px $gl-padding;
|
||||
font-size: $gl-font-size;
|
||||
line-height: 1.42857143;
|
||||
|
||||
|
|
|
|||
|
|
@ -21,11 +21,10 @@
|
|||
|
||||
.content-wrapper {
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
|
||||
.container-fluid {
|
||||
background: #FFF;
|
||||
padding: $gl-padding;
|
||||
padding: 0 $gl-padding;
|
||||
|
||||
&.container-blank {
|
||||
background: none;
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
.table-holder {
|
||||
margin: -$gl-padding;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
table {
|
||||
&.table {
|
||||
margin-bottom: $gl-padding;
|
||||
|
||||
|
||||
.dropdown-menu a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
|
@ -32,6 +30,7 @@ table {
|
|||
}
|
||||
|
||||
th {
|
||||
background-color: $background-color;
|
||||
font-weight: normal;
|
||||
font-size: 15px;
|
||||
border-bottom: 1px solid $border-color !important;
|
||||
|
|
|
|||
|
|
@ -5,10 +5,8 @@
|
|||
padding: 0;
|
||||
|
||||
.timeline-entry {
|
||||
padding: $gl-padding;
|
||||
padding: $gl-padding 0;
|
||||
border-color: $table-border-color;
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
color: $gl-gray;
|
||||
border-bottom: 1px solid $border-white-light;
|
||||
|
||||
|
|
|
|||
|
|
@ -99,47 +99,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
// Nav tabs
|
||||
.nav.nav-tabs {
|
||||
margin-bottom: 15px;
|
||||
|
||||
li {
|
||||
> a {
|
||||
margin-right: 5px;
|
||||
line-height: 20px;
|
||||
border-color: #EEE;
|
||||
color: #888;
|
||||
border-bottom: 1px solid #ddd;
|
||||
.badge {
|
||||
background-color: #eee;
|
||||
color: #888;
|
||||
text-shadow: 0 1px 1px #fff;
|
||||
}
|
||||
i.fa {
|
||||
line-height: 14px;
|
||||
}
|
||||
}
|
||||
&.active {
|
||||
> a {
|
||||
border-color: #CCC;
|
||||
border-bottom: 1px solid #fff;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav-tabs > li > a,
|
||||
.nav-pills > li > a {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.nav-pills > .active > a > span > .badge {
|
||||
background-color: #fff;
|
||||
color: $gl-primary;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* fix to keep tooltips position in top navigation bar
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ $font-size-base: $gl-font-size;
|
|||
//
|
||||
//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
|
||||
|
||||
$padding-base-vertical: 9px;
|
||||
$padding-base-vertical: $gl-vert-padding;
|
||||
$padding-base-horizontal: $gl-padding;
|
||||
$component-active-color: #fff;
|
||||
$component-active-bg: $brand-info;
|
||||
|
|
@ -66,20 +66,20 @@ $legend-color: $text-color;
|
|||
//##
|
||||
|
||||
$pagination-color: $gl-gray;
|
||||
$pagination-bg: $background-color;
|
||||
$pagination-border: transparent;
|
||||
$pagination-bg: #fff;
|
||||
$pagination-border: $border-color;
|
||||
|
||||
$pagination-hover-color: #fff;
|
||||
$pagination-hover-bg: $brand-info;
|
||||
$pagination-hover-border: transparent;
|
||||
$pagination-hover-color: $gl-gray;
|
||||
$pagination-hover-bg: $hover;
|
||||
$pagination-hover-border: $border-color;
|
||||
|
||||
$pagination-active-color: #fff;
|
||||
$pagination-active-bg: $brand-info;
|
||||
$pagination-active-border: transparent;
|
||||
$pagination-active-color: $blue-dark;
|
||||
$pagination-active-bg: #fff;
|
||||
$pagination-active-border: $border-color;
|
||||
|
||||
$pagination-disabled-color: #fff;
|
||||
$pagination-disabled-bg: lighten($brand-info, 15%);
|
||||
$pagination-disabled-border: transparent;
|
||||
$pagination-disabled-color: #cdcdcd;
|
||||
$pagination-disabled-bg: $background-color;
|
||||
$pagination-disabled-border: $border-color;
|
||||
|
||||
|
||||
//== Form states and alerts
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ body {
|
|||
}
|
||||
|
||||
.page-title {
|
||||
margin-top: 0px;
|
||||
margin-top: $gl-padding;
|
||||
line-height: 1.3;
|
||||
font-size: 1.25em;
|
||||
font-weight: 600;
|
||||
|
|
|
|||
|
|
@ -22,8 +22,11 @@ $header-height: 58px;
|
|||
$fixed-layout-width: 1280px;
|
||||
$gl-gray: #5a5a5a;
|
||||
$gl-padding: 16px;
|
||||
$gl-vert-padding: 6px;
|
||||
$gl-padding-top:10px;
|
||||
$gl-avatar-size: 46px;
|
||||
$secondary-text: #7f8fa4;
|
||||
$error-exclamation-point: #E62958;
|
||||
|
||||
/*
|
||||
* Color schema
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
position: absolute;
|
||||
top: 0px;
|
||||
right: 4px;
|
||||
line-height: 40px;
|
||||
line-height: 56px;
|
||||
}
|
||||
|
||||
a.js-zen-leave {
|
||||
|
|
|
|||
|
|
@ -90,4 +90,22 @@
|
|||
.vg { color: #cc6666 } /* Name.Variable.Global */
|
||||
.vi { color: #cc6666 } /* Name.Variable.Instance */
|
||||
.il { color: #de935f } /* Literal.Number.Integer.Long */
|
||||
|
||||
.line_holder {
|
||||
&.parallel .new.new_line,
|
||||
&.parallel .new.line_content,
|
||||
&.new .old_line,
|
||||
&.new .new_line,
|
||||
&.new .line_content {
|
||||
@include diff_background(255, 255, 255, #808080);
|
||||
}
|
||||
|
||||
&.parallel .old.old_line,
|
||||
&.parallel .old.line_content,
|
||||
&.old .old_line,
|
||||
&.old .new_line,
|
||||
&.old .line_content {
|
||||
@include diff_background(255, 51, 51, #808080);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,4 +90,22 @@
|
|||
.gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */
|
||||
.gd { color: #f92672; } /* Generic.Deleted & Diff Deleted */
|
||||
.gi { color: #a6e22e; } /* Generic.Inserted & Diff Inserted */
|
||||
|
||||
.line_holder {
|
||||
&.parallel .new.new_line,
|
||||
&.parallel .new.line_content,
|
||||
&.new .old_line,
|
||||
&.new .new_line,
|
||||
&.new .line_content {
|
||||
@include diff_background(156, 175, 183, #808080);
|
||||
}
|
||||
|
||||
&.parallel .old.old_line,
|
||||
&.parallel .old.line_content,
|
||||
&.old .old_line,
|
||||
&.old .new_line,
|
||||
&.old .line_content {
|
||||
@include diff_background(254, 147, 140, #808080);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,4 +111,22 @@
|
|||
.vg { color: #268bd2 } /* Name.Variable.Global */
|
||||
.vi { color: #268bd2 } /* Name.Variable.Instance */
|
||||
.il { color: #2aa198 } /* Literal.Number.Integer.Long */
|
||||
|
||||
.line_holder {
|
||||
&.parallel .new.new_line,
|
||||
&.parallel .new.line_content,
|
||||
&.new .old_line,
|
||||
&.new .new_line,
|
||||
&.new .line_content {
|
||||
@include diff_background(255, 255, 255, #808080);
|
||||
}
|
||||
|
||||
&.parallel .old.old_line,
|
||||
&.parallel .old.line_content,
|
||||
&.old .old_line,
|
||||
&.old .new_line,
|
||||
&.old .line_content {
|
||||
@include diff_background(255, 51, 51, #808080);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,4 +111,23 @@
|
|||
.vg { color: #268bd2 } /* Name.Variable.Global */
|
||||
.vi { color: #268bd2 } /* Name.Variable.Instance */
|
||||
.il { color: #2aa198 } /* Literal.Number.Integer.Long */
|
||||
|
||||
|
||||
.line_holder {
|
||||
&.parallel .new.new_line,
|
||||
&.parallel .new.line_content,
|
||||
&.new .old_line,
|
||||
&.new .new_line,
|
||||
&.new .line_content {
|
||||
@include diff_background(92, 164, 169, #FAF3DD);
|
||||
}
|
||||
|
||||
&.parallel .old.old_line,
|
||||
&.parallel .old.line_content,
|
||||
&.old .old_line,
|
||||
&.old .new_line,
|
||||
&.old .line_content {
|
||||
@include diff_background(237, 106, 90, #FAF3DD);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@
|
|||
}
|
||||
|
||||
.commit-box {
|
||||
border-top: 1px solid $border-color;
|
||||
|
||||
.commit-title {
|
||||
margin: 0;
|
||||
font-size: 23px;
|
||||
|
|
|
|||
|
|
@ -36,6 +36,10 @@ li.commit {
|
|||
line-height: 20px;
|
||||
margin-bottom: 2px;
|
||||
|
||||
.btn-clipboard {
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.notes_count {
|
||||
float: right;
|
||||
margin-right: 10px;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
.detail-page-header {
|
||||
margin: -$gl-padding;
|
||||
padding: 7px $gl-padding;
|
||||
margin-bottom: 0px;
|
||||
padding: 11px 0;
|
||||
border-bottom: 1px solid $border-color;
|
||||
color: #5c5d5e;
|
||||
font-size: 16px;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
// Common
|
||||
.diff-file {
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
border: none;
|
||||
border-bottom: 1px solid #E7E9EE;
|
||||
border: 1px solid $border-color;
|
||||
border-top: none;
|
||||
|
||||
.diff-header {
|
||||
position: relative;
|
||||
|
|
@ -23,14 +21,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.diff-controls {
|
||||
.btn {
|
||||
padding: 0px 10px;
|
||||
font-size: 13px;
|
||||
line-height: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
.commit-short-id {
|
||||
font-family: $monospace_font;
|
||||
font-size: smaller;
|
||||
|
|
@ -76,6 +66,7 @@
|
|||
width: 100%;
|
||||
font-family: $monospace_font;
|
||||
border: none;
|
||||
border-collapse: separate;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
.line_holder td {
|
||||
|
|
@ -402,3 +393,18 @@
|
|||
right: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin diff_background($r, $g, $b, $custom-border) {
|
||||
/* Fallback for web browsers that doesn't support RGBa */
|
||||
background: rgb($r, $g, $b);
|
||||
/* RGBa with 0.3 opacity */
|
||||
background: rgba($r, $g, $b, 0.3);
|
||||
|
||||
&.new_line, &.old_line {
|
||||
border-right-color: $custom-border !important;
|
||||
}
|
||||
|
||||
&.line_content span.idiff {
|
||||
background: rgb($r, $g, $b);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,9 +4,7 @@
|
|||
*/
|
||||
.event-item {
|
||||
font-size: $gl-font-size;
|
||||
padding: $gl-padding $gl-padding $gl-padding ($gl-padding + $gl-avatar-size + 15px);
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
padding: $gl-padding 0 $gl-padding ($gl-avatar-size + 15px);
|
||||
border-bottom: 1px solid $table-border-color;
|
||||
color: #7f8fa4;
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,11 @@
|
|||
position: fixed;
|
||||
top: 70px;
|
||||
margin-right: 35px;
|
||||
|
||||
&.no-affix {
|
||||
position: relative;
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -27,10 +32,10 @@
|
|||
.project-issuable-filter {
|
||||
.controls {
|
||||
float: right;
|
||||
margin-top: 7px;
|
||||
margin-top: 11px;
|
||||
}
|
||||
|
||||
.center-top-menu {
|
||||
.nav-links {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
|
@ -95,7 +100,7 @@
|
|||
|
||||
.cross-project-reference {
|
||||
color: $gl-link-color;
|
||||
|
||||
|
||||
span {
|
||||
white-space: nowrap;
|
||||
width: 85%;
|
||||
|
|
@ -105,8 +110,13 @@
|
|||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
cite {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
button {
|
||||
float: right;
|
||||
padding: 3px 5px;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
.issue-title {
|
||||
margin-bottom: 5px;
|
||||
font-size: $list-font-size;
|
||||
font-weight: bold;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.issue-info {
|
||||
|
|
@ -144,3 +144,8 @@ form.edit-issue {
|
|||
.issue-form .select2-container {
|
||||
width: 250px !important;
|
||||
}
|
||||
|
||||
.issue-closed-by-widget {
|
||||
color: $secondary-text;
|
||||
margin-left: 52px;
|
||||
}
|
||||
|
|
@ -3,9 +3,9 @@
|
|||
*
|
||||
*/
|
||||
.mr-state-widget {
|
||||
background: #F7F8FA;
|
||||
background: $background-color;
|
||||
color: $gl-gray;
|
||||
border: 1px solid #dce0e6;
|
||||
border: 1px solid $border-color;
|
||||
@include border-radius(2px);
|
||||
|
||||
form {
|
||||
|
|
@ -150,7 +150,7 @@
|
|||
.merge-request-title {
|
||||
margin-bottom: 5px;
|
||||
font-size: $list-font-size;
|
||||
font-weight: bold;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.merge-request-info {
|
||||
|
|
@ -201,3 +201,39 @@
|
|||
.mr-source-target {
|
||||
line-height: 31px;
|
||||
}
|
||||
|
||||
.disabled-comment-area {
|
||||
padding: 16px 0;
|
||||
|
||||
.disabled-profile {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
background: $border-gray-dark;
|
||||
border-radius: 20px;
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.disabled-comment {
|
||||
background: $gray-light;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
height: 200px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid $border-gray-normal;
|
||||
padding-top: 90px;
|
||||
text-align: center;
|
||||
right: 20px;
|
||||
position: absolute;
|
||||
left: 70px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
span {
|
||||
color: #B2B2B2;
|
||||
|
||||
a {
|
||||
color: $md-link-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -159,6 +159,7 @@
|
|||
.edit_note {
|
||||
.markdown-area {
|
||||
min-height: 140px;
|
||||
max-height: 430px;
|
||||
}
|
||||
.note-form-actions {
|
||||
background: transparent;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@
|
|||
}
|
||||
|
||||
.project-home-panel {
|
||||
padding-bottom: 40px;
|
||||
border-bottom: 1px solid $border-color;
|
||||
|
||||
.cover-controls {
|
||||
.project-settings-dropdown {
|
||||
|
|
@ -51,6 +53,8 @@
|
|||
}
|
||||
|
||||
.notifications-btn {
|
||||
margin-top: -28px;
|
||||
|
||||
.fa-bell {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
|
@ -75,17 +79,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.git-clone-holder {
|
||||
max-width: 498px;
|
||||
|
||||
.form-control {
|
||||
background: #FFF;
|
||||
font-size: 14px;
|
||||
height: 42px;
|
||||
margin-left: -1px;
|
||||
}
|
||||
}
|
||||
|
||||
.visibility-level-label {
|
||||
@extend .btn;
|
||||
@extend .btn-gray;
|
||||
|
|
@ -98,24 +91,31 @@
|
|||
}
|
||||
}
|
||||
|
||||
.git-clone-holder {
|
||||
display: inline-table;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.project-repo-buttons {
|
||||
margin-top: 12px;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 0px;
|
||||
|
||||
.count-buttons {
|
||||
display: block;
|
||||
margin-bottom: 12px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.clone-row {
|
||||
.split-repo-buttons,
|
||||
.project-clone-holder {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.split-repo-buttons {
|
||||
margin: 0 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
@include btn-gray;
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
.count-with-arrow {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
|
|
@ -160,10 +160,10 @@
|
|||
border-style: solid;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
line-height: 20px;
|
||||
padding: 11px 16px;
|
||||
line-height: 13px;
|
||||
padding: $gl-vert-padding $gl-padding;
|
||||
letter-spacing: .4px;
|
||||
padding: 10px;
|
||||
padding: 10px 14px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
touch-action: manipulation;
|
||||
|
|
@ -189,118 +189,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.git-clone-holder {
|
||||
.project-home-dropdown + & {
|
||||
margin-right: 45px;
|
||||
}
|
||||
|
||||
.clone-options {
|
||||
display: table-cell;
|
||||
a.btn {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.form-control {
|
||||
cursor: auto;
|
||||
@extend .monospace;
|
||||
background: #FAFAFA;
|
||||
width: 101%;
|
||||
}
|
||||
|
||||
.input-group-addon {
|
||||
background: #f7f8fa;
|
||||
|
||||
&.git-protocols {
|
||||
padding: 0;
|
||||
border: none;
|
||||
|
||||
.input-group-btn:last-child > .btn {
|
||||
@include border-radius-right(0);
|
||||
|
||||
border-left: 1px solid #c6cacf;
|
||||
margin-left: -2px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.projects-search-form {
|
||||
|
||||
.input-group .form-control {
|
||||
height: 42px;
|
||||
}
|
||||
}
|
||||
|
||||
.input-group-btn {
|
||||
.btn {
|
||||
@include btn-gray;
|
||||
@include btn-middle;
|
||||
|
||||
&:hover {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&:active {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&.btn-clipboard {
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.active {
|
||||
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||
|
||||
border: 1px solid #c6cacf !important;
|
||||
background-color: #e4e7ed !important;
|
||||
}
|
||||
|
||||
.btn-green {
|
||||
@include btn-green
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.split-repo-buttons {
|
||||
display: inline-table;
|
||||
margin: 0 12px 0 12px;
|
||||
|
||||
.btn{
|
||||
@include btn-gray;
|
||||
@include btn-default;
|
||||
}
|
||||
|
||||
.dropdown-toggle {
|
||||
margin: -5px;
|
||||
}
|
||||
}
|
||||
|
||||
#notification-form {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.dropdown-new {
|
||||
margin-left: -5px;
|
||||
}
|
||||
|
||||
.open > .dropdown-new.btn {
|
||||
@include box-shadow(inset 0 0 4px rgba(0, 0, 0, 0.12));
|
||||
|
||||
border: 1px solid #c6cacf !important;
|
||||
background-color: #e4e7ed !important;
|
||||
text-transform: uppercase;
|
||||
color: #313236 !important;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
@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);
|
||||
|
|
@ -352,28 +240,6 @@
|
|||
color: #555;
|
||||
}
|
||||
|
||||
ul.nav.nav-projects-tabs {
|
||||
@extend .nav-tabs;
|
||||
|
||||
padding-left: 8px;
|
||||
|
||||
li {
|
||||
a {
|
||||
padding: 6px 25px;
|
||||
margin-top: 2px;
|
||||
border-color: #DDD;
|
||||
background-color: #EEE;
|
||||
text-shadow: 0 1px 1px white;
|
||||
color: #555;
|
||||
}
|
||||
&.active {
|
||||
a {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.project_member_row form {
|
||||
margin: 0px;
|
||||
}
|
||||
|
|
@ -400,9 +266,9 @@ ul.nav.nav-projects-tabs {
|
|||
|
||||
.breadcrumb.repo-breadcrumb {
|
||||
padding: 0;
|
||||
line-height: 42px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
line-height: 42px;
|
||||
margin: 0;
|
||||
|
||||
> li + li:before {
|
||||
|
|
@ -417,11 +283,8 @@ ul.nav.nav-projects-tabs {
|
|||
|
||||
.top-area {
|
||||
border-bottom: 1px solid #EEE;
|
||||
margin: 0 -16px;
|
||||
padding: 0 $gl-padding;
|
||||
height: 42px;
|
||||
|
||||
ul.left-top-menu {
|
||||
ul.nav-links {
|
||||
display: inline-block;
|
||||
width: 50%;
|
||||
margin-bottom: 0px;
|
||||
|
|
@ -432,12 +295,12 @@ ul.nav.nav-projects-tabs {
|
|||
width: 50%;
|
||||
display: inline-block;
|
||||
float: right;
|
||||
padding-top: 7px;
|
||||
padding-top: 11px;
|
||||
text-align: right;
|
||||
|
||||
.btn-green {
|
||||
margin-top: -2px;
|
||||
margin-left: 10px;
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -483,11 +346,11 @@ table.table.protected-branches-list tr.no-border {
|
|||
padding-top: 10px;
|
||||
padding-bottom: 4px;
|
||||
|
||||
ul.nav-pills {
|
||||
ul.nav {
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
.nav-pills li {
|
||||
.nav li {
|
||||
display:inline;
|
||||
}
|
||||
|
||||
|
|
@ -524,8 +387,7 @@ pre.light-well {
|
|||
}
|
||||
|
||||
.projects-search-form {
|
||||
margin: -$gl-padding;
|
||||
padding: $gl-padding;
|
||||
padding: $gl-padding 0;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0px;
|
||||
|
||||
|
|
@ -575,10 +437,8 @@ pre.light-well {
|
|||
@include basic-list;
|
||||
|
||||
.project-row {
|
||||
padding: $gl-padding;
|
||||
padding: $gl-padding 0;
|
||||
border-color: $table-border-color;
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
|
||||
&.no-description {
|
||||
.project {
|
||||
|
|
@ -632,8 +492,6 @@ pre.light-well {
|
|||
}
|
||||
|
||||
.project-last-commit {
|
||||
margin: 0 7px;
|
||||
|
||||
.ci-status {
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
|
@ -663,9 +521,7 @@ pre.light-well {
|
|||
}
|
||||
|
||||
.project-show-readme .readme-holder {
|
||||
margin-left: -$gl-padding;
|
||||
margin-right: -$gl-padding;
|
||||
padding: ($gl-padding + 7px);
|
||||
padding: $gl-padding 0;
|
||||
border-top: 0;
|
||||
|
||||
.edit-project-readme {
|
||||
|
|
@ -673,3 +529,38 @@ pre.light-well {
|
|||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
.git-clone-holder {
|
||||
width: 498px;
|
||||
|
||||
.btn-clipboard {
|
||||
border: 1px solid $border-color;
|
||||
padding: 6px $gl-padding;
|
||||
}
|
||||
|
||||
.project-home-dropdown + & {
|
||||
margin-right: 45px;
|
||||
}
|
||||
|
||||
.clone-options {
|
||||
display: table-cell;
|
||||
a.btn {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.form-control {
|
||||
@extend .monospace;
|
||||
background: #FFF;
|
||||
font-size: 14px;
|
||||
margin-left: -1px;
|
||||
cursor: auto;
|
||||
width: 101%;
|
||||
}
|
||||
}
|
||||
|
||||
.cannot-be-merged,
|
||||
.cannot-be-merged:hover {
|
||||
color: #E62958;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
.tree-holder {
|
||||
> .nav-block {
|
||||
margin: 11px 0;
|
||||
}
|
||||
|
||||
.file-finder {
|
||||
width: 50%;
|
||||
|
|
@ -13,7 +16,7 @@
|
|||
|
||||
tr {
|
||||
> td, > th {
|
||||
line-height: 28px;
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
|
@ -86,12 +89,14 @@
|
|||
|
||||
.blob-commit-info {
|
||||
list-style: none;
|
||||
padding: $gl-padding;
|
||||
background: $background-color;
|
||||
border: 1px solid $border-color;
|
||||
border-bottom: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-bottom: 5px;
|
||||
|
||||
.commit {
|
||||
padding: $gl-padding 0;
|
||||
padding: 0;
|
||||
|
||||
.commit-row-title {
|
||||
.commit-row-message {
|
||||
|
|
@ -115,3 +120,8 @@
|
|||
font-weight: normal;
|
||||
color: $md-link-color;
|
||||
}
|
||||
|
||||
.tree-controls {
|
||||
float: right;
|
||||
margin-top: 11px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ class AbuseReportsController < ApplicationController
|
|||
def new
|
||||
@abuse_report = AbuseReport.new
|
||||
@abuse_report.user_id = params[:user_id]
|
||||
@ref_url = params.fetch(:ref_url, '')
|
||||
end
|
||||
|
||||
def create
|
||||
|
|
|
|||
|
|
@ -6,11 +6,9 @@ class Admin::AbuseReportsController < Admin::ApplicationController
|
|||
def destroy
|
||||
abuse_report = AbuseReport.find(params[:id])
|
||||
|
||||
if params[:remove_user]
|
||||
abuse_report.user.destroy
|
||||
end
|
||||
|
||||
abuse_report.remove_user if params[:remove_user]
|
||||
abuse_report.destroy
|
||||
|
||||
render nothing: true
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -73,9 +73,14 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
|
|||
:metrics_pool_size,
|
||||
:metrics_timeout,
|
||||
:metrics_method_call_threshold,
|
||||
:metrics_sample_interval,
|
||||
:ip_blocking_enabled,
|
||||
:dnsbl_servers_list,
|
||||
:recaptcha_enabled,
|
||||
:recaptcha_site_key,
|
||||
:recaptcha_private_key,
|
||||
:sentry_enabled,
|
||||
:sentry_dsn,
|
||||
restricted_visibility_levels: [],
|
||||
import_sources: []
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,12 @@
|
|||
class Admin::BroadcastMessagesController < Admin::ApplicationController
|
||||
before_action :broadcast_messages
|
||||
before_action :finder, only: [:edit, :update, :destroy]
|
||||
|
||||
def index
|
||||
@broadcast_message = BroadcastMessage.new
|
||||
@broadcast_messages = BroadcastMessage.reorder("starts_at ASC").page(params[:page])
|
||||
@broadcast_message = BroadcastMessage.new
|
||||
end
|
||||
|
||||
def edit
|
||||
end
|
||||
|
||||
def create
|
||||
|
|
@ -15,8 +19,16 @@ class Admin::BroadcastMessagesController < Admin::ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def update
|
||||
if @broadcast_message.update(broadcast_message_params)
|
||||
redirect_to admin_broadcast_messages_path, notice: 'Broadcast Message was successfully updated.'
|
||||
else
|
||||
render :edit
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
BroadcastMessage.find(params[:id]).destroy
|
||||
@broadcast_message.destroy
|
||||
|
||||
respond_to do |format|
|
||||
format.html { redirect_back_or_default(default: { action: 'index' }) }
|
||||
|
|
@ -26,14 +38,17 @@ class Admin::BroadcastMessagesController < Admin::ApplicationController
|
|||
|
||||
protected
|
||||
|
||||
def broadcast_messages
|
||||
@broadcast_messages ||= BroadcastMessage.order("starts_at DESC").page(params[:page])
|
||||
def finder
|
||||
@broadcast_message = BroadcastMessage.find(params[:id])
|
||||
end
|
||||
|
||||
def broadcast_message_params
|
||||
params.require(:broadcast_message).permit(
|
||||
:alert_type, :color, :ends_at, :font,
|
||||
:message, :starts_at
|
||||
)
|
||||
params.require(:broadcast_message).permit(%i(
|
||||
color
|
||||
ends_at
|
||||
font
|
||||
message
|
||||
starts_at
|
||||
))
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ class Admin::IdentitiesController < Admin::ApplicationController
|
|||
|
||||
def update
|
||||
if @identity.update_attributes(identity_params)
|
||||
RepairLdapBlockedUserService.new(@user).execute
|
||||
redirect_to admin_user_identities_path(@user), notice: 'User identity was successfully updated.'
|
||||
else
|
||||
render :edit
|
||||
|
|
@ -34,6 +35,7 @@ class Admin::IdentitiesController < Admin::ApplicationController
|
|||
|
||||
def destroy
|
||||
if @identity.destroy
|
||||
RepairLdapBlockedUserService.new(@user).execute
|
||||
redirect_to admin_user_identities_path(@user), notice: 'User identity was successfully removed.'
|
||||
else
|
||||
redirect_to admin_user_identities_path(@user), alert: 'Failed to remove user identity.'
|
||||
|
|
|
|||
|
|
@ -40,7 +40,9 @@ class Admin::UsersController < Admin::ApplicationController
|
|||
end
|
||||
|
||||
def unblock
|
||||
if user.activate
|
||||
if user.ldap_blocked?
|
||||
redirect_back_or_admin_user(alert: "This user cannot be unlocked manually from GitLab")
|
||||
elsif user.activate
|
||||
redirect_back_or_admin_user(notice: "Successfully unblocked")
|
||||
else
|
||||
redirect_back_or_admin_user(alert: "Error occurred. User was not unblocked")
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ class ApplicationController < ActionController::Base
|
|||
before_action :check_password_expiration
|
||||
before_action :check_2fa_requirement
|
||||
before_action :ldap_security_check
|
||||
before_action :sentry_user_context
|
||||
before_action :default_headers
|
||||
before_action :add_gon_variables
|
||||
before_action :configure_permitted_parameters, if: :devise_controller?
|
||||
|
|
@ -24,6 +25,7 @@ class ApplicationController < ActionController::Base
|
|||
|
||||
helper_method :abilities, :can?, :current_application_settings
|
||||
helper_method :import_sources_enabled?, :github_import_enabled?, :github_import_configured?, :gitlab_import_enabled?, :gitlab_import_configured?, :bitbucket_import_enabled?, :bitbucket_import_configured?, :gitorious_import_enabled?, :google_code_import_enabled?, :fogbugz_import_enabled?, :git_import_enabled?
|
||||
helper_method :repository
|
||||
|
||||
rescue_from Encoding::CompatibilityError do |exception|
|
||||
log_exception(exception)
|
||||
|
|
@ -41,6 +43,16 @@ class ApplicationController < ActionController::Base
|
|||
|
||||
protected
|
||||
|
||||
def sentry_user_context
|
||||
if Rails.env.production? && current_application_settings.sentry_enabled && current_user
|
||||
Raven.user_context(
|
||||
id: current_user.id,
|
||||
email: current_user.email,
|
||||
username: current_user.username,
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
# From https://github.com/plataformatec/devise/wiki/How-To:-Simple-Token-Authentication-Example
|
||||
# https://gist.github.com/josevalim/fb706b1e933ef01e4fb6
|
||||
def authenticate_user_from_token!
|
||||
|
|
@ -115,7 +127,7 @@ class ApplicationController < ActionController::Base
|
|||
# localhost/group/project
|
||||
#
|
||||
if id =~ /\.git\Z/
|
||||
redirect_to request.original_url.gsub(/\.git\Z/, '') and return
|
||||
redirect_to request.original_url.gsub(/\.git\/?\Z/, '') and return
|
||||
end
|
||||
|
||||
project_path = "#{namespace}/#{id}"
|
||||
|
|
|
|||
|
|
@ -6,11 +6,13 @@ module Ci
|
|||
end
|
||||
|
||||
def create
|
||||
if params[:content].blank?
|
||||
@content = params[:content]
|
||||
|
||||
if @content.blank?
|
||||
@status = false
|
||||
@error = "Please provide content of .gitlab-ci.yml"
|
||||
else
|
||||
@config_processor = Ci::GitlabCiYamlProcessor.new params[:content]
|
||||
@config_processor = Ci::GitlabCiYamlProcessor.new(@content)
|
||||
@stages = @config_processor.stages
|
||||
@builds = @config_processor.builds
|
||||
@status = true
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
class Projects::ArtifactsController < Projects::ApplicationController
|
||||
layout 'project'
|
||||
before_action :authorize_read_build_artifacts!
|
||||
|
||||
def download
|
||||
unless artifacts_file.file_storage?
|
||||
return redirect_to artifacts_file.url
|
||||
end
|
||||
|
||||
unless artifacts_file.exists?
|
||||
return render_404
|
||||
end
|
||||
|
||||
send_file artifacts_file.path, disposition: 'attachment'
|
||||
end
|
||||
|
||||
def browse
|
||||
return render_404 unless build.artifacts?
|
||||
|
||||
directory = params[:path] ? "#{params[:path]}/" : ''
|
||||
@entry = build.artifacts_metadata_entry(directory)
|
||||
|
||||
return render_404 unless @entry.exists?
|
||||
end
|
||||
|
||||
def file
|
||||
entry = build.artifacts_metadata_entry(params[:path])
|
||||
|
||||
if entry.exists?
|
||||
render json: { archive: build.artifacts_file.path,
|
||||
entry: Base64.encode64(entry.path) }
|
||||
else
|
||||
render json: {}, status: 404
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def build
|
||||
@build ||= project.builds.unscoped.find_by!(id: params[:build_id])
|
||||
end
|
||||
|
||||
def artifacts_file
|
||||
@artifacts_file ||= build.artifacts_file
|
||||
end
|
||||
|
||||
def authorize_read_build_artifacts!
|
||||
unless can?(current_user, :read_build_artifacts, @project)
|
||||
if current_user.nil?
|
||||
return authenticate_user!
|
||||
else
|
||||
return render_404
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue