Upstream version 8.10.5+dfsg
-----BEGIN PGP SIGNATURE----- iQIcBAABCAAGBQJXvUqRAAoJEM4fnGdFEsIqr8QP/jJyRmB4q+6aH7pMqsPhhzH0 yjmR6XCU8Lbx2fD7JizCGjybq4WfvvJIWsBmGRfLkd4boJNMykcjwji5q6n14GKC QiPQOYa1M2zxAzjnRAu3RcsadmYPF63tc6zo4E80man+KyefbplJKKamr2g445RP 71ezZ6bVH/pDCjZuKD1KRtl0/Q3wYGagyKTaKgVxvz+4n9WOzWYEhzQniywWi6tY 5BaDH9jYYS+Dxvqter3d4pR7un8yQYEG02MXwsA9Fl1jwOUcZ0JhBb9U1vecheg6 Yfrhk/b5+lVFRzZNwDqGXp8JaFjiEX7oq4NrgJrIgFKLxtvbmzkIssXkzUcLb/m/ H8Z9s0PrpeaeNVKWYc9+UGyDo0iB8CdYygk3GifpX/6/fiU69FsSD1SSgVgqLhD4 ZvJXfTrmP4f9eXl+zm/nM8FOau+KlWd/QoBQ2RaUsv969f8qJcd7A5IUrlwGRVkJ ew0d9yIm7GvVOo9YfPACP0T+IrOfEPLJ39lXyG3H50Kj+/Ol3aIvdX5nZAKy+uLQ xfBZN8vAIJPeX6oX3P7UUuJRZLk6jDzF5j+EGNNBcoqaWMaksdB91uhSfehThQfQ yjC0q+VwIKCr7DhztbjPiP7G07lAvFWYvwFe7J1BmGHY8GcXZMWRFrcSG7/j2toA dRdoMAeG6g8Ku/wkgjPV =L3td -----END PGP SIGNATURE----- Merge tag 'upstream/8.10.5+dfsg' Upstream version 8.10.5+dfsg # gpg: Signature made Wednesday 24 August 2016 12:49:45 PM IST using RSA key ID CE1F9C674512C22A # gpg: Good signature from "Praveen Arimbrathodiyil (piratepin) <praveen@debian.org>" [ultimate] # gpg: aka "Pirate Praveen (pirates.org.in) <praveen@onenetbeyond.org>" [ultimate] # gpg: aka "Pirate Praveen (piratesin) <me@j4v4m4n.in>" [ultimate] # gpg: aka "Pirate Praveen (PP) <praveen@privacyrequired.com>" [ultimate] # gpg: aka "Praveen Arimbrathodiyil (j4v4m4n) <pravi.a@gmail.com>" [ultimate]
1
.gitattributes
vendored
|
@ -1 +1,2 @@
|
||||||
CHANGELOG merge=union
|
CHANGELOG merge=union
|
||||||
|
*.js.es6 gitlab-language=javascript
|
||||||
|
|
117
.gitlab-ci.yml
|
@ -1,9 +1,5 @@
|
||||||
image: "ruby:2.1"
|
image: "ruby:2.1"
|
||||||
|
|
||||||
services:
|
|
||||||
- mysql:latest
|
|
||||||
- redis:alpine
|
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
key: "ruby21"
|
key: "ruby21"
|
||||||
paths:
|
paths:
|
||||||
|
@ -18,6 +14,7 @@ variables:
|
||||||
SIMPLECOV: "true"
|
SIMPLECOV: "true"
|
||||||
USE_DB: "true"
|
USE_DB: "true"
|
||||||
USE_BUNDLE_INSTALL: "true"
|
USE_BUNDLE_INSTALL: "true"
|
||||||
|
GIT_DEPTH: "20"
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- source ./scripts/prepare_build.sh
|
- source ./scripts/prepare_build.sh
|
||||||
|
@ -33,7 +30,6 @@ stages:
|
||||||
- post-test
|
- post-test
|
||||||
|
|
||||||
# Prepare and merge knapsack tests
|
# Prepare and merge knapsack tests
|
||||||
|
|
||||||
.knapsack-state: &knapsack-state
|
.knapsack-state: &knapsack-state
|
||||||
services: []
|
services: []
|
||||||
variables:
|
variables:
|
||||||
|
@ -67,8 +63,14 @@ update-knapsack:
|
||||||
|
|
||||||
# Execute all testing suites
|
# Execute all testing suites
|
||||||
|
|
||||||
|
.use-db: &use-db
|
||||||
|
services:
|
||||||
|
- mysql:latest
|
||||||
|
- redis:alpine
|
||||||
|
|
||||||
.rspec-knapsack: &rspec-knapsack
|
.rspec-knapsack: &rspec-knapsack
|
||||||
stage: test
|
stage: test
|
||||||
|
<<: *use-db
|
||||||
script:
|
script:
|
||||||
- bundle exec rake assets:precompile 2>/dev/null
|
- bundle exec rake assets:precompile 2>/dev/null
|
||||||
- JOB_NAME=( $CI_BUILD_NAME )
|
- JOB_NAME=( $CI_BUILD_NAME )
|
||||||
|
@ -84,6 +86,7 @@ update-knapsack:
|
||||||
|
|
||||||
.spinach-knapsack: &spinach-knapsack
|
.spinach-knapsack: &spinach-knapsack
|
||||||
stage: test
|
stage: test
|
||||||
|
<<: *use-db
|
||||||
script:
|
script:
|
||||||
- bundle exec rake assets:precompile 2>/dev/null
|
- bundle exec rake assets:precompile 2>/dev/null
|
||||||
- JOB_NAME=( $CI_BUILD_NAME )
|
- JOB_NAME=( $CI_BUILD_NAME )
|
||||||
|
@ -129,75 +132,95 @@ spinach 7 10: *spinach-knapsack
|
||||||
spinach 8 10: *spinach-knapsack
|
spinach 8 10: *spinach-knapsack
|
||||||
spinach 9 10: *spinach-knapsack
|
spinach 9 10: *spinach-knapsack
|
||||||
|
|
||||||
# Execute all testing suites against Ruby 2.2
|
# Execute all testing suites against Ruby 2.3
|
||||||
|
.ruby-23: &ruby-23
|
||||||
.ruby-22: &ruby-22
|
image: "ruby:2.3"
|
||||||
image: "ruby:2.2"
|
<<: *use-db
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
cache:
|
cache:
|
||||||
key: "ruby22"
|
key: "ruby-23"
|
||||||
paths:
|
paths:
|
||||||
- vendor
|
- vendor/apt
|
||||||
|
- vendor/ruby
|
||||||
|
|
||||||
.rspec-knapsack-ruby22: &rspec-knapsack-ruby22
|
.rspec-knapsack-ruby23: &rspec-knapsack-ruby23
|
||||||
<<: *rspec-knapsack
|
<<: *rspec-knapsack
|
||||||
<<: *ruby-22
|
<<: *ruby-23
|
||||||
|
|
||||||
.spinach-knapsack-ruby22: &spinach-knapsack-ruby22
|
.spinach-knapsack-ruby23: &spinach-knapsack-ruby23
|
||||||
<<: *spinach-knapsack
|
<<: *spinach-knapsack
|
||||||
<<: *ruby-22
|
<<: *ruby-23
|
||||||
|
|
||||||
rspec 0 20 ruby22: *rspec-knapsack-ruby22
|
rspec 0 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 1 20 ruby22: *rspec-knapsack-ruby22
|
rspec 1 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 2 20 ruby22: *rspec-knapsack-ruby22
|
rspec 2 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 3 20 ruby22: *rspec-knapsack-ruby22
|
rspec 3 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 4 20 ruby22: *rspec-knapsack-ruby22
|
rspec 4 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 5 20 ruby22: *rspec-knapsack-ruby22
|
rspec 5 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 6 20 ruby22: *rspec-knapsack-ruby22
|
rspec 6 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 7 20 ruby22: *rspec-knapsack-ruby22
|
rspec 7 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 8 20 ruby22: *rspec-knapsack-ruby22
|
rspec 8 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 9 20 ruby22: *rspec-knapsack-ruby22
|
rspec 9 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 10 20 ruby22: *rspec-knapsack-ruby22
|
rspec 10 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 11 20 ruby22: *rspec-knapsack-ruby22
|
rspec 11 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 12 20 ruby22: *rspec-knapsack-ruby22
|
rspec 12 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 13 20 ruby22: *rspec-knapsack-ruby22
|
rspec 13 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 14 20 ruby22: *rspec-knapsack-ruby22
|
rspec 14 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 15 20 ruby22: *rspec-knapsack-ruby22
|
rspec 15 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 16 20 ruby22: *rspec-knapsack-ruby22
|
rspec 16 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 17 20 ruby22: *rspec-knapsack-ruby22
|
rspec 17 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 18 20 ruby22: *rspec-knapsack-ruby22
|
rspec 18 20 ruby23: *rspec-knapsack-ruby23
|
||||||
rspec 19 20 ruby22: *rspec-knapsack-ruby22
|
rspec 19 20 ruby23: *rspec-knapsack-ruby23
|
||||||
|
|
||||||
spinach 0 10 ruby22: *spinach-knapsack-ruby22
|
spinach 0 10 ruby23: *spinach-knapsack-ruby23
|
||||||
spinach 1 10 ruby22: *spinach-knapsack-ruby22
|
spinach 1 10 ruby23: *spinach-knapsack-ruby23
|
||||||
spinach 2 10 ruby22: *spinach-knapsack-ruby22
|
spinach 2 10 ruby23: *spinach-knapsack-ruby23
|
||||||
spinach 3 10 ruby22: *spinach-knapsack-ruby22
|
spinach 3 10 ruby23: *spinach-knapsack-ruby23
|
||||||
spinach 4 10 ruby22: *spinach-knapsack-ruby22
|
spinach 4 10 ruby23: *spinach-knapsack-ruby23
|
||||||
spinach 5 10 ruby22: *spinach-knapsack-ruby22
|
spinach 5 10 ruby23: *spinach-knapsack-ruby23
|
||||||
spinach 6 10 ruby22: *spinach-knapsack-ruby22
|
spinach 6 10 ruby23: *spinach-knapsack-ruby23
|
||||||
spinach 7 10 ruby22: *spinach-knapsack-ruby22
|
spinach 7 10 ruby23: *spinach-knapsack-ruby23
|
||||||
spinach 8 10 ruby22: *spinach-knapsack-ruby22
|
spinach 8 10 ruby23: *spinach-knapsack-ruby23
|
||||||
spinach 9 10 ruby22: *spinach-knapsack-ruby22
|
spinach 9 10 ruby23: *spinach-knapsack-ruby23
|
||||||
|
|
||||||
# Other generic tests
|
# Other generic tests
|
||||||
|
|
||||||
|
.static-analyses-variables: &static-analyses-variables
|
||||||
|
variables:
|
||||||
|
SIMPLECOV: "false"
|
||||||
|
USE_DB: "false"
|
||||||
|
USE_BUNDLE_INSTALL: "true"
|
||||||
|
|
||||||
.exec: &exec
|
.exec: &exec
|
||||||
|
<<: *static-analyses-variables
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- bundle exec $CI_BUILD_NAME
|
- bundle exec $CI_BUILD_NAME
|
||||||
|
|
||||||
teaspoon: *exec
|
|
||||||
rubocop: *exec
|
rubocop: *exec
|
||||||
rake scss_lint: *exec
|
rake scss_lint: *exec
|
||||||
rake brakeman: *exec
|
rake brakeman: *exec
|
||||||
rake flog: *exec
|
rake flog: *exec
|
||||||
rake flay: *exec
|
rake flay: *exec
|
||||||
rake db:migrate:reset: *exec
|
|
||||||
license_finder: *exec
|
license_finder: *exec
|
||||||
|
rake downtime_check: *exec
|
||||||
|
|
||||||
|
rake db:migrate:reset:
|
||||||
|
stage: test
|
||||||
|
<<: *use-db
|
||||||
|
script:
|
||||||
|
- rake db:migrate:reset
|
||||||
|
|
||||||
|
teaspoon:
|
||||||
|
stage: test
|
||||||
|
<<: *use-db
|
||||||
|
script:
|
||||||
|
- teaspoon
|
||||||
|
|
||||||
bundler:audit:
|
bundler:audit:
|
||||||
stage: test
|
stage: test
|
||||||
|
<<: *static-analyses-variables
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
script:
|
script:
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
# Prefer single quotes
|
|
||||||
StringLiterals:
|
|
||||||
EnforcedStyle: single_quotes
|
|
||||||
Enabled: true
|
|
375
.rubocop.yml
|
@ -1,4 +1,8 @@
|
||||||
require: rubocop-rspec
|
require:
|
||||||
|
- rubocop-rspec
|
||||||
|
- ./rubocop/rubocop
|
||||||
|
|
||||||
|
inherit_from: .rubocop_todo.yml
|
||||||
|
|
||||||
AllCops:
|
AllCops:
|
||||||
TargetRubyVersion: 2.1
|
TargetRubyVersion: 2.1
|
||||||
|
@ -50,14 +54,6 @@ Style/AlignArray:
|
||||||
Style/AlignHash:
|
Style/AlignHash:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Align the parameters of a method call if they span more than one line.
|
|
||||||
Style/AlignParameters:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use &&/|| instead of and/or.
|
|
||||||
Style/AndOr:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use `Array#join` instead of `Array#*`.
|
# Use `Array#join` instead of `Array#*`.
|
||||||
Style/ArrayJoin:
|
Style/ArrayJoin:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -78,10 +74,6 @@ Style/Attr:
|
||||||
Style/BeginBlock:
|
Style/BeginBlock:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks if usage of %() or %Q() matches configuration.
|
|
||||||
Style/BarePercentLiterals:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Do not use block comments.
|
# Do not use block comments.
|
||||||
Style/BlockComments:
|
Style/BlockComments:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -95,14 +87,6 @@ Style/BlockEndNewline:
|
||||||
Style/BlockDelimiters:
|
Style/BlockDelimiters:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Enforce braces style around hash parameters.
|
|
||||||
Style/BracesAroundHashParameters:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Avoid explicit use of the case equality operator(===).
|
|
||||||
Style/CaseEquality:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Indentation of when in a case/when/[else/]end.
|
# Indentation of when in a case/when/[else/]end.
|
||||||
Style/CaseIndentation:
|
Style/CaseIndentation:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -131,24 +115,10 @@ Style/ClassMethods:
|
||||||
Style/ClassVars:
|
Style/ClassVars:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Do not use :: for method call.
|
|
||||||
Style/ColonMethodCall:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks formatting of special comments (TODO, FIXME, OPTIMIZE, HACK, REVIEW).
|
|
||||||
Style/CommentAnnotation:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Indentation of comments.
|
# Indentation of comments.
|
||||||
Style/CommentIndentation:
|
Style/CommentIndentation:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Use the return value of `if` and `case` statements for assignment to a
|
|
||||||
# variable and variable comparison instead of assigning that variable
|
|
||||||
# inside of each branch.
|
|
||||||
Style/ConditionalAssignment:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Constants should use SCREAMING_SNAKE_CASE.
|
# Constants should use SCREAMING_SNAKE_CASE.
|
||||||
Style/ConstantName:
|
Style/ConstantName:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -157,41 +127,21 @@ Style/ConstantName:
|
||||||
Style/DefWithParentheses:
|
Style/DefWithParentheses:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks for use of deprecated Hash methods.
|
|
||||||
Style/DeprecatedHashMethods:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Document classes and non-namespace modules.
|
# Document classes and non-namespace modules.
|
||||||
Style/Documentation:
|
Style/Documentation:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# Checks the position of the dot in multi-line method calls.
|
|
||||||
Style/DotPosition:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for uses of double negation (!!).
|
|
||||||
Style/DoubleNegation:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Prefer `each_with_object` over `inject` or `reduce`.
|
|
||||||
Style/EachWithObject:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Align elses and elsifs correctly.
|
# Align elses and elsifs correctly.
|
||||||
Style/ElseAlignment:
|
Style/ElseAlignment:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Avoid empty else-clauses.
|
|
||||||
Style/EmptyElse:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use empty lines between defs.
|
# Use empty lines between defs.
|
||||||
Style/EmptyLineBetweenDefs:
|
Style/EmptyLineBetweenDefs:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# Don't use several empty lines in a row.
|
# Don't use several empty lines in a row.
|
||||||
Style/EmptyLines:
|
Style/EmptyLines:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
# Keep blank lines around access modifiers.
|
# Keep blank lines around access modifiers.
|
||||||
Style/EmptyLinesAroundAccessModifier:
|
Style/EmptyLinesAroundAccessModifier:
|
||||||
|
@ -213,10 +163,6 @@ Style/EmptyLinesAroundModuleBody:
|
||||||
Style/EmptyLinesAroundMethodBody:
|
Style/EmptyLinesAroundMethodBody:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# Prefer literals to Array.new/Hash.new/String.new.
|
|
||||||
Style/EmptyLiteral:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Avoid the use of END blocks.
|
# Avoid the use of END blocks.
|
||||||
Style/EndBlock:
|
Style/EndBlock:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -229,10 +175,6 @@ Style/EndOfLine:
|
||||||
Style/EvenOdd:
|
Style/EvenOdd:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Do not use unnecessary spacing.
|
|
||||||
Style/ExtraSpacing:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use snake_case for source file names.
|
# Use snake_case for source file names.
|
||||||
Style/FileName:
|
Style/FileName:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -250,31 +192,15 @@ Style/FlipFlop:
|
||||||
Style/For:
|
Style/For:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Enforce the use of Kernel#sprintf, Kernel#format or String#%.
|
|
||||||
Style/FormatString:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Do not introduce global variables.
|
# Do not introduce global variables.
|
||||||
Style/GlobalVars:
|
Style/GlobalVars:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Check for conditionals that can be replaced with guard clauses.
|
|
||||||
Style/GuardClause:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Prefer Ruby 1.9 hash syntax `{ a: 1, b: 2 }`
|
# Prefer Ruby 1.9 hash syntax `{ a: 1, b: 2 }`
|
||||||
# over 1.8 syntax `{ :a => 1, :b => 2 }`.
|
# over 1.8 syntax `{ :a => 1, :b => 2 }`.
|
||||||
Style/HashSyntax:
|
Style/HashSyntax:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Finds if nodes inside else, which can be converted to elsif.
|
|
||||||
Style/IfInsideElse:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Favor modifier if/unless usage when you have a single-line body.
|
|
||||||
Style/IfUnlessModifier:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Do not use if x; .... Use the ternary operator instead.
|
# Do not use if x; .... Use the ternary operator instead.
|
||||||
Style/IfWithSemicolon:
|
Style/IfWithSemicolon:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -282,7 +208,7 @@ Style/IfWithSemicolon:
|
||||||
# Checks that conditional statements do not have an identical line at the
|
# Checks that conditional statements do not have an identical line at the
|
||||||
# end of each branch, which can validly be moved out of the conditional.
|
# end of each branch, which can validly be moved out of the conditional.
|
||||||
Style/IdenticalConditionalBranches:
|
Style/IdenticalConditionalBranches:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
# Checks the indentation of the first line of the right-hand-side of a
|
# Checks the indentation of the first line of the right-hand-side of a
|
||||||
# multi-line assignment.
|
# multi-line assignment.
|
||||||
|
@ -297,22 +223,10 @@ Style/IndentationConsistency:
|
||||||
Style/IndentationWidth:
|
Style/IndentationWidth:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks the indentation of the first element in an array literal.
|
|
||||||
Style/IndentArray:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks the indentation of the first key in a hash literal.
|
|
||||||
Style/IndentHash:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use Kernel#loop for infinite loops.
|
# Use Kernel#loop for infinite loops.
|
||||||
Style/InfiniteLoop:
|
Style/InfiniteLoop:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Use the new lambda literal syntax for single-line blocks.
|
|
||||||
Style/Lambda:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use lambda.call(...) instead of lambda.(...).
|
# Use lambda.call(...) instead of lambda.(...).
|
||||||
Style/LambdaCall:
|
Style/LambdaCall:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -321,14 +235,6 @@ Style/LambdaCall:
|
||||||
Style/LeadingCommentSpace:
|
Style/LeadingCommentSpace:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Use \ instead of + or << to concatenate two string literals at line end.
|
|
||||||
Style/LineEndConcatenation:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Do not use parentheses for method calls with no arguments.
|
|
||||||
Style/MethodCallParentheses:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks if the method definitions have or don't have parentheses.
|
# Checks if the method definitions have or don't have parentheses.
|
||||||
Style/MethodDefParentheses:
|
Style/MethodDefParentheses:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -385,39 +291,18 @@ Style/MultilineMethodDefinitionBraceLayout:
|
||||||
Style/MultilineOperationIndentation:
|
Style/MultilineOperationIndentation:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# Avoid multi-line `? :` (the ternary operator), use if/unless instead.
|
|
||||||
Style/MultilineTernaryOperator:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Do not assign mutable objects to constants.
|
|
||||||
Style/MutableConstant:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Favor unless over if for negative conditions (or control flow or).
|
# Favor unless over if for negative conditions (or control flow or).
|
||||||
Style/NegatedIf:
|
Style/NegatedIf:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Favor until over while for negative conditions.
|
|
||||||
Style/NegatedWhile:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Avoid using nested modifiers.
|
# Avoid using nested modifiers.
|
||||||
Style/NestedModifier:
|
Style/NestedModifier:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Parenthesize method calls which are nested inside the argument list of
|
|
||||||
# another parenthesized method call.
|
|
||||||
Style/NestedParenthesizedCalls:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use one expression per branch in a ternary operator.
|
# Use one expression per branch in a ternary operator.
|
||||||
Style/NestedTernaryOperator:
|
Style/NestedTernaryOperator:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Use `next` to skip iteration instead of a condition at the end.
|
|
||||||
Style/Next:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Prefer x.nil? to x == nil.
|
# Prefer x.nil? to x == nil.
|
||||||
Style/NilComparison:
|
Style/NilComparison:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -442,51 +327,10 @@ Style/OneLineConditional:
|
||||||
Style/OpMethod:
|
Style/OpMethod:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Check for simple usages of parallel assignment. It will only warn when
|
|
||||||
# the number of variables matches on both sides of the assignment.
|
|
||||||
Style/ParallelAssignment:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Don't use parentheses around the condition of an if/unless/while.
|
# Don't use parentheses around the condition of an if/unless/while.
|
||||||
Style/ParenthesesAroundCondition:
|
Style/ParenthesesAroundCondition:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Use `%`-literal delimiters consistently.
|
|
||||||
Style/PercentLiteralDelimiters:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks if uses of %Q/%q match the configured preference.
|
|
||||||
Style/PercentQLiterals:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Avoid Perl-style regex back references.
|
|
||||||
Style/PerlBackrefs:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Check the names of predicate methods.
|
|
||||||
Style/PredicateName:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use proc instead of Proc.new.
|
|
||||||
Style/Proc:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks the arguments passed to raise/fail.
|
|
||||||
Style/RaiseArgs:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Don't use begin blocks when they are not needed.
|
|
||||||
Style/RedundantBegin:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for an obsolete RuntimeException argument in raise/fail.
|
|
||||||
Style/RedundantException:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks usages of Object#freeze on immutable objects.
|
|
||||||
Style/RedundantFreeze:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for parentheses that seem not to serve any purpose.
|
# Checks for parentheses that seem not to serve any purpose.
|
||||||
Style/RedundantParentheses:
|
Style/RedundantParentheses:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -495,24 +339,6 @@ Style/RedundantParentheses:
|
||||||
Style/RedundantReturn:
|
Style/RedundantReturn:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Don't use self where it's not needed.
|
|
||||||
Style/RedundantSelf:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use %r for regular expressions matching more than `MaxSlashes` '/'
|
|
||||||
# characters. Use %r only for regular expressions matching more
|
|
||||||
# than `MaxSlashes` '/' character.
|
|
||||||
Style/RegexpLiteral:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Avoid using rescue in its modifier form.
|
|
||||||
Style/RescueModifier:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for places where self-assignment shorthand should have been used.
|
|
||||||
Style/SelfAssignment:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Don't use semicolons to terminate expressions.
|
# Don't use semicolons to terminate expressions.
|
||||||
Style/Semicolon:
|
Style/Semicolon:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -522,21 +348,13 @@ Style/SignalException:
|
||||||
EnforcedStyle: only_raise
|
EnforcedStyle: only_raise
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Enforces the names of some block params.
|
|
||||||
Style/SingleLineBlockParams:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Avoid single-line methods.
|
|
||||||
Style/SingleLineMethods:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use spaces after colons.
|
# Use spaces after colons.
|
||||||
Style/SpaceAfterColon:
|
Style/SpaceAfterColon:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
# Use spaces after commas.
|
# Use spaces after commas.
|
||||||
Style/SpaceAfterComma:
|
Style/SpaceAfterComma:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
# Do not put a space between a method name and the opening parenthesis in a
|
# Do not put a space between a method name and the opening parenthesis in a
|
||||||
# method definition.
|
# method definition.
|
||||||
|
@ -551,11 +369,6 @@ Style/SpaceAfterNot:
|
||||||
Style/SpaceAfterSemicolon:
|
Style/SpaceAfterSemicolon:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks that the equals signs in parameter default assignments have or don't
|
|
||||||
# have surrounding space depending on configuration.
|
|
||||||
Style/SpaceAroundEqualsInParameterDefault:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use a space around keywords if appropriate.
|
# Use a space around keywords if appropriate.
|
||||||
Style/SpaceAroundKeyword:
|
Style/SpaceAroundKeyword:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -564,10 +377,6 @@ Style/SpaceAroundKeyword:
|
||||||
Style/SpaceAroundOperators:
|
Style/SpaceAroundOperators:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks that the left block brace has or doesn't have space before it.
|
|
||||||
Style/SpaceBeforeBlockBraces:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# No spaces before commas.
|
# No spaces before commas.
|
||||||
Style/SpaceBeforeComma:
|
Style/SpaceBeforeComma:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -576,33 +385,14 @@ Style/SpaceBeforeComma:
|
||||||
Style/SpaceBeforeComment:
|
Style/SpaceBeforeComment:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks that exactly one space is used between a method name and the first
|
|
||||||
# argument for method calls without parentheses.
|
|
||||||
Style/SpaceBeforeFirstArg:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# No spaces before semicolons.
|
# No spaces before semicolons.
|
||||||
Style/SpaceBeforeSemicolon:
|
Style/SpaceBeforeSemicolon:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks that block braces have or don't have surrounding space.
|
|
||||||
# For blocks taking parameters, checks that the left brace has or doesn't
|
|
||||||
# have trailing space.
|
|
||||||
Style/SpaceInsideBlockBraces:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# No spaces after [ or before ].
|
|
||||||
Style/SpaceInsideBrackets:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use spaces inside hash literal braces - or don't.
|
# Use spaces inside hash literal braces - or don't.
|
||||||
Style/SpaceInsideHashLiteralBraces:
|
Style/SpaceInsideHashLiteralBraces:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# No spaces after ( or before ).
|
|
||||||
Style/SpaceInsideParens:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# No spaces inside range literals.
|
# No spaces inside range literals.
|
||||||
Style/SpaceInsideRangeLiteral:
|
Style/SpaceInsideRangeLiteral:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -612,10 +402,6 @@ Style/SpaceInsideStringInterpolation:
|
||||||
EnforcedStyle: no_space
|
EnforcedStyle: no_space
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Avoid Perl-style global variables.
|
|
||||||
Style/SpecialGlobalVars:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Check for the usage of parentheses around stabby lambda arguments.
|
# Check for the usage of parentheses around stabby lambda arguments.
|
||||||
Style/StabbyLambdaParentheses:
|
Style/StabbyLambdaParentheses:
|
||||||
EnforcedStyle: require_parentheses
|
EnforcedStyle: require_parentheses
|
||||||
|
@ -625,25 +411,12 @@ Style/StabbyLambdaParentheses:
|
||||||
Style/StringLiterals:
|
Style/StringLiterals:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# Checks if uses of quotes inside expressions in interpolated strings match the
|
|
||||||
# configured preference.
|
|
||||||
Style/StringLiteralsInInterpolation:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks if configured preferred methods are used over non-preferred.
|
# Checks if configured preferred methods are used over non-preferred.
|
||||||
Style/StringMethods:
|
Style/StringMethods:
|
||||||
PreferredMethods:
|
PreferredMethods:
|
||||||
intern: to_sym
|
intern: to_sym
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Use %i or %I for arrays of symbols.
|
|
||||||
Style/SymbolArray:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use symbols as procs instead of blocks when possible.
|
|
||||||
Style/SymbolProc:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# No hard tabs.
|
# No hard tabs.
|
||||||
Style/Tab:
|
Style/Tab:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -652,39 +425,9 @@ Style/Tab:
|
||||||
Style/TrailingBlankLines:
|
Style/TrailingBlankLines:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks for trailing comma in array and hash literals.
|
|
||||||
Style/TrailingCommaInLiteral:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for trailing comma in argument lists.
|
|
||||||
Style/TrailingCommaInArguments:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Avoid trailing whitespace.
|
|
||||||
Style/TrailingWhitespace:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for the usage of unneeded trailing underscores at the end of
|
|
||||||
# parallel variable assignment.
|
|
||||||
Style/TrailingUnderscoreVariable:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Prefer attr_* methods to trivial readers/writers.
|
|
||||||
Style/TrivialAccessors:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Do not use unless with else. Rewrite these with the positive case first.
|
|
||||||
Style/UnlessElse:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for %W when interpolation is not needed.
|
# Checks for %W when interpolation is not needed.
|
||||||
Style/UnneededCapitalW:
|
Style/UnneededCapitalW:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
# TODO: Enable UnneededInterpolation Cop.
|
|
||||||
# Checks for strings that are just an interpolated expression.
|
|
||||||
Style/UnneededInterpolation:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for %q/%Q when single quotes or double quotes would do.
|
# Checks for %q/%Q when single quotes or double quotes would do.
|
||||||
Style/UnneededPercentQ:
|
Style/UnneededPercentQ:
|
||||||
|
@ -715,12 +458,6 @@ Style/WhileUntilModifier:
|
||||||
Style/WordArray:
|
Style/WordArray:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# TODO: Enable ZeroLengthPredicate Cop.
|
|
||||||
# Use #empty? when testing for objects of length 0.
|
|
||||||
Style/ZeroLengthPredicate:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
|
|
||||||
#################### Metrics ################################
|
#################### Metrics ################################
|
||||||
|
|
||||||
# A calculated magnitude based on number of assignments,
|
# A calculated magnitude based on number of assignments,
|
||||||
|
@ -774,15 +511,6 @@ Metrics/PerceivedComplexity:
|
||||||
Lint/AmbiguousOperator:
|
Lint/AmbiguousOperator:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks for ambiguous regexp literals in the first argument of a method
|
|
||||||
# invocation without parentheses.
|
|
||||||
Lint/AmbiguousRegexpLiteral:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Don't use assignment in conditions.
|
|
||||||
Lint/AssignmentInCondition:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Align block ends correctly.
|
# Align block ends correctly.
|
||||||
Lint/BlockAlignment:
|
Lint/BlockAlignment:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -808,14 +536,6 @@ Lint/DefEndAlignment:
|
||||||
Lint/DeprecatedClassMethods:
|
Lint/DeprecatedClassMethods:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Check for duplicate method definitions.
|
|
||||||
Lint/DuplicateMethods:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Check for duplicate keys in hash literals.
|
|
||||||
Lint/DuplicatedKey:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Check for immutable argument given to each_with_object.
|
# Check for immutable argument given to each_with_object.
|
||||||
Lint/EachWithObjectArgument:
|
Lint/EachWithObjectArgument:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -828,10 +548,6 @@ Lint/ElseLayout:
|
||||||
Lint/EmptyEnsure:
|
Lint/EmptyEnsure:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks for empty string interpolation.
|
|
||||||
Lint/EmptyInterpolation:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Align ends correctly.
|
# Align ends correctly.
|
||||||
Lint/EndAlignment:
|
Lint/EndAlignment:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -856,21 +572,11 @@ Lint/FloatOutOfRange:
|
||||||
Lint/FormatParameterMismatch:
|
Lint/FormatParameterMismatch:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Don't suppress exception.
|
|
||||||
Lint/HandleExceptions:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for adjacent string literals on the same line, which could better be
|
# Checks for adjacent string literals on the same line, which could better be
|
||||||
# represented as a single string literal.
|
# represented as a single string literal.
|
||||||
Lint/ImplicitStringConcatenation:
|
Lint/ImplicitStringConcatenation:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# TODO: Enable IneffectiveAccessModifier Cop.
|
|
||||||
# Checks for attempts to use `private` or `protected` to set the visibility
|
|
||||||
# of a class method, which does not work.
|
|
||||||
Lint/IneffectiveAccessModifier:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for invalid character literals with a non-escaped whitespace
|
# Checks for invalid character literals with a non-escaped whitespace
|
||||||
# character.
|
# character.
|
||||||
Lint/InvalidCharacterLiteral:
|
Lint/InvalidCharacterLiteral:
|
||||||
|
@ -884,11 +590,6 @@ Lint/LiteralInCondition:
|
||||||
Lint/LiteralInInterpolation:
|
Lint/LiteralInInterpolation:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Use Kernel#loop with break rather than begin/end/until or begin/end/while
|
|
||||||
# for post-loop tests.
|
|
||||||
Lint/Loop:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Do not use nested method definitions.
|
# Do not use nested method definitions.
|
||||||
Lint/NestedMethodDefinition:
|
Lint/NestedMethodDefinition:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -914,13 +615,8 @@ Lint/RequireParentheses:
|
||||||
Lint/RescueException:
|
Lint/RescueException:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Do not use the same name as outer local variable for block arguments
|
# Checks for the order which exceptions are rescued to avoid rescueing a less specific exception before a more specific exception.
|
||||||
# or block local variables.
|
Lint/ShadowedException:
|
||||||
Lint/ShadowingOuterLocalVariable:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# 'Checks for Object#to_s usage in string interpolation.
|
|
||||||
Lint/StringConversionInInterpolation:
|
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# Do not use prefix `_` for a variable that is used.
|
# Do not use prefix `_` for a variable that is used.
|
||||||
|
@ -933,22 +629,10 @@ Lint/UnderscorePrefixedVariableName:
|
||||||
Lint/UnneededDisable:
|
Lint/UnneededDisable:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
# Checks for unused block arguments.
|
|
||||||
Lint/UnusedBlockArgument:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for unused method arguments.
|
|
||||||
Lint/UnusedMethodArgument:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Unreachable code.
|
# Unreachable code.
|
||||||
Lint/UnreachableCode:
|
Lint/UnreachableCode:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks for useless access modifiers.
|
|
||||||
Lint/UselessAccessModifier:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Checks for useless assignment to a local variable.
|
# Checks for useless assignment to a local variable.
|
||||||
Lint/UselessAssignment:
|
Lint/UselessAssignment:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -981,11 +665,6 @@ Performance/Casecmp:
|
||||||
Performance/DoubleStartEndWith:
|
Performance/DoubleStartEndWith:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# TODO: Enable EndWith Cop.
|
|
||||||
# Use `end_with?` instead of a regex match anchored to the end of a string.
|
|
||||||
Performance/EndWith:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use `strip` instead of `lstrip.rstrip`.
|
# Use `strip` instead of `lstrip.rstrip`.
|
||||||
Performance/LstripRstrip:
|
Performance/LstripRstrip:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -994,24 +673,6 @@ Performance/LstripRstrip:
|
||||||
Performance/RangeInclude:
|
Performance/RangeInclude:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# TODO: Enable RedundantBlockCall Cop.
|
|
||||||
# Use `yield` instead of `block.call`.
|
|
||||||
Performance/RedundantBlockCall:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# TODO: Enable RedundantMatch Cop.
|
|
||||||
# Use `=~` instead of `String#match` or `Regexp#match` in a context where the
|
|
||||||
# returned `MatchData` is not needed.
|
|
||||||
Performance/RedundantMatch:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# TODO: Enable RedundantMerge Cop.
|
|
||||||
# Use `Hash#[]=`, rather than `Hash#merge!` with a single key-value pair.
|
|
||||||
Performance/RedundantMerge:
|
|
||||||
# Max number of key-value pairs to consider an offense
|
|
||||||
MaxKeyValuePairs: 2
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use `sort` instead of `sort_by { |x| x }`.
|
# Use `sort` instead of `sort_by { |x| x }`.
|
||||||
Performance/RedundantSortBy:
|
Performance/RedundantSortBy:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
@ -1080,18 +741,6 @@ Rails/ReadWriteAttribute:
|
||||||
Rails/ScopeArgs:
|
Rails/ScopeArgs:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
# Checks the correct usage of time zone aware methods.
|
|
||||||
# http://danilenko.org/2012/7/6/rails_timezones
|
|
||||||
Rails/TimeZone:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
# Use validates :attribute, hash of validations.
|
|
||||||
Rails/Validation:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
Rails/UniqBeforePluck:
|
|
||||||
Enabled: false
|
|
||||||
|
|
||||||
##################### RSpec ##################################
|
##################### RSpec ##################################
|
||||||
|
|
||||||
# Check that instances are not being stubbed globally.
|
# Check that instances are not being stubbed globally.
|
||||||
|
|
462
.rubocop_todo.yml
Normal file
|
@ -0,0 +1,462 @@
|
||||||
|
# This configuration was generated by
|
||||||
|
# `rubocop --auto-gen-config --exclude-limit 0`
|
||||||
|
# on 2016-07-13 12:36:08 -0600 using RuboCop version 0.41.2.
|
||||||
|
# The point is for the user to remove these configuration records
|
||||||
|
# one by one as the offenses are removed from the code base.
|
||||||
|
# Note that changes in the inspected code, or installation of new
|
||||||
|
# versions of RuboCop, may require this file to be generated again.
|
||||||
|
|
||||||
|
# Offense count: 154
|
||||||
|
Lint/AmbiguousRegexpLiteral:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 43
|
||||||
|
# Configuration parameters: AllowSafeAssignment.
|
||||||
|
Lint/AssignmentInCondition:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 14
|
||||||
|
Lint/HandleExceptions:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 21
|
||||||
|
Lint/IneffectiveAccessModifier:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
Lint/Loop:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 15
|
||||||
|
Lint/ShadowingOuterLocalVariable:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Lint/StringConversionInInterpolation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 44
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
|
||||||
|
Lint/UnusedBlockArgument:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 129
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
|
||||||
|
Lint/UnusedMethodArgument:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 11
|
||||||
|
Lint/UselessAccessModifier:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 12
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Performance/PushSplat:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Performance/RedundantBlockCall:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 4
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Performance/RedundantMatch:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 24
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: MaxKeyValuePairs.
|
||||||
|
Performance/RedundantMerge:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 60
|
||||||
|
Rails/OutputSafety:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 128
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: strict, flexible
|
||||||
|
Rails/TimeZone:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 12
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: Include.
|
||||||
|
# Include: app/models/**/*.rb
|
||||||
|
Rails/Validation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 217
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||||
|
# SupportedStyles: with_first_parameter, with_fixed_indentation
|
||||||
|
Style/AlignParameters:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 32
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: always, conditionals
|
||||||
|
Style/AndOr:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 47
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: percent_q, bare_percent
|
||||||
|
Style/BarePercentLiterals:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 258
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: braces, no_braces, context_dependent
|
||||||
|
Style/BracesAroundHashParameters:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 5
|
||||||
|
Style/CaseEquality:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 19
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/ColonMethodCall:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: Keywords.
|
||||||
|
# Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW
|
||||||
|
Style/CommentAnnotation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 34
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, SingleLineConditionsOnly.
|
||||||
|
# SupportedStyles: assign_to_condition, assign_inside_condition
|
||||||
|
Style/ConditionalAssignment:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 789
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: leading, trailing
|
||||||
|
Style/DotPosition:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 13
|
||||||
|
Style/DoubleNegation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
Style/EachWithObject:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 30
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: empty, nil, both
|
||||||
|
Style/EmptyElse:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/EmptyLiteral:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 123
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowForAlignment, ForceEqualSignAlignment.
|
||||||
|
Style/ExtraSpacing:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 7
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: format, sprintf, percent
|
||||||
|
Style/FormatString:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 48
|
||||||
|
# Configuration parameters: MinBodyLength.
|
||||||
|
Style/GuardClause:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 11
|
||||||
|
Style/IfInsideElse:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 177
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: MaxLineLength.
|
||||||
|
Style/IfUnlessModifier:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 52
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||||
|
# SupportedStyles: special_inside_parentheses, consistent, align_brackets
|
||||||
|
Style/IndentArray:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 89
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||||
|
# SupportedStyles: special_inside_parentheses, consistent, align_braces
|
||||||
|
Style/IndentHash:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 12
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: line_count_dependent, lambda, literal
|
||||||
|
Style/Lambda:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 6
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/LineEndConcatenation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 13
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/MethodCallParentheses:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
Style/MultilineTernaryOperator:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 62
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/MutableConstant:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 10
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/NestedParenthesizedCalls:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 12
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
|
||||||
|
# SupportedStyles: skip_modifier_ifs, always
|
||||||
|
Style/Next:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 8
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedOctalStyle, SupportedOctalStyles.
|
||||||
|
# SupportedOctalStyles: zero_with_o, zero_only
|
||||||
|
Style/NumericLiteralPrefix:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 29
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/ParallelAssignment:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 208
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: PreferredDelimiters.
|
||||||
|
Style/PercentLiteralDelimiters:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 11
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: lower_case_q, upper_case_q
|
||||||
|
Style/PercentQLiterals:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 13
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/PerlBackrefs:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 32
|
||||||
|
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
|
||||||
|
# NamePrefix: is_, has_, have_
|
||||||
|
# NamePrefixBlacklist: is_, has_, have_
|
||||||
|
# NameWhitelist: is_a?
|
||||||
|
Style/PredicateName:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 28
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/PreferredHashMethods:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 6
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/Proc:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 20
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: compact, exploded
|
||||||
|
Style/RaiseArgs:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/RedundantBegin:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/RedundantException:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 23
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/RedundantFreeze:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 377
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/RedundantSelf:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 94
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
|
||||||
|
# SupportedStyles: slashes, percent_r, mixed
|
||||||
|
Style/RegexpLiteral:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 17
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/RescueModifier:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/SelfAssignment:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Configuration parameters: Methods.
|
||||||
|
# Methods: {"reduce"=>["a", "e"]}, {"inject"=>["a", "e"]}
|
||||||
|
Style/SingleLineBlockParams:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 50
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowIfMethodIsEmpty.
|
||||||
|
Style/SingleLineMethods:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 14
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: space, no_space
|
||||||
|
Style/SpaceAroundEqualsInParameterDefault:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 119
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: space, no_space
|
||||||
|
Style/SpaceBeforeBlockBraces:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 11
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowForAlignment.
|
||||||
|
Style/SpaceBeforeFirstArg:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 130
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
|
||||||
|
# SupportedStyles: space, no_space
|
||||||
|
Style/SpaceInsideBlockBraces:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 98
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/SpaceInsideBrackets:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 60
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/SpaceInsideParens:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 5
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/SpaceInsidePercentLiteralDelimiters:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 36
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: SupportedStyles.
|
||||||
|
# SupportedStyles: use_perl_names, use_english_names
|
||||||
|
Style/SpecialGlobalVars:
|
||||||
|
EnforcedStyle: use_perl_names
|
||||||
|
|
||||||
|
# Offense count: 30
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||||
|
# SupportedStyles: single_quotes, double_quotes
|
||||||
|
Style/StringLiteralsInInterpolation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 24
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: IgnoredMethods.
|
||||||
|
# IgnoredMethods: respond_to, define_method
|
||||||
|
Style/SymbolProc:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 23
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.
|
||||||
|
# SupportedStyles: comma, consistent_comma, no_comma
|
||||||
|
Style/TrailingCommaInArguments:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 113
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.
|
||||||
|
# SupportedStyles: comma, consistent_comma, no_comma
|
||||||
|
Style/TrailingCommaInLiteral:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 7
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowNamedUnderscoreVariables.
|
||||||
|
Style/TrailingUnderscoreVariable:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 90
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/TrailingWhitespace:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, Whitelist.
|
||||||
|
# Whitelist: to_ary, to_a, to_c, to_enum, to_h, to_hash, to_i, to_int, to_io, to_open, to_path, to_proc, to_r, to_regexp, to_str, to_s, to_sym
|
||||||
|
Style/TrivialAccessors:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/UnlessElse:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 13
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/UnneededInterpolation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 8
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/ZeroLengthPredicate:
|
||||||
|
Enabled: false
|
|
@ -1,8 +0,0 @@
|
||||||
stage:
|
|
||||||
before:
|
|
||||||
- cp config/gitlab.teatro.yml config/gitlab.yml
|
|
||||||
- mkdir /apps/gitlab-satellites
|
|
||||||
- mkdir /apps/repositories
|
|
||||||
|
|
||||||
database:
|
|
||||||
- RAILS_ENV=development force=yes bundle exec rake db:create gitlab:setup
|
|
360
CHANGELOG
|
@ -1,6 +1,325 @@
|
||||||
Please view this file on the master branch, on stable branches it's out of date.
|
Please view this file on the master branch, on stable branches it's out of date.
|
||||||
|
|
||||||
v 8.9.0 (unreleased)
|
v 8.10.5
|
||||||
|
- Add a data migration to fix some missing timestamps in the members table. !5670
|
||||||
|
- Revert the "Defend against 'Host' header injection" change in the source NGINX templates. !5706
|
||||||
|
- Cache project count for 5 minutes to reduce DB load. !5746 & !5754
|
||||||
|
|
||||||
|
v 8.10.4
|
||||||
|
- Don't close referenced upstream issues from a forked project.
|
||||||
|
- Fixes issue with dropdowns `enter` key not working correctly. !5544
|
||||||
|
- Fix Import/Export project import not working in HA mode. !5618
|
||||||
|
- Fix Import/Export error checking versions. !5638
|
||||||
|
|
||||||
|
v 8.10.3
|
||||||
|
- Fix Import/Export issue importing milestones and labels not associated properly. !5426
|
||||||
|
- Fix timing problems running imports on production. !5523
|
||||||
|
- Add a log message when a project is scheduled for destruction for debugging. !5540
|
||||||
|
- Fix hooks missing on imported GitLab projects. !5549
|
||||||
|
- Properly abort a merge when merge conflicts occur. !5569
|
||||||
|
- Fix importer for GitHub Pull Requests when a branch was removed. !5573
|
||||||
|
- Ignore invalid IPs in X-Forwarded-For when trusted proxies are configured. !5584
|
||||||
|
- Trim extra displayed carriage returns in diffs and files with CRLFs. !5588
|
||||||
|
|
||||||
|
v 8.10.2
|
||||||
|
- User can now search branches by name. !5144
|
||||||
|
- Page is now properly rendered after committing the first file and creating the first branch. !5399
|
||||||
|
- Add branch or tag icon to ref in builds page. !5434
|
||||||
|
- Fix backup restore. !5459
|
||||||
|
- Use project ID in repository cache to prevent stale data from persisting across projects. !5460
|
||||||
|
- Fix issue with autocomplete search not working with enter key. !5466
|
||||||
|
- Add iid to MR API response. !5468
|
||||||
|
- Disable MySQL foreign key checks before dropping all tables. !5472
|
||||||
|
- Ensure relative paths for video are rewritten as we do for images. !5474
|
||||||
|
- Ensure current user can retry a build before showing the 'Retry' button. !5476
|
||||||
|
- Add ENV variable to skip repository storages validations. !5478
|
||||||
|
- Added `*.js.es6 gitlab-language=javascript` to `.gitattributes`. !5486
|
||||||
|
- Don't show comment button in gutter of diffs on MR discussion tab. !5493
|
||||||
|
- Rescue Rugged::OSError (lock exists) when creating references. !5497
|
||||||
|
- Fix expand all diffs button in compare view. !5500
|
||||||
|
- Show release notes in tags list. !5503
|
||||||
|
- Fix a bug where forking a project from a repository storage to another would fail. !5509
|
||||||
|
- Fix missing schema update for `20160722221922`. !5512
|
||||||
|
- Update `gitlab-shell` version to 3.2.1 in the 8.9->8.10 update guide. !5516
|
||||||
|
|
||||||
|
v 8.10.1
|
||||||
|
- Refactor repository storages documentation. !5428
|
||||||
|
- Gracefully handle case when keep-around references are corrupted or exist already. !5430
|
||||||
|
- Add detailed info on storage path mountpoints. !5437
|
||||||
|
- Fix Error 500 when creating Wiki pages with hyphens or spaces. !5444
|
||||||
|
- Fix bug where replies to commit notes displayed in the MR discussion tab wouldn't show up on the commit page. !5446
|
||||||
|
- Ignore invalid trusted proxies in X-Forwarded-For header. !5454
|
||||||
|
- Add links to the real markdown.md file for all GFM examples. !5458
|
||||||
|
|
||||||
|
v 8.10.0
|
||||||
|
- Fix profile activity heatmap to show correct day name (eanplatter)
|
||||||
|
- Speed up ExternalWikiHelper#get_project_wiki_path
|
||||||
|
- Expose {should,force}_remove_source_branch (Ben Boeckel)
|
||||||
|
- Add the functionality to be able to rename a file. !5049
|
||||||
|
- Disable PostgreSQL statement timeout during migrations
|
||||||
|
- Fix projects dropdown loading performance with a simplified api cal. !5113
|
||||||
|
- Fix commit builds API, return all builds for all pipelines for given commit. !4849
|
||||||
|
- Replace Haml with Hamlit to make view rendering faster. !3666
|
||||||
|
- Refresh the branch cache after `git gc` runs
|
||||||
|
- Allow to disable request access button on projects/groups
|
||||||
|
- Refactor repository paths handling to allow multiple git mount points
|
||||||
|
- Optimize system note visibility checking by memoizing the visible reference count. !5070
|
||||||
|
- Add Application Setting to configure default Repository Path for new projects
|
||||||
|
- Delete award emoji when deleting a user
|
||||||
|
- Remove pinTo from Flash and make inline flash messages look nicer. !4854 (winniehell)
|
||||||
|
- Add an API for downloading latest successful build from a particular branch or tag. !5347
|
||||||
|
- Avoid data-integrity issue when cleaning up repository archive cache.
|
||||||
|
- Add link to profile to commit avatar. !5163 (winniehell)
|
||||||
|
- Wrap code blocks on Activies and Todos page. !4783 (winniehell)
|
||||||
|
- Align flash messages with left side of page content. !4959 (winniehell)
|
||||||
|
- Display tooltip for "Copy to Clipboard" button. !5164 (winniehell)
|
||||||
|
- Use default cursor for table header of project files. !5165 (winniehell)
|
||||||
|
- Store when and yaml variables in builds table
|
||||||
|
- Display last commit of deleted branch in push events. !4699 (winniehell)
|
||||||
|
- Escape file extension when parsing search results. !5141 (winniehell)
|
||||||
|
- Add "passing with warnings" to the merge request pipeline possible statuses, this happens when builds that allow failures have failed. !5004
|
||||||
|
- Add image border in Markdown preview. !5162 (winniehell)
|
||||||
|
- Apply the trusted_proxies config to the rack request object for use with rack_attack
|
||||||
|
- Added the ability to block sign ups using a domain blacklist. !5259
|
||||||
|
- Upgrade to Rails 4.2.7. !5236
|
||||||
|
- Extend exposed environment variables for CI builds
|
||||||
|
- Deprecate APIs "projects/:id/keys/...". Use "projects/:id/deploy_keys/..." instead
|
||||||
|
- Add API "deploy_keys" for admins to get all deploy keys
|
||||||
|
- Allow to pull code with deploy key from public projects
|
||||||
|
- Use limit parameter rather than hardcoded value in `ldap:check` rake task (Mike Ricketts)
|
||||||
|
- Add Sidekiq queue duration to transaction metrics.
|
||||||
|
- Add a new column `artifacts_size` to table `ci_builds`. !4964
|
||||||
|
- Let Workhorse serve format-patch diffs
|
||||||
|
- Display tooltip for mentioned users and groups. !5261 (winniehell)
|
||||||
|
- Allow build email service to be tested
|
||||||
|
- Added day name to contribution calendar tooltips
|
||||||
|
- Refactor user authorization check for a single project to avoid querying all user projects
|
||||||
|
- Make images fit to the size of the viewport. !4810
|
||||||
|
- Fix check for New Branch button on Issue page. !4630 (winniehell)
|
||||||
|
- Fix GFM autocomplete not working on wiki pages
|
||||||
|
- Fixed enter key not triggering click on first row when searching in a dropdown
|
||||||
|
- Fix MR-auto-close text added to description. !4836
|
||||||
|
- Support U2F devices in Firefox. !5177
|
||||||
|
- Fix issue, preventing users w/o push access to sort tags. !5105 (redetection)
|
||||||
|
- Add Spring EmojiOne updates.
|
||||||
|
- Added Rake task for tracking deployments. !5320
|
||||||
|
- Fix fetching LFS objects for private CI projects
|
||||||
|
- Add the new 2016 Emoji! Adds 72 new emoji including bacon, facepalm, and selfie. !5237
|
||||||
|
- Add syntax for multiline blockquote using `>>>` fence. !3954
|
||||||
|
- Fix viewing notification settings when a project is pending deletion
|
||||||
|
- Updated compare dropdown menus to use GL dropdown
|
||||||
|
- Redirects back to issue after clicking login link
|
||||||
|
- Eager load award emoji on notes
|
||||||
|
- Allow to define manual actions/builds on Pipelines and Environments
|
||||||
|
- Fix pagination when sorting by columns with lots of ties (like priority)
|
||||||
|
- The Markdown reference parsers now re-use query results to prevent running the same queries multiple times. !5020
|
||||||
|
- Updated project header design
|
||||||
|
- Issuable collapsed assignee tooltip is now the users name
|
||||||
|
- Exclude email check from the standard health check
|
||||||
|
- Updated layout for Projects, Groups, Users on Admin area. !4424
|
||||||
|
- Fix changing issue state columns in milestone view
|
||||||
|
- Update health_check gem to version 2.1.0
|
||||||
|
- Add notification settings dropdown for groups
|
||||||
|
- Render inline diffs for multiple changed lines following eachother
|
||||||
|
- Wildcards for protected branches. !4665
|
||||||
|
- Allow importing from Github using Personal Access Tokens. (Eric K Idema)
|
||||||
|
- API: Expose `due_date` for issues (Robert Schilling)
|
||||||
|
- API: Todos. !3188 (Robert Schilling)
|
||||||
|
- API: Expose shared groups for projects and shared projects for groups. !5050 (Robert Schilling)
|
||||||
|
- API: Expose `developers_can_push` and `developers_can_merge` for branches. !5208 (Robert Schilling)
|
||||||
|
- Add "Enabled Git access protocols" to Application Settings
|
||||||
|
- Diffs will create button/diff form on demand no on server side
|
||||||
|
- Reduce size of HTML used by diff comment forms
|
||||||
|
- Protected branches have a "Developers can Merge" setting. !4892 (original implementation by Mathias Vestergaard)
|
||||||
|
- Fix user creation with stronger minimum password requirements. !4054 (nathan-pmt)
|
||||||
|
- Only show New Snippet button to users that can create snippets.
|
||||||
|
- PipelinesFinder uses git cache data
|
||||||
|
- Track a user who created a pipeline
|
||||||
|
- Actually render old and new sections of parallel diff next to each other
|
||||||
|
- Throttle the update of `project.pushes_since_gc` to 1 minute.
|
||||||
|
- Allow expanding and collapsing files in diff view. !4990
|
||||||
|
- Collapse large diffs by default (!4990)
|
||||||
|
- Fix mentioned users list on diff notes
|
||||||
|
- Add support for inline videos in GitLab Flavored Markdown. !5215 (original implementation by Eric Hayes)
|
||||||
|
- Fix creation of deployment on build that is retried, redeployed or rollback
|
||||||
|
- Don't parse Rinku returned value to DocFragment when it didn't change the original html string.
|
||||||
|
- Check for conflicts with existing Project's wiki path when creating a new project.
|
||||||
|
- Show last push widget in upstream after push to fork
|
||||||
|
- Fix stage status shown for pipelines
|
||||||
|
- Cache todos pending/done dashboard query counts.
|
||||||
|
- Don't instantiate a git tree on Projects show default view
|
||||||
|
- Bump Rinku to 2.0.0
|
||||||
|
- Remove unused front-end variable -> default_issues_tracker
|
||||||
|
- ObjectRenderer retrieve renderer content using Rails.cache.read_multi
|
||||||
|
- Better caching of git calls on ProjectsController#show.
|
||||||
|
- Avoid to retrieve MR closes_issues as much as possible.
|
||||||
|
- Hide project name in project activities. !5068 (winniehell)
|
||||||
|
- Add API endpoint for a group issues. !4520 (mahcsig)
|
||||||
|
- Add Bugzilla integration. !4930 (iamtjg)
|
||||||
|
- Fix new snippet style bug (elliotec)
|
||||||
|
- Instrument Rinku usage
|
||||||
|
- Be explicit to define merge request discussion variables
|
||||||
|
- Metrics for Rouge::Plugins::Redcarpet and Rouge::Formatters::HTMLGitlab
|
||||||
|
- RailsCache metris now includes fetch_hit/fetch_miss and read_hit/read_miss info.
|
||||||
|
- Allow [ci skip] to be in any case and allow [skip ci]. !4785 (simon_w)
|
||||||
|
- Set import_url validation to be more strict
|
||||||
|
- Memoize MR merged/closed events retrieval
|
||||||
|
- Don't render discussion notes when requesting diff tab through AJAX
|
||||||
|
- Add basic system information like memory and disk usage to the admin panel
|
||||||
|
- Don't garbage collect commits that have related DB records like comments
|
||||||
|
- Allow to setup event by channel on slack service
|
||||||
|
- More descriptive message for git hooks and file locks
|
||||||
|
- Aliases of award emoji should be stored as original name. !5060 (dixpac)
|
||||||
|
- Handle custom Git hook result in GitLab UI
|
||||||
|
- Allow to access Container Registry for Public and Internal projects
|
||||||
|
- Allow '?', or '&' for label names
|
||||||
|
- Support redirected blobs for Container Registry integration
|
||||||
|
- Fix importer for GitHub Pull Requests when a branch was reused across Pull Requests
|
||||||
|
- Add date when user joined the team on the member page
|
||||||
|
- Fix 404 redirect after validation fails importing a GitLab project
|
||||||
|
- Added setting to set new users by default as external. !4545 (Dravere)
|
||||||
|
- Add min value for project limit field on user's form. !3622 (jastkand)
|
||||||
|
- Reset project pushes_since_gc when we enqueue the git gc call
|
||||||
|
- Add reminder to not paste private SSH keys. !4399 (Ingo Blechschmidt)
|
||||||
|
- Collapsed diffs lines/size don't acumulate to overflow diffs.
|
||||||
|
- Remove duplicate `description` field in `MergeRequest` entities (Ben Boeckel)
|
||||||
|
- Style of import project buttons were fixed in the new project page. !5183 (rdemirbay)
|
||||||
|
- Fix GitHub client requests when rate limit is disabled
|
||||||
|
- Optimistic locking for Issues and Merge Requests (Title and description overriding prevention)
|
||||||
|
- Redesign Builds and Pipelines pages
|
||||||
|
- Change status color and icon for running builds
|
||||||
|
- Fix commenting issue in side by side diff view for unchanged lines
|
||||||
|
- Fix markdown rendering for: consecutive labels references, label references that begin with a digit or contains `.`
|
||||||
|
- Project export filename now includes the project and namespace path
|
||||||
|
- Fix last update timestamp on issues not preserved on gitlab.com and project imports
|
||||||
|
- Fix issues importing projects from EE to CE
|
||||||
|
- Fix creating group with space in group path
|
||||||
|
- Improve cron_jobs loading error messages. !5318 / !5360
|
||||||
|
- Prevent toggling sidebar when clipboard icon clicked
|
||||||
|
- Create Todos for Issue author when assign or mention himself (Katarzyna Kobierska)
|
||||||
|
- Limit the number of retries on error to 3 for exporting projects
|
||||||
|
- Allow empty repositories on project import/export
|
||||||
|
- Render only commit message title in builds (Katarzyna Kobierska Ula Budziszewska)
|
||||||
|
- Allow bulk (un)subscription from issues in issue index
|
||||||
|
- Fix MR diff encoding issues exporting GitLab projects
|
||||||
|
- Move builds settings out of project settings and rename Pipelines
|
||||||
|
- Add builds badge to Pipelines settings page
|
||||||
|
- Export and import avatar as part of project import/export
|
||||||
|
- Fix migration corrupting import data for old version upgrades
|
||||||
|
- Show tooltip on GitLab export link in new project page
|
||||||
|
|
||||||
|
v 8.9.6
|
||||||
|
- Fix importing of events under notes for GitLab projects. !5154
|
||||||
|
- Fix log statements in import/export. !5129
|
||||||
|
- Fix commit avatar alignment in compare view. !5128
|
||||||
|
- Fix broken migration in MySQL. !5005
|
||||||
|
- Overwrite Host and X-Forwarded-Host headers in NGINX !5213
|
||||||
|
- Keeps issue number when importing from Gitlab.com
|
||||||
|
- Add Pending tab for Builds (Katarzyna Kobierska, Urszula Budziszewska)
|
||||||
|
|
||||||
|
v 8.9.7 (unreleased)
|
||||||
|
- Fix import_data wrongly saved as a result of an invalid import_url
|
||||||
|
|
||||||
|
v 8.9.6
|
||||||
|
- Fix importing of events under notes for GitLab projects
|
||||||
|
|
||||||
|
v 8.9.5
|
||||||
|
- Add more debug info to import/export and memory killer. !5108
|
||||||
|
- Fixed avatar alignment in new MR view. !5095
|
||||||
|
- Fix diff comments not showing up in activity feed. !5069
|
||||||
|
- Add index on both Award Emoji user and name. !5061
|
||||||
|
- Downgrade to Redis 3.2.2 due to massive memory leak with Sidekiq. !5056
|
||||||
|
- Re-enable import button when import process fails due to namespace already being taken. !5053
|
||||||
|
- Fix snippets comments not displayed. !5045
|
||||||
|
- Fix emoji paths in relative root configurations. !5027
|
||||||
|
- Fix issues importing events in Import/Export. !4987
|
||||||
|
- Fixed 'use shortcuts' button on docs. !4979
|
||||||
|
- Admin should be able to turn shared runners into specific ones. !4961
|
||||||
|
- Update RedCloth to 4.3.2 for CVE-2012-6684. !4929 (Takuya Noguchi)
|
||||||
|
- Improve the request / withdraw access button. !4860
|
||||||
|
|
||||||
|
v 8.9.4
|
||||||
|
- Fix privilege escalation issue with OAuth external users.
|
||||||
|
- Ensure references to private repos aren't shown to logged-out users.
|
||||||
|
- Fixed search field blur not removing focus. !4704
|
||||||
|
- Resolve "Sub nav isn't showing on file view". !4890
|
||||||
|
- Fixes middle click and double request when navigating through the file browser. !4891
|
||||||
|
- Fixed URL on label button when filtering. !4897
|
||||||
|
- Fixed commit avatar alignment. !4933
|
||||||
|
- Do not show build retry link when build is active. !4967
|
||||||
|
- Fix restore Rake task warning message output. !4980
|
||||||
|
- Handle external issues in IssueReferenceFilter. !4988
|
||||||
|
- Expiry date on pinned nav cookie. !5009
|
||||||
|
- Updated breakpoint for sidebar pinning. !5019
|
||||||
|
|
||||||
|
v 8.9.3
|
||||||
|
- Fix encrypted data backwards compatibility after upgrading attr_encrypted gem. !4963
|
||||||
|
- Fix rendering of commit notes. !4953
|
||||||
|
- Resolve "Pin should show up at 1280px min". !4947
|
||||||
|
- Switched mobile button icons to ellipsis and angle. !4944
|
||||||
|
- Correctly returns todo ID after creating todo. !4941
|
||||||
|
- Better debugging for memory killer middleware. !4936
|
||||||
|
- Remove duplicate new page btn from edit wiki. !4904
|
||||||
|
- Use clock_gettime for all performance timestamps. !4899
|
||||||
|
- Use memorized tags array when searching tags by name. !4859
|
||||||
|
- Fixed avatar alignment in new MR view. !4901
|
||||||
|
- Removed fade when filtering results. !4932
|
||||||
|
- Fix missing avatar on system notes. !4954
|
||||||
|
- Reduce overhead and optimize ProjectTeam#max_member_access performance. !4973
|
||||||
|
- Use update_columns to bypass all the dirty code on active_record. !4985
|
||||||
|
- Fix restore Rake task warning message output !4980
|
||||||
|
|
||||||
|
v 8.9.2
|
||||||
|
- Fix visibility of snippets when searching.
|
||||||
|
- Fix an information disclosure when requesting access to a group containing private projects.
|
||||||
|
- Update omniauth-saml to 1.6.0 !4951
|
||||||
|
|
||||||
|
v 8.9.1
|
||||||
|
- Refactor labels documentation. !3347
|
||||||
|
- Eager load award emoji on notes. !4628
|
||||||
|
- Fix some CI wording in documentation. !4660
|
||||||
|
- Document `GIT_STRATEGY` and `GIT_DEPTH`. !4720
|
||||||
|
- Add documentation for the export & import features. !4732
|
||||||
|
- Add some docs for Docker Registry configuration. !4738
|
||||||
|
- Ensure we don't send the "access request declined" email to access requesters on project deletion. !4744
|
||||||
|
- Display group/project access requesters separately in the admin area. !4798
|
||||||
|
- Add documentation and examples for configuring cloud storage for registry images. !4812
|
||||||
|
- Clarifies documentation about artifact expiry. !4831
|
||||||
|
- Fix the Network graph links. !4832
|
||||||
|
- Fix MR-auto-close text added to description. !4836
|
||||||
|
- Add documentation for award emoji now that comments can be awarded with emojis. !4839
|
||||||
|
- Fix typo in export failure email. !4847
|
||||||
|
- Fix header vertical centering. !4170
|
||||||
|
- Fix subsequent SAML sign ins. !4718
|
||||||
|
- Set button label when picking an option from status dropdown. !4771
|
||||||
|
- Prevent invalid URLs from raising exceptions in WikiLink Filter. !4775
|
||||||
|
- Handle external issues in IssueReferenceFilter. !4789
|
||||||
|
- Support for rendering/redacting multiple documents. !4828
|
||||||
|
- Update Todos documentation and screenshots to include new functionality. !4840
|
||||||
|
- Hide nav arrows by default. !4843
|
||||||
|
- Added bottom padding to label color suggestion link. !4845
|
||||||
|
- Use jQuery objects in ref dropdown. !4850
|
||||||
|
- Fix GitLab project import issues related to notes and builds. !4855
|
||||||
|
- Restrict header logo to 36px so it doesn't overflow. !4861
|
||||||
|
- Fix unwanted label unassignment. !4863
|
||||||
|
- Fix mobile Safari bug where horizontal nav arrows would flicker on scroll. !4869
|
||||||
|
- Restore old behavior around diff notes to outdated discussions. !4870
|
||||||
|
- Fix merge requests project settings help link anchor. !4873
|
||||||
|
- Fix 404 when accessing pipelines as guest user on public projects. !4881
|
||||||
|
- Remove width restriction for logo on sign-in page. !4888
|
||||||
|
- Bump gitlab_git to 10.2.3 to fix false truncated warnings with ISO-8559 files. !4884
|
||||||
|
- Apply selected value as label. !4886
|
||||||
|
- Change Retry to Re-deploy on Deployments page
|
||||||
|
- Fix temp file being deleted after the request while importing a GitLab project. !4894
|
||||||
|
- Fix pagination when sorting by columns with lots of ties (like priority)
|
||||||
|
- Implement Subresource Integrity for CSS and JavaScript assets. This prevents malicious assets from loading in the case of a CDN compromise.
|
||||||
|
- Fix user creation with stronger minimum password requirements !4054 (nathan-pmt)
|
||||||
|
- Fix a wrong MR status when merge_when_build_succeeds & project.only_allow_merge_if_build_succeeds are true. !4912
|
||||||
|
- Add SMTP as default delivery method to match gitlab-org/omnibus-gitlab!826. !4915
|
||||||
|
- Remove duplicate 'New Page' button on edit wiki page
|
||||||
|
|
||||||
|
v 8.9.0
|
||||||
|
- Fix group visibility form layout in application settings
|
||||||
- Fix builds API response not including commit data
|
- Fix builds API response not including commit data
|
||||||
- Fix error when CI job variables key specified but not defined
|
- Fix error when CI job variables key specified but not defined
|
||||||
- Fix pipeline status when there are no builds in pipeline
|
- Fix pipeline status when there are no builds in pipeline
|
||||||
|
@ -63,6 +382,8 @@ v 8.9.0 (unreleased)
|
||||||
- Limit email on push diff size to 30 files / 150 KB
|
- Limit email on push diff size to 30 files / 150 KB
|
||||||
- Add rake task 'gitlab:db:configure' for conditionally seeding or migrating the database
|
- Add rake task 'gitlab:db:configure' for conditionally seeding or migrating the database
|
||||||
- Changed the Slack build message to use the singular duration if necessary (Aran Koning)
|
- Changed the Slack build message to use the singular duration if necessary (Aran Koning)
|
||||||
|
- Fix race condition on merge when build succeeds
|
||||||
|
- Added shortcut to focus filter search fields and added documentation #18120
|
||||||
- Links from a wiki page to other wiki pages should be rewritten as expected
|
- Links from a wiki page to other wiki pages should be rewritten as expected
|
||||||
- Add option to project to only allow merge requests to be merged if the build succeeds (Rui Santos)
|
- Add option to project to only allow merge requests to be merged if the build succeeds (Rui Santos)
|
||||||
- Added navigation shortcuts to the project pipelines, milestones, builds and forks page. !4393
|
- Added navigation shortcuts to the project pipelines, milestones, builds and forks page. !4393
|
||||||
|
@ -95,6 +416,7 @@ v 8.9.0 (unreleased)
|
||||||
- Add Application Setting to configure Container Registry token expire delay (default 5min)
|
- Add Application Setting to configure Container Registry token expire delay (default 5min)
|
||||||
- Cache assigned issue and merge request counts in sidebar nav
|
- Cache assigned issue and merge request counts in sidebar nav
|
||||||
- Use Knapsack only in CI environment
|
- Use Knapsack only in CI environment
|
||||||
|
- Updated project creation page to match new UI #2542
|
||||||
- Cache project build count in sidebar nav
|
- Cache project build count in sidebar nav
|
||||||
- Add milestone expire date to the right sidebar
|
- Add milestone expire date to the right sidebar
|
||||||
- Manually mark a issue or merge request as a todo
|
- Manually mark a issue or merge request as a todo
|
||||||
|
@ -136,15 +458,6 @@ v 8.9.0 (unreleased)
|
||||||
- Remove tanuki logo from side navigation; center on top nav
|
- Remove tanuki logo from side navigation; center on top nav
|
||||||
- Include user relationships when retrieving award_emoji
|
- Include user relationships when retrieving award_emoji
|
||||||
- Various associations are now eager loaded when parsing issue references to reduce the number of queries executed
|
- Various associations are now eager loaded when parsing issue references to reduce the number of queries executed
|
||||||
|
|
||||||
v 8.8.5 (unreleased)
|
|
||||||
- Ensure branch cleanup regardless of whether the GitHub import process succeeds
|
|
||||||
- Fix todos page throwing errors when you have a project pending deletion
|
|
||||||
- Reduce number of SQL queries when rendering user references
|
|
||||||
- Import GitHub repositories respecting the API rate limit
|
|
||||||
- Fix importer for GitHub comments on diff
|
|
||||||
- Disable Webhooks before proceeding with the GitHub import
|
|
||||||
- Fix incremental trace upload API when using multi-byte UTF-8 chars in trace
|
|
||||||
- Set inverse_of for Project/Service association to reduce the number of queries
|
- Set inverse_of for Project/Service association to reduce the number of queries
|
||||||
- Update tanuki logo highlight/loading colors
|
- Update tanuki logo highlight/loading colors
|
||||||
- Remove explicit Gitlab::Metrics.action assignments, are already automatic.
|
- Remove explicit Gitlab::Metrics.action assignments, are already automatic.
|
||||||
|
@ -153,12 +466,21 @@ v 8.8.5 (unreleased)
|
||||||
- Filter parameters for request_uri value on instrumented transactions.
|
- Filter parameters for request_uri value on instrumented transactions.
|
||||||
- Remove duplicated keys add UNIQUE index to keys fingerprint column
|
- Remove duplicated keys add UNIQUE index to keys fingerprint column
|
||||||
- ExtractsPath get ref_names from repository cache, if not there access git.
|
- ExtractsPath get ref_names from repository cache, if not there access git.
|
||||||
|
- Show a flash warning about the error detail of XHR requests which failed with status code 404 and 500
|
||||||
- Cache user todo counts from TodoService
|
- Cache user todo counts from TodoService
|
||||||
- Ensure Todos counters doesn't count Todos for projects pending delete
|
- Ensure Todos counters doesn't count Todos for projects pending delete
|
||||||
- Add tooltip to pin/unpin navbar
|
|
||||||
- Add left/right arrows horizontal navigation
|
- Add left/right arrows horizontal navigation
|
||||||
|
- Add tooltip to pin/unpin navbar
|
||||||
- Add new sub nav style to Wiki and Graphs sub navigation
|
- Add new sub nav style to Wiki and Graphs sub navigation
|
||||||
|
|
||||||
|
v 8.8.7
|
||||||
|
- Fix privilege escalation issue with OAuth external users.
|
||||||
|
- Ensure references to private repos aren't shown to logged-out users.
|
||||||
|
|
||||||
|
v 8.8.6
|
||||||
|
- Fix visibility of snippets when searching.
|
||||||
|
- Update omniauth-saml to 1.6.0 !4951
|
||||||
|
|
||||||
v 8.8.5
|
v 8.8.5
|
||||||
- Import GitHub repositories respecting the API rate limit !4166
|
- Import GitHub repositories respecting the API rate limit !4166
|
||||||
- Fix todos page throwing errors when you have a project pending deletion !4300
|
- Fix todos page throwing errors when you have a project pending deletion !4300
|
||||||
|
@ -289,6 +611,14 @@ v 8.8.0
|
||||||
- When creating a .gitignore file a dropdown with templates will be provided
|
- When creating a .gitignore file a dropdown with templates will be provided
|
||||||
- Shows the issue/MR list search/filter form and corrects the mobile styling for guest users. #17562
|
- Shows the issue/MR list search/filter form and corrects the mobile styling for guest users. #17562
|
||||||
|
|
||||||
|
v 8.7.9
|
||||||
|
- Fix privilege escalation issue with OAuth external users.
|
||||||
|
- Ensure references to private repos aren't shown to logged-out users.
|
||||||
|
|
||||||
|
v 8.7.8
|
||||||
|
- Fix visibility of snippets when searching.
|
||||||
|
- Update omniauth-saml to 1.6.0 !4951
|
||||||
|
|
||||||
v 8.7.7
|
v 8.7.7
|
||||||
- Fix import by `Any Git URL` broken if the URL contains a space
|
- Fix import by `Any Git URL` broken if the URL contains a space
|
||||||
- Prevent unauthorized access to other projects build traces
|
- Prevent unauthorized access to other projects build traces
|
||||||
|
@ -2015,8 +2345,6 @@ v 7.7.0
|
||||||
- Fixes for edit comments: drag-n-drop images, preview mode, selecting images, save & update
|
- Fixes for edit comments: drag-n-drop images, preview mode, selecting images, save & update
|
||||||
- Remove password strength indicator
|
- Remove password strength indicator
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
v 7.6.0
|
v 7.6.0
|
||||||
- Fork repository to groups
|
- Fork repository to groups
|
||||||
- New rugged version
|
- New rugged version
|
||||||
|
@ -2442,13 +2770,13 @@ v 6.5.0
|
||||||
- Files API supports base64 encoded content (sponsored by O'Reilly Media)
|
- Files API supports base64 encoded content (sponsored by O'Reilly Media)
|
||||||
- Added support for Go's repository retrieval (Bruno Albuquerque)
|
- Added support for Go's repository retrieval (Bruno Albuquerque)
|
||||||
|
|
||||||
v6.4.3
|
v 6.4.3
|
||||||
- Don't use unicorn worker killer if PhusionPassenger is defined
|
- Don't use unicorn worker killer if PhusionPassenger is defined
|
||||||
|
|
||||||
v6.4.2
|
v 6.4.2
|
||||||
- Fixed wrong behaviour of script/upgrade.rb
|
- Fixed wrong behaviour of script/upgrade.rb
|
||||||
|
|
||||||
v6.4.1
|
v 6.4.1
|
||||||
- Fixed bug with repository rename
|
- Fixed bug with repository rename
|
||||||
- Fixed bug with project transfer
|
- Fixed bug with project transfer
|
||||||
|
|
||||||
|
|
|
@ -145,7 +145,8 @@ might be edited to make them small and simple.
|
||||||
You are encouraged to use the template below for feature proposals.
|
You are encouraged to use the template below for feature proposals.
|
||||||
|
|
||||||
```
|
```
|
||||||
## Description including problem, use cases, benefits, and/or goals
|
## Description
|
||||||
|
Include problem, use cases, benefits, and/or goals
|
||||||
|
|
||||||
## Proposal
|
## Proposal
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
3.0.0
|
3.2.1
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
0.7.5
|
0.7.8
|
||||||
|
|
139
Gemfile
|
@ -1,6 +1,6 @@
|
||||||
source "https://rubygems.org"
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
gem 'rails', '4.2.6'
|
gem 'rails', '4.2.7'
|
||||||
gem 'rails-deprecated_sanitizer', '~> 1.0.3'
|
gem 'rails-deprecated_sanitizer', '~> 1.0.3'
|
||||||
|
|
||||||
# Responders respond_to and respond_with
|
# Responders respond_to and respond_with
|
||||||
|
@ -11,15 +11,15 @@ gem 'responders', '~> 2.0'
|
||||||
gem 'sprockets', '~> 3.6.0'
|
gem 'sprockets', '~> 3.6.0'
|
||||||
|
|
||||||
# Default values for AR models
|
# Default values for AR models
|
||||||
gem "default_value_for", "~> 3.0.0"
|
gem 'default_value_for', '~> 3.0.0'
|
||||||
|
|
||||||
# Supported DBs
|
# Supported DBs
|
||||||
gem "mysql2", '~> 0.3.16', group: :mysql
|
gem 'mysql2', '~> 0.3.16', group: :mysql
|
||||||
gem "pg", '~> 0.18.2', group: :postgres
|
gem 'pg', '~> 0.18.2', group: :postgres
|
||||||
|
|
||||||
# Authentication libraries
|
# Authentication libraries
|
||||||
gem 'devise', '~> 4.0'
|
gem 'devise', '~> 4.0'
|
||||||
gem 'doorkeeper', '~> 3.1'
|
gem 'doorkeeper', '~> 4.0'
|
||||||
gem 'omniauth', '~> 1.3.1'
|
gem 'omniauth', '~> 1.3.1'
|
||||||
gem 'omniauth-auth0', '~> 1.4.1'
|
gem 'omniauth-auth0', '~> 1.4.1'
|
||||||
gem 'omniauth-azure-oauth2', '~> 0.0.6'
|
gem 'omniauth-azure-oauth2', '~> 0.0.6'
|
||||||
|
@ -28,9 +28,9 @@ gem 'omniauth-cas3', '~> 1.1.2'
|
||||||
gem 'omniauth-facebook', '~> 3.0.0'
|
gem 'omniauth-facebook', '~> 3.0.0'
|
||||||
gem 'omniauth-github', '~> 1.1.1'
|
gem 'omniauth-github', '~> 1.1.1'
|
||||||
gem 'omniauth-gitlab', '~> 1.0.0'
|
gem 'omniauth-gitlab', '~> 1.0.0'
|
||||||
gem 'omniauth-google-oauth2', '~> 0.2.0'
|
gem 'omniauth-google-oauth2', '~> 0.4.1'
|
||||||
gem 'omniauth-kerberos', '~> 0.3.0', group: :kerberos
|
gem 'omniauth-kerberos', '~> 0.3.0', group: :kerberos
|
||||||
gem 'omniauth-saml', '~> 1.5.0'
|
gem 'omniauth-saml', '~> 1.6.0'
|
||||||
gem 'omniauth-shibboleth', '~> 1.2.0'
|
gem 'omniauth-shibboleth', '~> 1.2.0'
|
||||||
gem 'omniauth-twitter', '~> 1.2.0'
|
gem 'omniauth-twitter', '~> 1.2.0'
|
||||||
gem 'omniauth_crowd', '~> 2.2.0'
|
gem 'omniauth_crowd', '~> 2.2.0'
|
||||||
|
@ -48,24 +48,24 @@ gem 'attr_encrypted', '~> 3.0.0'
|
||||||
gem 'u2f', '~> 0.2.1'
|
gem 'u2f', '~> 0.2.1'
|
||||||
|
|
||||||
# Browser detection
|
# Browser detection
|
||||||
gem "browser", '~> 2.2'
|
gem 'browser', '~> 2.2'
|
||||||
|
|
||||||
# Extracting information from a git repository
|
# Extracting information from a git repository
|
||||||
# Provide access to Gitlab::Git library
|
# Provide access to Gitlab::Git library
|
||||||
gem "gitlab_git", '~> 10.2'
|
gem 'gitlab_git', '~> 10.3.2'
|
||||||
|
|
||||||
# LDAP Auth
|
# LDAP Auth
|
||||||
# GitLab fork with several improvements to original library. For full list of changes
|
# GitLab fork with several improvements to original library. For full list of changes
|
||||||
# see https://github.com/intridea/omniauth-ldap/compare/master...gitlabhq:master
|
# see https://github.com/intridea/omniauth-ldap/compare/master...gitlabhq:master
|
||||||
gem 'gitlab_omniauth-ldap', '~> 1.2.1', require: "omniauth-ldap"
|
gem 'gitlab_omniauth-ldap', '~> 1.2.1', require: 'omniauth-ldap'
|
||||||
|
|
||||||
# Git Wiki
|
# Git Wiki
|
||||||
# Required manually in config/initializers/gollum.rb to control load order
|
# Required manually in config/initializers/gollum.rb to control load order
|
||||||
gem 'gollum-lib', '~> 4.1.0', require: false
|
gem 'gollum-lib', '~> 4.2', require: false
|
||||||
gem 'gollum-rugged_adapter', '~> 0.4.2', require: false
|
gem 'gollum-rugged_adapter', '~> 0.4.2', require: false
|
||||||
|
|
||||||
# Language detection
|
# Language detection
|
||||||
gem "github-linguist", "~> 4.7.0", require: "linguist"
|
gem 'github-linguist', '~> 4.7.0', require: 'linguist'
|
||||||
|
|
||||||
# API
|
# API
|
||||||
gem 'grape', '~> 0.13.0'
|
gem 'grape', '~> 0.13.0'
|
||||||
|
@ -73,13 +73,13 @@ gem 'grape-entity', '~> 0.4.2'
|
||||||
gem 'rack-cors', '~> 0.4.0', require: 'rack/cors'
|
gem 'rack-cors', '~> 0.4.0', require: 'rack/cors'
|
||||||
|
|
||||||
# Pagination
|
# Pagination
|
||||||
gem "kaminari", "~> 0.17.0"
|
gem 'kaminari', '~> 0.17.0'
|
||||||
|
|
||||||
# HAML
|
# HAML
|
||||||
gem "haml-rails", '~> 0.9.0'
|
gem 'hamlit', '~> 2.5'
|
||||||
|
|
||||||
# Files attachments
|
# Files attachments
|
||||||
gem "carrierwave", '~> 0.10.0'
|
gem 'carrierwave', '~> 0.10.0'
|
||||||
|
|
||||||
# Drag and Drop UI
|
# Drag and Drop UI
|
||||||
gem 'dropzonejs-rails', '~> 0.7.1'
|
gem 'dropzonejs-rails', '~> 0.7.1'
|
||||||
|
@ -91,28 +91,29 @@ gem 'fog-core', '~> 1.40'
|
||||||
gem 'fog-local', '~> 0.3'
|
gem 'fog-local', '~> 0.3'
|
||||||
gem 'fog-google', '~> 0.3'
|
gem 'fog-google', '~> 0.3'
|
||||||
gem 'fog-openstack', '~> 0.1'
|
gem 'fog-openstack', '~> 0.1'
|
||||||
|
gem 'fog-rackspace', '~> 0.1.1'
|
||||||
|
|
||||||
# for aws storage
|
# for aws storage
|
||||||
gem "unf", '~> 0.1.4'
|
gem 'unf', '~> 0.1.4'
|
||||||
|
|
||||||
# Authorization
|
# Authorization
|
||||||
gem "six", '~> 0.2.0'
|
gem 'six', '~> 0.2.0'
|
||||||
|
|
||||||
# Seed data
|
# Seed data
|
||||||
gem "seed-fu", '~> 2.3.5'
|
gem 'seed-fu', '~> 2.3.5'
|
||||||
|
|
||||||
# Markdown and HTML processing
|
# Markdown and HTML processing
|
||||||
gem 'html-pipeline', '~> 1.11.0'
|
gem 'html-pipeline', '~> 1.11.0'
|
||||||
gem 'task_list', '~> 1.0.2', require: 'task_list/railtie'
|
gem 'task_list', '~> 1.0.2', require: 'task_list/railtie'
|
||||||
gem 'github-markup', '~> 1.3.1'
|
gem 'github-markup', '~> 1.4'
|
||||||
gem 'redcarpet', '~> 3.3.3'
|
gem 'redcarpet', '~> 3.3.3'
|
||||||
gem 'RedCloth', '~> 4.2.9'
|
gem 'RedCloth', '~> 4.3.2'
|
||||||
gem 'rdoc', '~>3.6'
|
gem 'rdoc', '~>3.6'
|
||||||
gem 'org-ruby', '~> 0.9.12'
|
gem 'org-ruby', '~> 0.9.12'
|
||||||
gem 'creole', '~> 0.5.0'
|
gem 'creole', '~> 0.5.0'
|
||||||
gem 'wikicloth', '0.8.1'
|
gem 'wikicloth', '0.8.1'
|
||||||
gem 'asciidoctor', '~> 1.5.2'
|
gem 'asciidoctor', '~> 1.5.2'
|
||||||
gem 'rouge', '~> 1.11'
|
gem 'rouge', '~> 2.0'
|
||||||
|
|
||||||
# See https://groups.google.com/forum/#!topic/ruby-security-ann/aSbgDiwb24s
|
# See https://groups.google.com/forum/#!topic/ruby-security-ann/aSbgDiwb24s
|
||||||
# and https://groups.google.com/forum/#!topic/ruby-security-ann/Dy7YiKb_pMM
|
# and https://groups.google.com/forum/#!topic/ruby-security-ann/Dy7YiKb_pMM
|
||||||
|
@ -123,29 +124,29 @@ gem 'diffy', '~> 3.0.3'
|
||||||
|
|
||||||
# Application server
|
# Application server
|
||||||
group :unicorn do
|
group :unicorn do
|
||||||
gem "unicorn", '~> 4.9.0'
|
gem 'unicorn', '~> 4.9.0'
|
||||||
gem 'unicorn-worker-killer', '~> 0.4.2'
|
gem 'unicorn-worker-killer', '~> 0.4.2'
|
||||||
end
|
end
|
||||||
|
|
||||||
# State machine
|
# State machine
|
||||||
gem "state_machines-activerecord", '~> 0.4.0'
|
gem 'state_machines-activerecord', '~> 0.4.0'
|
||||||
# Run events after state machine commits
|
# Run events after state machine commits
|
||||||
gem 'after_commit_queue'
|
gem 'after_commit_queue', '~> 1.3.0'
|
||||||
|
|
||||||
# Issue tags
|
# Issue tags
|
||||||
gem 'acts-as-taggable-on', '~> 3.4'
|
gem 'acts-as-taggable-on', '~> 3.4'
|
||||||
|
|
||||||
# Background jobs
|
# Background jobs
|
||||||
gem 'sinatra', '~> 1.4.4', require: nil
|
gem 'sinatra', '~> 1.4.4', require: false
|
||||||
gem 'sidekiq', '~> 4.0'
|
gem 'sidekiq', '~> 4.0'
|
||||||
gem 'sidekiq-cron', '~> 0.4.0'
|
gem 'sidekiq-cron', '~> 0.4.0'
|
||||||
gem 'redis-namespace'
|
gem 'redis-namespace', '~> 1.5.2'
|
||||||
|
|
||||||
# HTTP requests
|
# HTTP requests
|
||||||
gem "httparty", '~> 0.13.3'
|
gem 'httparty', '~> 0.13.3'
|
||||||
|
|
||||||
# Colored output to console
|
# Colored output to console
|
||||||
gem "rainbow", '~> 2.1.0'
|
gem 'rainbow', '~> 2.1.0'
|
||||||
|
|
||||||
# GitLab settings
|
# GitLab settings
|
||||||
gem 'settingslogic', '~> 2.0.9'
|
gem 'settingslogic', '~> 2.0.9'
|
||||||
|
@ -155,7 +156,7 @@ gem 'settingslogic', '~> 2.0.9'
|
||||||
gem 'version_sorter', '~> 2.0.0'
|
gem 'version_sorter', '~> 2.0.0'
|
||||||
|
|
||||||
# Cache
|
# Cache
|
||||||
gem "redis-rails", '~> 4.0.0'
|
gem 'redis-rails', '~> 4.0.0'
|
||||||
|
|
||||||
# Redis
|
# Redis
|
||||||
gem 'redis', '~> 3.2'
|
gem 'redis', '~> 3.2'
|
||||||
|
@ -168,13 +169,13 @@ gem 'tinder', '~> 1.10.0'
|
||||||
gem 'hipchat', '~> 1.5.0'
|
gem 'hipchat', '~> 1.5.0'
|
||||||
|
|
||||||
# Flowdock integration
|
# Flowdock integration
|
||||||
gem "gitlab-flowdock-git-hook", "~> 1.0.1"
|
gem 'gitlab-flowdock-git-hook', '~> 1.0.1'
|
||||||
|
|
||||||
# Gemnasium integration
|
# Gemnasium integration
|
||||||
gem "gemnasium-gitlab-service", "~> 0.2"
|
gem 'gemnasium-gitlab-service', '~> 0.2'
|
||||||
|
|
||||||
# Slack integration
|
# Slack integration
|
||||||
gem "slack-notifier", "~> 1.2.0"
|
gem 'slack-notifier', '~> 1.2.0'
|
||||||
|
|
||||||
# Asana integration
|
# Asana integration
|
||||||
gem 'asana', '~> 0.4.0'
|
gem 'asana', '~> 0.4.0'
|
||||||
|
@ -186,20 +187,20 @@ gem 'ruby-fogbugz', '~> 0.2.1'
|
||||||
gem 'd3_rails', '~> 3.5.0'
|
gem 'd3_rails', '~> 3.5.0'
|
||||||
|
|
||||||
# underscore-rails
|
# underscore-rails
|
||||||
gem "underscore-rails", "~> 1.8.0"
|
gem 'underscore-rails', '~> 1.8.0'
|
||||||
|
|
||||||
# Sanitize user input
|
# Sanitize user input
|
||||||
gem "sanitize", '~> 2.0'
|
gem 'sanitize', '~> 2.0'
|
||||||
gem 'babosa', '~> 1.0.2'
|
gem 'babosa', '~> 1.0.2'
|
||||||
|
|
||||||
# Sanitizes SVG input
|
# Sanitizes SVG input
|
||||||
gem "loofah", "~> 2.0.3"
|
gem 'loofah', '~> 2.0.3'
|
||||||
|
|
||||||
# Working with license
|
# Working with license
|
||||||
gem 'licensee', '~> 8.0.0'
|
gem 'licensee', '~> 8.0.0'
|
||||||
|
|
||||||
# Protect against bruteforcing
|
# Protect against bruteforcing
|
||||||
gem "rack-attack", '~> 4.3.1'
|
gem 'rack-attack', '~> 4.3.1'
|
||||||
|
|
||||||
# Ace editor
|
# Ace editor
|
||||||
gem 'ace-rails-ap', '~> 4.0.2'
|
gem 'ace-rails-ap', '~> 4.0.2'
|
||||||
|
@ -213,16 +214,16 @@ gem 'charlock_holmes', '~> 0.7.3'
|
||||||
# Parse duration
|
# Parse duration
|
||||||
gem 'chronic_duration', '~> 0.10.6'
|
gem 'chronic_duration', '~> 0.10.6'
|
||||||
|
|
||||||
gem "sass-rails", '~> 5.0.0'
|
gem 'sass-rails', '~> 5.0.0'
|
||||||
gem "coffee-rails", '~> 4.1.0'
|
gem 'coffee-rails', '~> 4.1.0'
|
||||||
gem "uglifier", '~> 2.7.2'
|
gem 'uglifier', '~> 2.7.2'
|
||||||
gem 'turbolinks', '~> 2.5.0'
|
gem 'turbolinks', '~> 2.5.0'
|
||||||
gem 'jquery-turbolinks', '~> 2.1.0'
|
gem 'jquery-turbolinks', '~> 2.1.0'
|
||||||
|
|
||||||
gem 'addressable', '~> 2.3.8'
|
gem 'addressable', '~> 2.3.8'
|
||||||
gem 'bootstrap-sass', '~> 3.3.0'
|
gem 'bootstrap-sass', '~> 3.3.0'
|
||||||
gem 'font-awesome-rails', '~> 4.6.1'
|
gem 'font-awesome-rails', '~> 4.6.1'
|
||||||
gem 'gitlab_emoji', '~> 0.3.0'
|
gem 'gemojione', '~> 3.0'
|
||||||
gem 'gon', '~> 6.0.1'
|
gem 'gon', '~> 6.0.1'
|
||||||
gem 'jquery-atwho-rails', '~> 1.3.2'
|
gem 'jquery-atwho-rails', '~> 1.3.2'
|
||||||
gem 'jquery-rails', '~> 4.1.0'
|
gem 'jquery-rails', '~> 4.1.0'
|
||||||
|
@ -234,7 +235,7 @@ gem 'net-ssh', '~> 3.0.1'
|
||||||
gem 'base32', '~> 0.3.0'
|
gem 'base32', '~> 0.3.0'
|
||||||
|
|
||||||
# Sentry integration
|
# Sentry integration
|
||||||
gem 'sentry-raven', '~> 0.15'
|
gem 'sentry-raven', '~> 1.1.0'
|
||||||
|
|
||||||
gem 'premailer-rails', '~> 1.9.0'
|
gem 'premailer-rails', '~> 1.9.0'
|
||||||
|
|
||||||
|
@ -246,14 +247,13 @@ group :metrics do
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
gem "foreman"
|
gem 'foreman', '~> 0.78.0'
|
||||||
gem 'brakeman', '~> 3.3.0', require: false
|
gem 'brakeman', '~> 3.3.0', require: false
|
||||||
|
|
||||||
gem 'letter_opener_web', '~> 1.3.0'
|
gem 'letter_opener_web', '~> 1.3.0'
|
||||||
gem 'quiet_assets', '~> 1.0.2'
|
|
||||||
gem 'rerun', '~> 0.11.0'
|
gem 'rerun', '~> 0.11.0'
|
||||||
gem 'bullet', require: false
|
gem 'bullet', '~> 5.0.0', require: false
|
||||||
gem 'rblineprof', platform: :mri, require: false
|
gem 'rblineprof', '~> 0.3.6', platform: :mri, require: false
|
||||||
gem 'web-console', '~> 2.0'
|
gem 'web-console', '~> 2.0'
|
||||||
|
|
||||||
# Better errors handler
|
# Better errors handler
|
||||||
|
@ -261,23 +261,23 @@ group :development do
|
||||||
gem 'binding_of_caller', '~> 0.7.2'
|
gem 'binding_of_caller', '~> 0.7.2'
|
||||||
|
|
||||||
# Docs generator
|
# Docs generator
|
||||||
gem "sdoc", '~> 0.3.20'
|
gem 'sdoc', '~> 0.3.20'
|
||||||
|
|
||||||
# thin instead webrick
|
# thin instead webrick
|
||||||
gem 'thin', '~> 1.6.1'
|
gem 'thin', '~> 1.7.0'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
gem 'byebug', platform: :mri
|
gem 'byebug', '~> 8.2.1', platform: :mri
|
||||||
gem 'pry-rails'
|
gem 'pry-rails', '~> 0.3.4'
|
||||||
|
|
||||||
gem 'awesome_print', '~> 1.2.0', require: false
|
gem 'awesome_print', '~> 1.2.0', require: false
|
||||||
gem 'fuubar', '~> 2.0.0'
|
gem 'fuubar', '~> 2.0.0'
|
||||||
|
|
||||||
gem 'database_cleaner', '~> 1.4.0'
|
gem 'database_cleaner', '~> 1.4.0'
|
||||||
gem 'factory_girl_rails', '~> 4.6.0'
|
gem 'factory_girl_rails', '~> 4.6.0'
|
||||||
gem 'rspec-rails', '~> 3.4.0'
|
gem 'rspec-rails', '~> 3.5.0'
|
||||||
gem 'rspec-retry'
|
gem 'rspec-retry', '~> 0.4.5'
|
||||||
gem 'spinach-rails', '~> 0.2.1'
|
gem 'spinach-rails', '~> 0.2.1'
|
||||||
gem 'spinach-rerun-reporter', '~> 0.0.2'
|
gem 'spinach-rerun-reporter', '~> 0.0.2'
|
||||||
|
|
||||||
|
@ -299,19 +299,18 @@ group :development, :test do
|
||||||
gem 'spring-commands-spinach', '~> 1.1.0'
|
gem 'spring-commands-spinach', '~> 1.1.0'
|
||||||
gem 'spring-commands-teaspoon', '~> 0.0.2'
|
gem 'spring-commands-teaspoon', '~> 0.0.2'
|
||||||
|
|
||||||
gem 'rubocop', '~> 0.40.0', require: false
|
gem 'rubocop', '~> 0.41.2', require: false
|
||||||
gem 'rubocop-rspec', '~> 1.5.0', require: false
|
gem 'rubocop-rspec', '~> 1.5.0', require: false
|
||||||
gem 'scss_lint', '~> 0.47.0', require: false
|
gem 'scss_lint', '~> 0.47.0', require: false
|
||||||
gem 'coveralls', '~> 0.8.2', require: false
|
|
||||||
gem 'simplecov', '~> 0.11.0', require: false
|
gem 'simplecov', '~> 0.11.0', require: false
|
||||||
gem 'flog', require: false
|
gem 'flog', '~> 4.3.2', require: false
|
||||||
gem 'flay', require: false
|
gem 'flay', '~> 2.6.1', require: false
|
||||||
gem 'bundler-audit', require: false
|
gem 'bundler-audit', '~> 0.5.0', require: false
|
||||||
|
|
||||||
gem 'benchmark-ips', require: false
|
gem 'benchmark-ips', '~> 2.3.0', require: false
|
||||||
|
|
||||||
gem "license_finder", require: false
|
gem 'license_finder', '~> 2.1.0', require: false
|
||||||
gem 'knapsack'
|
gem 'knapsack', '~> 1.11.0'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
|
@ -319,30 +318,34 @@ group :test do
|
||||||
gem 'email_spec', '~> 1.6.0'
|
gem 'email_spec', '~> 1.6.0'
|
||||||
gem 'webmock', '~> 1.21.0'
|
gem 'webmock', '~> 1.21.0'
|
||||||
gem 'test_after_commit', '~> 0.4.2'
|
gem 'test_after_commit', '~> 0.4.2'
|
||||||
gem 'sham_rack'
|
gem 'sham_rack', '~> 1.3.6'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :production do
|
group :production do
|
||||||
gem "gitlab_meta", '7.0'
|
gem 'gitlab_meta', '7.0'
|
||||||
end
|
end
|
||||||
|
|
||||||
gem "newrelic_rpm", '~> 3.14'
|
gem 'newrelic_rpm', '~> 3.14'
|
||||||
|
|
||||||
gem 'octokit', '~> 4.3.0'
|
gem 'octokit', '~> 4.3.0'
|
||||||
|
|
||||||
gem "mail_room", "~> 0.8"
|
gem 'mail_room', '~> 0.8'
|
||||||
|
|
||||||
gem 'email_reply_parser', '~> 0.5.8'
|
gem 'email_reply_parser', '~> 0.5.8'
|
||||||
|
|
||||||
## CI
|
## CI
|
||||||
gem 'activerecord-session_store', '~> 1.0.0'
|
gem 'activerecord-session_store', '~> 1.0.0'
|
||||||
gem "nested_form", '~> 0.3.2'
|
gem 'nested_form', '~> 0.3.2'
|
||||||
|
|
||||||
# OAuth
|
# OAuth
|
||||||
gem 'oauth2', '~> 1.0.0'
|
gem 'oauth2', '~> 1.2.0'
|
||||||
|
|
||||||
# Soft deletion
|
# Soft deletion
|
||||||
gem "paranoia", "~> 2.0"
|
gem 'paranoia', '~> 2.0'
|
||||||
|
|
||||||
# Health check
|
# Health check
|
||||||
gem 'health_check', '~> 1.5.1'
|
gem 'health_check', '~> 2.1.0'
|
||||||
|
|
||||||
|
# System information
|
||||||
|
gem 'vmstat', '~> 2.1.1'
|
||||||
|
gem 'sys-filesystem', '~> 1.1.6'
|
||||||
|
|
288
Gemfile.lock
|
@ -1,36 +1,36 @@
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
RedCloth (4.2.9)
|
RedCloth (4.3.2)
|
||||||
ace-rails-ap (4.0.2)
|
ace-rails-ap (4.0.2)
|
||||||
actionmailer (4.2.6)
|
actionmailer (4.2.7)
|
||||||
actionpack (= 4.2.6)
|
actionpack (= 4.2.7)
|
||||||
actionview (= 4.2.6)
|
actionview (= 4.2.7)
|
||||||
activejob (= 4.2.6)
|
activejob (= 4.2.7)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
actionpack (4.2.6)
|
actionpack (4.2.7)
|
||||||
actionview (= 4.2.6)
|
actionview (= 4.2.7)
|
||||||
activesupport (= 4.2.6)
|
activesupport (= 4.2.7)
|
||||||
rack (~> 1.6)
|
rack (~> 1.6)
|
||||||
rack-test (~> 0.6.2)
|
rack-test (~> 0.6.2)
|
||||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||||
actionview (4.2.6)
|
actionview (4.2.7)
|
||||||
activesupport (= 4.2.6)
|
activesupport (= 4.2.7)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubis (~> 2.7.0)
|
erubis (~> 2.7.0)
|
||||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||||
activejob (4.2.6)
|
activejob (4.2.7)
|
||||||
activesupport (= 4.2.6)
|
activesupport (= 4.2.7)
|
||||||
globalid (>= 0.3.0)
|
globalid (>= 0.3.0)
|
||||||
activemodel (4.2.6)
|
activemodel (4.2.7)
|
||||||
activesupport (= 4.2.6)
|
activesupport (= 4.2.7)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
activerecord (4.2.6)
|
activerecord (4.2.7)
|
||||||
activemodel (= 4.2.6)
|
activemodel (= 4.2.7)
|
||||||
activesupport (= 4.2.6)
|
activesupport (= 4.2.7)
|
||||||
arel (~> 6.0)
|
arel (~> 6.0)
|
||||||
activerecord-session_store (1.0.0)
|
activerecord-session_store (1.0.0)
|
||||||
actionpack (>= 4.0, < 5.1)
|
actionpack (>= 4.0, < 5.1)
|
||||||
|
@ -38,7 +38,7 @@ GEM
|
||||||
multi_json (~> 1.11, >= 1.11.2)
|
multi_json (~> 1.11, >= 1.11.2)
|
||||||
rack (>= 1.5.2, < 3)
|
rack (>= 1.5.2, < 3)
|
||||||
railties (>= 4.0, < 5.1)
|
railties (>= 4.0, < 5.1)
|
||||||
activesupport (4.2.6)
|
activesupport (4.2.7)
|
||||||
i18n (~> 0.7)
|
i18n (~> 0.7)
|
||||||
json (~> 1.7, >= 1.7.7)
|
json (~> 1.7, >= 1.7.7)
|
||||||
minitest (~> 5.1)
|
minitest (~> 5.1)
|
||||||
|
@ -58,7 +58,7 @@ GEM
|
||||||
faraday_middleware-multi_json (~> 0.0)
|
faraday_middleware-multi_json (~> 0.0)
|
||||||
oauth2 (~> 1.0)
|
oauth2 (~> 1.0)
|
||||||
asciidoctor (1.5.3)
|
asciidoctor (1.5.3)
|
||||||
ast (2.2.0)
|
ast (2.3.0)
|
||||||
attr_encrypted (3.0.1)
|
attr_encrypted (3.0.1)
|
||||||
encryptor (~> 3.0.0)
|
encryptor (~> 3.0.0)
|
||||||
attr_required (1.0.0)
|
attr_required (1.0.0)
|
||||||
|
@ -141,12 +141,6 @@ GEM
|
||||||
colorize (0.7.7)
|
colorize (0.7.7)
|
||||||
concurrent-ruby (1.0.2)
|
concurrent-ruby (1.0.2)
|
||||||
connection_pool (2.2.0)
|
connection_pool (2.2.0)
|
||||||
coveralls (0.8.13)
|
|
||||||
json (~> 1.8)
|
|
||||||
simplecov (~> 0.11.0)
|
|
||||||
term-ansicolor (~> 1.3)
|
|
||||||
thor (~> 0.19.1)
|
|
||||||
tins (~> 1.6.0)
|
|
||||||
crack (0.4.3)
|
crack (0.4.3)
|
||||||
safe_yaml (~> 1.0.0)
|
safe_yaml (~> 1.0.0)
|
||||||
creole (0.5.0)
|
creole (0.5.0)
|
||||||
|
@ -177,8 +171,8 @@ GEM
|
||||||
diff-lcs (1.2.5)
|
diff-lcs (1.2.5)
|
||||||
diffy (3.0.7)
|
diffy (3.0.7)
|
||||||
docile (1.1.5)
|
docile (1.1.5)
|
||||||
doorkeeper (3.1.0)
|
doorkeeper (4.0.0)
|
||||||
railties (>= 3.2)
|
railties (>= 4.2)
|
||||||
dropzonejs-rails (0.7.2)
|
dropzonejs-rails (0.7.2)
|
||||||
rails (> 3.1)
|
rails (> 3.1)
|
||||||
email_reply_parser (0.5.8)
|
email_reply_parser (0.5.8)
|
||||||
|
@ -243,6 +237,11 @@ GEM
|
||||||
fog-core (>= 1.39)
|
fog-core (>= 1.39)
|
||||||
fog-json (>= 1.0)
|
fog-json (>= 1.0)
|
||||||
ipaddress (>= 0.8)
|
ipaddress (>= 0.8)
|
||||||
|
fog-rackspace (0.1.1)
|
||||||
|
fog-core (>= 1.35)
|
||||||
|
fog-json (>= 1.0)
|
||||||
|
fog-xml (>= 0.1)
|
||||||
|
ipaddress (>= 0.8)
|
||||||
fog-xml (0.1.2)
|
fog-xml (0.1.2)
|
||||||
fog-core
|
fog-core
|
||||||
nokogiri (~> 1.5, >= 1.5.11)
|
nokogiri (~> 1.5, >= 1.5.11)
|
||||||
|
@ -256,7 +255,7 @@ GEM
|
||||||
ruby-progressbar (~> 1.4)
|
ruby-progressbar (~> 1.4)
|
||||||
gemnasium-gitlab-service (0.2.6)
|
gemnasium-gitlab-service (0.2.6)
|
||||||
rugged (~> 0.21)
|
rugged (~> 0.21)
|
||||||
gemojione (2.2.1)
|
gemojione (3.0.1)
|
||||||
json
|
json
|
||||||
get_process_mem (0.2.0)
|
get_process_mem (0.2.0)
|
||||||
gherkin-ruby (0.3.2)
|
gherkin-ruby (0.3.2)
|
||||||
|
@ -265,7 +264,7 @@ GEM
|
||||||
escape_utils (~> 1.1.0)
|
escape_utils (~> 1.1.0)
|
||||||
mime-types (>= 1.19)
|
mime-types (>= 1.19)
|
||||||
rugged (>= 0.23.0b)
|
rugged (>= 0.23.0b)
|
||||||
github-markup (1.3.3)
|
github-markup (1.4.0)
|
||||||
gitlab-flowdock-git-hook (1.0.1)
|
gitlab-flowdock-git-hook (1.0.1)
|
||||||
flowdock (~> 0.7)
|
flowdock (~> 0.7)
|
||||||
gitlab-grit (>= 2.4.1)
|
gitlab-grit (>= 2.4.1)
|
||||||
|
@ -275,9 +274,7 @@ GEM
|
||||||
diff-lcs (~> 1.1)
|
diff-lcs (~> 1.1)
|
||||||
mime-types (>= 1.16, < 3)
|
mime-types (>= 1.16, < 3)
|
||||||
posix-spawn (~> 0.3)
|
posix-spawn (~> 0.3)
|
||||||
gitlab_emoji (0.3.1)
|
gitlab_git (10.3.2)
|
||||||
gemojione (~> 2.2, >= 2.2.1)
|
|
||||||
gitlab_git (10.2.0)
|
|
||||||
activesupport (~> 4.0)
|
activesupport (~> 4.0)
|
||||||
charlock_holmes (~> 0.7.3)
|
charlock_holmes (~> 0.7.3)
|
||||||
github-linguist (~> 4.7.0)
|
github-linguist (~> 4.7.0)
|
||||||
|
@ -290,13 +287,13 @@ GEM
|
||||||
rubyntlm (~> 0.3)
|
rubyntlm (~> 0.3)
|
||||||
globalid (0.3.6)
|
globalid (0.3.6)
|
||||||
activesupport (>= 4.1.0)
|
activesupport (>= 4.1.0)
|
||||||
gollum-grit_adapter (1.0.0)
|
gollum-grit_adapter (1.0.1)
|
||||||
gitlab-grit (~> 2.7, >= 2.7.1)
|
gitlab-grit (~> 2.7, >= 2.7.1)
|
||||||
gollum-lib (4.1.0)
|
gollum-lib (4.2.1)
|
||||||
github-markup (~> 1.3.3)
|
github-markup (~> 1.4.0)
|
||||||
gollum-grit_adapter (~> 1.0)
|
gollum-grit_adapter (~> 1.0)
|
||||||
nokogiri (~> 1.6.4)
|
nokogiri (~> 1.6.4)
|
||||||
rouge (~> 1.9)
|
rouge (~> 2.0)
|
||||||
sanitize (~> 2.1.0)
|
sanitize (~> 2.1.0)
|
||||||
stringex (~> 2.5.1)
|
stringex (~> 2.5.1)
|
||||||
gollum-rugged_adapter (0.4.2)
|
gollum-rugged_adapter (0.4.2)
|
||||||
|
@ -320,28 +317,19 @@ GEM
|
||||||
grape-entity (0.4.8)
|
grape-entity (0.4.8)
|
||||||
activesupport
|
activesupport
|
||||||
multi_json (>= 1.3.2)
|
multi_json (>= 1.3.2)
|
||||||
haml (4.0.7)
|
hamlit (2.5.0)
|
||||||
|
temple (~> 0.7.6)
|
||||||
|
thor
|
||||||
tilt
|
tilt
|
||||||
haml-rails (0.9.0)
|
|
||||||
actionpack (>= 4.0.1)
|
|
||||||
activesupport (>= 4.0.1)
|
|
||||||
haml (>= 4.0.6, < 5.0)
|
|
||||||
html2haml (>= 1.0.1)
|
|
||||||
railties (>= 4.0.1)
|
|
||||||
hashie (3.4.3)
|
hashie (3.4.3)
|
||||||
health_check (1.5.1)
|
health_check (2.1.0)
|
||||||
rails (>= 2.3.0)
|
rails (>= 4.0)
|
||||||
hipchat (1.5.2)
|
hipchat (1.5.2)
|
||||||
httparty
|
httparty
|
||||||
mimemagic
|
mimemagic
|
||||||
html-pipeline (1.11.0)
|
html-pipeline (1.11.0)
|
||||||
activesupport (>= 2)
|
activesupport (>= 2)
|
||||||
nokogiri (~> 1.4)
|
nokogiri (~> 1.4)
|
||||||
html2haml (2.0.0)
|
|
||||||
erubis (~> 2.7.0)
|
|
||||||
haml (~> 4.0.0)
|
|
||||||
nokogiri (~> 1.6.0)
|
|
||||||
ruby_parser (~> 3.5)
|
|
||||||
htmlentities (4.3.4)
|
htmlentities (4.3.4)
|
||||||
http_parser.rb (0.5.3)
|
http_parser.rb (0.5.3)
|
||||||
httparty (0.13.7)
|
httparty (0.13.7)
|
||||||
|
@ -365,7 +353,7 @@ GEM
|
||||||
jquery-ui-rails (5.0.5)
|
jquery-ui-rails (5.0.5)
|
||||||
railties (>= 3.2.16)
|
railties (>= 3.2.16)
|
||||||
json (1.8.3)
|
json (1.8.3)
|
||||||
jwt (1.5.2)
|
jwt (1.5.4)
|
||||||
kaminari (0.17.0)
|
kaminari (0.17.0)
|
||||||
actionpack (>= 3.0.0)
|
actionpack (>= 3.0.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
|
@ -405,7 +393,7 @@ GEM
|
||||||
mini_portile2 (2.1.0)
|
mini_portile2 (2.1.0)
|
||||||
minitest (5.7.0)
|
minitest (5.7.0)
|
||||||
mousetrap-rails (1.4.6)
|
mousetrap-rails (1.4.6)
|
||||||
multi_json (1.11.2)
|
multi_json (1.12.1)
|
||||||
multi_xml (0.5.5)
|
multi_xml (0.5.5)
|
||||||
multipart-post (2.0.0)
|
multipart-post (2.0.0)
|
||||||
mysql2 (0.3.20)
|
mysql2 (0.3.20)
|
||||||
|
@ -418,12 +406,12 @@ GEM
|
||||||
pkg-config (~> 1.1.7)
|
pkg-config (~> 1.1.7)
|
||||||
numerizer (0.1.1)
|
numerizer (0.1.1)
|
||||||
oauth (0.4.7)
|
oauth (0.4.7)
|
||||||
oauth2 (1.0.0)
|
oauth2 (1.2.0)
|
||||||
faraday (>= 0.8, < 0.10)
|
faraday (>= 0.8, < 0.10)
|
||||||
jwt (~> 1.0)
|
jwt (~> 1.0)
|
||||||
multi_json (~> 1.3)
|
multi_json (~> 1.3)
|
||||||
multi_xml (~> 0.5)
|
multi_xml (~> 0.5)
|
||||||
rack (~> 1.2)
|
rack (>= 1.2, < 3)
|
||||||
octokit (4.3.0)
|
octokit (4.3.0)
|
||||||
sawyer (~> 0.7.0, >= 0.5.3)
|
sawyer (~> 0.7.0, >= 0.5.3)
|
||||||
omniauth (1.3.1)
|
omniauth (1.3.1)
|
||||||
|
@ -451,7 +439,7 @@ GEM
|
||||||
omniauth-gitlab (1.0.1)
|
omniauth-gitlab (1.0.1)
|
||||||
omniauth (~> 1.0)
|
omniauth (~> 1.0)
|
||||||
omniauth-oauth2 (~> 1.0)
|
omniauth-oauth2 (~> 1.0)
|
||||||
omniauth-google-oauth2 (0.2.10)
|
omniauth-google-oauth2 (0.4.1)
|
||||||
addressable (~> 2.3)
|
addressable (~> 2.3)
|
||||||
jwt (~> 1.0)
|
jwt (~> 1.0)
|
||||||
multi_json (~> 1.3)
|
multi_json (~> 1.3)
|
||||||
|
@ -468,9 +456,9 @@ GEM
|
||||||
omniauth-oauth2 (1.3.1)
|
omniauth-oauth2 (1.3.1)
|
||||||
oauth2 (~> 1.0)
|
oauth2 (~> 1.0)
|
||||||
omniauth (~> 1.2)
|
omniauth (~> 1.2)
|
||||||
omniauth-saml (1.5.0)
|
omniauth-saml (1.6.0)
|
||||||
omniauth (~> 1.3)
|
omniauth (~> 1.3)
|
||||||
ruby-saml (~> 1.1, >= 1.1.1)
|
ruby-saml (~> 1.3)
|
||||||
omniauth-shibboleth (1.2.1)
|
omniauth-shibboleth (1.2.1)
|
||||||
omniauth (>= 1.0.0)
|
omniauth (>= 1.0.0)
|
||||||
omniauth-twitter (1.2.1)
|
omniauth-twitter (1.2.1)
|
||||||
|
@ -485,7 +473,7 @@ GEM
|
||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
paranoia (2.1.4)
|
paranoia (2.1.4)
|
||||||
activerecord (~> 4.0)
|
activerecord (~> 4.0)
|
||||||
parser (2.3.1.0)
|
parser (2.3.1.2)
|
||||||
ast (~> 2.2)
|
ast (~> 2.2)
|
||||||
pg (0.18.4)
|
pg (0.18.4)
|
||||||
pkg-config (1.1.7)
|
pkg-config (1.1.7)
|
||||||
|
@ -509,8 +497,6 @@ GEM
|
||||||
pry-rails (0.3.4)
|
pry-rails (0.3.4)
|
||||||
pry (>= 0.9.10)
|
pry (>= 0.9.10)
|
||||||
pyu-ruby-sasl (0.0.3.3)
|
pyu-ruby-sasl (0.0.3.3)
|
||||||
quiet_assets (1.0.3)
|
|
||||||
railties (>= 3.1, < 5.0)
|
|
||||||
rack (1.6.4)
|
rack (1.6.4)
|
||||||
rack-accept (0.4.5)
|
rack-accept (0.4.5)
|
||||||
rack (>= 0.4)
|
rack (>= 0.4)
|
||||||
|
@ -529,16 +515,16 @@ GEM
|
||||||
rack
|
rack
|
||||||
rack-test (0.6.3)
|
rack-test (0.6.3)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rails (4.2.6)
|
rails (4.2.7)
|
||||||
actionmailer (= 4.2.6)
|
actionmailer (= 4.2.7)
|
||||||
actionpack (= 4.2.6)
|
actionpack (= 4.2.7)
|
||||||
actionview (= 4.2.6)
|
actionview (= 4.2.7)
|
||||||
activejob (= 4.2.6)
|
activejob (= 4.2.7)
|
||||||
activemodel (= 4.2.6)
|
activemodel (= 4.2.7)
|
||||||
activerecord (= 4.2.6)
|
activerecord (= 4.2.7)
|
||||||
activesupport (= 4.2.6)
|
activesupport (= 4.2.7)
|
||||||
bundler (>= 1.3.0, < 2.0)
|
bundler (>= 1.3.0, < 2.0)
|
||||||
railties (= 4.2.6)
|
railties (= 4.2.7)
|
||||||
sprockets-rails
|
sprockets-rails
|
||||||
rails-deprecated_sanitizer (1.0.3)
|
rails-deprecated_sanitizer (1.0.3)
|
||||||
activesupport (>= 4.2.0.alpha)
|
activesupport (>= 4.2.0.alpha)
|
||||||
|
@ -548,9 +534,9 @@ GEM
|
||||||
rails-deprecated_sanitizer (>= 1.0.1)
|
rails-deprecated_sanitizer (>= 1.0.1)
|
||||||
rails-html-sanitizer (1.0.3)
|
rails-html-sanitizer (1.0.3)
|
||||||
loofah (~> 2.0)
|
loofah (~> 2.0)
|
||||||
railties (4.2.6)
|
railties (4.2.7)
|
||||||
actionpack (= 4.2.6)
|
actionpack (= 4.2.7)
|
||||||
activesupport (= 4.2.6)
|
activesupport (= 4.2.7)
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (>= 0.18.1, < 2.0)
|
thor (>= 0.18.1, < 2.0)
|
||||||
rainbow (2.1.0)
|
rainbow (2.1.0)
|
||||||
|
@ -566,7 +552,7 @@ GEM
|
||||||
recaptcha (3.0.0)
|
recaptcha (3.0.0)
|
||||||
json
|
json
|
||||||
redcarpet (3.3.3)
|
redcarpet (3.3.3)
|
||||||
redis (3.3.0)
|
redis (3.2.2)
|
||||||
redis-actionpack (4.0.1)
|
redis-actionpack (4.0.1)
|
||||||
actionpack (~> 4)
|
actionpack (~> 4)
|
||||||
redis-rack (~> 1.5.0)
|
redis-rack (~> 1.5.0)
|
||||||
|
@ -590,38 +576,38 @@ GEM
|
||||||
listen (~> 3.0)
|
listen (~> 3.0)
|
||||||
responders (2.1.1)
|
responders (2.1.1)
|
||||||
railties (>= 4.2.0, < 5.1)
|
railties (>= 4.2.0, < 5.1)
|
||||||
rinku (1.7.3)
|
rinku (2.0.0)
|
||||||
rotp (2.1.2)
|
rotp (2.1.2)
|
||||||
rouge (1.11.0)
|
rouge (2.0.5)
|
||||||
rqrcode (0.7.0)
|
rqrcode (0.7.0)
|
||||||
chunky_png
|
chunky_png
|
||||||
rqrcode-rails3 (0.1.7)
|
rqrcode-rails3 (0.1.7)
|
||||||
rqrcode (>= 0.4.2)
|
rqrcode (>= 0.4.2)
|
||||||
rspec (3.4.0)
|
rspec (3.5.0)
|
||||||
rspec-core (~> 3.4.0)
|
rspec-core (~> 3.5.0)
|
||||||
rspec-expectations (~> 3.4.0)
|
rspec-expectations (~> 3.5.0)
|
||||||
rspec-mocks (~> 3.4.0)
|
rspec-mocks (~> 3.5.0)
|
||||||
rspec-core (3.4.4)
|
rspec-core (3.5.0)
|
||||||
rspec-support (~> 3.4.0)
|
rspec-support (~> 3.5.0)
|
||||||
rspec-expectations (3.4.0)
|
rspec-expectations (3.5.0)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.4.0)
|
rspec-support (~> 3.5.0)
|
||||||
rspec-mocks (3.4.1)
|
rspec-mocks (3.5.0)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.4.0)
|
rspec-support (~> 3.5.0)
|
||||||
rspec-rails (3.4.2)
|
rspec-rails (3.5.0)
|
||||||
actionpack (>= 3.0, < 4.3)
|
actionpack (>= 3.0)
|
||||||
activesupport (>= 3.0, < 4.3)
|
activesupport (>= 3.0)
|
||||||
railties (>= 3.0, < 4.3)
|
railties (>= 3.0)
|
||||||
rspec-core (~> 3.4.0)
|
rspec-core (~> 3.5.0)
|
||||||
rspec-expectations (~> 3.4.0)
|
rspec-expectations (~> 3.5.0)
|
||||||
rspec-mocks (~> 3.4.0)
|
rspec-mocks (~> 3.5.0)
|
||||||
rspec-support (~> 3.4.0)
|
rspec-support (~> 3.5.0)
|
||||||
rspec-retry (0.4.5)
|
rspec-retry (0.4.5)
|
||||||
rspec-core
|
rspec-core
|
||||||
rspec-support (3.4.1)
|
rspec-support (3.5.0)
|
||||||
rubocop (0.40.0)
|
rubocop (0.41.2)
|
||||||
parser (>= 2.3.1.0, < 3.0)
|
parser (>= 2.3.1.1, < 3.0)
|
||||||
powerpack (~> 0.1)
|
powerpack (~> 0.1)
|
||||||
rainbow (>= 1.99.1, < 3.0)
|
rainbow (>= 1.99.1, < 3.0)
|
||||||
ruby-progressbar (~> 1.7)
|
ruby-progressbar (~> 1.7)
|
||||||
|
@ -631,9 +617,8 @@ GEM
|
||||||
ruby-fogbugz (0.2.1)
|
ruby-fogbugz (0.2.1)
|
||||||
crack (~> 0.4)
|
crack (~> 0.4)
|
||||||
ruby-progressbar (1.8.1)
|
ruby-progressbar (1.8.1)
|
||||||
ruby-saml (1.1.2)
|
ruby-saml (1.3.0)
|
||||||
nokogiri (>= 1.5.10)
|
nokogiri (>= 1.5.10)
|
||||||
uuid (~> 2.3)
|
|
||||||
ruby_parser (3.8.2)
|
ruby_parser (3.8.2)
|
||||||
sexp_processor (~> 4.1)
|
sexp_processor (~> 4.1)
|
||||||
rubyntlm (0.5.2)
|
rubyntlm (0.5.2)
|
||||||
|
@ -645,8 +630,8 @@ GEM
|
||||||
sanitize (2.1.0)
|
sanitize (2.1.0)
|
||||||
nokogiri (>= 1.4.4)
|
nokogiri (>= 1.4.4)
|
||||||
sass (3.4.22)
|
sass (3.4.22)
|
||||||
sass-rails (5.0.4)
|
sass-rails (5.0.5)
|
||||||
railties (>= 4.0.0, < 5.0)
|
railties (>= 4.0.0, < 6)
|
||||||
sass (~> 3.1)
|
sass (~> 3.1)
|
||||||
sprockets (>= 2.8, < 4.0)
|
sprockets (>= 2.8, < 4.0)
|
||||||
sprockets-rails (>= 2.0, < 4.0)
|
sprockets-rails (>= 2.0, < 4.0)
|
||||||
|
@ -660,12 +645,12 @@ GEM
|
||||||
sdoc (0.3.20)
|
sdoc (0.3.20)
|
||||||
json (>= 1.1.3)
|
json (>= 1.1.3)
|
||||||
rdoc (~> 3.10)
|
rdoc (~> 3.10)
|
||||||
seed-fu (2.3.5)
|
seed-fu (2.3.6)
|
||||||
activerecord (>= 3.1, < 4.3)
|
activerecord (>= 3.1)
|
||||||
activesupport (>= 3.1, < 4.3)
|
activesupport (>= 3.1)
|
||||||
select2-rails (3.5.9.3)
|
select2-rails (3.5.9.3)
|
||||||
thor (~> 0.14)
|
thor (~> 0.14)
|
||||||
sentry-raven (0.15.6)
|
sentry-raven (1.1.0)
|
||||||
faraday (>= 0.7.6)
|
faraday (>= 0.7.6)
|
||||||
settingslogic (2.0.9)
|
settingslogic (2.0.9)
|
||||||
sexp_processor (4.7.0)
|
sexp_processor (4.7.0)
|
||||||
|
@ -673,10 +658,11 @@ GEM
|
||||||
rack
|
rack
|
||||||
shoulda-matchers (2.8.0)
|
shoulda-matchers (2.8.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
sidekiq (4.1.2)
|
sidekiq (4.1.4)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
connection_pool (~> 2.2, >= 2.2.0)
|
connection_pool (~> 2.2, >= 2.2.0)
|
||||||
redis (~> 3.2, >= 3.2.1)
|
redis (~> 3.2, >= 3.2.1)
|
||||||
|
sinatra (>= 1.4.7)
|
||||||
sidekiq-cron (0.4.0)
|
sidekiq-cron (0.4.0)
|
||||||
redis-namespace (>= 1.5.2)
|
redis-namespace (>= 1.5.2)
|
||||||
rufus-scheduler (>= 2.0.24)
|
rufus-scheduler (>= 2.0.24)
|
||||||
|
@ -687,8 +673,8 @@ GEM
|
||||||
json (~> 1.8)
|
json (~> 1.8)
|
||||||
simplecov-html (~> 0.10.0)
|
simplecov-html (~> 0.10.0)
|
||||||
simplecov-html (0.10.0)
|
simplecov-html (0.10.0)
|
||||||
sinatra (1.4.6)
|
sinatra (1.4.7)
|
||||||
rack (~> 1.4)
|
rack (~> 1.5)
|
||||||
rack-protection (~> 1.4)
|
rack-protection (~> 1.4)
|
||||||
tilt (>= 1.3, < 3)
|
tilt (>= 1.3, < 3)
|
||||||
six (0.2.0)
|
six (0.2.0)
|
||||||
|
@ -704,17 +690,17 @@ GEM
|
||||||
spinach (>= 0.4)
|
spinach (>= 0.4)
|
||||||
spinach-rerun-reporter (0.0.2)
|
spinach-rerun-reporter (0.0.2)
|
||||||
spinach (~> 0.8)
|
spinach (~> 0.8)
|
||||||
spring (1.7.1)
|
spring (1.7.2)
|
||||||
spring-commands-rspec (1.0.4)
|
spring-commands-rspec (1.0.4)
|
||||||
spring (>= 0.9.1)
|
spring (>= 0.9.1)
|
||||||
spring-commands-spinach (1.1.0)
|
spring-commands-spinach (1.1.0)
|
||||||
spring (>= 0.9.1)
|
spring (>= 0.9.1)
|
||||||
spring-commands-teaspoon (0.0.2)
|
spring-commands-teaspoon (0.0.2)
|
||||||
spring (>= 0.9.1)
|
spring (>= 0.9.1)
|
||||||
sprockets (3.6.0)
|
sprockets (3.6.3)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
rack (> 1, < 3)
|
rack (> 1, < 3)
|
||||||
sprockets-rails (3.0.4)
|
sprockets-rails (3.1.1)
|
||||||
actionpack (>= 4.0)
|
actionpack (>= 4.0)
|
||||||
activesupport (>= 4.0)
|
activesupport (>= 4.0)
|
||||||
sprockets (>= 3.0.0)
|
sprockets (>= 3.0.0)
|
||||||
|
@ -726,6 +712,8 @@ GEM
|
||||||
activerecord (>= 4.1, < 5.1)
|
activerecord (>= 4.1, < 5.1)
|
||||||
state_machines-activemodel (>= 0.3.0)
|
state_machines-activemodel (>= 0.3.0)
|
||||||
stringex (2.5.2)
|
stringex (2.5.2)
|
||||||
|
sys-filesystem (1.1.6)
|
||||||
|
ffi
|
||||||
systemu (2.6.5)
|
systemu (2.6.5)
|
||||||
task_list (1.0.2)
|
task_list (1.0.2)
|
||||||
html-pipeline
|
html-pipeline
|
||||||
|
@ -733,14 +721,13 @@ GEM
|
||||||
railties (>= 3.2.5, < 6)
|
railties (>= 3.2.5, < 6)
|
||||||
teaspoon-jasmine (2.2.0)
|
teaspoon-jasmine (2.2.0)
|
||||||
teaspoon (>= 1.0.0)
|
teaspoon (>= 1.0.0)
|
||||||
term-ansicolor (1.3.2)
|
temple (0.7.7)
|
||||||
tins (~> 1.0)
|
|
||||||
test_after_commit (0.4.2)
|
test_after_commit (0.4.2)
|
||||||
activerecord (>= 3.2)
|
activerecord (>= 3.2)
|
||||||
thin (1.6.4)
|
thin (1.7.0)
|
||||||
daemons (~> 1.0, >= 1.0.9)
|
daemons (~> 1.0, >= 1.0.9)
|
||||||
eventmachine (~> 1.0, >= 1.0.4)
|
eventmachine (~> 1.0, >= 1.0.4)
|
||||||
rack (~> 1.0)
|
rack (>= 1, < 3)
|
||||||
thor (0.19.1)
|
thor (0.19.1)
|
||||||
thread_safe (0.3.5)
|
thread_safe (0.3.5)
|
||||||
tilt (2.0.5)
|
tilt (2.0.5)
|
||||||
|
@ -755,7 +742,6 @@ GEM
|
||||||
mime-types
|
mime-types
|
||||||
multi_json (~> 1.7)
|
multi_json (~> 1.7)
|
||||||
twitter-stream (~> 0.1)
|
twitter-stream (~> 0.1)
|
||||||
tins (1.6.0)
|
|
||||||
turbolinks (2.5.3)
|
turbolinks (2.5.3)
|
||||||
coffee-rails
|
coffee-rails
|
||||||
twitter-stream (0.1.16)
|
twitter-stream (0.1.16)
|
||||||
|
@ -772,7 +758,7 @@ GEM
|
||||||
unf (0.1.4)
|
unf (0.1.4)
|
||||||
unf_ext
|
unf_ext
|
||||||
unf_ext (0.0.7.2)
|
unf_ext (0.0.7.2)
|
||||||
unicode-display_width (1.0.5)
|
unicode-display_width (1.1.0)
|
||||||
unicorn (4.9.0)
|
unicorn (4.9.0)
|
||||||
kgio (~> 2.6)
|
kgio (~> 2.6)
|
||||||
rack
|
rack
|
||||||
|
@ -789,6 +775,7 @@ GEM
|
||||||
coercible (~> 1.0)
|
coercible (~> 1.0)
|
||||||
descendants_tracker (~> 0.0, >= 0.0.3)
|
descendants_tracker (~> 0.0, >= 0.0.3)
|
||||||
equalizer (~> 0.0, >= 0.0.9)
|
equalizer (~> 0.0, >= 0.0.9)
|
||||||
|
vmstat (2.1.1)
|
||||||
warden (1.2.6)
|
warden (1.2.6)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
web-console (2.3.0)
|
web-console (2.3.0)
|
||||||
|
@ -814,12 +801,12 @@ PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
RedCloth (~> 4.2.9)
|
RedCloth (~> 4.3.2)
|
||||||
ace-rails-ap (~> 4.0.2)
|
ace-rails-ap (~> 4.0.2)
|
||||||
activerecord-session_store (~> 1.0.0)
|
activerecord-session_store (~> 1.0.0)
|
||||||
acts-as-taggable-on (~> 3.4)
|
acts-as-taggable-on (~> 3.4)
|
||||||
addressable (~> 2.3.8)
|
addressable (~> 2.3.8)
|
||||||
after_commit_queue
|
after_commit_queue (~> 1.3.0)
|
||||||
akismet (~> 2.0)
|
akismet (~> 2.0)
|
||||||
allocations (~> 1.0)
|
allocations (~> 1.0)
|
||||||
asana (~> 0.4.0)
|
asana (~> 0.4.0)
|
||||||
|
@ -828,15 +815,15 @@ DEPENDENCIES
|
||||||
awesome_print (~> 1.2.0)
|
awesome_print (~> 1.2.0)
|
||||||
babosa (~> 1.0.2)
|
babosa (~> 1.0.2)
|
||||||
base32 (~> 0.3.0)
|
base32 (~> 0.3.0)
|
||||||
benchmark-ips
|
benchmark-ips (~> 2.3.0)
|
||||||
better_errors (~> 1.0.1)
|
better_errors (~> 1.0.1)
|
||||||
binding_of_caller (~> 0.7.2)
|
binding_of_caller (~> 0.7.2)
|
||||||
bootstrap-sass (~> 3.3.0)
|
bootstrap-sass (~> 3.3.0)
|
||||||
brakeman (~> 3.3.0)
|
brakeman (~> 3.3.0)
|
||||||
browser (~> 2.2)
|
browser (~> 2.2)
|
||||||
bullet
|
bullet (~> 5.0.0)
|
||||||
bundler-audit
|
bundler-audit (~> 0.5.0)
|
||||||
byebug
|
byebug (~> 8.2.1)
|
||||||
capybara (~> 2.6.2)
|
capybara (~> 2.6.2)
|
||||||
capybara-screenshot (~> 1.0.0)
|
capybara-screenshot (~> 1.0.0)
|
||||||
carrierwave (~> 0.10.0)
|
carrierwave (~> 0.10.0)
|
||||||
|
@ -844,7 +831,6 @@ DEPENDENCIES
|
||||||
chronic_duration (~> 0.10.6)
|
chronic_duration (~> 0.10.6)
|
||||||
coffee-rails (~> 4.1.0)
|
coffee-rails (~> 4.1.0)
|
||||||
connection_pool (~> 2.0)
|
connection_pool (~> 2.0)
|
||||||
coveralls (~> 0.8.2)
|
|
||||||
creole (~> 0.5.0)
|
creole (~> 0.5.0)
|
||||||
d3_rails (~> 3.5.0)
|
d3_rails (~> 3.5.0)
|
||||||
database_cleaner (~> 1.4.0)
|
database_cleaner (~> 1.4.0)
|
||||||
|
@ -852,38 +838,39 @@ DEPENDENCIES
|
||||||
devise (~> 4.0)
|
devise (~> 4.0)
|
||||||
devise-two-factor (~> 3.0.0)
|
devise-two-factor (~> 3.0.0)
|
||||||
diffy (~> 3.0.3)
|
diffy (~> 3.0.3)
|
||||||
doorkeeper (~> 3.1)
|
doorkeeper (~> 4.0)
|
||||||
dropzonejs-rails (~> 0.7.1)
|
dropzonejs-rails (~> 0.7.1)
|
||||||
email_reply_parser (~> 0.5.8)
|
email_reply_parser (~> 0.5.8)
|
||||||
email_spec (~> 1.6.0)
|
email_spec (~> 1.6.0)
|
||||||
factory_girl_rails (~> 4.6.0)
|
factory_girl_rails (~> 4.6.0)
|
||||||
ffaker (~> 2.0.0)
|
ffaker (~> 2.0.0)
|
||||||
flay
|
flay (~> 2.6.1)
|
||||||
flog
|
flog (~> 4.3.2)
|
||||||
fog-aws (~> 0.9)
|
fog-aws (~> 0.9)
|
||||||
fog-azure (~> 0.0)
|
fog-azure (~> 0.0)
|
||||||
fog-core (~> 1.40)
|
fog-core (~> 1.40)
|
||||||
fog-google (~> 0.3)
|
fog-google (~> 0.3)
|
||||||
fog-local (~> 0.3)
|
fog-local (~> 0.3)
|
||||||
fog-openstack (~> 0.1)
|
fog-openstack (~> 0.1)
|
||||||
|
fog-rackspace (~> 0.1.1)
|
||||||
font-awesome-rails (~> 4.6.1)
|
font-awesome-rails (~> 4.6.1)
|
||||||
foreman
|
foreman (~> 0.78.0)
|
||||||
fuubar (~> 2.0.0)
|
fuubar (~> 2.0.0)
|
||||||
gemnasium-gitlab-service (~> 0.2)
|
gemnasium-gitlab-service (~> 0.2)
|
||||||
|
gemojione (~> 3.0)
|
||||||
github-linguist (~> 4.7.0)
|
github-linguist (~> 4.7.0)
|
||||||
github-markup (~> 1.3.1)
|
github-markup (~> 1.4)
|
||||||
gitlab-flowdock-git-hook (~> 1.0.1)
|
gitlab-flowdock-git-hook (~> 1.0.1)
|
||||||
gitlab_emoji (~> 0.3.0)
|
gitlab_git (~> 10.3.2)
|
||||||
gitlab_git (~> 10.2)
|
|
||||||
gitlab_meta (= 7.0)
|
gitlab_meta (= 7.0)
|
||||||
gitlab_omniauth-ldap (~> 1.2.1)
|
gitlab_omniauth-ldap (~> 1.2.1)
|
||||||
gollum-lib (~> 4.1.0)
|
gollum-lib (~> 4.2)
|
||||||
gollum-rugged_adapter (~> 0.4.2)
|
gollum-rugged_adapter (~> 0.4.2)
|
||||||
gon (~> 6.0.1)
|
gon (~> 6.0.1)
|
||||||
grape (~> 0.13.0)
|
grape (~> 0.13.0)
|
||||||
grape-entity (~> 0.4.2)
|
grape-entity (~> 0.4.2)
|
||||||
haml-rails (~> 0.9.0)
|
hamlit (~> 2.5)
|
||||||
health_check (~> 1.5.1)
|
health_check (~> 2.1.0)
|
||||||
hipchat (~> 1.5.0)
|
hipchat (~> 1.5.0)
|
||||||
html-pipeline (~> 1.11.0)
|
html-pipeline (~> 1.11.0)
|
||||||
httparty (~> 0.13.3)
|
httparty (~> 0.13.3)
|
||||||
|
@ -894,9 +881,9 @@ DEPENDENCIES
|
||||||
jquery-ui-rails (~> 5.0.0)
|
jquery-ui-rails (~> 5.0.0)
|
||||||
jwt
|
jwt
|
||||||
kaminari (~> 0.17.0)
|
kaminari (~> 0.17.0)
|
||||||
knapsack
|
knapsack (~> 1.11.0)
|
||||||
letter_opener_web (~> 1.3.0)
|
letter_opener_web (~> 1.3.0)
|
||||||
license_finder
|
license_finder (~> 2.1.0)
|
||||||
licensee (~> 8.0.0)
|
licensee (~> 8.0.0)
|
||||||
loofah (~> 2.0.3)
|
loofah (~> 2.0.3)
|
||||||
mail_room (~> 0.8)
|
mail_room (~> 0.8)
|
||||||
|
@ -908,7 +895,7 @@ DEPENDENCIES
|
||||||
net-ssh (~> 3.0.1)
|
net-ssh (~> 3.0.1)
|
||||||
newrelic_rpm (~> 3.14)
|
newrelic_rpm (~> 3.14)
|
||||||
nokogiri (~> 1.6.7, >= 1.6.7.2)
|
nokogiri (~> 1.6.7, >= 1.6.7.2)
|
||||||
oauth2 (~> 1.0.0)
|
oauth2 (~> 1.2.0)
|
||||||
octokit (~> 4.3.0)
|
octokit (~> 4.3.0)
|
||||||
omniauth (~> 1.3.1)
|
omniauth (~> 1.3.1)
|
||||||
omniauth-auth0 (~> 1.4.1)
|
omniauth-auth0 (~> 1.4.1)
|
||||||
|
@ -918,9 +905,9 @@ DEPENDENCIES
|
||||||
omniauth-facebook (~> 3.0.0)
|
omniauth-facebook (~> 3.0.0)
|
||||||
omniauth-github (~> 1.1.1)
|
omniauth-github (~> 1.1.1)
|
||||||
omniauth-gitlab (~> 1.0.0)
|
omniauth-gitlab (~> 1.0.0)
|
||||||
omniauth-google-oauth2 (~> 0.2.0)
|
omniauth-google-oauth2 (~> 0.4.1)
|
||||||
omniauth-kerberos (~> 0.3.0)
|
omniauth-kerberos (~> 0.3.0)
|
||||||
omniauth-saml (~> 1.5.0)
|
omniauth-saml (~> 1.6.0)
|
||||||
omniauth-shibboleth (~> 1.2.0)
|
omniauth-shibboleth (~> 1.2.0)
|
||||||
omniauth-twitter (~> 1.2.0)
|
omniauth-twitter (~> 1.2.0)
|
||||||
omniauth_crowd (~> 2.2.0)
|
omniauth_crowd (~> 2.2.0)
|
||||||
|
@ -929,29 +916,28 @@ DEPENDENCIES
|
||||||
pg (~> 0.18.2)
|
pg (~> 0.18.2)
|
||||||
poltergeist (~> 1.9.0)
|
poltergeist (~> 1.9.0)
|
||||||
premailer-rails (~> 1.9.0)
|
premailer-rails (~> 1.9.0)
|
||||||
pry-rails
|
pry-rails (~> 0.3.4)
|
||||||
quiet_assets (~> 1.0.2)
|
|
||||||
rack-attack (~> 4.3.1)
|
rack-attack (~> 4.3.1)
|
||||||
rack-cors (~> 0.4.0)
|
rack-cors (~> 0.4.0)
|
||||||
rack-oauth2 (~> 1.2.1)
|
rack-oauth2 (~> 1.2.1)
|
||||||
rails (= 4.2.6)
|
rails (= 4.2.7)
|
||||||
rails-deprecated_sanitizer (~> 1.0.3)
|
rails-deprecated_sanitizer (~> 1.0.3)
|
||||||
rainbow (~> 2.1.0)
|
rainbow (~> 2.1.0)
|
||||||
rblineprof
|
rblineprof (~> 0.3.6)
|
||||||
rdoc (~> 3.6)
|
rdoc (~> 3.6)
|
||||||
recaptcha (~> 3.0)
|
recaptcha (~> 3.0)
|
||||||
redcarpet (~> 3.3.3)
|
redcarpet (~> 3.3.3)
|
||||||
redis (~> 3.2)
|
redis (~> 3.2)
|
||||||
redis-namespace
|
redis-namespace (~> 1.5.2)
|
||||||
redis-rails (~> 4.0.0)
|
redis-rails (~> 4.0.0)
|
||||||
request_store (~> 1.3.0)
|
request_store (~> 1.3.0)
|
||||||
rerun (~> 0.11.0)
|
rerun (~> 0.11.0)
|
||||||
responders (~> 2.0)
|
responders (~> 2.0)
|
||||||
rouge (~> 1.11)
|
rouge (~> 2.0)
|
||||||
rqrcode-rails3 (~> 0.1.7)
|
rqrcode-rails3 (~> 0.1.7)
|
||||||
rspec-rails (~> 3.4.0)
|
rspec-rails (~> 3.5.0)
|
||||||
rspec-retry
|
rspec-retry (~> 0.4.5)
|
||||||
rubocop (~> 0.40.0)
|
rubocop (~> 0.41.2)
|
||||||
rubocop-rspec (~> 1.5.0)
|
rubocop-rspec (~> 1.5.0)
|
||||||
ruby-fogbugz (~> 0.2.1)
|
ruby-fogbugz (~> 0.2.1)
|
||||||
sanitize (~> 2.0)
|
sanitize (~> 2.0)
|
||||||
|
@ -960,9 +946,9 @@ DEPENDENCIES
|
||||||
sdoc (~> 0.3.20)
|
sdoc (~> 0.3.20)
|
||||||
seed-fu (~> 2.3.5)
|
seed-fu (~> 2.3.5)
|
||||||
select2-rails (~> 3.5.9)
|
select2-rails (~> 3.5.9)
|
||||||
sentry-raven (~> 0.15)
|
sentry-raven (~> 1.1.0)
|
||||||
settingslogic (~> 2.0.9)
|
settingslogic (~> 2.0.9)
|
||||||
sham_rack
|
sham_rack (~> 1.3.6)
|
||||||
shoulda-matchers (~> 2.8.0)
|
shoulda-matchers (~> 2.8.0)
|
||||||
sidekiq (~> 4.0)
|
sidekiq (~> 4.0)
|
||||||
sidekiq-cron (~> 0.4.0)
|
sidekiq-cron (~> 0.4.0)
|
||||||
|
@ -978,11 +964,12 @@ DEPENDENCIES
|
||||||
spring-commands-teaspoon (~> 0.0.2)
|
spring-commands-teaspoon (~> 0.0.2)
|
||||||
sprockets (~> 3.6.0)
|
sprockets (~> 3.6.0)
|
||||||
state_machines-activerecord (~> 0.4.0)
|
state_machines-activerecord (~> 0.4.0)
|
||||||
|
sys-filesystem (~> 1.1.6)
|
||||||
task_list (~> 1.0.2)
|
task_list (~> 1.0.2)
|
||||||
teaspoon (~> 1.1.0)
|
teaspoon (~> 1.1.0)
|
||||||
teaspoon-jasmine (~> 2.2.0)
|
teaspoon-jasmine (~> 2.2.0)
|
||||||
test_after_commit (~> 0.4.2)
|
test_after_commit (~> 0.4.2)
|
||||||
thin (~> 1.6.1)
|
thin (~> 1.7.0)
|
||||||
tinder (~> 1.10.0)
|
tinder (~> 1.10.0)
|
||||||
turbolinks (~> 2.5.0)
|
turbolinks (~> 2.5.0)
|
||||||
u2f (~> 0.2.1)
|
u2f (~> 0.2.1)
|
||||||
|
@ -993,6 +980,7 @@ DEPENDENCIES
|
||||||
unicorn-worker-killer (~> 0.4.2)
|
unicorn-worker-killer (~> 0.4.2)
|
||||||
version_sorter (~> 2.0.0)
|
version_sorter (~> 2.0.0)
|
||||||
virtus (~> 1.0.1)
|
virtus (~> 1.0.1)
|
||||||
|
vmstat (~> 2.1.1)
|
||||||
web-console (~> 2.0)
|
web-console (~> 2.0)
|
||||||
webmock (~> 1.21.0)
|
webmock (~> 1.21.0)
|
||||||
wikicloth (= 0.8.1)
|
wikicloth (= 0.8.1)
|
||||||
|
|
|
@ -1,15 +1,35 @@
|
||||||
# GitLab Maintenance Policy
|
# GitLab Maintenance Policy
|
||||||
|
|
||||||
GitLab is a fast moving and evolving project. We currently don't have the resources to support many releases concurrently. We support exactly one stable release at any given time.
|
GitLab follows the [Semantic Versioning](http://semver.org/) for its releases:
|
||||||
|
`(Major).(Minor).(Patch)` in a [pragmatic way].
|
||||||
|
|
||||||
GitLab follows the [Semantic Versioning](http://semver.org/) for its releases: `(Major).(Minor).(Patch)` in a [pragmatic way](https://gist.github.com/jashkenas/cbd2b088e20279ae2c8e).
|
- **Major version**: Whenever there is something significant or any backwards
|
||||||
|
incompatible changes are introduced to the public API.
|
||||||
|
- **Minor version**: When new, backwards compatible functionality is introduced
|
||||||
|
to the public API or a minor feature is introduced, or when a set of smaller
|
||||||
|
features is rolled out.
|
||||||
|
- **Patch number**: When backwards compatible bug fixes are introduced that fix
|
||||||
|
incorrect behavior.
|
||||||
|
|
||||||
- **Major version**: Whenever there is something significant or any backwards incompatible changes are introduced to the public API.
|
The current stable release will receive security patches and bug fixes
|
||||||
- **Minor version**: When new, backwards compatible functionality is introduced to the public API or a minor feature is introduced, or when a set of smaller features is rolled out.
|
(eg. `8.9.0` -> `8.9.1`). Feature releases will mark the next supported stable
|
||||||
- **Patch number**: When backwards compatible bug fixes are introduced that fix incorrect behavior.
|
release where the minor version is increased numerically by increments of one
|
||||||
|
(eg. `8.9 -> 8.10`).
|
||||||
|
|
||||||
The current stable release will receive security patches and bug fixes (eg. `5.0` -> `5.0.1`). Feature releases will mark the next supported stable release where the minor version is increased numerically by increments of one (eg. `5.0 -> 5.1`).
|
Our current policy is to support one stable release at any given time, but for
|
||||||
|
medium-level security issues, we may consider [backporting to the previous two
|
||||||
|
monthly releases][rel-sec].
|
||||||
|
|
||||||
We encourage everyone to run the latest stable release to ensure that you can easily upgrade to the most secure and feature rich GitLab experience. In order to make sure you can easily run the most recent stable release, we are working hard to keep the update process simple and reliable.
|
We encourage everyone to run the latest stable release to ensure that you can
|
||||||
|
easily upgrade to the most secure and feature-rich GitLab experience. In order
|
||||||
|
to make sure you can easily run the most recent stable release, we are working
|
||||||
|
hard to keep the update process simple and reliable.
|
||||||
|
|
||||||
More information about the release procedures can be found in the doc/release directory.
|
More information about the release procedures can be found in our
|
||||||
|
[release-tools documentation][rel]. You may also want to read our
|
||||||
|
[Responsible Disclosure Policy][disclosure].
|
||||||
|
|
||||||
|
[rel-sec]: https://gitlab.com/gitlab-org/release-tools/blob/master/doc/security.md#backporting
|
||||||
|
[rel]: https://gitlab.com/gitlab-org/release-tools/blob/master/doc/
|
||||||
|
[disclosure]: https://about.gitlab.com/disclosure/
|
||||||
|
[pragmatic way]: https://gist.github.com/jashkenas/cbd2b088e20279ae2c8e
|
||||||
|
|
2
VERSION
|
@ -1 +1 @@
|
||||||
8.9.0
|
8.10.5
|
||||||
|
|
Before Width: | Height: | Size: 986 B After Width: | Height: | Size: 695 B |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 870 B |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 167 B After Width: | Height: | Size: 167 B |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 257 KiB After Width: | Height: | Size: 1 MiB |
Before Width: | Height: | Size: 674 KiB After Width: | Height: | Size: 2.5 MiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 809 B After Width: | Height: | Size: 631 B |
Before Width: | Height: | Size: 495 B After Width: | Height: | Size: 201 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 729 B |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 621 B After Width: | Height: | Size: 621 B |
Before Width: | Height: | Size: 942 B After Width: | Height: | Size: 939 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.9 KiB |
|
@ -38,3 +38,14 @@ class @Admin
|
||||||
|
|
||||||
$('li.group_member').bind 'ajax:success', ->
|
$('li.group_member').bind 'ajax:success', ->
|
||||||
Turbolinks.visit(location.href)
|
Turbolinks.visit(location.href)
|
||||||
|
|
||||||
|
showBlacklistType = ->
|
||||||
|
if $("input[name='blacklist_type']:checked").val() == 'file'
|
||||||
|
$('.blacklist-file').show()
|
||||||
|
$('.blacklist-raw').hide()
|
||||||
|
else
|
||||||
|
$('.blacklist-file').hide()
|
||||||
|
$('.blacklist-raw').show()
|
||||||
|
|
||||||
|
$("input[name='blacklist_type']").click showBlacklistType
|
||||||
|
showBlacklistType()
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
groupPath: "/api/:version/groups/:id.json"
|
groupPath: "/api/:version/groups/:id.json"
|
||||||
namespacesPath: "/api/:version/namespaces.json"
|
namespacesPath: "/api/:version/namespaces.json"
|
||||||
groupProjectsPath: "/api/:version/groups/:id/projects.json"
|
groupProjectsPath: "/api/:version/groups/:id/projects.json"
|
||||||
projectsPath: "/api/:version/projects.json"
|
projectsPath: "/api/:version/projects.json?simple=true"
|
||||||
labelsPath: "/api/:version/projects/:id/labels"
|
labelsPath: "/api/:version/projects/:id/labels"
|
||||||
licensePath: "/api/:version/licenses/:key"
|
licensePath: "/api/:version/licenses/:key"
|
||||||
gitignorePath: "/api/:version/gitignores/:key"
|
gitignorePath: "/api/:version/gitignores/:key"
|
||||||
|
|
|
@ -47,15 +47,12 @@
|
||||||
#= require date.format
|
#= require date.format
|
||||||
#= require_directory ./behaviors
|
#= require_directory ./behaviors
|
||||||
#= require_directory ./blob
|
#= require_directory ./blob
|
||||||
#= require_directory ./ci
|
|
||||||
#= require_directory ./commit
|
#= require_directory ./commit
|
||||||
#= require_directory ./extensions
|
#= require_directory ./extensions
|
||||||
#= require_directory ./lib
|
#= require_directory ./lib/utils
|
||||||
#= require_directory ./u2f
|
#= require_directory ./u2f
|
||||||
#= require_directory .
|
#= require_directory .
|
||||||
#= require fuzzaldrin-plus
|
#= require fuzzaldrin-plus
|
||||||
#= require cropper
|
|
||||||
#= require u2f
|
|
||||||
|
|
||||||
window.slugify = (text) ->
|
window.slugify = (text) ->
|
||||||
text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase()
|
text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase()
|
||||||
|
@ -121,6 +118,11 @@ window.onload = ->
|
||||||
setTimeout shiftWindow, 100
|
setTimeout shiftWindow, 100
|
||||||
|
|
||||||
$ ->
|
$ ->
|
||||||
|
|
||||||
|
$document = $(document)
|
||||||
|
$window = $(window)
|
||||||
|
$body = $('body')
|
||||||
|
|
||||||
gl.utils.preventDisabledButtons()
|
gl.utils.preventDisabledButtons()
|
||||||
bootstrapBreakpoint = bp.getBreakpointSize()
|
bootstrapBreakpoint = bp.getBreakpointSize()
|
||||||
|
|
||||||
|
@ -152,7 +154,7 @@ $ ->
|
||||||
), 1
|
), 1
|
||||||
|
|
||||||
# Initialize tooltips
|
# Initialize tooltips
|
||||||
$('body').tooltip(
|
$body.tooltip(
|
||||||
selector: '.has-tooltip, [data-toggle="tooltip"]'
|
selector: '.has-tooltip, [data-toggle="tooltip"]'
|
||||||
placement: (_, el) ->
|
placement: (_, el) ->
|
||||||
$el = $(el)
|
$el = $(el)
|
||||||
|
@ -171,7 +173,7 @@ $ ->
|
||||||
flash.show()
|
flash.show()
|
||||||
|
|
||||||
# Disable form buttons while a form is submitting
|
# Disable form buttons while a form is submitting
|
||||||
$('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) ->
|
$body.on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) ->
|
||||||
buttons = $('[type="submit"]', @)
|
buttons = $('[type="submit"]', @)
|
||||||
|
|
||||||
switch e.type
|
switch e.type
|
||||||
|
@ -180,11 +182,20 @@ $ ->
|
||||||
else
|
else
|
||||||
buttons.enable()
|
buttons.enable()
|
||||||
|
|
||||||
|
$(document).ajaxError (e, xhrObj, xhrSetting, xhrErrorText) ->
|
||||||
|
|
||||||
|
if xhrObj.status is 401
|
||||||
|
new Flash 'You need to be logged in.', 'alert'
|
||||||
|
|
||||||
|
else if xhrObj.status in [ 404, 500 ]
|
||||||
|
new Flash 'Something went wrong on our end.', 'alert'
|
||||||
|
|
||||||
|
|
||||||
# Show/Hide the profile menu when hovering the account box
|
# Show/Hide the profile menu when hovering the account box
|
||||||
$('.account-box').hover -> $(@).toggleClass('hover')
|
$('.account-box').hover -> $(@).toggleClass('hover')
|
||||||
|
|
||||||
# Commit show suppressed diff
|
# Commit show suppressed diff
|
||||||
$(document).on 'click', '.diff-content .js-show-suppressed-diff', ->
|
$document.on 'click', '.diff-content .js-show-suppressed-diff', ->
|
||||||
$container = $(@).parent()
|
$container = $(@).parent()
|
||||||
$container.next('table').show()
|
$container.next('table').show()
|
||||||
$container.remove()
|
$container.remove()
|
||||||
|
@ -194,16 +205,15 @@ $ ->
|
||||||
$('.header-content .header-logo').toggle()
|
$('.header-content .header-logo').toggle()
|
||||||
$('.header-content .navbar-collapse').toggle()
|
$('.header-content .navbar-collapse').toggle()
|
||||||
$('.navbar-toggle').toggleClass('active')
|
$('.navbar-toggle').toggleClass('active')
|
||||||
$('.navbar-toggle i').toggleClass("fa-angle-right fa-angle-left")
|
|
||||||
|
|
||||||
# Show/hide comments on diff
|
# Show/hide comments on diff
|
||||||
$("body").on "click", ".js-toggle-diff-comments", (e) ->
|
$body.on "click", ".js-toggle-diff-comments", (e) ->
|
||||||
$(@).toggleClass('active')
|
$(@).toggleClass('active')
|
||||||
$(@).closest(".diff-file").find(".notes_holder").toggle()
|
$(@).closest(".diff-file").find(".notes_holder").toggle()
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
|
||||||
$(document).off "click", '.js-confirm-danger'
|
$document.off "click", '.js-confirm-danger'
|
||||||
$(document).on "click", '.js-confirm-danger', (e) ->
|
$document.on "click", '.js-confirm-danger', (e) ->
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
btn = $(e.target)
|
btn = $(e.target)
|
||||||
text = btn.data("confirm-danger-message")
|
text = btn.data("confirm-danger-message")
|
||||||
|
@ -211,7 +221,7 @@ $ ->
|
||||||
new ConfirmDangerModal(form, text)
|
new ConfirmDangerModal(form, text)
|
||||||
|
|
||||||
|
|
||||||
$(document).on 'click', 'button', ->
|
$document.on 'click', 'button', ->
|
||||||
$(this).blur()
|
$(this).blur()
|
||||||
|
|
||||||
$('input[type="search"]').each ->
|
$('input[type="search"]').each ->
|
||||||
|
@ -219,7 +229,7 @@ $ ->
|
||||||
$this.attr 'value', $this.val()
|
$this.attr 'value', $this.val()
|
||||||
return
|
return
|
||||||
|
|
||||||
$(document)
|
$document
|
||||||
.off 'keyup', 'input[type="search"]'
|
.off 'keyup', 'input[type="search"]'
|
||||||
.on 'keyup', 'input[type="search"]' , (e) ->
|
.on 'keyup', 'input[type="search"]' , (e) ->
|
||||||
$this = $(this)
|
$this = $(this)
|
||||||
|
@ -227,7 +237,7 @@ $ ->
|
||||||
|
|
||||||
$sidebarGutterToggle = $('.js-sidebar-toggle')
|
$sidebarGutterToggle = $('.js-sidebar-toggle')
|
||||||
|
|
||||||
$(document)
|
$document
|
||||||
.off 'breakpoint:change'
|
.off 'breakpoint:change'
|
||||||
.on 'breakpoint:change', (e, breakpoint) ->
|
.on 'breakpoint:change', (e, breakpoint) ->
|
||||||
if breakpoint is 'sm' or breakpoint is 'xs'
|
if breakpoint is 'sm' or breakpoint is 'xs'
|
||||||
|
@ -239,14 +249,14 @@ $ ->
|
||||||
oldBootstrapBreakpoint = bootstrapBreakpoint
|
oldBootstrapBreakpoint = bootstrapBreakpoint
|
||||||
bootstrapBreakpoint = bp.getBreakpointSize()
|
bootstrapBreakpoint = bp.getBreakpointSize()
|
||||||
if bootstrapBreakpoint != oldBootstrapBreakpoint
|
if bootstrapBreakpoint != oldBootstrapBreakpoint
|
||||||
$(document).trigger('breakpoint:change', [bootstrapBreakpoint])
|
$document.trigger('breakpoint:change', [bootstrapBreakpoint])
|
||||||
|
|
||||||
checkInitialSidebarSize = ->
|
checkInitialSidebarSize = ->
|
||||||
bootstrapBreakpoint = bp.getBreakpointSize()
|
bootstrapBreakpoint = bp.getBreakpointSize()
|
||||||
if bootstrapBreakpoint is "xs" or "sm"
|
if bootstrapBreakpoint is "xs" or "sm"
|
||||||
$(document).trigger('breakpoint:change', [bootstrapBreakpoint])
|
$document.trigger('breakpoint:change', [bootstrapBreakpoint])
|
||||||
|
|
||||||
$(window)
|
$window
|
||||||
.off "resize.app"
|
.off "resize.app"
|
||||||
.on "resize.app", (e) ->
|
.on "resize.app", (e) ->
|
||||||
fitSidebarForSize()
|
fitSidebarForSize()
|
||||||
|
@ -256,14 +266,14 @@ $ ->
|
||||||
new Aside()
|
new Aside()
|
||||||
|
|
||||||
# Sidenav pinning
|
# Sidenav pinning
|
||||||
if $(window).width() < 1440 and $.cookie('pin_nav') is 'true'
|
if $window.width() < 1024 and $.cookie('pin_nav') is 'true'
|
||||||
$.cookie('pin_nav', 'false', { path: '/' })
|
$.cookie('pin_nav', 'false', { path: '/', expires: 365 * 10 })
|
||||||
$('.page-with-sidebar')
|
$('.page-with-sidebar')
|
||||||
.toggleClass('page-sidebar-collapsed page-sidebar-expanded')
|
.toggleClass('page-sidebar-collapsed page-sidebar-expanded')
|
||||||
.removeClass('page-sidebar-pinned')
|
.removeClass('page-sidebar-pinned')
|
||||||
$('.navbar-fixed-top').removeClass('header-pinned-nav')
|
$('.navbar-fixed-top').removeClass('header-pinned-nav')
|
||||||
|
|
||||||
$(document)
|
$document
|
||||||
.off 'click', '.js-nav-pin'
|
.off 'click', '.js-nav-pin'
|
||||||
.on 'click', '.js-nav-pin', (e) ->
|
.on 'click', '.js-nav-pin', (e) ->
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
@ -288,7 +298,7 @@ $ ->
|
||||||
.toggleClass('header-collapsed header-expanded')
|
.toggleClass('header-collapsed header-expanded')
|
||||||
|
|
||||||
# Save settings
|
# Save settings
|
||||||
$.cookie 'pin_nav', doPinNav, { path: '/' }
|
$.cookie 'pin_nav', doPinNav, { path: '/', expires: 365 * 10 }
|
||||||
|
|
||||||
if $.cookie('pin_nav') is 'true' or doPinNav
|
if $.cookie('pin_nav') is 'true' or doPinNav
|
||||||
tooltipText = 'Unpin navigation'
|
tooltipText = 'Unpin navigation'
|
||||||
|
|
|
@ -341,7 +341,9 @@ class @AwardsHandler
|
||||||
for emoji in frequentlyUsedEmojis
|
for emoji in frequentlyUsedEmojis
|
||||||
$(".emoji-menu-content [data-emoji='#{emoji}']").closest('li').clone().appendTo(ul)
|
$(".emoji-menu-content [data-emoji='#{emoji}']").closest('li').clone().appendTo(ul)
|
||||||
|
|
||||||
$('input.emoji-search').after(ul).after($('<h5>').text('Frequently used'))
|
$('.emoji-menu-content')
|
||||||
|
.prepend(ul)
|
||||||
|
.prepend($('<h5>').text('Frequently used'))
|
||||||
|
|
||||||
@frequentEmojiBlockRendered = true
|
@frequentEmojiBlockRendered = true
|
||||||
|
|
||||||
|
@ -356,7 +358,7 @@ class @AwardsHandler
|
||||||
|
|
||||||
if term
|
if term
|
||||||
# Generate a search result block
|
# Generate a search result block
|
||||||
h5 = $('<h5>').text('Search results').addClass('emoji-search')
|
h5 = $('<h5>').text('Search results')
|
||||||
found_emojis = @searchEmojis(term).show()
|
found_emojis = @searchEmojis(term).show()
|
||||||
ul = $('<ul>').addClass('emoji-menu-list emoji-menu-search').append(found_emojis)
|
ul = $('<ul>').addClass('emoji-menu-list emoji-menu-search').append(found_emojis)
|
||||||
$('.emoji-menu-content ul, .emoji-menu-content h5').hide()
|
$('.emoji-menu-content ul, .emoji-menu-content h5').hide()
|
||||||
|
|
|
@ -19,6 +19,7 @@ class @TemplateSelector
|
||||||
data: @data,
|
data: @data,
|
||||||
filterable: true,
|
filterable: true,
|
||||||
selectable: true,
|
selectable: true,
|
||||||
|
toggleLabel: @toggleLabel,
|
||||||
search:
|
search:
|
||||||
fields: ['name']
|
fields: ['name']
|
||||||
clicked: @onClick
|
clicked: @onClick
|
||||||
|
@ -31,6 +32,9 @@ class @TemplateSelector
|
||||||
@onFilenameUpdate()
|
@onFilenameUpdate()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
toggleLabel: (item) ->
|
||||||
|
item.name
|
||||||
|
|
||||||
onFilenameUpdate: ->
|
onFilenameUpdate: ->
|
||||||
return unless @$input.length
|
return unless @$input.length
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
class @CiBuild
|
class @Build
|
||||||
@interval: null
|
@interval: null
|
||||||
@state: null
|
@state: null
|
||||||
|
|
||||||
constructor: (@build_url, @build_status, @state) ->
|
constructor: (@page_url, @build_url, @build_status, @state) ->
|
||||||
clearInterval(CiBuild.interval)
|
clearInterval(Build.interval)
|
||||||
|
|
||||||
# Init breakpoint checker
|
# Init breakpoint checker
|
||||||
@bp = Breakpoints.get()
|
@bp = Breakpoints.get()
|
||||||
|
@ -40,8 +40,8 @@ class @CiBuild
|
||||||
# Check for new build output if user still watching build page
|
# Check for new build output if user still watching build page
|
||||||
# Only valid for runnig build when output changes during time
|
# Only valid for runnig build when output changes during time
|
||||||
#
|
#
|
||||||
CiBuild.interval = setInterval =>
|
Build.interval = setInterval =>
|
||||||
if window.location.href.split("#").first() is @build_url
|
if window.location.href.split("#").first() is @page_url
|
||||||
@getBuildTrace()
|
@getBuildTrace()
|
||||||
, 4000
|
, 4000
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ class @CiBuild
|
||||||
|
|
||||||
getBuildTrace: ->
|
getBuildTrace: ->
|
||||||
$.ajax
|
$.ajax
|
||||||
url: "#{@build_url}/trace.json?state=#{encodeURIComponent(@state)}"
|
url: "#{@page_url}/trace.json?state=#{encodeURIComponent(@state)}"
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
success: (log) =>
|
success: (log) =>
|
||||||
if log.state
|
if log.state
|
||||||
|
@ -70,7 +70,7 @@ class @CiBuild
|
||||||
$('.js-build-output').html log.html
|
$('.js-build-output').html log.html
|
||||||
@checkAutoscroll()
|
@checkAutoscroll()
|
||||||
else if log.status isnt @build_status
|
else if log.status isnt @build_status
|
||||||
Turbolinks.visit @build_url
|
Turbolinks.visit @page_url
|
||||||
|
|
||||||
checkAutoscroll: ->
|
checkAutoscroll: ->
|
||||||
$("html,body").scrollTop $("#build-trace").height() if "enabled" is $("#autoscroll-button").data("state")
|
$("html,body").scrollTop $("#build-trace").height() if "enabled" is $("#autoscroll-button").data("state")
|
|
@ -1,12 +0,0 @@
|
||||||
#= require pager
|
|
||||||
#= require jquery_nested_form
|
|
||||||
#= require_tree .
|
|
||||||
|
|
||||||
$(document).on 'click', '.assign-all-runner', ->
|
|
||||||
$(this).replaceWith('<i class="fa fa-refresh fa-spin"></i> Assign in progress..')
|
|
||||||
|
|
||||||
window.unbindEvents = ->
|
|
||||||
$(document).unbind('scroll')
|
|
||||||
$(document).off('scroll')
|
|
||||||
|
|
||||||
document.addEventListener("page:fetch", unbindEvents)
|
|
|
@ -1,3 +0,0 @@
|
||||||
$(document).on 'click', '.badge-codes-toggle', ->
|
|
||||||
$('.badge-codes-block').toggleClass("hide")
|
|
||||||
return false
|
|
41
app/assets/javascripts/compare_autocomplete.js.coffee
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
class @CompareAutocomplete
|
||||||
|
constructor: ->
|
||||||
|
@initDropdown()
|
||||||
|
|
||||||
|
initDropdown: ->
|
||||||
|
$('.js-compare-dropdown').each ->
|
||||||
|
$dropdown = $(@)
|
||||||
|
selected = $dropdown.data('selected')
|
||||||
|
|
||||||
|
$dropdown.glDropdown(
|
||||||
|
data: (term, callback) ->
|
||||||
|
$.ajax(
|
||||||
|
url: $dropdown.data('refs-url')
|
||||||
|
data:
|
||||||
|
ref: $dropdown.data('ref')
|
||||||
|
).done (refs) ->
|
||||||
|
callback(refs)
|
||||||
|
selectable: true
|
||||||
|
filterable: true
|
||||||
|
filterByText: true
|
||||||
|
fieldName: $dropdown.attr('name')
|
||||||
|
filterInput: 'input[type="text"]'
|
||||||
|
renderRow: (ref) ->
|
||||||
|
if ref.header?
|
||||||
|
$('<li />')
|
||||||
|
.addClass('dropdown-header')
|
||||||
|
.text(ref.header)
|
||||||
|
else
|
||||||
|
link = $('<a />')
|
||||||
|
.attr('href', '#')
|
||||||
|
.addClass(if ref is selected then 'is-active' else '')
|
||||||
|
.text(ref)
|
||||||
|
.attr('data-ref', escape(ref))
|
||||||
|
|
||||||
|
$('<li />')
|
||||||
|
.append(link)
|
||||||
|
id: (obj, $el) ->
|
||||||
|
$el.attr('data-ref')
|
||||||
|
toggleLabel: (obj, $el) ->
|
||||||
|
$el.text().trim()
|
||||||
|
)
|
|
@ -1,6 +1,9 @@
|
||||||
class @Diff
|
class @Diff
|
||||||
UNFOLD_COUNT = 20
|
UNFOLD_COUNT = 20
|
||||||
constructor: ->
|
constructor: ->
|
||||||
|
$('.files .diff-file').singleFileDiff()
|
||||||
|
@filesCommentButton = $('.files .diff-file').filesCommentButton()
|
||||||
|
|
||||||
$(document).off('click', '.js-unfold')
|
$(document).off('click', '.js-unfold')
|
||||||
$(document).on('click', '.js-unfold', (event) =>
|
$(document).on('click', '.js-unfold', (event) =>
|
||||||
target = $(event.target)
|
target = $(event.target)
|
||||||
|
@ -36,7 +39,7 @@ class @Diff
|
||||||
# see https://gitlab.com/gitlab-org/gitlab-ce/issues/707
|
# see https://gitlab.com/gitlab-org/gitlab-ce/issues/707
|
||||||
indent: 1
|
indent: 1
|
||||||
|
|
||||||
$.get(link, params, (response) =>
|
$.get(link, params, (response) ->
|
||||||
target.parent().replaceWith(response)
|
target.parent().replaceWith(response)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -84,6 +84,8 @@ class Dispatcher
|
||||||
new Activities()
|
new Activities()
|
||||||
when 'groups:show'
|
when 'groups:show'
|
||||||
shortcut_handler = new ShortcutsNavigation()
|
shortcut_handler = new ShortcutsNavigation()
|
||||||
|
new NotificationsForm()
|
||||||
|
new NotificationsDropdown()
|
||||||
when 'groups:group_members:index'
|
when 'groups:group_members:index'
|
||||||
new GroupMembers()
|
new GroupMembers()
|
||||||
new UsersSelect()
|
new UsersSelect()
|
||||||
|
@ -125,17 +127,18 @@ class Dispatcher
|
||||||
when 'groups'
|
when 'groups'
|
||||||
new UsersSelect()
|
new UsersSelect()
|
||||||
when 'projects'
|
when 'projects'
|
||||||
new NamespaceSelect()
|
new NamespaceSelects()
|
||||||
when 'dashboard', 'root'
|
when 'dashboard', 'root'
|
||||||
shortcut_handler = new ShortcutsDashboardNavigation()
|
shortcut_handler = new ShortcutsDashboardNavigation()
|
||||||
when 'profiles'
|
when 'profiles'
|
||||||
new Profile()
|
|
||||||
new NotificationsForm()
|
new NotificationsForm()
|
||||||
new NotificationsDropdown()
|
new NotificationsDropdown()
|
||||||
when 'projects'
|
when 'projects'
|
||||||
new Project()
|
new Project()
|
||||||
new ProjectAvatar()
|
new ProjectAvatar()
|
||||||
switch path[1]
|
switch path[1]
|
||||||
|
when 'compare'
|
||||||
|
new CompareAutocomplete()
|
||||||
when 'edit'
|
when 'edit'
|
||||||
shortcut_handler = new ShortcutsNavigation()
|
shortcut_handler = new ShortcutsNavigation()
|
||||||
new ProjectNew()
|
new ProjectNew()
|
||||||
|
|
|
@ -70,12 +70,12 @@ class @DropzoneInput
|
||||||
pasteText response.link.markdown
|
pasteText response.link.markdown
|
||||||
return
|
return
|
||||||
|
|
||||||
error: (temp, errorMessage) ->
|
error: (temp) ->
|
||||||
errorAlert = $(form).find('.error-alert')
|
errorAlert = $(form).find('.error-alert')
|
||||||
checkIfMsgExists = errorAlert.children().length
|
checkIfMsgExists = errorAlert.children().length
|
||||||
if checkIfMsgExists is 0
|
if checkIfMsgExists is 0
|
||||||
errorAlert.append divAlert
|
errorAlert.append divAlert
|
||||||
$(".div-dropzone-alert").append btnAlert + errorMessage
|
$(".div-dropzone-alert").append "#{btnAlert}Attaching the file failed."
|
||||||
return
|
return
|
||||||
|
|
||||||
totaluploadprogress: (totalUploadProgress) ->
|
totaluploadprogress: (totalUploadProgress) ->
|
||||||
|
|
98
app/assets/javascripts/files_comment_button.js.coffee
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
class @FilesCommentButton
|
||||||
|
COMMENT_BUTTON_CLASS = '.add-diff-note'
|
||||||
|
COMMENT_BUTTON_TEMPLATE = _.template '<button name="button" type="submit" class="btn <%- COMMENT_BUTTON_CLASS %> js-add-diff-note-button" title="Add a comment to this line"><i class="fa fa-comment-o"></i></button>'
|
||||||
|
LINE_HOLDER_CLASS = '.line_holder'
|
||||||
|
LINE_NUMBER_CLASS = 'diff-line-num'
|
||||||
|
LINE_CONTENT_CLASS = 'line_content'
|
||||||
|
UNFOLDABLE_LINE_CLASS = 'js-unfold'
|
||||||
|
EMPTY_CELL_CLASS = 'empty-cell'
|
||||||
|
OLD_LINE_CLASS = 'old_line'
|
||||||
|
LINE_COLUMN_CLASSES = ".#{LINE_NUMBER_CLASS}, .line_content"
|
||||||
|
TEXT_FILE_SELECTOR = '.text-file'
|
||||||
|
DEBOUNCE_TIMEOUT_DURATION = 100
|
||||||
|
|
||||||
|
constructor: (@filesContainerElement) ->
|
||||||
|
@VIEW_TYPE = $('input#view[type=hidden]').val()
|
||||||
|
|
||||||
|
debounce = _.debounce @render, DEBOUNCE_TIMEOUT_DURATION
|
||||||
|
|
||||||
|
$(@filesContainerElement)
|
||||||
|
.off 'mouseover', LINE_COLUMN_CLASSES
|
||||||
|
.off 'mouseleave', LINE_COLUMN_CLASSES
|
||||||
|
.on 'mouseover', LINE_COLUMN_CLASSES, debounce
|
||||||
|
.on 'mouseleave', LINE_COLUMN_CLASSES, @destroy
|
||||||
|
|
||||||
|
render: (e) =>
|
||||||
|
$currentTarget = $(e.currentTarget)
|
||||||
|
buttonParentElement = @getButtonParent $currentTarget
|
||||||
|
return unless @shouldRender e, buttonParentElement
|
||||||
|
|
||||||
|
textFileElement = @getTextFileElement $currentTarget
|
||||||
|
lineContentElement = @getLineContent $currentTarget
|
||||||
|
|
||||||
|
buttonParentElement.append @buildButton
|
||||||
|
noteableType: textFileElement.attr 'data-noteable-type'
|
||||||
|
noteableID: textFileElement.attr 'data-noteable-id'
|
||||||
|
commitID: textFileElement.attr 'data-commit-id'
|
||||||
|
noteType: lineContentElement.attr 'data-note-type'
|
||||||
|
position: lineContentElement.attr 'data-position'
|
||||||
|
lineType: lineContentElement.attr 'data-line-type'
|
||||||
|
discussionID: lineContentElement.attr 'data-discussion-id'
|
||||||
|
lineCode: lineContentElement.attr 'data-line-code'
|
||||||
|
return
|
||||||
|
|
||||||
|
destroy: (e) =>
|
||||||
|
return if @isMovingToSameType e
|
||||||
|
$(COMMENT_BUTTON_CLASS, @getButtonParent $(e.currentTarget)).remove()
|
||||||
|
return
|
||||||
|
|
||||||
|
buildButton: (buttonAttributes) ->
|
||||||
|
initializedButtonTemplate = COMMENT_BUTTON_TEMPLATE
|
||||||
|
COMMENT_BUTTON_CLASS: COMMENT_BUTTON_CLASS.substr 1
|
||||||
|
$(initializedButtonTemplate).attr
|
||||||
|
'data-noteable-type': buttonAttributes.noteableType
|
||||||
|
'data-noteable-id': buttonAttributes.noteableID
|
||||||
|
'data-commit-id': buttonAttributes.commitID
|
||||||
|
'data-note-type': buttonAttributes.noteType
|
||||||
|
'data-line-code': buttonAttributes.lineCode
|
||||||
|
'data-position': buttonAttributes.position
|
||||||
|
'data-discussion-id': buttonAttributes.discussionID
|
||||||
|
'data-line-type': buttonAttributes.lineType
|
||||||
|
|
||||||
|
getTextFileElement: (hoveredElement) ->
|
||||||
|
$(hoveredElement.closest TEXT_FILE_SELECTOR)
|
||||||
|
|
||||||
|
getLineContent: (hoveredElement) ->
|
||||||
|
return hoveredElement if hoveredElement.hasClass LINE_CONTENT_CLASS
|
||||||
|
|
||||||
|
if @VIEW_TYPE is 'inline'
|
||||||
|
return $(hoveredElement).closest(LINE_HOLDER_CLASS).find ".#{LINE_CONTENT_CLASS}"
|
||||||
|
else
|
||||||
|
return $(hoveredElement).next ".#{LINE_CONTENT_CLASS}"
|
||||||
|
|
||||||
|
getButtonParent: (hoveredElement) ->
|
||||||
|
if @VIEW_TYPE is 'inline'
|
||||||
|
return hoveredElement if hoveredElement.hasClass OLD_LINE_CLASS
|
||||||
|
|
||||||
|
hoveredElement.parent().find ".#{OLD_LINE_CLASS}"
|
||||||
|
else
|
||||||
|
return hoveredElement if hoveredElement.hasClass LINE_NUMBER_CLASS
|
||||||
|
|
||||||
|
$(hoveredElement).prev ".#{LINE_NUMBER_CLASS}"
|
||||||
|
|
||||||
|
isMovingToSameType: (e) ->
|
||||||
|
newButtonParent = @getButtonParent $(e.toElement)
|
||||||
|
return false unless newButtonParent
|
||||||
|
newButtonParent.is @getButtonParent $(e.currentTarget)
|
||||||
|
|
||||||
|
shouldRender: (e, buttonParentElement) ->
|
||||||
|
(not buttonParentElement.hasClass(EMPTY_CELL_CLASS) and \
|
||||||
|
not buttonParentElement.hasClass(UNFOLDABLE_LINE_CLASS) and \
|
||||||
|
$(COMMENT_BUTTON_CLASS, buttonParentElement).length is 0)
|
||||||
|
|
||||||
|
$.fn.filesCommentButton = ->
|
||||||
|
return unless this and @parent().data('can-create-note')?
|
||||||
|
|
||||||
|
@each ->
|
||||||
|
unless $.data this, 'filesCommentButton'
|
||||||
|
$.data this, 'filesCommentButton', new FilesCommentButton $(this)
|
|
@ -1,16 +1,28 @@
|
||||||
class @Flash
|
class @Flash
|
||||||
constructor: (message, type = 'alert')->
|
hideFlash = -> $(@).fadeOut()
|
||||||
@flash = $(".flash-container")
|
|
||||||
@flash.html("")
|
|
||||||
|
|
||||||
innerDiv = $('<div/>',
|
constructor: (message, type = 'alert', parent = null)->
|
||||||
class: "flash-#{type}",
|
if parent
|
||||||
|
@flashContainer = parent.find('.flash-container')
|
||||||
|
else
|
||||||
|
@flashContainer = $('.flash-container-page')
|
||||||
|
|
||||||
|
@flashContainer.html('')
|
||||||
|
|
||||||
|
flash = $('<div/>',
|
||||||
|
class: "flash-#{type}"
|
||||||
|
)
|
||||||
|
flash.on 'click', hideFlash
|
||||||
|
|
||||||
|
textDiv = $('<div/>',
|
||||||
|
class: 'flash-text',
|
||||||
text: message
|
text: message
|
||||||
)
|
)
|
||||||
innerDiv.appendTo(".flash-container")
|
textDiv.appendTo(flash)
|
||||||
|
|
||||||
@flash.click -> $(@).fadeOut()
|
if @flashContainer.parent().hasClass('content-wrapper')
|
||||||
@flash.show()
|
textDiv.addClass('container-fluid container-limited')
|
||||||
|
|
||||||
|
flash.appendTo(@flashContainer)
|
||||||
|
@flashContainer.show()
|
||||||
|
|
||||||
pinTo: (selector) ->
|
|
||||||
@flash.detach().appendTo(selector)
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ window.GitLab ?= {}
|
||||||
GitLab.GfmAutoComplete =
|
GitLab.GfmAutoComplete =
|
||||||
dataLoading: false
|
dataLoading: false
|
||||||
dataLoaded: false
|
dataLoaded: false
|
||||||
|
cachedData: {}
|
||||||
dataSource: ''
|
dataSource: ''
|
||||||
|
|
||||||
# Emoji
|
# Emoji
|
||||||
|
@ -55,7 +55,7 @@ GitLab.GfmAutoComplete =
|
||||||
@setupAtWho()
|
@setupAtWho()
|
||||||
|
|
||||||
if @dataSource
|
if @dataSource
|
||||||
if !@dataLoading
|
if not @dataLoading and not @cachedData
|
||||||
@dataLoading = true
|
@dataLoading = true
|
||||||
|
|
||||||
# We should wait until initializations are done
|
# We should wait until initializations are done
|
||||||
|
@ -70,6 +70,8 @@ GitLab.GfmAutoComplete =
|
||||||
@loadData(data)
|
@loadData(data)
|
||||||
, 1000)
|
, 1000)
|
||||||
|
|
||||||
|
if @cachedData?
|
||||||
|
@loadData(@cachedData)
|
||||||
|
|
||||||
setupAtWho: ->
|
setupAtWho: ->
|
||||||
# Emoji
|
# Emoji
|
||||||
|
@ -188,7 +190,7 @@ GitLab.GfmAutoComplete =
|
||||||
callbacks:
|
callbacks:
|
||||||
beforeSave: (merges) ->
|
beforeSave: (merges) ->
|
||||||
sanitizeLabelTitle = (title)->
|
sanitizeLabelTitle = (title)->
|
||||||
if /\w+\s+\w+/g.test(title)
|
if /[\w\?&]+\s+[\w\?&]+/g.test(title)
|
||||||
"\"#{sanitize(title)}\""
|
"\"#{sanitize(title)}\""
|
||||||
else
|
else
|
||||||
sanitize(title)
|
sanitize(title)
|
||||||
|
@ -205,6 +207,7 @@ GitLab.GfmAutoComplete =
|
||||||
$.getJSON(dataSource)
|
$.getJSON(dataSource)
|
||||||
|
|
||||||
loadData: (data) ->
|
loadData: (data) ->
|
||||||
|
@cachedData = data
|
||||||
@dataLoaded = true
|
@dataLoaded = true
|
||||||
|
|
||||||
# load members
|
# load members
|
||||||
|
|
|
@ -56,6 +56,7 @@ class GitLabDropdownFilter
|
||||||
return BLUR_KEYCODES.indexOf(keyCode) >= 0
|
return BLUR_KEYCODES.indexOf(keyCode) >= 0
|
||||||
|
|
||||||
filter: (search_text) ->
|
filter: (search_text) ->
|
||||||
|
@options.onFilter(search_text) if @options.onFilter
|
||||||
data = @options.data()
|
data = @options.data()
|
||||||
|
|
||||||
if data? and not @options.filterByText
|
if data? and not @options.filterByText
|
||||||
|
@ -186,6 +187,8 @@ class GitLabDropdown
|
||||||
@fullData = data
|
@fullData = data
|
||||||
|
|
||||||
@parseData @fullData
|
@parseData @fullData
|
||||||
|
|
||||||
|
@filter.input.trigger('keyup') if @options.filterable and @filter and @filter.input
|
||||||
}
|
}
|
||||||
|
|
||||||
# Init filterable
|
# Init filterable
|
||||||
|
@ -193,6 +196,7 @@ class GitLabDropdown
|
||||||
@filter = new GitLabDropdownFilter @filterInput,
|
@filter = new GitLabDropdownFilter @filterInput,
|
||||||
filterInputBlur: @filterInputBlur
|
filterInputBlur: @filterInputBlur
|
||||||
filterByText: @options.filterByText
|
filterByText: @options.filterByText
|
||||||
|
onFilter: @options.onFilter
|
||||||
remote: @options.filterRemote
|
remote: @options.filterRemote
|
||||||
query: @options.data
|
query: @options.data
|
||||||
keys: searchFields
|
keys: searchFields
|
||||||
|
@ -206,9 +210,25 @@ class GitLabDropdown
|
||||||
data: =>
|
data: =>
|
||||||
return @fullData
|
return @fullData
|
||||||
callback: (data) =>
|
callback: (data) =>
|
||||||
currentIndex = -1
|
|
||||||
@parseData data
|
@parseData data
|
||||||
|
|
||||||
|
unless @filterInput.val() is ''
|
||||||
|
selector = '.dropdown-content li:not(.divider):visible'
|
||||||
|
|
||||||
|
if @dropdown.find('.dropdown-toggle-page').length
|
||||||
|
selector = ".dropdown-page-one #{selector}"
|
||||||
|
|
||||||
|
if not $(@el).is('input')
|
||||||
|
$(selector, @dropdown)
|
||||||
|
.first()
|
||||||
|
.find('a')
|
||||||
|
.addClass('is-focused')
|
||||||
|
|
||||||
|
currentIndex = 0
|
||||||
|
else
|
||||||
|
currentIndex = -1
|
||||||
|
|
||||||
|
|
||||||
# Event listeners
|
# Event listeners
|
||||||
|
|
||||||
@dropdown.on "shown.bs.dropdown", @opened
|
@dropdown.on "shown.bs.dropdown", @opened
|
||||||
|
@ -218,6 +238,13 @@ class GitLabDropdown
|
||||||
@dropdown.on 'keyup', (e) =>
|
@dropdown.on 'keyup', (e) =>
|
||||||
if e.which is 27 # Escape key
|
if e.which is 27 # Escape key
|
||||||
$('.dropdown-menu-close', @dropdown).trigger 'click'
|
$('.dropdown-menu-close', @dropdown).trigger 'click'
|
||||||
|
@dropdown.on 'blur', 'a', (e) =>
|
||||||
|
if e.relatedTarget?
|
||||||
|
$relatedTarget = $(e.relatedTarget)
|
||||||
|
$dropdownMenu = $relatedTarget.closest('.dropdown-menu')
|
||||||
|
|
||||||
|
if $dropdownMenu.length is 0
|
||||||
|
@dropdown.removeClass('open')
|
||||||
|
|
||||||
if @dropdown.find(".dropdown-toggle-page").length
|
if @dropdown.find(".dropdown-toggle-page").length
|
||||||
@dropdown.find(".dropdown-toggle-page, .dropdown-menu-back").on "click", (e) =>
|
@dropdown.find(".dropdown-toggle-page, .dropdown-menu-back").on "click", (e) =>
|
||||||
|
@ -239,6 +266,8 @@ class GitLabDropdown
|
||||||
if self.options.clicked
|
if self.options.clicked
|
||||||
self.options.clicked(selected, $el, e)
|
self.options.clicked(selected, $el, e)
|
||||||
|
|
||||||
|
$el.trigger('blur')
|
||||||
|
|
||||||
# Finds an element inside wrapper element
|
# Finds an element inside wrapper element
|
||||||
getElement: (selector) ->
|
getElement: (selector) ->
|
||||||
@dropdown.find selector
|
@dropdown.find selector
|
||||||
|
@ -280,7 +309,7 @@ class GitLabDropdown
|
||||||
html = @renderData(data)
|
html = @renderData(data)
|
||||||
|
|
||||||
# Render the full menu
|
# Render the full menu
|
||||||
full_html = @renderMenu(html.join(""))
|
full_html = @renderMenu(html)
|
||||||
|
|
||||||
@appendMenu(full_html)
|
@appendMenu(full_html)
|
||||||
|
|
||||||
|
@ -351,7 +380,8 @@ class GitLabDropdown
|
||||||
if @options.renderMenu
|
if @options.renderMenu
|
||||||
menu_html = @options.renderMenu(html)
|
menu_html = @options.renderMenu(html)
|
||||||
else
|
else
|
||||||
menu_html = "<ul>#{html}</ul>"
|
menu_html = $('<ul />')
|
||||||
|
.append(html)
|
||||||
|
|
||||||
return menu_html
|
return menu_html
|
||||||
|
|
||||||
|
@ -360,7 +390,9 @@ class GitLabDropdown
|
||||||
selector = '.dropdown-content'
|
selector = '.dropdown-content'
|
||||||
if @dropdown.find(".dropdown-toggle-page").length
|
if @dropdown.find(".dropdown-toggle-page").length
|
||||||
selector = ".dropdown-page-one .dropdown-content"
|
selector = ".dropdown-page-one .dropdown-content"
|
||||||
$(selector, @dropdown).html html
|
$(selector, @dropdown)
|
||||||
|
.empty()
|
||||||
|
.append(html)
|
||||||
|
|
||||||
# Render the row
|
# Render the row
|
||||||
renderItem: (data, group = false, index = false) ->
|
renderItem: (data, group = false, index = false) ->
|
||||||
|
@ -442,6 +474,8 @@ class GitLabDropdown
|
||||||
|
|
||||||
rowClicked: (el) ->
|
rowClicked: (el) ->
|
||||||
fieldName = @options.fieldName
|
fieldName = @options.fieldName
|
||||||
|
isInput = $(@el).is('input')
|
||||||
|
|
||||||
if @renderedData
|
if @renderedData
|
||||||
groupName = el.data('group')
|
groupName = el.data('group')
|
||||||
if groupName
|
if groupName
|
||||||
|
@ -452,14 +486,23 @@ class GitLabDropdown
|
||||||
selectedObject = @renderedData[selectedIndex]
|
selectedObject = @renderedData[selectedIndex]
|
||||||
|
|
||||||
value = if @options.id then @options.id(selectedObject, el) else selectedObject.id
|
value = if @options.id then @options.id(selectedObject, el) else selectedObject.id
|
||||||
field = @dropdown.parent().find("input[name='#{fieldName}'][value='#{value}']")
|
|
||||||
|
if isInput
|
||||||
|
field = $(@el)
|
||||||
|
else
|
||||||
|
field = @dropdown.parent().find("input[name='#{fieldName}'][value='#{value}']")
|
||||||
|
|
||||||
if el.hasClass(ACTIVE_CLASS)
|
if el.hasClass(ACTIVE_CLASS)
|
||||||
el.removeClass(ACTIVE_CLASS)
|
el.removeClass(ACTIVE_CLASS)
|
||||||
field.remove()
|
|
||||||
|
if isInput
|
||||||
|
field.val('')
|
||||||
|
else
|
||||||
|
field.remove()
|
||||||
|
|
||||||
# Toggle the dropdown label
|
# Toggle the dropdown label
|
||||||
if @options.toggleLabel
|
if @options.toggleLabel
|
||||||
@updateLabel()
|
@updateLabel(selectedObject, el, @)
|
||||||
else
|
else
|
||||||
selectedObject
|
selectedObject
|
||||||
else if el.hasClass(INDETERMINATE_CLASS)
|
else if el.hasClass(INDETERMINATE_CLASS)
|
||||||
|
@ -476,7 +519,9 @@ class GitLabDropdown
|
||||||
else
|
else
|
||||||
if not @options.multiSelect or el.hasClass('dropdown-clear-active')
|
if not @options.multiSelect or el.hasClass('dropdown-clear-active')
|
||||||
@dropdown.find(".#{ACTIVE_CLASS}").removeClass ACTIVE_CLASS
|
@dropdown.find(".#{ACTIVE_CLASS}").removeClass ACTIVE_CLASS
|
||||||
@dropdown.parent().find("input[name='#{fieldName}']").remove()
|
|
||||||
|
unless isInput
|
||||||
|
@dropdown.parent().find("input[name='#{fieldName}']").remove()
|
||||||
|
|
||||||
if !value?
|
if !value?
|
||||||
field.remove()
|
field.remove()
|
||||||
|
@ -486,12 +531,14 @@ class GitLabDropdown
|
||||||
|
|
||||||
# Toggle the dropdown label
|
# Toggle the dropdown label
|
||||||
if @options.toggleLabel
|
if @options.toggleLabel
|
||||||
@updateLabel(selectedObject, el)
|
@updateLabel(selectedObject, el, @)
|
||||||
if value?
|
if value?
|
||||||
if !field.length and fieldName
|
if !field.length and fieldName
|
||||||
@addInput(fieldName, value)
|
@addInput(fieldName, value)
|
||||||
else
|
else
|
||||||
field.val value
|
field
|
||||||
|
.val value
|
||||||
|
.trigger 'change'
|
||||||
|
|
||||||
return selectedObject
|
return selectedObject
|
||||||
|
|
||||||
|
@ -515,10 +562,16 @@ class GitLabDropdown
|
||||||
# simulate a click on the first link
|
# simulate a click on the first link
|
||||||
$el = $(selector, @dropdown)
|
$el = $(selector, @dropdown)
|
||||||
|
|
||||||
if $el.length
|
if $el.length and currentIndex > -1
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
e.stopImmediatePropagation()
|
e.stopImmediatePropagation()
|
||||||
$(selector, @dropdown)[0].click()
|
$first = $el.first()
|
||||||
|
$firstEl = $first.get(0)
|
||||||
|
|
||||||
|
if $firstEl.click
|
||||||
|
$firstEl.click()
|
||||||
|
else
|
||||||
|
$first.trigger('click')
|
||||||
|
|
||||||
addArrowKeyEvent: ->
|
addArrowKeyEvent: ->
|
||||||
ARROW_KEY_CODES = [38, 40]
|
ARROW_KEY_CODES = [38, 40]
|
||||||
|
@ -585,8 +638,8 @@ class GitLabDropdown
|
||||||
# Scroll the dropdown content up
|
# Scroll the dropdown content up
|
||||||
$dropdownContent.scrollTop(listItemTop - dropdownContentTop)
|
$dropdownContent.scrollTop(listItemTop - dropdownContentTop)
|
||||||
|
|
||||||
updateLabel: (selected = null, el = null) =>
|
updateLabel: (selected = null, el = null, instance = null) =>
|
||||||
$(@el).find(".dropdown-toggle-text").text @options.toggleLabel(selected, el)
|
$(@el).find(".dropdown-toggle-text").text @options.toggleLabel(selected, el, instance)
|
||||||
|
|
||||||
$.fn.glDropdown = (opts) ->
|
$.fn.glDropdown = (opts) ->
|
||||||
return @.each ->
|
return @.each ->
|
||||||
|
|
|
@ -34,6 +34,8 @@ class @GLForm
|
||||||
# form and textarea event listeners
|
# form and textarea event listeners
|
||||||
@addEventListeners()
|
@addEventListeners()
|
||||||
|
|
||||||
|
gl.text.init(@form)
|
||||||
|
|
||||||
# hide discard button
|
# hide discard button
|
||||||
@form.find('.js-note-discard').hide()
|
@form.find('.js-note-discard').hide()
|
||||||
|
|
||||||
|
@ -42,6 +44,7 @@ class @GLForm
|
||||||
clearEventListeners: ->
|
clearEventListeners: ->
|
||||||
@textarea.off 'focus'
|
@textarea.off 'focus'
|
||||||
@textarea.off 'blur'
|
@textarea.off 'blur'
|
||||||
|
gl.text.removeListeners(@form)
|
||||||
|
|
||||||
addEventListeners: ->
|
addEventListeners: ->
|
||||||
@textarea.on 'focus', ->
|
@textarea.on 'focus', ->
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
# This is a manifest file that'll be compiled into including all the files listed below.
|
|
||||||
# Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
|
|
||||||
# be included in the compiled file accessible from http://example.com/assets/application.js
|
|
||||||
# It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
|
||||||
# the compiled file.
|
|
||||||
#
|
|
||||||
#= require Chart
|
|
||||||
#= require_tree .
|
|
|
@ -4,5 +4,4 @@
|
||||||
# It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
# It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
||||||
# the compiled file.
|
# the compiled file.
|
||||||
#
|
#
|
||||||
#= require d3
|
|
||||||
#= require_tree .
|
#= require_tree .
|
|
@ -121,7 +121,11 @@ class @ContributorsMasterGraph extends ContributorsGraph
|
||||||
|
|
||||||
class @ContributorsAuthorGraph extends ContributorsGraph
|
class @ContributorsAuthorGraph extends ContributorsGraph
|
||||||
constructor: (@data) ->
|
constructor: (@data) ->
|
||||||
@width = $('.content').width()/2 - 100
|
# Don't split graph size in half for mobile devices.
|
||||||
|
if $(window).width() < 768
|
||||||
|
@width = $('.content').width() - 80
|
||||||
|
else
|
||||||
|
@width = ($('.content').width() / 2) - 100
|
||||||
@height = 200
|
@height = 200
|
||||||
@x = null
|
@x = null
|
||||||
@y = null
|
@y = null
|
||||||
|
|
|
@ -7,13 +7,16 @@ class @ImporterStatus
|
||||||
$('.js-add-to-import')
|
$('.js-add-to-import')
|
||||||
.off 'click'
|
.off 'click'
|
||||||
.on 'click', (e) =>
|
.on 'click', (e) =>
|
||||||
new_namespace = null
|
|
||||||
$btn = $(e.currentTarget)
|
$btn = $(e.currentTarget)
|
||||||
$tr = $btn.closest('tr')
|
$tr = $btn.closest('tr')
|
||||||
|
$target_field = $tr.find('.import-target')
|
||||||
|
$namespace_input = $target_field.find('input')
|
||||||
id = $tr.attr('id').replace('repo_', '')
|
id = $tr.attr('id').replace('repo_', '')
|
||||||
if $tr.find('.import-target input').length > 0
|
new_namespace = null
|
||||||
new_namespace = $tr.find('.import-target input').prop('value')
|
|
||||||
$tr.find('.import-target').empty().append("#{new_namespace} / #{$tr.find('.import-target').data('project_name')}")
|
if $namespace_input.length > 0
|
||||||
|
new_namespace = $namespace_input.prop('value')
|
||||||
|
$target_field.empty().append("#{new_namespace}/#{$target_field.data('project_name')}")
|
||||||
|
|
||||||
$btn
|
$btn
|
||||||
.disable()
|
.disable()
|
||||||
|
|
|
@ -11,11 +11,11 @@ issuable_created = false
|
||||||
initTemplates: ->
|
initTemplates: ->
|
||||||
Issuable.labelRow = _.template(
|
Issuable.labelRow = _.template(
|
||||||
'<% _.each(labels, function(label){ %>
|
'<% _.each(labels, function(label){ %>
|
||||||
<span class="label-row btn-group" role="group" aria-label="<%= _.escape(label.title) %>" style="color: <%= label.text_color %>;">
|
<span class="label-row btn-group" role="group" aria-label="<%- label.title %>" style="color: <%- label.text_color %>;">
|
||||||
<a href="#" class="btn btn-transparent has-tooltip" style="background-color: <%= label.color %>;" title="<%= _.escape(label.description) %>" data-container="body">
|
<a href="#" class="btn btn-transparent has-tooltip" style="background-color: <%- label.color %>;" title="<%- label.description %>" data-container="body">
|
||||||
<%= _.escape(label.title) %>
|
<%- label.title %>
|
||||||
</a>
|
</a>
|
||||||
<button type="button" class="btn btn-transparent label-remove js-label-filter-remove" style="background-color: <%= label.color %>;" data-label="<%= _.escape(label.title) %>">
|
<button type="button" class="btn btn-transparent label-remove js-label-filter-remove" style="background-color: <%- label.color %>;" data-label="<%- label.title %>">
|
||||||
<i class="fa fa-times"></i>
|
<i class="fa fa-times"></i>
|
||||||
</button>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
|
@ -32,13 +32,11 @@ issuable_created = false
|
||||||
$search = $('#issue_search')
|
$search = $('#issue_search')
|
||||||
$form = $('.js-filter-form')
|
$form = $('.js-filter-form')
|
||||||
$input = $("input[name='#{$search.attr('name')}']", $form)
|
$input = $("input[name='#{$search.attr('name')}']", $form)
|
||||||
|
|
||||||
if $input.length is 0
|
if $input.length is 0
|
||||||
$form.append "<input type='hidden' name='#{$search.attr('name')}' value='#{_.escape($search.val())}'/>"
|
$form.append "<input type='hidden' name='#{$search.attr('name')}' value='#{_.escape($search.val())}'/>"
|
||||||
else
|
else
|
||||||
$input.val $search.val()
|
$input.val $search.val()
|
||||||
|
Issuable.filterResults $form if $search.val() isnt ''
|
||||||
Issuable.filterResults $form
|
|
||||||
, 500)
|
, 500)
|
||||||
|
|
||||||
initLabelFilterRemove: ->
|
initLabelFilterRemove: ->
|
||||||
|
@ -59,21 +57,23 @@ issuable_created = false
|
||||||
filterResults: (form) =>
|
filterResults: (form) =>
|
||||||
formData = form.serialize()
|
formData = form.serialize()
|
||||||
|
|
||||||
$('.issues-holder, .merge-requests-holder').css('opacity', '0.5')
|
|
||||||
formAction = form.attr('action')
|
formAction = form.attr('action')
|
||||||
issuesUrl = formAction
|
issuesUrl = formAction
|
||||||
issuesUrl += ("#{if formAction.indexOf('?') < 0 then '?' else '&'}")
|
issuesUrl += ("#{if formAction.indexOf('?') < 0 then '?' else '&'}")
|
||||||
issuesUrl += formData
|
issuesUrl += formData
|
||||||
|
|
||||||
Turbolinks.visit(issuesUrl);
|
Turbolinks.visit(issuesUrl)
|
||||||
|
|
||||||
initChecks: ->
|
initChecks: ->
|
||||||
|
@issuableBulkActions = $('.bulk-update').data('bulkActions')
|
||||||
|
|
||||||
$('.check_all_issues').off('click').on('click', ->
|
$('.check_all_issues').off('click').on('click', ->
|
||||||
$('.selected_issue').prop('checked', @checked)
|
$('.selected_issue').prop('checked', @checked)
|
||||||
Issuable.checkChanged()
|
Issuable.checkChanged()
|
||||||
)
|
)
|
||||||
|
|
||||||
$('.selected_issue').off('change').on('change', Issuable.checkChanged)
|
$('.selected_issue').off('change').on('change', Issuable.checkChanged.bind(@))
|
||||||
|
|
||||||
|
|
||||||
checkChanged: ->
|
checkChanged: ->
|
||||||
checked_issues = $('.selected_issue:checked')
|
checked_issues = $('.selected_issue:checked')
|
||||||
|
@ -88,3 +88,6 @@ issuable_created = false
|
||||||
$('#update_issues_ids').val []
|
$('#update_issues_ids').val []
|
||||||
$('.issues_bulk_update').hide()
|
$('.issues_bulk_update').hide()
|
||||||
$('.issues-other-filters').show()
|
$('.issues-other-filters').show()
|
||||||
|
@issuableBulkActions.willUpdateLabels = false
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
|
@ -99,7 +99,7 @@ class @Issue
|
||||||
|
|
||||||
# If the user doesn't have the required permissions the container isn't
|
# If the user doesn't have the required permissions the container isn't
|
||||||
# rendered at all.
|
# rendered at all.
|
||||||
return unless $container
|
return if $container.length is 0
|
||||||
|
|
||||||
$.getJSON($container.data('path'))
|
$.getJSON($container.data('path'))
|
||||||
.error ->
|
.error ->
|
||||||
|
|
|
@ -6,6 +6,13 @@ class @IssueStatusSelect
|
||||||
$(el).glDropdown(
|
$(el).glDropdown(
|
||||||
selectable: true
|
selectable: true
|
||||||
fieldName: fieldName
|
fieldName: fieldName
|
||||||
|
toggleLabel: (selected, el, instance) =>
|
||||||
|
label = 'Author'
|
||||||
|
$item = instance.dropdown.find('.is-active')
|
||||||
|
label = $item.text() if $item.length
|
||||||
|
label
|
||||||
|
clicked: (item, $el, e)->
|
||||||
|
e.preventDefault()
|
||||||
id: (obj, el) ->
|
id: (obj, el) ->
|
||||||
$(el).data("id")
|
$(el).data("id")
|
||||||
)
|
)
|
||||||
|
|
|
@ -7,6 +7,11 @@ class @IssuableBulkActions
|
||||||
@issues = @getElement('.issues-list .issue')
|
@issues = @getElement('.issues-list .issue')
|
||||||
} = opts
|
} = opts
|
||||||
|
|
||||||
|
# Save instance
|
||||||
|
@form.data 'bulkActions', @
|
||||||
|
|
||||||
|
@willUpdateLabels = false
|
||||||
|
|
||||||
@bindEvents()
|
@bindEvents()
|
||||||
|
|
||||||
# Fixes bulk-assign not working when navigating through pages
|
# Fixes bulk-assign not working when navigating through pages
|
||||||
|
@ -80,18 +85,20 @@ class @IssuableBulkActions
|
||||||
getFormDataAsObject: ->
|
getFormDataAsObject: ->
|
||||||
formData =
|
formData =
|
||||||
update:
|
update:
|
||||||
state_event : @form.find('input[name="update[state_event]"]').val()
|
state_event : @form.find('input[name="update[state_event]"]').val()
|
||||||
assignee_id : @form.find('input[name="update[assignee_id]"]').val()
|
assignee_id : @form.find('input[name="update[assignee_id]"]').val()
|
||||||
milestone_id : @form.find('input[name="update[milestone_id]"]').val()
|
milestone_id : @form.find('input[name="update[milestone_id]"]').val()
|
||||||
issues_ids : @form.find('input[name="update[issues_ids]"]').val()
|
issues_ids : @form.find('input[name="update[issues_ids]"]').val()
|
||||||
add_label_ids : []
|
subscription_event : @form.find('input[name="update[subscription_event]"]').val()
|
||||||
remove_label_ids : []
|
add_label_ids : []
|
||||||
|
remove_label_ids : []
|
||||||
|
|
||||||
@getLabelsToApply().map (id) ->
|
if @willUpdateLabels
|
||||||
formData.update.add_label_ids.push id
|
@getLabelsToApply().map (id) ->
|
||||||
|
formData.update.add_label_ids.push id
|
||||||
|
|
||||||
@getLabelsToRemove().map (id) ->
|
@getLabelsToRemove().map (id) ->
|
||||||
formData.update.remove_label_ids.push id
|
formData.update.remove_label_ids.push id
|
||||||
|
|
||||||
formData
|
formData
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,9 @@ class @LabelsSelect
|
||||||
if issueUpdateURL
|
if issueUpdateURL
|
||||||
labelHTMLTemplate = _.template(
|
labelHTMLTemplate = _.template(
|
||||||
'<% _.each(labels, function(label){ %>
|
'<% _.each(labels, function(label){ %>
|
||||||
<a href="<%= ["",issueURLSplit[1], issueURLSplit[2],""].join("/") %>issues?label_name[]=<%= _.escape(label.title) %>">
|
<a href="<%- ["",issueURLSplit[1], issueURLSplit[2],""].join("/") %>issues?label_name[]=<%- encodeURIComponent(label.title) %>">
|
||||||
<span class="label has-tooltip color-label" title="<%= _.escape(label.description) %>" style="background-color: <%= label.color %>; color: <%= label.text_color %>;">
|
<span class="label has-tooltip color-label" title="<%- label.description %>" style="background-color: <%- label.color %>; color: <%- label.text_color %>;">
|
||||||
<%= _.escape(label.title) %>
|
<%- label.title %>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<% }); %>'
|
<% }); %>'
|
||||||
|
@ -261,7 +261,7 @@ class @LabelsSelect
|
||||||
$a.attr('data-label-id', label.id)
|
$a.attr('data-label-id', label.id)
|
||||||
|
|
||||||
$a.addClass(selectedClass.join(' '))
|
$a.addClass(selectedClass.join(' '))
|
||||||
.html("#{colorEl} #{_.escape(label.title)}")
|
.html("#{colorEl} #{label.title}")
|
||||||
|
|
||||||
# Return generated html
|
# Return generated html
|
||||||
$li.html($a).prop('outerHTML')
|
$li.html($a).prop('outerHTML')
|
||||||
|
@ -288,7 +288,7 @@ class @LabelsSelect
|
||||||
fieldName: $dropdown.data('field-name')
|
fieldName: $dropdown.data('field-name')
|
||||||
id: (label) ->
|
id: (label) ->
|
||||||
if $dropdown.hasClass("js-filter-submit") and not label.isAny?
|
if $dropdown.hasClass("js-filter-submit") and not label.isAny?
|
||||||
_.escape label.title
|
label.title
|
||||||
else
|
else
|
||||||
label.id
|
label.id
|
||||||
|
|
||||||
|
@ -319,6 +319,8 @@ class @LabelsSelect
|
||||||
|
|
||||||
multiSelect: $dropdown.hasClass 'js-multiselect'
|
multiSelect: $dropdown.hasClass 'js-multiselect'
|
||||||
clicked: (label) ->
|
clicked: (label) ->
|
||||||
|
_this.enableBulkLabelDropdown()
|
||||||
|
|
||||||
if $dropdown.hasClass('js-filter-bulk-update')
|
if $dropdown.hasClass('js-filter-bulk-update')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -377,3 +379,8 @@ class @LabelsSelect
|
||||||
label_ids.push $("#issue_#{issue_id}").data('labels')
|
label_ids.push $("#issue_#{issue_id}").data('labels')
|
||||||
|
|
||||||
_.intersection.apply _, label_ids
|
_.intersection.apply _, label_ids
|
||||||
|
|
||||||
|
enableBulkLabelDropdown: ->
|
||||||
|
if $('.selected_issue:checked').length
|
||||||
|
issuableBulkActions = $('.bulk-update').data('bulkActions')
|
||||||
|
issuableBulkActions.willUpdateLabels = true
|
||||||
|
|
|
@ -3,11 +3,10 @@ hideEndFade = ($scrollingTabs) ->
|
||||||
$this = $(@)
|
$this = $(@)
|
||||||
|
|
||||||
$this
|
$this
|
||||||
.find('.fade-right')
|
.siblings('.fade-right')
|
||||||
.toggleClass('end-scroll', $this.width() is $this.prop('scrollWidth'))
|
.toggleClass('scrolling', $this.width() < $this.prop('scrollWidth'))
|
||||||
|
|
||||||
$ ->
|
$ ->
|
||||||
$('.fade-left').addClass('end-scroll')
|
|
||||||
|
|
||||||
hideEndFade($('.scrolling-tabs'))
|
hideEndFade($('.scrolling-tabs'))
|
||||||
|
|
||||||
|
@ -21,5 +20,5 @@ $ ->
|
||||||
currentPosition = $this.scrollLeft()
|
currentPosition = $this.scrollLeft()
|
||||||
maxPosition = $this.prop('scrollWidth') - $this.outerWidth()
|
maxPosition = $this.prop('scrollWidth') - $this.outerWidth()
|
||||||
|
|
||||||
$this.find('.fade-left').toggleClass('end-scroll', currentPosition is 0)
|
$this.siblings('.fade-left').toggleClass('scrolling', currentPosition > 0)
|
||||||
$this.find('.fade-right').toggleClass('end-scroll', currentPosition is maxPosition)
|
$this.siblings('.fade-right').toggleClass('scrolling', currentPosition < maxPosition - 1)
|
||||||
|
|
1
app/assets/javascripts/lib/chart.js.coffee
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#= require Chart
|
1
app/assets/javascripts/lib/cropper.js.coffee
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#= require cropper
|
1
app/assets/javascripts/lib/d3.js.coffee
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#= require d3
|
3
app/assets/javascripts/lib/raphael.js.coffee
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#= require raphael
|
||||||
|
#= require g.raphael
|
||||||
|
#= require g.bar
|
|
@ -5,12 +5,12 @@
|
||||||
|
|
||||||
w.gl.utils.isInGroupsPage = ->
|
w.gl.utils.isInGroupsPage = ->
|
||||||
|
|
||||||
return $('body').data('page').split(':')[0] is 'groups'
|
return gl.utils.getPagePath() is 'groups'
|
||||||
|
|
||||||
|
|
||||||
w.gl.utils.isInProjectPage = ->
|
w.gl.utils.isInProjectPage = ->
|
||||||
|
|
||||||
return $('body').data('page').split(':')[0] is 'projects'
|
return gl.utils.getPagePath() is 'projects'
|
||||||
|
|
||||||
|
|
||||||
w.gl.utils.getProjectSlug = ->
|
w.gl.utils.getProjectSlug = ->
|
||||||
|
@ -40,6 +40,9 @@
|
||||||
e.stopImmediatePropagation()
|
e.stopImmediatePropagation()
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
gl.utils.getPagePath = ->
|
||||||
|
return $('body').data('page').split(':')[0]
|
||||||
|
|
||||||
|
|
||||||
jQuery.timefor = (time, suffix, expiredLabel) ->
|
jQuery.timefor = (time, suffix, expiredLabel) ->
|
||||||
|
|
|
@ -2,10 +2,14 @@
|
||||||
|
|
||||||
w.gl ?= {}
|
w.gl ?= {}
|
||||||
w.gl.utils ?= {}
|
w.gl.utils ?= {}
|
||||||
|
w.gl.utils.days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
|
||||||
|
|
||||||
w.gl.utils.formatDate = (datetime) ->
|
w.gl.utils.formatDate = (datetime) ->
|
||||||
dateFormat(datetime, 'mmm d, yyyy h:MMtt Z')
|
dateFormat(datetime, 'mmm d, yyyy h:MMtt Z')
|
||||||
|
|
||||||
|
w.gl.utils.getDayName = (date) ->
|
||||||
|
this.days[date.getDay()]
|
||||||
|
|
||||||
w.gl.utils.localTimeAgo = ($timeagoEls, setTimeago = true) ->
|
w.gl.utils.localTimeAgo = ($timeagoEls, setTimeago = true) ->
|
||||||
$timeagoEls.each( ->
|
$timeagoEls.each( ->
|
||||||
$el = $(@)
|
$el = $(@)
|
105
app/assets/javascripts/lib/utils/text_utility.js.coffee
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
((w) ->
|
||||||
|
w.gl ?= {}
|
||||||
|
w.gl.text ?= {}
|
||||||
|
|
||||||
|
gl.text.randomString = -> Math.random().toString(36).substring(7)
|
||||||
|
|
||||||
|
gl.text.replaceRange = (s, start, end, substitute) ->
|
||||||
|
s.substring(0, start) + substitute + s.substring(end);
|
||||||
|
|
||||||
|
gl.text.selectedText = (text, textarea) ->
|
||||||
|
text.substring(textarea.selectionStart, textarea.selectionEnd)
|
||||||
|
|
||||||
|
gl.text.lineBefore = (text, textarea) ->
|
||||||
|
split = text.substring(0, textarea.selectionStart).trim().split('\n')
|
||||||
|
split[split.length - 1]
|
||||||
|
|
||||||
|
gl.text.lineAfter = (text, textarea) ->
|
||||||
|
text.substring(textarea.selectionEnd).trim().split('\n')[0]
|
||||||
|
|
||||||
|
gl.text.blockTagText = (text, textArea, blockTag, selected) ->
|
||||||
|
lineBefore = @lineBefore(text, textArea)
|
||||||
|
lineAfter = @lineAfter(text, textArea)
|
||||||
|
|
||||||
|
if lineBefore is blockTag and lineAfter is blockTag
|
||||||
|
# To remove the block tag we have to select the line before & after
|
||||||
|
if blockTag?
|
||||||
|
textArea.selectionStart = textArea.selectionStart - (blockTag.length + 1)
|
||||||
|
textArea.selectionEnd = textArea.selectionEnd + (blockTag.length + 1)
|
||||||
|
|
||||||
|
selected
|
||||||
|
else
|
||||||
|
"#{blockTag}\n#{selected}\n#{blockTag}"
|
||||||
|
|
||||||
|
gl.text.insertText = (textArea, text, tag, blockTag, selected, wrap) ->
|
||||||
|
selectedSplit = selected.split('\n')
|
||||||
|
startChar = if not wrap and textArea.selectionStart > 0 then '\n' else ''
|
||||||
|
|
||||||
|
if selectedSplit.length > 1 and (not wrap or blockTag?)
|
||||||
|
if blockTag?
|
||||||
|
insertText = @blockTagText(text, textArea, blockTag, selected)
|
||||||
|
else
|
||||||
|
insertText = selectedSplit.map((val) ->
|
||||||
|
if val.indexOf(tag) is 0
|
||||||
|
"#{val.replace(tag, '')}"
|
||||||
|
else
|
||||||
|
"#{tag}#{val}"
|
||||||
|
).join('\n')
|
||||||
|
else
|
||||||
|
insertText = "#{startChar}#{tag}#{selected}#{if wrap then tag else ' '}"
|
||||||
|
|
||||||
|
if document.queryCommandSupported('insertText')
|
||||||
|
inserted = document.execCommand 'insertText', false, insertText
|
||||||
|
|
||||||
|
unless inserted
|
||||||
|
try
|
||||||
|
document.execCommand("ms-beginUndoUnit")
|
||||||
|
|
||||||
|
textArea.value = @replaceRange(
|
||||||
|
text,
|
||||||
|
textArea.selectionStart,
|
||||||
|
textArea.selectionEnd,
|
||||||
|
insertText)
|
||||||
|
try
|
||||||
|
document.execCommand("ms-endUndoUnit")
|
||||||
|
|
||||||
|
@moveCursor(textArea, tag, wrap)
|
||||||
|
|
||||||
|
gl.text.moveCursor = (textArea, tag, wrapped) ->
|
||||||
|
return unless textArea.setSelectionRange
|
||||||
|
|
||||||
|
if textArea.selectionStart is textArea.selectionEnd
|
||||||
|
if wrapped
|
||||||
|
pos = textArea.selectionStart - tag.length
|
||||||
|
else
|
||||||
|
pos = textArea.selectionStart
|
||||||
|
|
||||||
|
textArea.setSelectionRange pos, pos
|
||||||
|
|
||||||
|
gl.text.updateText = (textArea, tag, blockTag, wrap) ->
|
||||||
|
$textArea = $(textArea)
|
||||||
|
oldVal = $textArea.val()
|
||||||
|
textArea = $textArea.get(0)
|
||||||
|
text = $textArea.val()
|
||||||
|
selected = @selectedText(text, textArea)
|
||||||
|
$textArea.focus()
|
||||||
|
|
||||||
|
@insertText(textArea, text, tag, blockTag, selected, wrap)
|
||||||
|
|
||||||
|
gl.text.init = (form) ->
|
||||||
|
self = @
|
||||||
|
$('.js-md', form)
|
||||||
|
.off 'click'
|
||||||
|
.on 'click', ->
|
||||||
|
$this = $(@)
|
||||||
|
self.updateText(
|
||||||
|
$this.closest('.md-area').find('textarea'),
|
||||||
|
$this.data('md-tag'),
|
||||||
|
$this.data('md-block'),
|
||||||
|
not $this.data('md-prepend')
|
||||||
|
)
|
||||||
|
|
||||||
|
gl.text.removeListeners = (form) ->
|
||||||
|
$('.js-md', form).off()
|
||||||
|
|
||||||
|
) window
|
|
@ -9,7 +9,7 @@ class @MergeRequest
|
||||||
# Options:
|
# Options:
|
||||||
# action - String, current controller action
|
# action - String, current controller action
|
||||||
#
|
#
|
||||||
constructor: (@opts) ->
|
constructor: (@opts = {}) ->
|
||||||
this.$el = $('.merge-request')
|
this.$el = $('.merge-request')
|
||||||
|
|
||||||
this.$('.show-all-commits').on 'click', =>
|
this.$('.show-all-commits').on 'click', =>
|
||||||
|
|
|
@ -153,17 +153,18 @@ class @MergeRequestTabs
|
||||||
|
|
||||||
loadDiff: (source) ->
|
loadDiff: (source) ->
|
||||||
return if @diffsLoaded
|
return if @diffsLoaded
|
||||||
|
|
||||||
@_get
|
@_get
|
||||||
url: "#{source}.json" + @_location.search
|
url: "#{source}.json" + @_location.search
|
||||||
success: (data) =>
|
success: (data) =>
|
||||||
$('#diffs').html data.html
|
$('#diffs').html data.html
|
||||||
gl.utils.localTimeAgo($('.js-timeago', 'div#diffs'))
|
gl.utils.localTimeAgo($('.js-timeago', 'div#diffs'))
|
||||||
$('#diffs .js-syntax-highlight').syntaxHighlight()
|
$('#diffs .js-syntax-highlight').syntaxHighlight()
|
||||||
|
$('#diffs .diff-file').singleFileDiff()
|
||||||
@expandViewContainer() if @diffViewType() is 'parallel'
|
@expandViewContainer() if @diffViewType() is 'parallel'
|
||||||
@diffsLoaded = true
|
@diffsLoaded = true
|
||||||
@scrollToElement("#diffs")
|
@scrollToElement("#diffs")
|
||||||
@highlighSelectedLine()
|
@highlighSelectedLine()
|
||||||
|
@filesCommentButton = $('.files .diff-file').filesCommentButton()
|
||||||
|
|
||||||
$(document)
|
$(document)
|
||||||
.off 'click', '.diff-line-num a'
|
.off 'click', '.diff-line-num a'
|
||||||
|
|
|
@ -55,10 +55,13 @@ class @MergeRequestWidget
|
||||||
$('.mr-state-widget').replaceWith(data)
|
$('.mr-state-widget').replaceWith(data)
|
||||||
|
|
||||||
ciLabelForStatus: (status) ->
|
ciLabelForStatus: (status) ->
|
||||||
if status is 'success'
|
switch status
|
||||||
'passed'
|
when 'success'
|
||||||
else
|
'passed'
|
||||||
status
|
when 'success_with_warnings'
|
||||||
|
'passed with warnings'
|
||||||
|
else
|
||||||
|
status
|
||||||
|
|
||||||
pollCIStatus: ->
|
pollCIStatus: ->
|
||||||
@fetchBuildStatusInterval = setInterval ( =>
|
@fetchBuildStatusInterval = setInterval ( =>
|
||||||
|
@ -116,7 +119,7 @@ class @MergeRequestWidget
|
||||||
showCIStatus: (state) ->
|
showCIStatus: (state) ->
|
||||||
return if not state?
|
return if not state?
|
||||||
$('.ci_widget').hide()
|
$('.ci_widget').hide()
|
||||||
allowed_states = ["failed", "canceled", "running", "pending", "success", "skipped", "not_found"]
|
allowed_states = ["failed", "canceled", "running", "pending", "success", "success_with_warnings", "skipped", "not_found"]
|
||||||
if state in allowed_states
|
if state in allowed_states
|
||||||
$('.ci_widget.ci-' + state).show()
|
$('.ci_widget.ci-' + state).show()
|
||||||
switch state
|
switch state
|
||||||
|
@ -124,7 +127,7 @@ class @MergeRequestWidget
|
||||||
@setMergeButtonClass('btn-danger')
|
@setMergeButtonClass('btn-danger')
|
||||||
when "running"
|
when "running"
|
||||||
@setMergeButtonClass('btn-warning')
|
@setMergeButtonClass('btn-warning')
|
||||||
when "success"
|
when "success", "success_with_warnings"
|
||||||
@setMergeButtonClass('btn-create')
|
@setMergeButtonClass('btn-create')
|
||||||
else
|
else
|
||||||
$('.ci_widget.ci-error').show()
|
$('.ci_widget.ci-error').show()
|
||||||
|
|
|
@ -4,18 +4,10 @@ class @Milestone
|
||||||
type: "PUT"
|
type: "PUT"
|
||||||
url: issue_url
|
url: issue_url
|
||||||
data: data
|
data: data
|
||||||
success: (data) ->
|
success: (_data) =>
|
||||||
if data.saved == true
|
@successCallback(_data, li)
|
||||||
if data.assignee_avatar_url
|
error: (data) ->
|
||||||
img_tag = $('<img/>')
|
new Flash("Issue update failed", 'alert')
|
||||||
img_tag.attr('src', data.assignee_avatar_url)
|
|
||||||
img_tag.addClass('avatar s16')
|
|
||||||
$(li).find('.assignee-icon').html(img_tag)
|
|
||||||
else
|
|
||||||
$(li).find('.assignee-icon').html('')
|
|
||||||
$(li).effect 'highlight'
|
|
||||||
else
|
|
||||||
new Flash("Issue update failed", 'alert')
|
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
|
|
||||||
@sortIssues: (data) ->
|
@sortIssues: (data) ->
|
||||||
|
@ -25,9 +17,10 @@ class @Milestone
|
||||||
type: "PUT"
|
type: "PUT"
|
||||||
url: sort_issues_url
|
url: sort_issues_url
|
||||||
data: data
|
data: data
|
||||||
success: (data) ->
|
success: (_data) =>
|
||||||
if data.saved != true
|
@successCallback(_data)
|
||||||
new Flash("Issues update failed", 'alert')
|
error: ->
|
||||||
|
new Flash("Issues update failed", 'alert')
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
|
|
||||||
@sortMergeRequests: (data) ->
|
@sortMergeRequests: (data) ->
|
||||||
|
@ -37,9 +30,10 @@ class @Milestone
|
||||||
type: "PUT"
|
type: "PUT"
|
||||||
url: sort_mr_url
|
url: sort_mr_url
|
||||||
data: data
|
data: data
|
||||||
success: (data) ->
|
success: (_data) =>
|
||||||
if data.saved != true
|
@successCallback(_data)
|
||||||
new Flash("MR update failed", 'alert')
|
error: (data) ->
|
||||||
|
new Flash("Issue update failed", 'alert')
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
|
|
||||||
@updateMergeRequest: (li, merge_request_url, data) ->
|
@updateMergeRequest: (li, merge_request_url, data) ->
|
||||||
|
@ -47,20 +41,23 @@ class @Milestone
|
||||||
type: "PUT"
|
type: "PUT"
|
||||||
url: merge_request_url
|
url: merge_request_url
|
||||||
data: data
|
data: data
|
||||||
success: (data) ->
|
success: (_data) =>
|
||||||
if data.saved == true
|
@successCallback(_data, li)
|
||||||
if data.assignee_avatar_url
|
error: (data) ->
|
||||||
img_tag = $('<img/>')
|
new Flash("Issue update failed", 'alert')
|
||||||
img_tag.attr('src', data.assignee_avatar_url)
|
|
||||||
img_tag.addClass('avatar s16')
|
|
||||||
$(li).find('.assignee-icon').html(img_tag)
|
|
||||||
else
|
|
||||||
$(li).find('.assignee-icon').html('')
|
|
||||||
$(li).effect 'highlight'
|
|
||||||
else
|
|
||||||
new Flash("Issue update failed", 'alert')
|
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
|
|
||||||
|
@successCallback: (data, element) =>
|
||||||
|
if data.assignee
|
||||||
|
img_tag = $('<img/>')
|
||||||
|
img_tag.attr('src', data.assignee.avatar_url)
|
||||||
|
img_tag.addClass('avatar s16')
|
||||||
|
$(element).find('.assignee-icon').html(img_tag)
|
||||||
|
else
|
||||||
|
$(element).find('.assignee-icon').html('')
|
||||||
|
|
||||||
|
$(element).effect 'highlight'
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
oldMouseStart = $.ui.sortable.prototype._mouseStart
|
oldMouseStart = $.ui.sortable.prototype._mouseStart
|
||||||
$.ui.sortable.prototype._mouseStart = (event, overrideHandle, noActivation) ->
|
$.ui.sortable.prototype._mouseStart = (event, overrideHandle, noActivation) ->
|
||||||
|
@ -81,8 +78,10 @@ class @Milestone
|
||||||
stop: (event, ui) ->
|
stop: (event, ui) ->
|
||||||
$(".issues-sortable-list").css "min-height", "0px"
|
$(".issues-sortable-list").css "min-height", "0px"
|
||||||
update: (event, ui) ->
|
update: (event, ui) ->
|
||||||
data = $(this).sortable("serialize")
|
# Prevents sorting from container which element has been removed.
|
||||||
Milestone.sortIssues(data)
|
if $(this).find(ui.item).length > 0
|
||||||
|
data = $(this).sortable("serialize")
|
||||||
|
Milestone.sortIssues(data)
|
||||||
|
|
||||||
receive: (event, ui) ->
|
receive: (event, ui) ->
|
||||||
new_state = $(this).data('state')
|
new_state = $(this).data('state')
|
||||||
|
|
|
@ -24,14 +24,14 @@ class @MilestoneSelect
|
||||||
|
|
||||||
if issueUpdateURL
|
if issueUpdateURL
|
||||||
milestoneLinkTemplate = _.template(
|
milestoneLinkTemplate = _.template(
|
||||||
'<a href="/<%= namespace %>/<%= path %>/milestones/<%= iid %>" class="bold has-tooltip" data-container="body" title="<%= remaining %>"><%= _.escape(title) %></a>'
|
'<a href="/<%- namespace %>/<%- path %>/milestones/<%- iid %>" class="bold has-tooltip" data-container="body" title="<%- remaining %>"><%- title %></a>'
|
||||||
)
|
)
|
||||||
|
|
||||||
milestoneLinkNoneTemplate = '<span class="no-value">None</span>'
|
milestoneLinkNoneTemplate = '<span class="no-value">None</span>'
|
||||||
|
|
||||||
collapsedSidebarLabelTemplate = _.template(
|
collapsedSidebarLabelTemplate = _.template(
|
||||||
'<span class="has-tooltip" data-container="body" title="<%= remaining %>" data-placement="left">
|
'<span class="has-tooltip" data-container="body" title="<%- remaining %>" data-placement="left">
|
||||||
<%= _.escape(title) %>
|
<%- title %>
|
||||||
</span>'
|
</span>'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,56 @@
|
||||||
class @NamespaceSelect
|
class @NamespaceSelect
|
||||||
constructor: ->
|
constructor: (opts) ->
|
||||||
namespaceFormatResult = (namespace) ->
|
{
|
||||||
markup = "<div class='namespace-result'>"
|
@dropdown
|
||||||
markup += "<span class='namespace-kind'>" + namespace.kind + "</span>"
|
} = opts
|
||||||
markup += "<span class='namespace-path'>" + namespace.path + "</span>"
|
|
||||||
markup += "</div>"
|
|
||||||
markup
|
|
||||||
|
|
||||||
formatSelection = (namespace) ->
|
showAny = true
|
||||||
namespace.kind + ": " + namespace.path
|
fieldName = 'namespace_id'
|
||||||
|
|
||||||
$('.ajax-namespace-select').each (i, select) ->
|
if @dropdown.attr 'data-field-name'
|
||||||
$(select).select2
|
fieldName = @dropdown.data 'fieldName'
|
||||||
placeholder: "Search for namespace"
|
|
||||||
multiple: $(select).hasClass('multiselect')
|
|
||||||
minimumInputLength: 0
|
|
||||||
query: (query) ->
|
|
||||||
Api.namespaces query.term, (namespaces) ->
|
|
||||||
data = { results: namespaces }
|
|
||||||
query.callback(data)
|
|
||||||
|
|
||||||
dropdownCssClass: "ajax-namespace-dropdown"
|
if @dropdown.attr 'data-show-any'
|
||||||
formatResult: namespaceFormatResult
|
showAny = @dropdown.data 'showAny'
|
||||||
formatSelection: formatSelection
|
|
||||||
|
@dropdown.glDropdown(
|
||||||
|
filterable: true
|
||||||
|
selectable: true
|
||||||
|
filterRemote: true
|
||||||
|
search:
|
||||||
|
fields: ['path']
|
||||||
|
fieldName: fieldName
|
||||||
|
toggleLabel: (selected) ->
|
||||||
|
return if not selected.id? then selected.text else "#{selected.kind}: #{selected.path}"
|
||||||
|
data: (term, dataCallback) ->
|
||||||
|
Api.namespaces term, (namespaces) ->
|
||||||
|
if showAny
|
||||||
|
anyNamespace =
|
||||||
|
text: 'Any namespace'
|
||||||
|
id: null
|
||||||
|
|
||||||
|
namespaces.unshift(anyNamespace)
|
||||||
|
namespaces.splice 1, 0, 'divider'
|
||||||
|
|
||||||
|
dataCallback(namespaces)
|
||||||
|
text: (namespace) ->
|
||||||
|
return if not namespace.id? then namespace.text else "#{namespace.kind}: #{namespace.path}"
|
||||||
|
renderRow: @renderRow
|
||||||
|
clicked: @onSelectItem
|
||||||
|
)
|
||||||
|
|
||||||
|
onSelectItem: (item, el, e) =>
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
|
class @NamespaceSelects
|
||||||
|
constructor: (opts = {}) ->
|
||||||
|
{
|
||||||
|
@$dropdowns = $('.js-namespace-select')
|
||||||
|
} = opts
|
||||||
|
|
||||||
|
@$dropdowns.each (i, dropdown) ->
|
||||||
|
$dropdown = $(dropdown)
|
||||||
|
|
||||||
|
new NamespaceSelect(
|
||||||
|
dropdown: $dropdown
|
||||||
|
)
|
||||||
|
|
|
@ -4,9 +4,6 @@
|
||||||
# It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
# It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
||||||
# the compiled file.
|
# the compiled file.
|
||||||
#
|
#
|
||||||
#= require raphael
|
|
||||||
#= require g.raphael
|
|
||||||
#= require g.bar
|
|
||||||
#= require_tree .
|
#= require_tree .
|
||||||
|
|
||||||
$ ->
|
$ ->
|
|
@ -100,13 +100,40 @@ class @Notes
|
||||||
$('.note .js-task-list-container').taskList('disable')
|
$('.note .js-task-list-container').taskList('disable')
|
||||||
$(document).off 'tasklist:changed', '.note .js-task-list-container'
|
$(document).off 'tasklist:changed', '.note .js-task-list-container'
|
||||||
|
|
||||||
keydownNoteText: (e) ->
|
keydownNoteText: (e) =>
|
||||||
$this = $(this)
|
return if isMetaKey e
|
||||||
if $this.val() is '' and e.which is 38 and not isMetaKey e
|
|
||||||
myLastNote = $("li.note[data-author-id='#{gon.current_user_id}'][data-editable]:last")
|
$textarea = $(e.target)
|
||||||
if myLastNote.length
|
|
||||||
myLastNoteEditBtn = myLastNote.find('.js-note-edit')
|
# Edit previous note when UP arrow is hit
|
||||||
myLastNoteEditBtn.trigger('click', [true, myLastNote])
|
switch e.which
|
||||||
|
when 38
|
||||||
|
return unless $textarea.val() is ''
|
||||||
|
|
||||||
|
myLastNote = $("li.note[data-author-id='#{gon.current_user_id}'][data-editable]:last")
|
||||||
|
if myLastNote.length
|
||||||
|
myLastNoteEditBtn = myLastNote.find('.js-note-edit')
|
||||||
|
myLastNoteEditBtn.trigger('click', [true, myLastNote])
|
||||||
|
|
||||||
|
# Cancel creating diff note or editing any note when ESCAPE is hit
|
||||||
|
when 27
|
||||||
|
discussionNoteForm = $textarea.closest('.js-discussion-note-form')
|
||||||
|
if discussionNoteForm.length
|
||||||
|
if $textarea.val() isnt ''
|
||||||
|
return unless confirm('Are you sure you want to cancel creating this comment?')
|
||||||
|
|
||||||
|
@removeDiscussionNoteForm(discussionNoteForm)
|
||||||
|
return
|
||||||
|
|
||||||
|
editNote = $textarea.closest('.note')
|
||||||
|
if editNote.length
|
||||||
|
originalText = $textarea.closest('form').data('original-note')
|
||||||
|
newText = $textarea.val()
|
||||||
|
if originalText isnt newText
|
||||||
|
return unless confirm('Are you sure you want to cancel editing this comment?')
|
||||||
|
|
||||||
|
@removeNoteEditForm(editNote)
|
||||||
|
|
||||||
|
|
||||||
isMetaKey = (e) ->
|
isMetaKey = (e) ->
|
||||||
(e.metaKey or e.ctrlKey or e.altKey or e.shiftKey)
|
(e.metaKey or e.ctrlKey or e.altKey or e.shiftKey)
|
||||||
|
@ -167,8 +194,7 @@ class @Notes
|
||||||
renderNote: (note) ->
|
renderNote: (note) ->
|
||||||
unless note.valid
|
unless note.valid
|
||||||
if note.award
|
if note.award
|
||||||
flash = new Flash('You have already awarded this emoji!', 'alert')
|
new Flash('You have already awarded this emoji!', 'alert')
|
||||||
flash.pinTo('.header-content')
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if note.award
|
if note.award
|
||||||
|
@ -213,12 +239,16 @@ class @Notes
|
||||||
|
|
||||||
@note_ids.push(note.id)
|
@note_ids.push(note.id)
|
||||||
form = $("#new-discussion-note-form-#{note.discussion_id}")
|
form = $("#new-discussion-note-form-#{note.discussion_id}")
|
||||||
|
if note.original_discussion_id? and form.length is 0
|
||||||
|
form = $("#new-discussion-note-form-#{note.original_discussion_id}")
|
||||||
row = form.closest("tr")
|
row = form.closest("tr")
|
||||||
note_html = $(note.html)
|
note_html = $(note.html)
|
||||||
note_html.syntaxHighlight()
|
note_html.syntaxHighlight()
|
||||||
|
|
||||||
# is this the first note of discussion?
|
# is this the first note of discussion?
|
||||||
discussionContainer = $(".notes[data-discussion-id='" + note.discussion_id + "']")
|
discussionContainer = $(".notes[data-discussion-id='" + note.discussion_id + "']")
|
||||||
|
if note.original_discussion_id? and discussionContainer.length is 0
|
||||||
|
discussionContainer = $(".notes[data-discussion-id='" + note.original_discussion_id + "']")
|
||||||
if discussionContainer.length is 0
|
if discussionContainer.length is 0
|
||||||
# insert the note and the reply button after the temp row
|
# insert the note and the reply button after the temp row
|
||||||
row.after note.discussion_html
|
row.after note.discussion_html
|
||||||
|
@ -291,8 +321,11 @@ class @Notes
|
||||||
form.addClass "js-main-target-form"
|
form.addClass "js-main-target-form"
|
||||||
|
|
||||||
form.find("#note_line_code").remove()
|
form.find("#note_line_code").remove()
|
||||||
|
form.find("#note_position").remove()
|
||||||
form.find("#note_type").remove()
|
form.find("#note_type").remove()
|
||||||
|
|
||||||
|
@parentTimeline = form.parents('.timeline')
|
||||||
|
|
||||||
###
|
###
|
||||||
General note form setup.
|
General note form setup.
|
||||||
|
|
||||||
|
@ -308,10 +341,12 @@ class @Notes
|
||||||
|
|
||||||
new Autosave textarea, [
|
new Autosave textarea, [
|
||||||
"Note"
|
"Note"
|
||||||
form.find("#note_commit_id").val()
|
|
||||||
form.find("#note_line_code").val()
|
|
||||||
form.find("#note_noteable_type").val()
|
form.find("#note_noteable_type").val()
|
||||||
form.find("#note_noteable_id").val()
|
form.find("#note_noteable_id").val()
|
||||||
|
form.find("#note_commit_id").val()
|
||||||
|
form.find("#note_type").val()
|
||||||
|
form.find("#note_line_code").val()
|
||||||
|
form.find("#note_position").val()
|
||||||
]
|
]
|
||||||
|
|
||||||
###
|
###
|
||||||
|
@ -323,8 +358,7 @@ class @Notes
|
||||||
@renderNote(note)
|
@renderNote(note)
|
||||||
|
|
||||||
addNoteError: (xhr, note, status) =>
|
addNoteError: (xhr, note, status) =>
|
||||||
flash = new Flash('Your comment could not be submitted! Please check your network connection and try again.', 'alert')
|
new Flash('Your comment could not be submitted! Please check your network connection and try again.', 'alert', @parentTimeline)
|
||||||
flash.pinTo('.md-area')
|
|
||||||
|
|
||||||
###
|
###
|
||||||
Called in response to the new note form being submitted
|
Called in response to the new note form being submitted
|
||||||
|
@ -401,9 +435,12 @@ class @Notes
|
||||||
|
|
||||||
Hides edit form and restores the original note text to the editor textarea.
|
Hides edit form and restores the original note text to the editor textarea.
|
||||||
###
|
###
|
||||||
cancelEdit: (e) ->
|
cancelEdit: (e) =>
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
note = $(this).closest(".note")
|
note = $(e.target).closest('.note')
|
||||||
|
@removeNoteEditForm(note)
|
||||||
|
|
||||||
|
removeNoteEditForm: (note) ->
|
||||||
form = note.find(".current-note-edit-form")
|
form = note.find(".current-note-edit-form")
|
||||||
note.removeClass "is-editting"
|
note.removeClass "is-editting"
|
||||||
form.removeClass("current-note-edit-form")
|
form.removeClass("current-note-edit-form")
|
||||||
|
@ -482,10 +519,12 @@ class @Notes
|
||||||
setupDiscussionNoteForm: (dataHolder, form) =>
|
setupDiscussionNoteForm: (dataHolder, form) =>
|
||||||
# setup note target
|
# setup note target
|
||||||
form.attr 'id', "new-discussion-note-form-#{dataHolder.data("discussionId")}"
|
form.attr 'id', "new-discussion-note-form-#{dataHolder.data("discussionId")}"
|
||||||
|
form.attr "data-line-code", dataHolder.data("lineCode")
|
||||||
form.find("#note_type").val dataHolder.data("noteType")
|
form.find("#note_type").val dataHolder.data("noteType")
|
||||||
form.find("#line_type").val dataHolder.data("lineType")
|
form.find("#line_type").val dataHolder.data("lineType")
|
||||||
form.find("#note_commit_id").val dataHolder.data("commitId")
|
form.find("#note_commit_id").val dataHolder.data("commitId")
|
||||||
form.find("#note_line_code").val dataHolder.data("lineCode")
|
form.find("#note_line_code").val dataHolder.data("lineCode")
|
||||||
|
form.find("#note_position").val dataHolder.attr("data-position")
|
||||||
form.find("#note_noteable_type").val dataHolder.data("noteableType")
|
form.find("#note_noteable_type").val dataHolder.data("noteableType")
|
||||||
form.find("#note_noteable_id").val dataHolder.data("noteableId")
|
form.find("#note_noteable_id").val dataHolder.data("noteableId")
|
||||||
form.find('.js-note-discard')
|
form.find('.js-note-discard')
|
||||||
|
|
|
@ -78,3 +78,6 @@ $ ->
|
||||||
|
|
||||||
if comment && comment.length > 1 && $title.val() == ''
|
if comment && comment.length > 1 && $title.val() == ''
|
||||||
$title.val(comment[1]).change()
|
$title.val(comment[1]).change()
|
||||||
|
|
||||||
|
if gl.utils.getPagePath() == 'profiles'
|
||||||
|
new Profile()
|
2
app/assets/javascripts/profile/profile_bundle.js.coffee
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
#
|
||||||
|
#= require_tree .
|
|
@ -70,17 +70,20 @@ class @Project
|
||||||
fieldName: 'ref'
|
fieldName: 'ref'
|
||||||
renderRow: (ref) ->
|
renderRow: (ref) ->
|
||||||
if ref.header?
|
if ref.header?
|
||||||
"<li class='dropdown-header'>#{ref.header}</li>"
|
$('<li />')
|
||||||
|
.addClass('dropdown-header')
|
||||||
|
.text(ref.header)
|
||||||
else
|
else
|
||||||
isActiveClass = if ref is selected then 'is-active' else ''
|
link = $('<a />')
|
||||||
|
.attr('href', '#')
|
||||||
|
.addClass(if ref is selected then 'is-active' else '')
|
||||||
|
.text(ref)
|
||||||
|
.attr('data-ref', escape(ref))
|
||||||
|
|
||||||
"<li>
|
$('<li />')
|
||||||
<a href='#' data-ref='#{escape(ref)}' class='#{isActiveClass}'>
|
.append(link)
|
||||||
#{ref}
|
|
||||||
</a>
|
|
||||||
</li>"
|
|
||||||
id: (obj, $el) ->
|
id: (obj, $el) ->
|
||||||
$el.data('ref')
|
$el.attr('data-ref')
|
||||||
toggleLabel: (obj, $el) ->
|
toggleLabel: (obj, $el) ->
|
||||||
$el.text().trim()
|
$el.text().trim()
|
||||||
clicked: (e) ->
|
clicked: (e) ->
|
||||||
|
|
|
@ -5,13 +5,12 @@
|
||||||
this.initPagination()
|
this.initPagination()
|
||||||
|
|
||||||
initSearch: ->
|
initSearch: ->
|
||||||
@timer = null
|
projectsListFilter = $('.projects-list-filter')
|
||||||
$(".projects-list-filter").on('keyup', ->
|
debounceFilter = _.debounce ProjectsList.filterResults, 500
|
||||||
clearTimeout(@timer)
|
projectsListFilter.on 'keyup', (e) ->
|
||||||
@timer = setTimeout(ProjectsList.filterResults, 500)
|
debounceFilter() if projectsListFilter.val() isnt ''
|
||||||
)
|
|
||||||
|
|
||||||
filterResults: =>
|
filterResults: ->
|
||||||
$('.projects-list-holder').fadeTo(250, 0.5)
|
$('.projects-list-holder').fadeTo(250, 0.5)
|
||||||
|
|
||||||
form = null
|
form = null
|
||||||
|
|
40
app/assets/javascripts/protected_branch_select.js.coffee
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
class @ProtectedBranchSelect
|
||||||
|
constructor: (currentProject) ->
|
||||||
|
$('.dropdown-footer').hide();
|
||||||
|
@dropdown = $('.js-protected-branch-select').glDropdown(
|
||||||
|
data: @getProtectedBranches
|
||||||
|
filterable: true
|
||||||
|
remote: false
|
||||||
|
search:
|
||||||
|
fields: ['title']
|
||||||
|
selectable: true
|
||||||
|
toggleLabel: (selected) -> if (selected and 'id' of selected) then selected.title else 'Protected Branch'
|
||||||
|
fieldName: 'protected_branch[name]'
|
||||||
|
text: (protected_branch) -> _.escape(protected_branch.title)
|
||||||
|
id: (protected_branch) -> _.escape(protected_branch.id)
|
||||||
|
onFilter: @toggleCreateNewButton
|
||||||
|
clicked: () -> $('.protect-branch-btn').attr('disabled', false)
|
||||||
|
)
|
||||||
|
|
||||||
|
$('.create-new-protected-branch').on 'click', (event) =>
|
||||||
|
# Refresh the dropdown's data, which ends up calling `getProtectedBranches`
|
||||||
|
@dropdown.data('glDropdown').remote.execute()
|
||||||
|
@dropdown.data('glDropdown').selectRowAtIndex(event, 0)
|
||||||
|
|
||||||
|
getProtectedBranches: (term, callback) =>
|
||||||
|
if @selectedBranch
|
||||||
|
callback(gon.open_branches.concat(@selectedBranch))
|
||||||
|
else
|
||||||
|
callback(gon.open_branches)
|
||||||
|
|
||||||
|
toggleCreateNewButton: (branchName) =>
|
||||||
|
@selectedBranch = { title: branchName, id: branchName, text: branchName }
|
||||||
|
|
||||||
|
if branchName is ''
|
||||||
|
$('.protected-branch-select-footer-list').addClass('hidden')
|
||||||
|
$('.dropdown-footer').hide();
|
||||||
|
else
|
||||||
|
$('.create-new-protected-branch').text("Create Protected Branch: #{branchName}")
|
||||||
|
$('.protected-branch-select-footer-list').removeClass('hidden')
|
||||||
|
$('.dropdown-footer').show();
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
$ ->
|
$ ->
|
||||||
$(".protected-branches-list :checkbox").change (e) ->
|
$(".protected-branches-list :checkbox").change (e) ->
|
||||||
name = $(this).attr("name")
|
name = $(this).attr("name")
|
||||||
if name == "developers_can_push"
|
if name == "developers_can_push" || name == "developers_can_merge"
|
||||||
id = $(this).val()
|
id = $(this).val()
|
||||||
checked = $(this).is(":checked")
|
can_push = $(this).is(":checked")
|
||||||
url = $(this).data("url")
|
url = $(this).data("url")
|
||||||
$.ajax
|
$.ajax
|
||||||
type: "PUT"
|
type: "PATCH"
|
||||||
url: url
|
url: url
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
data:
|
data:
|
||||||
id: id
|
id: id
|
||||||
developers_can_push: checked
|
protected_branch:
|
||||||
|
"#{name}": can_push
|
||||||
|
|
||||||
success: ->
|
success: ->
|
||||||
row = $(e.target)
|
row = $(e.target)
|
||||||
|
|
|
@ -120,6 +120,9 @@ class @Sidebar
|
||||||
i.show()
|
i.show()
|
||||||
|
|
||||||
sidebarCollapseClicked: (e) ->
|
sidebarCollapseClicked: (e) ->
|
||||||
|
|
||||||
|
return if $(e.currentTarget).hasClass('dont-change-state')
|
||||||
|
|
||||||
sidebar = e.data
|
sidebar = e.data
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
$block = $(@).closest('.block')
|
$block = $(@).closest('.block')
|
||||||
|
|
|
@ -63,6 +63,7 @@ class @SearchAutocomplete
|
||||||
data: @getData.bind(@)
|
data: @getData.bind(@)
|
||||||
selectable: true
|
selectable: true
|
||||||
clicked: @onClick.bind(@)
|
clicked: @onClick.bind(@)
|
||||||
|
id: (data) -> _.escape(data.text)
|
||||||
|
|
||||||
getData: (term, callback) ->
|
getData: (term, callback) ->
|
||||||
_this = @
|
_this = @
|
||||||
|
@ -171,22 +172,15 @@ class @SearchAutocomplete
|
||||||
}
|
}
|
||||||
|
|
||||||
bindEvents: ->
|
bindEvents: ->
|
||||||
$(document).on 'click', @onDocumentClick
|
|
||||||
@searchInput.on 'keydown', @onSearchInputKeyDown
|
@searchInput.on 'keydown', @onSearchInputKeyDown
|
||||||
@searchInput.on 'keyup', @onSearchInputKeyUp
|
@searchInput.on 'keyup', @onSearchInputKeyUp
|
||||||
@searchInput.on 'click', @onSearchInputClick
|
@searchInput.on 'click', @onSearchInputClick
|
||||||
@searchInput.on 'focus', @onSearchInputFocus
|
@searchInput.on 'focus', @onSearchInputFocus
|
||||||
|
@searchInput.on 'blur', @onSearchInputBlur
|
||||||
@clearInput.on 'click', @onClearInputClick
|
@clearInput.on 'click', @onClearInputClick
|
||||||
@locationBadgeEl.on 'click', =>
|
@locationBadgeEl.on 'click', =>
|
||||||
@searchInput.focus()
|
@searchInput.focus()
|
||||||
|
|
||||||
onDocumentClick: (e) =>
|
|
||||||
# If clicking outside the search box
|
|
||||||
# And search input is not focused
|
|
||||||
# And we are not clicking inside a suggestion
|
|
||||||
if not $.contains(@dropdown[0], e.target) and @isFocused and not $(e.target).closest('.search-form').length
|
|
||||||
@onSearchInputBlur()
|
|
||||||
|
|
||||||
enableAutocomplete: ->
|
enableAutocomplete: ->
|
||||||
# No need to enable anything if user is not logged in
|
# No need to enable anything if user is not logged in
|
||||||
return if !gon.current_user_id
|
return if !gon.current_user_id
|
||||||
|
@ -287,8 +281,6 @@ class @SearchAutocomplete
|
||||||
value: @originalState._location
|
value: @originalState._location
|
||||||
)
|
)
|
||||||
|
|
||||||
@dropdown.removeClass 'open'
|
|
||||||
|
|
||||||
badgePresent: ->
|
badgePresent: ->
|
||||||
@locationBadgeEl.length
|
@locationBadgeEl.length
|
||||||
|
|
||||||
|
|
|
@ -2,19 +2,20 @@ class @Shortcuts
|
||||||
constructor: (skipResetBindings) ->
|
constructor: (skipResetBindings) ->
|
||||||
@enabledHelp = []
|
@enabledHelp = []
|
||||||
Mousetrap.reset() if not skipResetBindings
|
Mousetrap.reset() if not skipResetBindings
|
||||||
Mousetrap.bind('?', @onToggleHelp)
|
Mousetrap.bind '?', @onToggleHelp
|
||||||
Mousetrap.bind('s', Shortcuts.focusSearch)
|
Mousetrap.bind 's', Shortcuts.focusSearch
|
||||||
Mousetrap.bind(['ctrl+shift+p', 'command+shift+p'], @toggleMarkdownPreview)
|
Mousetrap.bind 'f', (e) => @focusFilter e
|
||||||
|
Mousetrap.bind ['ctrl+shift+p', 'command+shift+p'], @toggleMarkdownPreview
|
||||||
Mousetrap.bind('t', -> Turbolinks.visit(findFileURL)) if findFileURL?
|
Mousetrap.bind('t', -> Turbolinks.visit(findFileURL)) if findFileURL?
|
||||||
|
|
||||||
onToggleHelp: (e) =>
|
onToggleHelp: (e) =>
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
@toggleHelp(@enabledHelp)
|
Shortcuts.toggleHelp(@enabledHelp)
|
||||||
|
|
||||||
toggleMarkdownPreview: (e) =>
|
toggleMarkdownPreview: (e) ->
|
||||||
$(document).triggerHandler('markdown-preview:toggle', [e])
|
$(document).triggerHandler('markdown-preview:toggle', [e])
|
||||||
|
|
||||||
toggleHelp: (location) ->
|
@toggleHelp: (location) ->
|
||||||
$modal = $('#modal-shortcuts')
|
$modal = $('#modal-shortcuts')
|
||||||
|
|
||||||
if $modal.length
|
if $modal.length
|
||||||
|
@ -32,10 +33,16 @@ class @Shortcuts
|
||||||
$('.js-more-help-button').remove()
|
$('.js-more-help-button').remove()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
focusFilter: (e) ->
|
||||||
|
@filterInput ?= $('input[type=search]', '.nav-controls')
|
||||||
|
@filterInput.focus()
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
@focusSearch: (e) ->
|
@focusSearch: (e) ->
|
||||||
$('#search').focus()
|
$('#search').focus()
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
|
||||||
|
|
||||||
$(document).on 'click.more_help', '.js-more-help-button', (e) ->
|
$(document).on 'click.more_help', '.js-more-help-button', (e) ->
|
||||||
$(@).remove()
|
$(@).remove()
|
||||||
$('.hidden-shortcut').show()
|
$('.hidden-shortcut').show()
|
||||||
|
|
54
app/assets/javascripts/single_file_diff.js.coffee
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
class @SingleFileDiff
|
||||||
|
|
||||||
|
WRAPPER = '<div class="diff-content diff-wrap-lines"></div>'
|
||||||
|
LOADING_HTML = '<i class="fa fa-spinner fa-spin"></i>'
|
||||||
|
ERROR_HTML = '<div class="nothing-here-block"><i class="fa fa-warning"></i> Could not load diff</div>'
|
||||||
|
COLLAPSED_HTML = '<div class="nothing-here-block diff-collapsed">This diff is collapsed. Click to expand it.</div>'
|
||||||
|
|
||||||
|
constructor: (@file) ->
|
||||||
|
@content = $('.diff-content', @file)
|
||||||
|
@diffForPath = @content.find('[data-diff-for-path]').data 'diff-for-path'
|
||||||
|
@isOpen = !@diffForPath
|
||||||
|
|
||||||
|
if @diffForPath
|
||||||
|
@collapsedContent = @content
|
||||||
|
@loadingContent = $(WRAPPER).addClass('loading').html(LOADING_HTML).hide()
|
||||||
|
@content = null
|
||||||
|
@collapsedContent.after(@loadingContent)
|
||||||
|
else
|
||||||
|
@collapsedContent = $(WRAPPER).html(COLLAPSED_HTML).hide()
|
||||||
|
@content.after(@collapsedContent)
|
||||||
|
|
||||||
|
@collapsedContent.on 'click', @toggleDiff
|
||||||
|
|
||||||
|
$('.file-title > a', @file).on 'click', @toggleDiff
|
||||||
|
|
||||||
|
toggleDiff: (e) =>
|
||||||
|
@isOpen = !@isOpen
|
||||||
|
if not @isOpen and not @hasError
|
||||||
|
@content.hide()
|
||||||
|
@collapsedContent.show()
|
||||||
|
else if @content
|
||||||
|
@collapsedContent.hide()
|
||||||
|
@content.show()
|
||||||
|
else
|
||||||
|
@getContentHTML()
|
||||||
|
|
||||||
|
getContentHTML: ->
|
||||||
|
@collapsedContent.hide()
|
||||||
|
@loadingContent.show()
|
||||||
|
$.get @diffForPath, (data) =>
|
||||||
|
@loadingContent.hide()
|
||||||
|
if data.html
|
||||||
|
@content = $(data.html)
|
||||||
|
@content.syntaxHighlight()
|
||||||
|
else
|
||||||
|
@hasError = true
|
||||||
|
@content = $(ERROR_HTML)
|
||||||
|
@collapsedContent.after(@content)
|
||||||
|
return
|
||||||
|
|
||||||
|
$.fn.singleFileDiff = ->
|
||||||
|
return @each ->
|
||||||
|
if not $.data this, 'singleFileDiff'
|
||||||
|
$.data this, 'singleFileDiff', new SingleFileDiff this
|