mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-09 04:36:11 +10:00
Merge branch 'master' into housekeeping-doc
This commit is contained in:
+2
-2
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
+73
-24
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Executable → Regular
Executable → Regular
Binary file not shown.
Executable → Regular
Binary file not shown.
Executable → Regular
Binary file not shown.
Executable → Regular
Binary file not shown.
Executable → Regular
Binary file not shown.
Executable → Regular
Binary file not shown.
Executable → Regular
Binary file not shown.
Executable → Regular
Binary file not shown.
Executable → Regular
Binary file not shown.
Executable → Regular
Binary file not shown.
Executable → Regular
Binary file not shown.
Executable → Regular
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
Reference in New Issue
Block a user