Merge branch 'master' into avatar-cropping
This commit is contained in:
commit
0104ab79b3
25 changed files with 134 additions and 67 deletions
18
CHANGELOG
18
CHANGELOG
|
@ -1,7 +1,25 @@
|
|||
Please view this file on the master branch, on stable branches it's out of date.
|
||||
|
||||
v 8.6.0 (unreleased)
|
||||
- Improve the formatting for the user page bio (Connor Shea)
|
||||
|
||||
v 8.5.1
|
||||
- Fix group projects styles
|
||||
- Show Crowd login tab when sign in is disabled and Crowd is enabled (Peter Hudec)
|
||||
- Fix a set of small UI glitches in project, profile, and wiki pages
|
||||
- Restrict permissions on public/uploads
|
||||
- Fix the merge request side-by-side view after loading diff results
|
||||
- Fix the look of tooltip for the "Revert" button
|
||||
- Add when the Builds & Runners API changes got introduced
|
||||
- Fix error 500 on some merged merge requests
|
||||
- Fix an issue causing the content of the issuable sidebar to disappear
|
||||
- Fix error 500 when trying to mark an already done todo as "done"
|
||||
- Fix an issue where MRs weren't sortable
|
||||
- Issues can now be dragged & dropped into empty milestone lists. This is also
|
||||
possible with MRs
|
||||
- Changed padding & background color for highlighted notes
|
||||
- Re-add the newrelic_rpm gem which was removed without any deprecation or warning (Stan Hu)
|
||||
- Update sentry-raven gem to 0.15.6
|
||||
|
||||
v 8.5.0
|
||||
- Fix duplicate "me" in tooltip of the "thumbsup" awards Emoji (Stan Hu)
|
||||
|
|
2
Gemfile
2
Gemfile
|
@ -306,6 +306,8 @@ group :production do
|
|||
gem "gitlab_meta", '7.0'
|
||||
end
|
||||
|
||||
gem "newrelic_rpm", '~> 3.14'
|
||||
|
||||
gem 'octokit', '~> 3.8.0'
|
||||
|
||||
gem "mail_room", "~> 0.6.1"
|
||||
|
|
|
@ -480,6 +480,7 @@ GEM
|
|||
net-ldap (0.12.1)
|
||||
net-ssh (3.0.1)
|
||||
netrc (0.11.0)
|
||||
newrelic_rpm (3.14.1.311)
|
||||
nokogiri (1.6.7.2)
|
||||
mini_portile2 (~> 2.0.0.rc2)
|
||||
nprogress-rails (0.1.6.7)
|
||||
|
@ -962,6 +963,7 @@ DEPENDENCIES
|
|||
nested_form (~> 0.3.2)
|
||||
net-ssh (~> 3.0.1)
|
||||
nokogiri (~> 1.6.7, >= 1.6.7.2)
|
||||
newrelic_rpm (~> 3.14)
|
||||
nprogress-rails (~> 0.1.6.7)
|
||||
oauth2 (~> 1.0.0)
|
||||
octokit (~> 3.8.0)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
class @Activities
|
||||
constructor: ->
|
||||
Pager.init 20, true
|
||||
$(".event-filter a").bind "click", (event) =>
|
||||
$(".event-filter-link").on "click", (event) =>
|
||||
event.preventDefault()
|
||||
@toggleFilter($(event.currentTarget))
|
||||
@reloadActivities()
|
||||
|
@ -12,18 +12,10 @@ class @Activities
|
|||
|
||||
|
||||
toggleFilter: (sender) ->
|
||||
sender.closest('li').toggleClass "active"
|
||||
$('.event-filter .active').removeClass "active"
|
||||
event_filters = $.cookie("event_filter")
|
||||
filter = sender.attr("id").split("_")[0]
|
||||
if event_filters
|
||||
event_filters = event_filters.split(",")
|
||||
else
|
||||
event_filters = new Array()
|
||||
$.cookie "event_filter", (if event_filters isnt filter then filter else ""), { path: '/' }
|
||||
|
||||
index = event_filters.indexOf(filter)
|
||||
if index is -1
|
||||
event_filters.push filter
|
||||
else
|
||||
event_filters.splice index, 1
|
||||
|
||||
$.cookie "event_filter", event_filters.join(","), { path: '/' }
|
||||
if event_filters isnt filter
|
||||
sender.closest('li').toggleClass "active"
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
class @AwardsHandler
|
||||
constructor: (@post_emoji_url, @noteable_type, @noteable_id, @aliases) ->
|
||||
$(".add-award").click (event)->
|
||||
$(".add-award").click (event) =>
|
||||
event.stopPropagation()
|
||||
event.preventDefault()
|
||||
$(".emoji-menu").show()
|
||||
$("#emoji_search").focus()
|
||||
|
||||
@showEmojiMenu()
|
||||
|
||||
$("html").on 'click', (event) ->
|
||||
if !$(event.target).closest(".emoji-menu").length
|
||||
|
@ -14,6 +14,16 @@ class @AwardsHandler
|
|||
@renderFrequentlyUsedBlock()
|
||||
@setupSearch()
|
||||
|
||||
showEmojiMenu: ->
|
||||
if $(".emoji-menu").length
|
||||
$(".emoji-menu").show()
|
||||
$("#emoji_search").focus()
|
||||
else
|
||||
$.get "/emojis", (response) ->
|
||||
$(".add-award").after response
|
||||
$(".emoji-menu").show()
|
||||
$("#emoji_search").focus()
|
||||
|
||||
addAward: (emoji) ->
|
||||
emoji = @normilizeEmojiName(emoji)
|
||||
@postEmoji emoji, =>
|
||||
|
|
|
@ -90,6 +90,7 @@ class Dispatcher
|
|||
when 'groups:new', 'groups:edit', 'admin:groups:edit', 'admin:groups:new'
|
||||
new GroupAvatar()
|
||||
when 'projects:tree:show'
|
||||
shortcut_handler = new ShortcutsNavigation()
|
||||
new TreeView()
|
||||
when 'projects:find_file:show'
|
||||
shortcut_handler = true
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
}
|
||||
|
||||
.oneline {
|
||||
line-height: 42px;
|
||||
line-height: 35px;
|
||||
}
|
||||
|
||||
> p:last-child {
|
||||
|
|
|
@ -158,7 +158,7 @@
|
|||
}
|
||||
|
||||
&:hover {
|
||||
background: $hover;
|
||||
background: $row-hover;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,8 +48,8 @@
|
|||
|
||||
.ui-state-hover,
|
||||
.ui-state-focus {
|
||||
border: 1px solid $hover;
|
||||
background: $hover;
|
||||
border: 1px solid $row-hover;
|
||||
background: $row-hover;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
&.smoke { background-color: $background-color; }
|
||||
|
||||
&:hover {
|
||||
background: $hover;
|
||||
background: $row-hover;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
padding: 0;
|
||||
|
||||
.timeline-entry {
|
||||
padding: $gl-padding 0;
|
||||
padding: $gl-padding $gl-btn-padding;
|
||||
border-color: $table-border-color;
|
||||
color: $gl-gray;
|
||||
border-bottom: 1px solid $border-white-light;
|
||||
|
||||
&:target {
|
||||
background: $hover;
|
||||
background: $row-hover;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
|
|
|
@ -70,7 +70,7 @@ $pagination-bg: #fff;
|
|||
$pagination-border: $border-color;
|
||||
|
||||
$pagination-hover-color: $gl-gray;
|
||||
$pagination-hover-bg: $hover;
|
||||
$pagination-hover-bg: $row-hover;
|
||||
$pagination-hover-border: $border-color;
|
||||
|
||||
$pagination-active-color: $blue-dark;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
$hover: #faf9f9;
|
||||
$row-hover: #f4f8fe;
|
||||
$gl-text-color: #54565B;
|
||||
$gl-text-green: #4A2;
|
||||
$gl-text-red: #D12F19;
|
||||
|
|
|
@ -51,9 +51,17 @@
|
|||
.profile-link-holder {
|
||||
display: inline;
|
||||
|
||||
a {
|
||||
color: $blue-dark;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
// Middle dot divider between each element in a list of items.
|
||||
.middle-dot-divider {
|
||||
&:after {
|
||||
content: "\00B7";
|
||||
padding: 0px 6px;
|
||||
content: "\00B7"; // Middle Dot
|
||||
padding: 0 6px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
@ -63,11 +71,12 @@
|
|||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: $blue-dark;
|
||||
text-decoration: none;
|
||||
}
|
||||
.profile-user-bio {
|
||||
// Limits the width of the user bio for readability.
|
||||
max-width: 750px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.modal-profile-crop {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
&:hover {
|
||||
td {
|
||||
background: $hover;
|
||||
background: $row-hover;
|
||||
}
|
||||
cursor: pointer;
|
||||
}
|
||||
|
|
6
app/controllers/emojis_controller.rb
Normal file
6
app/controllers/emojis_controller.rb
Normal file
|
@ -0,0 +1,6 @@
|
|||
class EmojisController < ApplicationController
|
||||
layout false
|
||||
|
||||
def index
|
||||
end
|
||||
end
|
9
app/views/emojis/index.html.haml
Normal file
9
app/views/emojis/index.html.haml
Normal file
|
@ -0,0 +1,9 @@
|
|||
.emoji-menu
|
||||
.emoji-menu-content
|
||||
= text_field_tag :emoji_search, "", class: "emoji-search search-input form-control"
|
||||
- AwardEmoji.emoji_by_category.each do |category, emojis|
|
||||
%h5= AwardEmoji::CATEGORIES[category]
|
||||
%ul
|
||||
- emojis.each do |emoji|
|
||||
%li
|
||||
= emoji_icon(emoji["name"], emoji["unicode"], emoji["aliases"])
|
|
@ -1,11 +1,12 @@
|
|||
.top-area
|
||||
.nav-controls
|
||||
= form_tag request.original_url, method: :get, class: 'project-filter-form', id: 'project-filter-form' do |f|
|
||||
= search_field_tag :filter_projects, params[:filter_projects], placeholder: 'Filter by name...', class: 'input-short project-filter-form-field form-control projects-list-filter', spellcheck: false, id: 'project-filter-form-field'
|
||||
- if current_user && current_user.can_create_project?
|
||||
= link_to new_project_path, class: 'btn btn-new' do
|
||||
= icon('plus')
|
||||
New Project
|
||||
- if @projects.present?
|
||||
= search_field_tag :filter_projects, nil, placeholder: 'Filter by name', class: 'projects-list-filter form-control', spellcheck: false
|
||||
- if can? current_user, :create_projects, @group
|
||||
= link_to new_project_path(namespace_id: @group.id), class: 'btn btn-new pull-right' do
|
||||
= icon('plus')
|
||||
New Project
|
||||
|
||||
.projects-list-holder
|
||||
= render 'shared/projects/list', projects: @projects, projects_limit: 20, stars: false, skip_namespace: true
|
||||
|
|
|
@ -32,10 +32,9 @@
|
|||
%li.active
|
||||
= link_to "#activity", 'data-toggle' => 'tab' do
|
||||
Activity
|
||||
- if @projects.present?
|
||||
%li
|
||||
= link_to "#projects", 'data-toggle' => 'tab' do
|
||||
Projects
|
||||
%li
|
||||
= link_to "#projects", 'data-toggle' => 'tab' do
|
||||
Projects
|
||||
|
||||
- if can?(current_user, :read_group, @group)
|
||||
%div{ class: container_class }
|
||||
|
|
|
@ -35,35 +35,37 @@
|
|||
= @user.name
|
||||
|
||||
.cover-desc
|
||||
%span
|
||||
@#{@user.username}.
|
||||
- if @user.bio.present?
|
||||
%span
|
||||
#{@user.bio}.
|
||||
%span
|
||||
%span.middle-dot-divider
|
||||
@#{@user.username}
|
||||
%span.middle-dot-divider
|
||||
Member since #{@user.created_at.to_s(:medium)}
|
||||
|
||||
- if @user.bio.present?
|
||||
.cover-desc
|
||||
%p.profile-user-bio
|
||||
= @user.bio
|
||||
|
||||
.cover-desc
|
||||
- unless @user.public_email.blank?
|
||||
.profile-link-holder
|
||||
.profile-link-holder.middle-dot-divider
|
||||
= link_to @user.public_email, "mailto:#{@user.public_email}"
|
||||
- unless @user.skype.blank?
|
||||
.profile-link-holder
|
||||
.profile-link-holder.middle-dot-divider
|
||||
= link_to "skype:#{@user.skype}", title: "Skype" do
|
||||
= icon('skype')
|
||||
- unless @user.linkedin.blank?
|
||||
.profile-link-holder
|
||||
.profile-link-holder.middle-dot-divider
|
||||
= link_to "https://www.linkedin.com/in/#{@user.linkedin}", title: "LinkedIn" do
|
||||
= icon('linkedin-square')
|
||||
- unless @user.twitter.blank?
|
||||
.profile-link-holder
|
||||
.profile-link-holder.middle-dot-divider
|
||||
= link_to "https://twitter.com/#{@user.twitter}", title: "Twitter" do
|
||||
= icon('twitter-square')
|
||||
- unless @user.website_url.blank?
|
||||
.profile-link-holder
|
||||
.profile-link-holder.middle-dot-divider
|
||||
= link_to @user.short_website_url, @user.full_website_url
|
||||
- unless @user.location.blank?
|
||||
.profile-link-holder
|
||||
.profile-link-holder.middle-dot-divider
|
||||
= icon('map-marker')
|
||||
= @user.location
|
||||
|
||||
|
|
|
@ -9,15 +9,6 @@
|
|||
.awards-controls
|
||||
%a.add-award{"href" => "#"}
|
||||
= icon('smile-o')
|
||||
.emoji-menu
|
||||
.emoji-menu-content
|
||||
= text_field_tag :emoji_search, "", class: "emoji-search search-input form-control"
|
||||
- AwardEmoji.emoji_by_category.each do |category, emojis|
|
||||
%h5= AwardEmoji::CATEGORIES[category]
|
||||
%ul
|
||||
- emojis.each do |emoji|
|
||||
%li
|
||||
= emoji_icon(emoji["name"], emoji["unicode"], emoji["aliases"])
|
||||
|
||||
- if current_user
|
||||
:javascript
|
||||
|
|
16
config/newrelic.yml
Normal file
16
config/newrelic.yml
Normal file
|
@ -0,0 +1,16 @@
|
|||
# New Relic configuration file
|
||||
#
|
||||
# This file is here to make sure the New Relic gem stays
|
||||
# quiet by default.
|
||||
#
|
||||
# To enable and configure New Relic, please use
|
||||
# environment variables, e.g. NEW_RELIC_ENABLED=true
|
||||
|
||||
production:
|
||||
enabled: false
|
||||
|
||||
development:
|
||||
enabled: false
|
||||
|
||||
test:
|
||||
enabled: false
|
|
@ -43,6 +43,8 @@ Rails.application.routes.draw do
|
|||
get '/autocomplete/users' => 'autocomplete#users'
|
||||
get '/autocomplete/users/:id' => 'autocomplete#user'
|
||||
|
||||
# Emojis
|
||||
resources :emojis, only: :index
|
||||
|
||||
# Search
|
||||
get 'search' => 'search#show'
|
||||
|
|
|
@ -43,10 +43,16 @@ Feature: Event Filters
|
|||
And I should not see new member event
|
||||
When I click "team" event filter
|
||||
And I visit dashboard activity page
|
||||
Then I should see push event
|
||||
And I should see new member event
|
||||
And I should not see merge request event
|
||||
When I click "push" event filter
|
||||
Then I should not see push event
|
||||
And I should see new member event
|
||||
And I should not see merge request event
|
||||
When I click "push" event filter
|
||||
And I visit dashboard activity page
|
||||
Then I should see push event
|
||||
And I should not see new member event
|
||||
And I should not see merge request event
|
||||
When I click "merge" event filter
|
||||
And I visit dashboard activity page
|
||||
Then I should see merge request event
|
||||
And I should not see push event
|
||||
And I should not see new member event
|
||||
|
|
|
@ -96,6 +96,7 @@ class Spinach::Features::AwardEmoji < Spinach::FeatureSteps
|
|||
end
|
||||
|
||||
step 'The search field is focused' do
|
||||
page.evaluate_script("document.activeElement.id").should eq "emoji_search"
|
||||
expect(page).to have_selector('#emoji_search')
|
||||
expect(page.evaluate_script('document.activeElement.id')).to eq('emoji_search')
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue