Commit bd1e0c7e authored by Dimitrie Hoekstra's avatar Dimitrie Hoekstra

Merge branch 'master' into '26207-add-hover-animations'

# Conflicts:
#   app/assets/stylesheets/framework/variables.scss
parents c1daa7d1 4a1a06f4
......@@ -16,6 +16,8 @@ gem 'default_value_for', '~> 3.0.0'
gem 'mysql2', '~> 0.3.16', group: :mysql
gem 'pg', '~> 0.18.2', group: :postgres
gem 'rugged', '~> 0.24.0'
# Authentication libraries
gem 'devise', '~> 4.2'
gem 'doorkeeper', '~> 4.2.0'
......@@ -49,10 +51,6 @@ gem 'u2f', '~> 0.2.1'
# Browser detection
gem 'browser', '~> 2.2'
# Extracting information from a git repository
# Provide access to Gitlab::Git library
gem 'gitlab_git', '~> 10.7.0'
# LDAP Auth
# GitLab fork with several improvements to original library. For full list of changes
# see https://github.com/intridea/omniauth-ldap/compare/master...gitlabhq:master
......@@ -328,7 +326,7 @@ end
gem 'newrelic_rpm', '~> 3.16'
gem 'octokit', '~> 4.3.0'
gem 'octokit', '~> 4.6.2'
gem 'mail_room', '~> 0.9.0'
......
......@@ -255,11 +255,6 @@ GEM
mime-types (>= 1.16, < 3)
posix-spawn (~> 0.3)
gitlab-markup (1.5.0)
gitlab_git (10.7.0)
activesupport (~> 4.0)
charlock_holmes (~> 0.7.3)
github-linguist (~> 4.7.0)
rugged (~> 0.24.0)
gitlab_omniauth-ldap (1.2.1)
net-ldap (~> 0.9)
omniauth (~> 1.0)
......@@ -420,8 +415,8 @@ GEM
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
octokit (4.3.0)
sawyer (~> 0.7.0, >= 0.5.3)
octokit (4.6.2)
sawyer (~> 0.8.0, >= 0.5.3)
oj (2.17.4)
omniauth (1.3.1)
hashie (>= 1.2, < 4)
......@@ -650,9 +645,9 @@ GEM
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
sawyer (0.7.0)
addressable (>= 2.3.5, < 2.5)
faraday (~> 0.8, < 0.10)
sawyer (0.8.1)
addressable (>= 2.3.5, < 2.6)
faraday (~> 0.8, < 1.0)
scss_lint (0.47.1)
rake (>= 0.9, < 11)
sass (~> 3.4.15)
......@@ -857,7 +852,6 @@ DEPENDENCIES
github-linguist (~> 4.7.0)
gitlab-flowdock-git-hook (~> 1.0.1)
gitlab-markup (~> 1.5.0)
gitlab_git (~> 10.7.0)
gitlab_omniauth-ldap (~> 1.2.1)
gollum-lib (~> 4.2)
gollum-rugged_adapter (~> 0.4.2)
......@@ -895,7 +889,7 @@ DEPENDENCIES
newrelic_rpm (~> 3.16)
nokogiri (~> 1.6.7, >= 1.6.7.2)
oauth2 (~> 1.2.0)
octokit (~> 4.3.0)
octokit (~> 4.6.2)
oj (~> 2.17.4)
omniauth (~> 1.3.1)
omniauth-auth0 (~> 1.4.1)
......@@ -942,6 +936,7 @@ DEPENDENCIES
rubocop-rspec (~> 1.5.0)
ruby-fogbugz (~> 0.2.1)
ruby-prof (~> 0.16.2)
rugged (~> 0.24.0)
sanitize (~> 2.0)
sass-rails (~> 5.0.6)
scss_lint (~> 0.47.0)
......@@ -988,4 +983,4 @@ DEPENDENCIES
wikicloth (= 0.8.1)
BUNDLED WITH
1.13.6
1.13.7
......@@ -55,6 +55,13 @@
$('.dropdown-toggle-text', $dropdown).text(text);
$dropdownContainer.removeClass('open');
});
$dropdownContainer.on('click', '.dropdown-content a', (e) => {
$dropdown.prop('title', e.target.text.replace(/_+?/g, '-'));
if ($dropdown.hasClass('has-tooltip')) {
$dropdown.tooltip('fixTitle');
}
});
});
};
......
......@@ -45,7 +45,7 @@
return fn(item);
}).filter(Boolean);
window.gl.environmentsList.EnvironmentsComponent = Vue.component('environment-component', {
gl.environmentsList.EnvironmentsComponent = Vue.component('environment-component', {
props: {
store: {
type: Object,
......@@ -55,7 +55,7 @@
},
components: {
'environment-item': window.gl.environmentsList.EnvironmentItem,
'environment-item': gl.environmentsList.EnvironmentItem,
},
data() {
......
......@@ -5,7 +5,7 @@
window.gl = window.gl || {};
window.gl.environmentsList = window.gl.environmentsList || {};
window.gl.environmentsList.ActionsComponent = Vue.component('actions-component', {
gl.environmentsList.ActionsComponent = Vue.component('actions-component', {
props: {
actions: {
type: Array,
......
......@@ -5,7 +5,7 @@
window.gl = window.gl || {};
window.gl.environmentsList = window.gl.environmentsList || {};
window.gl.environmentsList.ExternalUrlComponent = Vue.component('external-url-component', {
gl.environmentsList.ExternalUrlComponent = Vue.component('external-url-component', {
props: {
externalUrl: {
type: String,
......
......@@ -29,12 +29,12 @@
gl.environmentsList.EnvironmentItem = Vue.component('environment-item', {
components: {
'commit-component': window.gl.CommitComponent,
'actions-component': window.gl.environmentsList.ActionsComponent,
'external-url-component': window.gl.environmentsList.ExternalUrlComponent,
'stop-component': window.gl.environmentsList.StopComponent,
'rollback-component': window.gl.environmentsList.RollbackComponent,
'terminal-button-component': window.gl.environmentsList.TerminalButtonComponent,
'commit-component': gl.CommitComponent,
'actions-component': gl.environmentsList.ActionsComponent,
'external-url-component': gl.environmentsList.ExternalUrlComponent,
'stop-component': gl.environmentsList.StopComponent,
'rollback-component': gl.environmentsList.RollbackComponent,
'terminal-button-component': gl.environmentsList.TerminalButtonComponent,
},
props: {
......@@ -183,7 +183,7 @@
* @returns {String}
*/
createdDate() {
return window.gl.environmentsList.timeagoInstance.format(
return gl.environmentsList.timeagoInstance.format(
this.model.last_deployment.deployable.created_at,
);
},
......
......@@ -5,7 +5,7 @@
window.gl = window.gl || {};
window.gl.environmentsList = window.gl.environmentsList || {};
window.gl.environmentsList.RollbackComponent = Vue.component('rollback-component', {
gl.environmentsList.RollbackComponent = Vue.component('rollback-component', {
props: {
retryUrl: {
type: String,
......
......@@ -5,7 +5,7 @@
window.gl = window.gl || {};
window.gl.environmentsList = window.gl.environmentsList || {};
window.gl.environmentsList.StopComponent = Vue.component('stop-component', {
gl.environmentsList.StopComponent = Vue.component('stop-component', {
props: {
stopUrl: {
type: String,
......
......@@ -5,7 +5,7 @@
window.gl = window.gl || {};
window.gl.environmentsList = window.gl.environmentsList || {};
window.gl.environmentsList.TerminalButtonComponent = Vue.component('terminal-button-component', {
gl.environmentsList.TerminalButtonComponent = Vue.component('terminal-button-component', {
props: {
terminalPath: {
type: String,
......
......@@ -7,15 +7,17 @@
$(() => {
window.gl = window.gl || {};
if (window.gl.EnvironmentsListApp) {
window.gl.EnvironmentsListApp.$destroy(true);
if (gl.EnvironmentsListApp) {
gl.EnvironmentsListApp.$destroy(true);
}
const Store = window.gl.environmentsList.EnvironmentsStore;
const Store = gl.environmentsList.EnvironmentsStore;
window.gl.EnvironmentsListApp = new window.gl.environmentsList.EnvironmentsComponent({
gl.EnvironmentsListApp = new gl.environmentsList.EnvironmentsComponent({
el: document.querySelector('#environments-list-view'),
propsData: {
store: Store.create(),
},
});
});
......@@ -48,6 +48,7 @@
},
DefaultOptions: {
sorter: function(query, items, searchKey) {
this.setting.highlightFirst = query.length > 0;
if (gl.GfmAutoComplete.isLoading(items)) {
return items;
}
......@@ -55,11 +56,9 @@
},
filter: function(query, data, searchKey) {
if (gl.GfmAutoComplete.isLoading(data)) {
gl.GfmAutoComplete.togglePreventSelection.call(this, true);
gl.GfmAutoComplete.fetchData(this.$inputor, this.at);
return data;
} else {
gl.GfmAutoComplete.togglePreventSelection.call(this, false);
return $.fn.atwho["default"].callbacks.filter(query, data, searchKey);
}
},
......@@ -257,9 +256,9 @@
insertTpl: '${atwho-at}${title}',
callbacks: {
matcher: this.DefaultOptions.matcher,
sorter: this.DefaultOptions.sorter,
beforeInsert: this.DefaultOptions.beforeInsert,
filter: this.DefaultOptions.filter,
sorter: this.DefaultOptions.sorter,
beforeSave: function(merges) {
if (gl.GfmAutoComplete.isLoading(merges)) return merges;
var sanitizeLabelTitle;
......@@ -370,11 +369,7 @@
if (!data || !data.length) return false;
if (Array.isArray(data)) data = data[0];
return data === this.defaultLoadingData[0] || data.name === this.defaultLoadingData[0];
},
togglePreventSelection(isPrevented = !!this.setting.tabSelectsMatch) {
this.setting.tabSelectsMatch = !isPrevented;
this.setting.spaceSelectsMatch = !isPrevented;
},
}
};
}).call(this);
......@@ -35,8 +35,8 @@
autosize(this.textarea);
// form and textarea event listeners
this.addEventListeners();
gl.text.init(this.form);
}
gl.text.init(this.form);
// hide discard button
this.form.find('.js-note-discard').hide();
return this.form.show();
......
......@@ -106,8 +106,9 @@
);
};
gl.utils.getPagePath = function() {
return $('body').data('page').split(':')[0];
gl.utils.getPagePath = function(index) {
index = index || 0;
return $('body').data('page').split(':')[index];
};
gl.utils.parseUrl = function (url) {
......@@ -127,6 +128,17 @@
return e.metaKey || e.ctrlKey || e.altKey || e.shiftKey;
};
gl.utils.scrollToElement = function($el) {
var top = $el.offset().top;
gl.navBarHeight = gl.navBarHeight || $('.navbar-gitlab').height();
gl.navLinksHeight = gl.navLinksHeight || $('.nav-links').height();
gl.mrTabsHeight = gl.mrTabsHeight || $('.merge-request-tabs').height();
return $('body, html').animate({
scrollTop: top - (gl.navBarHeight + gl.navLinksHeight + gl.mrTabsHeight)
}, 200);
};
})(window);
}).call(this);
/**
* CustomEvent support for IE
*/
if (typeof window.CustomEvent !== 'function') {
window.CustomEvent = function CustomEvent(e, params) {
const options = params || { bubbles: false, cancelable: false, detail: undefined };
const evt = document.createEvent('CustomEvent');
evt.initCustomEvent(e, options.bubbles, options.cancelable, options.detail);
return evt;
};
window.CustomEvent.prototype = window.Event.prototype;
}
......@@ -52,6 +52,12 @@
this.setupMainTargetNoteForm();
this.initTaskList();
this.collapseLongCommitList();
// We are in the Merge Requests page so we need another edit form for Changes tab
if (gl.utils.getPagePath(1) === 'merge_requests') {
$('.note-edit-form').clone()
.addClass('mr-note-edit-form').insertAfter('.note-edit-form');
}
}
Notes.prototype.addBinding = function() {
......@@ -63,7 +69,7 @@
// change note in UI after update
$(document).on("ajax:success", "form.edit-note", this.updateNote);
// Edit note link
$(document).on("click", ".js-note-edit", this.showEditForm);
$(document).on("click", ".js-note-edit", this.showEditForm.bind(this));
$(document).on("click", ".note-edit-cancel", this.cancelEdit);
// Reopen and close actions for Issue/MR combined with note form submit
$(document).on("click", ".js-comment-button", this.updateCloseButton);
......@@ -466,6 +472,7 @@
var $html, $note_li;
// Convert returned HTML to a jQuery object so we can modify it further
$html = $(note.html);
this.revertNoteEditForm();
gl.utils.localTimeAgo($('.js-timeago', $html));
$html.renderGFM();
$html.find('.js-task-list-container').taskList('enable');
......@@ -480,48 +487,56 @@
};
Notes.prototype.checkContentToAllowEditing = function($el) {
var initialContent = $el.find('.original-note-content').text().trim();
var currentContent = $el.find('.note-textarea').val();
var isAllowed = true;
if (currentContent === initialContent) {
this.removeNoteEditForm($el);
}
else {
var $buttons = $el.find('.note-form-actions');
var isWidgetVisible = gl.utils.isInViewport($el.get(0));
if (!isWidgetVisible) {
gl.utils.scrollToElement($el);
}
$el.find('.js-edit-warning').show();
isAllowed = false;
}
return isAllowed;
}
/*
Called in response to clicking the edit note link
Replaces the note text with the note edit form
Adds a data attribute to the form with the original content of the note for cancellations
*/
Notes.prototype.showEditForm = function(e, scrollTo, myLastNote) {
var $noteText, done, form, note;
e.preventDefault();
note = $(this).closest(".note");
note.addClass("is-editting");
form = note.find(".note-edit-form");
form.addClass('current-note-edit-form');
// Show the attachment delete link
note.find(".js-note-attachment-delete").show();
done = function($noteText) {
var noteTextVal;
// Neat little trick to put the cursor at the end
noteTextVal = $noteText.val();
// Store the original note text in a data attribute to retrieve if a user cancels edit.
form.find('form.edit-note').data('original-note', noteTextVal);
return $noteText.val('').val(noteTextVal);
};
new GLForm(form);
if ((scrollTo != null) && (myLastNote != null)) {
// scroll to the bottom
// so the open of the last element doesn't make a jump
$('html, body').scrollTop($(document).height());
return $('html, body').animate({
scrollTop: myLastNote.offset().top - 150
}, 500, function() {
var $noteText;
$noteText = form.find(".js-note-text");
$noteText.focus();
return done($noteText);
});
} else {
$noteText = form.find('.js-note-text');
$noteText.focus();
return done($noteText);
var $target = $(e.target);
var $editForm = $(this.getEditFormSelector($target));
var $note = $target.closest('.note');
var $currentlyEditing = $('.note.is-editting:visible');
if ($currentlyEditing.length) {
var isEditAllowed = this.checkContentToAllowEditing($currentlyEditing);
if (!isEditAllowed) {
return;
}
}
$note.find('.js-note-attachment-delete').show();
$editForm.addClass('current-note-edit-form');
$note.addClass('is-editting');
this.putEditFormInPlace($target);
};
......@@ -532,19 +547,41 @@
*/
Notes.prototype.cancelEdit = function(e) {
var note;
e.preventDefault();
note = $(e.target).closest('.note');
var $target = $(e.target);
var note = $target.closest('.note');
note.find('.js-edit-warning').hide();
this.revertNoteEditForm($target);
return this.removeNoteEditForm(note);
};
Notes.prototype.revertNoteEditForm = function($target) {
$target = $target || $('.note.is-editting:visible');
var selector = this.getEditFormSelector($target);
var $editForm = $(selector);
$editForm.insertBefore('.notes-form');
$editForm.find('.js-comment-button').enable();
$editForm.find('.js-edit-warning').hide();
};
Notes.prototype.getEditFormSelector = function($el) {
var selector = '.note-edit-form:not(.mr-note-edit-form)';
if ($el.parents('#diffs').length) {
selector = '.note-edit-form.mr-note-edit-form';
}
return selector;
};
Notes.prototype.removeNoteEditForm = function(note) {
var form;
form = note.find(".current-note-edit-form");
note.removeClass("is-editting");
form.removeClass("current-note-edit-form");
var form = note.find('.current-note-edit-form');
note.removeClass('is-editting');
form.removeClass('current-note-edit-form');
form.find('.js-edit-warning').hide();
// Replace markdown textarea text with original note text.
return form.find(".js-note-text").val(form.find('form.edit-note').data('original-note'));
return form.find('.js-note-text').val(form.find('form.edit-note').data('original-note'));
};
......@@ -837,15 +874,44 @@
Notes.prototype.initTaskList = function() {
this.enableTaskList();
return $(document).on('tasklist:changed', '.note .js-task-list-container', this.updateTaskList);
return $(document).on('tasklist:changed', '.note .js-task-list-container', this.updateTaskList.bind(this));
};
Notes.prototype.enableTaskList = function() {
return $('.note .js-task-list-container').taskList('enable');
};
Notes.prototype.updateTaskList = function() {
return $('form', this).submit();
Notes.prototype.putEditFormInPlace = function($el) {
var $editForm = $(this.getEditFormSelector($el));
var $note = $el.closest('.note');
$editForm.insertAfter($note.find('.note-text'));
var $originalContentEl = $note.find('.original-note-content');
var originalContent = $originalContentEl.text().trim();
var postUrl = $originalContentEl.data('post-url');
var targetId = $originalContentEl.data('target-id');
var targetType = $originalContentEl.data('target-type');
new GLForm($editForm.find('form'));
$editForm.find('form').attr('action', postUrl);
$editForm.find('.js-form-target-id').val(targetId);
$editForm.find('.js-form-target-type').val(targetType);
$editForm.find('.js-note-text').focus().val(originalContent);
$editForm.find('.js-md-write-button').trigger('click');
$editForm.find('.referenced-users').hide();
}
Notes.prototype.updateTaskList = function(e) {
var $target = $(e.target);
var $list = $target.closest('.js-task-list-container');
var $editForm = $(this.getEditFormSelector($target));
var $note = $list.closest('.note');
this.putEditFormInPlace($list);
$editForm.find('#note_note').val($note.find('.original-task-list').val());
$('form', $list).submit();
};
Notes.prototype.updateNotesCount = function(updateCount) {
......
......@@ -23,7 +23,7 @@
});
$('.no-template', this.dropdown.parent()).on('click', () => {
this.currentTemplate = '';
this.currentTemplate.content = '';
this.setInputValueToTemplateContent();
$('.dropdown-toggle-text', this.dropdown).text('Choose a template');
});
......
//= require xterm/encoding-indexes
//= require xterm/encoding
//= require xterm/xterm.js
//= require xterm/fit.js
//= require ./terminal.js
......
......@@ -97,8 +97,20 @@
padding: 5px 6px;
outline: 0;
&.disabled {
cursor: default;
&:hover,
&:focus,
&:active {
background-color: $white-light;
border-color: $border-color;
box-shadow: none;
}
}
&.active,
&:hover,
&:active {
background-color: $row-hover;
border-color: $row-hover-border;
......
......@@ -4,8 +4,3 @@
color: $badge-color;
vertical-align: baseline;
}
.badge-dark {
background-color: $badge-bg-dark;
color: $badge-color-dark;
}
.centered-light-block {
text-align: center;
color: $gl-gray;
color: $gl-text-color;
margin: 20px;
}
.nothing-here-block {
text-align: center;
padding: 20px;
color: $gl-gray;
color: $gl-text-color;
font-weight: normal;
font-size: 14px;
line-height: 36px;
......@@ -29,7 +29,7 @@
margin-bottom: 0;
border-top: 1px solid $white-dark;
border-bottom: 1px solid $white-dark;
color: $gl-gray;
color: $gl-text-color;
&.oneline-block {
line-height: 42px;
......@@ -135,11 +135,11 @@
}
.cover-title {
color: $gl-header-color;
color: $gl-text-color;
font-size: 23px;
h1 {
color: $gl-gray-dark;
color: $gl-text-color;
margin-bottom: 6px;
font-size: 23px;
}
......@@ -153,7 +153,7 @@
p {
padding: 0 $gl-padding;
color: $gl-text-color-dark;
color: $gl-text-color;
}
}
......@@ -211,7 +211,7 @@
display: inline;
font-weight: normal;
font-size: 24px;
color: $gl-title-color;
color: $gl-text-color;
}
}
}
......
......@@ -88,7 +88,7 @@
}
@mixin btn-gray {
@include btn-color($gray-light, $border-gray-normal, $gray-normal, $border-gray-normal, $gray-dark, $border-gray-dark, $gl-gray-dark);
@include btn-color($gray-light, $border-gray-normal, $gray-normal, $border-gray-normal, $gray-dark, $border-gray-dark, $gl-text-color);
}
@mixin btn-white {
......@@ -242,7 +242,7 @@
}
.btn-transparent {
color: $gl-gray-light;
color: $gl-text-color-secondary;
background-color: transparent;
border: 0;
......@@ -338,7 +338,7 @@
margin-left: 10px;
i {
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
}
......
......@@ -412,7 +412,7 @@ table {
padding: 0 10px;
clip: auto;
text-decoration: none;
color: $gl-title-color;
color: $gl-text-color;
background: $gray-light;
z-index: 1;
}
......
......@@ -201,7 +201,7 @@
}
.icon-play {
fill: $gl-gray-light;
fill: $gl-text-color-secondary;
margin-right: 6px;
height: 12px;
width: 11px;
......@@ -209,7 +209,7 @@
}
.dropdown-header {
color: $gl-gray-light;
color: $gl-text-color-secondary;
font-size: 13px;
line-height: 22px;
padding: 0 10px;
......@@ -222,7 +222,7 @@
.unclickable {
cursor: not-allowed;
padding: 5px 8px;
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
}
......@@ -592,7 +592,7 @@
}
.ui-datepicker-title {
color: $gl-gray;
color: $gl-text-color;
font-size: 14px;
line-height: 1;
font-weight: normal;
......@@ -614,17 +614,17 @@
.dropdown-menu-inner-title {
display: block;
color: $gl-title-color;
color: $gl-text-color;
font-weight: 600;
}
.dropdown-menu-inner-content {
display: block;
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
.dropdown-toggle-text {
&.is-default {
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
}
......@@ -182,3 +182,52 @@ span.idiff {
border-bottom-right-radius: 2px;
}
}
.file-stats {
ul {
list-style: none;
margin: 0;
padding: 10px 0;
li {
padding: 3px 0;
line-height: 20px;
}
}
.new-file {
a {
color: $gl-text-green;
}
}
.renamed-file {
a {
color: $gl-text-orange;
}
}
.deleted-file {
a {
color: $gl-text-red;
}
}
.edit-file {
a {
color: $gl-text-color;
}
}
a {
text-decoration: none;
.new-file {
color: $notify-new-file;
}
.deleted-file {
color: $notify-deleted-file;
}
}
}
......@@ -153,7 +153,7 @@ label {
}
.form-control::-webkit-input-placeholder {
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
.input-group {
......
......@@ -45,7 +45,7 @@ header {
padding: 0;
.nav > li > a {
color: $gl-gray-light;
color: $gl-text-color-secondary;
font-size: 18px;
padding: 0;
margin: ($header-height - 28) / 2 0;
......@@ -71,7 +71,7 @@ header {
&:focus,
&:active {
background-color: $gray-light;
color: darken($gl-gray-light, 30%);
color: darken($gl-text-color-secondary, 30%);
.todos-pending-count {
background: darken($todo-alert-blue, 10%);
......@@ -96,7 +96,7 @@ header {
}
&.active {
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
}
}
......
......@@ -34,10 +34,10 @@
.ci-status-icon-canceled,
.ci-status-icon-disabled,
.ci-status-icon-not-found {
color: $gl-gray;
color: $gl-text-color;
svg {
fill: $gl-gray;
fill: $gl-text-color;
}
}
......
......@@ -41,6 +41,6 @@
}
&.status-box-upcoming {
background: $gl-gray-light;
background: $gl-text-color-secondary;
}
}
......@@ -128,7 +128,7 @@ ul.content-list {
}
a {
color: $gl-dark-link-color;
color: $gl-text-color;
}
.member-group-link {
......@@ -230,18 +230,50 @@ ul.content-list {
}
.label-default {
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
}
.panel > .content-list > li {
padding: $gl-padding-top $gl-padding;
// Table list
.table-list {
display: table;
width: 100%;
&.commit {
@media (min-width: $screen-sm-min) {
padding-left: 46px + $gl-padding;
.table-list-row {
display: table-row;
}
.table-list-cell {
display: table-cell;
vertical-align: top;
padding: 10px 16px;
border-bottom: 1px solid $gray-darker;
&.avatar-cell {
width: 36px;
padding-right: 0;
img {
margin-right: 0;
}
}
}
&.table-wide {
.table-list-cell {
&:last-of-type {
padding-right: 0;
}
&:first-of-type {
padding-left: 0;
}
}
}
}
.panel > .content-list > li {
padding: $gl-padding-top $gl-padding;
}
ul.controls {
......
......@@ -73,7 +73,7 @@
}
.referenced-users {
color: $gl-header-color;
color: $gl-text-color;
padding-top: 10px;
}
......@@ -135,7 +135,7 @@
.toolbar-btn {
float: left;
padding: 0 5px;
color: $gl-gray-light;
color: $gl-text-color-secondary;
background: transparent;
border: 0;
outline: 0;
......
......@@ -46,7 +46,7 @@
&.light {
a {
color: $gl-gray;
color: $gl-text-color;
}
}
}
......
......@@ -51,7 +51,7 @@
margin-bottom: -1px;
font-size: 14px;
line-height: 28px;
color: $gl-gray-light;
color: $gl-text-color-secondary;
border-bottom: 2px solid transparent;
&:hover,
......@@ -315,7 +315,7 @@
.fa-caret-down {
margin-left: 5px;
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
.dropdown {
......
......@@ -14,7 +14,7 @@
.header-action-buttons {
i {
color: $gl-gray-light;
color: $gl-text-color-secondary;
font-size: 13px;
margin-right: 3px;
}
......@@ -42,7 +42,7 @@
.commit-committer-link,
.commit-author-link {
color: $gl-gray;
color: $gl-text-color;
font-weight: bold;
}
......
......@@ -48,3 +48,11 @@
line-height: inherit;
}
}
.panel-default {
.table-list-row:last-child {
.table-list-cell {
border-bottom: 0;
}
}
}
......@@ -7,7 +7,7 @@
.timeline-entry {
padding: $gl-padding $gl-btn-padding 11px;
border-color: $white-normal;
color: $gl-gray;
color: $gl-text-color;
border-bottom: 1px solid $border-white-light;
&:target {
......@@ -32,7 +32,7 @@
.system-note {
.note-text {
color: $gl-gray !important;
color: $gl-text-color !important;
}
}
......
......@@ -98,7 +98,7 @@
&.label-gray {
background-color: $label-gray-bg;
color: $gl-gray;
color: $gl-text-color;
text-shadow: none;
}
......
......@@ -65,11 +65,11 @@ $legend-color: $text-color;
//
//##
$pagination-color: $gl-gray;
$pagination-color: $gl-text-color;
$pagination-bg: $white-light;
$pagination-border: $border-color;
$pagination-hover-color: $gl-gray;
$pagination-hover-color: $gl-text-color;
$pagination-hover-bg: $row-hover;
$pagination-hover-border: $border-color;
......@@ -121,6 +121,9 @@ $panel-default-heading-bg: $gray-light;
$panel-footer-bg: $gray-light;
$panel-inner-border: $border-color;
$badge-bg: $badge-bg;
$badge-color: $badge-color;
//== Wells
//
//##
......@@ -154,7 +157,7 @@ $nav-link-padding: 13px $gl-padding;
//
//##
$pre-bg: $gray-light !default;
$pre-color: $gl-gray !default;
$pre-color: $gl-text-color !default;
$pre-border-color: $border-color;
$table-bg-accent: $gray-light;
@mixin md-typography {
color: $md-text-color;
color: $gl-text-color;
word-wrap: break-word;
a {
......@@ -50,14 +50,14 @@
margin: 16px 0 10px;
padding: 0 0 0.3em;
border-bottom: 1px solid $white-dark;
color: $gl-gray-dark;
color: $gl-text-color;
}
h2 {
font-size: 1.5em;
font-weight: 600;
margin: 16px 0 10px;
color: $gl-gray-dark;
color: $gl-text-color;
}
h3 {
......@@ -100,7 +100,7 @@
}
p {
color: $gl-text-color-dark;
color: $gl-text-color;
margin: 6px 0 0;
}
......@@ -108,7 +108,7 @@
@extend .table;
@extend .table-bordered;
margin: 12px 0;
color: $gl-text-color-dark;
color: $gl-text-color;
th {
background: $label-gray-bg;
......@@ -230,7 +230,7 @@ h3,
h4,
h5,
h6 {
color: $gl-title-color;
color: $gl-text-color;
font-weight: 600;
}
......@@ -292,7 +292,7 @@ h2,
h3,
h4 {
small {
color: $gl-gray;
color: $gl-text-color;
}
}
......
......@@ -94,17 +94,13 @@ $well-light-text-color: #5b6169;
* Text
*/
$gl-font-size: 14px;
$gl-title-color: #333;
$gl-text-color: #5c5c5c;
$gl-text-color-dark: #5c5d5e;
$gl-text-color-light: #8c8c8c;
$gl-text-color: rgba(0, 0, 0, .85);
$gl-text-color-secondary: rgba(0, 0, 0, .55);
$gl-text-color-disabled: rgba(0, 0, 0, .35);
$gl-text-green: #4a2;
$gl-text-red: #d12f19;
$gl-text-orange: #d90;
$gl-link-color: #3777b0;
$gl-diff-text-color: #555;
$gl-dark-link-color: #333;
$gl-gray-light: #8f8f8f;
$gl-grayish-blue: #7f8fa4;
$gl-gray: $gl-text-color;
$gl-gray-dark: #313236;
......@@ -115,9 +111,9 @@ $gl-header-nav-hover-color: #434343;
* Lists
*/
$list-font-size: $gl-font-size;
$list-title-color: $gl-title-color;
$list-title-color: $gl-text-color;
$list-text-color: $gl-text-color;
$list-text-disabled-color: #888;
$list-text-disabled-color: $gl-text-color-disabled;
$list-border-light: #eee;
$list-border: rgba(0, 0, 0, 0.05);
$list-text-height: 42px;
......@@ -128,7 +124,6 @@ $list-warning-row-color: #8a6d3b;
/*
* Markdown
*/
$md-text-color: $gl-text-color;
$md-link-color: $gl-link-color;
$md-area-border: #ddd;
......@@ -169,9 +164,7 @@ $btn-side-margin: 10px;
$btn-sm-side-margin: 7px;
$btn-xs-side-margin: 5px;
$issue-status-expired: #cea61b;
$issuable-sidebar-color: #999;
$issuable-avatar-hover-border: #999;
$issuable-clipboard-color: #999;
$issuable-sidebar-color: $gl-text-color-secondary;
$show-aside-bg: #eee;
$show-aside-color: #777;
$show-aside-shadow: #ddd;
......@@ -286,10 +279,8 @@ $btn-active-gray-light: e4e7ed;
/*
* Badges
*/
$badge-bg: #f3f3f3;
$badge-bg-dark: #eee;
$badge-color: #929292;
$badge-color-dark: #8f8f8f;
$badge-bg: #eee;
$badge-color: $gl-text-color-secondary;
/*
* Award emoji
......@@ -308,8 +299,8 @@ $location-icon-color: #e7e9ed;
/*
* Notes
*/
$notes-light-color: #8e8e8e;
$notes-role-color: #8e8e8e;
$notes-light-color: $gl-text-color-secondary;
$notes-role-color: $gl-text-color-secondary;
$note-disabled-comment-color: #b2b2b2;
$note-targe3-outside: #fffff0;
$note-targe3-inside: #ffffd3;
......@@ -334,7 +325,7 @@ $calendar-user-contrib-text: #959494;
$cycle-analytics-box-padding: 30px;
$cycle-analytics-box-text-color: #8c8c8c;
$cycle-analytics-big-font: 19px;
$cycle-analytics-dark-text: $gl-title-color;
$cycle-analytics-dark-text: $gl-text-color;
$cycle-analytics-light-gray: #bfbfbf;
$cycle-analytics-dismiss-icon-color: #b2b2b2;
......@@ -380,14 +371,13 @@ $callout-success-color: #3c763d;
/*
* Commit Page
*/
$commit-committer-color: #999;
$commit-max-width-marker-color: rgba(0, 0, 0, 0.0);
$commit-message-text-area-bg: rgba(0, 0, 0, 0.0);
/*
* Common
*/
$common-gray: $gl-gray;
$common-gray: $gl-text-color;
$common-gray-light: #bbb;
$common-gray-dark: #444;
$common-red: $gl-text-red;
......@@ -542,3 +532,4 @@ Pipeline Graph
*/
$stage-hover-bg: #eaf3fc;
$stage-hover-border: #d1e7fc;
$action-icon-color: #d6d6d6;
\ No newline at end of file
.info-well {
background: $gray-light;
color: $gl-gray;
color: $gl-text-color;
border: 1px solid $border-color;
border-radius: $border-radius-default;
......
......@@ -40,7 +40,7 @@
}
.zen-control-full {
color: $gl-gray-light;
color: $gl-text-color-secondary;
&:hover {
color: $gl-link-color;
......
......@@ -3,7 +3,7 @@
/*
* White Syntax Colors
*/
$white-code-color: #333;
$white-code-color: $gl-text-color;
$white-highlight: #fafe3d;
$white-pre-hll-bg: #f8eec7;
$white-hll-bg: #f8f8f8;
......
......@@ -18,15 +18,3 @@ p.details {
pre.commit-message {
white-space: pre-wrap;
}
.file-stats > a {
text-decoration: none;
> .new-file {
color: $notify-new-file;
}
> .deleted-file {
color: $notify-deleted-file;
}
}
......@@ -259,7 +259,7 @@
.board-list-count {
padding: 10px 0;
color: $gl-gray-light;
color: $gl-text-color-secondary;
font-size: 13px;
> .fa {
......
.divergence-graph {
padding: 12px 12px 0 0;
float: right;
.graph-side {
position: relative;
width: 80px;
height: 22px;
padding: 5px 0 13px;
float: left;
.bar {
position: absolute;
height: 4px;
background-color: $divergence-graph-bar-bg;
}
.bar-behind {
right: 0;
border-radius: 3px 0 0 3px;
}
.bar-ahead {
left: 0;
border-radius: 0 3px 3px 0;
}
.count {
padding-top: 6px;
padding-bottom: 0;
font-size: 12px;
color: $gl-text-color;
display: block;
}
.count-behind {
padding-right: 4px;
text-align: right;
}
.count-ahead {
padding-left: 4px;
text-align: left;
}
}
.graph-separator {
position: relative;
width: 1px;
height: 18px;
margin: 5px 0 0;
float: left;
background-color: $divergence-graph-separator-bg;
}
}
......@@ -160,7 +160,7 @@
flex: 1;
a {
color: $gl-gray;
color: $gl-text-color;
&:hover {
color: $gl-link-color;
......@@ -357,7 +357,7 @@
}
.build-light-text {
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
.build-gutter-toggle {
......
......@@ -18,7 +18,7 @@
}
td {
color: $gl-gray;
color: $gl-text-color;
vertical-align: middle !important;
a {
......
.commit-title {
display: block;
}
.commit-author,
.commit-committer {
display: block;
color: $commit-committer-color;
font-weight: normal;
font-style: italic;
}
.commit-author strong,
.commit-committer strong {
font-weight: bold;
font-style: normal;
}
.commit-description {
background: none;
border: none;
margin: 0;
padding: 0;
margin-top: 10px;
word-break: normal;
white-space: pre-wrap;
}
.js-details-expand {
&:hover {
text-decoration: none;
}
}
.ci-status-link {
svg {
overflow: visible;
}
}
.commit-box {
border-top: 1px solid $border-color;
padding: $gl-padding 0;
.commit-title {
margin: 0;
font-size: 23px;
color: $gl-gray-dark;
}
.commit-description {
margin-top: 15px;
}
}
.commit-hash-full {
@media (max-width: $screen-sm-max) {
width: 80px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: inline-block;
vertical-align: bottom;
}
}
.file-stats {
ul {
list-style: none;
margin: 0;
padding: 10px 0;
li {
padding: 3px 0;
line-height: 20px;
}
}
.new-file {
a {
color: $gl-text-green;
}
}
.renamed-file {
a {
color: $gl-text-orange;
}
}
.deleted-file {
a {
color: $gl-text-red;
}
}
.edit-file {
a {
color: $gl-text-color;
}
}
}
/*
* Commit message textarea for web editor and
* custom merge request message
*/
.commit-message-container {
background-color: $body-bg;
position: relative;
font-family: $monospace_font;
$left: 12px;
overflow: hidden; // See https://gitlab.com/gitlab-org/gitlab-ce/issues/13987
.max-width-marker {
width: 72ch;
color: $commit-max-width-marker-color;
font-family: inherit;
left: $left;
height: 100%;
border-right: 1px solid mix($input-border, $white-light);
position: absolute;
z-index: 1;
}
> textarea {
background-color: $commit-message-text-area-bg;
font-family: inherit;
padding-left: $left;
position: relative;
z-index: 2;
}
}
.commit-description {
background: none;
border: none;
padding: 0;
margin-top: 10px;
word-break: normal;
white-space: pre-wrap;
}
.js-details-expand {
&:hover {
text-decoration: none;
}
}
.commit-box {
border-top: 1px solid $border-color;
padding: $gl-padding 0;
.commit-title {
margin: 0;
color: $gl-text-color;
}
.commit-description {
margin-top: 15px;
}
}
.commit-hash-full {
@media (max-width: $screen-sm-max) {
width: 80px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: inline-block;
vertical-align: bottom;
}
}
/*
* Commit message textarea for web editor and
* custom merge request message
*/
.commit-message-container {
background-color: $body-bg;
position: relative;
font-family: $monospace_font;
$left: 12px;
overflow: hidden; // See https://gitlab.com/gitlab-org/gitlab-ce/issues/13987
.max-width-marker {
width: 72ch;
color: $commit-max-width-marker-color;
font-family: inherit;
left: $left;
height: 100%;
border-right: 1px solid mix($input-border, $white-light);
position: absolute;
z-index: 1;
}
textarea {
background-color: $commit-message-text-area-bg;
font-family: inherit;
padding-left: $left;
position: relative;
z-index: 2;
}
}
.commits-compare-switch {
@include btn-default;
@include btn-white;
float: left;
margin-right: 9px;
}
......@@ -8,7 +77,6 @@
.commit-header {
padding: 5px 10px;
background-color: $gray-light;
border-top: 1px solid $gray-darker;
border-bottom: 1px solid $gray-darker;
font-size: 14px;
......@@ -18,8 +86,6 @@
}
.commit-row-title {
line-height: 1.35;
.notes_count {
float: right;
margin-right: 10px;
......@@ -30,15 +96,14 @@
}
.commit-row-message {
color: $gl-dark-link-color;
color: $gl-text-color;
}
}
.text-expander {
display: inline-block;
background: $gray-light;
color: $gl-gray-light;
color: $gl-text-color-secondary;
padding: 0 5px;
cursor: pointer;
border: 1px solid $border-gray-dark;
......@@ -54,9 +119,8 @@
.commit-actions {
@media (min-width: $screen-sm-min) {
float: right;
margin-left: $gl-padding;
margin-top: 2px;
width: 300px;
text-align: right;
font-size: 0;
}
......@@ -86,35 +150,13 @@
.commit,
.generic_commit_status {
padding: 10px 0;
position: relative;
@media (min-width: $screen-sm-min) {
padding-left: 46px;
}
&:not(:last-child) {
border-bottom: 1px solid $gray-darker;
}
a,
button {
color: $gl-dark-link-color;
color: $gl-text-color;
vertical-align: baseline;
}
.avatar {
margin-left: -46px;
}
.item-title {
display: inline-block;
@media (min-width: $screen-sm-min) {
max-width: 70%;
}
}
.commit-row-description {
font-size: 14px;
border-left: 1px solid $white-normal;
......@@ -134,20 +176,7 @@
}
a {
color: $gl-dark-link-color;
}
}
.commit-row-info {
color: $gl-gray;
line-height: 1.35;
a {
color: $gl-gray;
}
.avatar {
margin-right: 8px;
color: $gl-text-color;
}
}
......@@ -164,7 +193,7 @@
}
.branch-commit {
color: $gl-gray;
color: $gl-text-color;
.commit-icon {
text-align: center;
......@@ -174,7 +203,7 @@
height: 14px;
width: 14px;
vertical-align: middle;
fill: $gl-gray-light;
fill: $gl-text-color-secondary;
}
}
......@@ -183,62 +212,6 @@
}
.commit-row-message {
color: $gl-gray;
}
}
.divergence-graph {
padding: 12px 12px 0 0;
float: right;
.graph-side {
position: relative;
width: 80px;
height: 22px;
padding: 5px 0 13px;
float: left;
.bar {
position: absolute;
height: 4px;
background-color: $divergence-graph-bar-bg;
}
.bar-behind {
right: 0;
border-radius: 3px 0 0 3px;
}
.bar-ahead {
left: 0;
border-radius: 0 3px 3px 0;
}
.count {
padding-top: 6px;
padding-bottom: 0;
font-size: 12px;
color: $gl-title-color;
display: block;
}
.count-behind {
padding-right: 4px;
text-align: right;
}
.count-ahead {
padding-left: 4px;
text-align: left;
}
}
.graph-separator {
position: relative;
width: 1px;
height: 18px;
margin: 5px 0 0;
float: left;
background-color: $divergence-graph-separator-bg;
color: $gl-text-color;
}
}
......@@ -115,14 +115,14 @@
line-height: 19px;
font-size: 14px;
font-weight: 600;
color: $gl-title-color;
color: $gl-text-color;
}
&.text {
color: $layout-link-gray;
&.value-col {
color: $gl-title-color;
color: $gl-text-color;
}
}
}
......@@ -264,7 +264,7 @@
.stage-empty,
.not-available {
color: $gl-text-color-light;
color: $gl-text-color-secondary;
}
}
}
......@@ -331,7 +331,7 @@
@include text-overflow();
a {
color: $gl-dark-link-color;
color: $gl-text-color;
}
}
}
......@@ -359,7 +359,7 @@
.issue-link,
.commit-author-link,
.issue-author-link {
color: $gl-dark-link-color;
color: $gl-text-color;
}
// Custom CSS for components
......@@ -400,11 +400,11 @@
}
.item-build-name {
color: $gl-title-color;
color: $gl-text-color;
}
.pipeline-id {
color: $gl-title-color;
color: $gl-text-color;
padding: 0 3px 0 0;
}
......@@ -427,7 +427,7 @@
}
.fa {
color: $gl-text-color-light;
color: $gl-text-color-secondary;
font-size: $code_font_size;
}
}
......@@ -439,7 +439,7 @@
width: 75%;
margin: 0 auto;
padding-top: 130px;
color: $gl-text-color-light;
color: $gl-text-color-secondary;
h4 {
color: $gl-text-color;
......
.detail-page-header {
padding: $gl-padding-top 0;
border-bottom: 1px solid $border-color;
color: $gl-text-color-dark;
color: $gl-text-color;
line-height: 34px;
.author {
color: $gl-text-color-dark;
color: $gl-text-color;
}
.identifier {
color: $gl-text-color-dark;
color: $gl-text-color;
}
.issue_created_ago,
......@@ -22,7 +22,7 @@
.title {
margin: 0 0 16px;
font-size: 2em;
color: $gl-gray-dark;
color: $gl-text-color;
padding: 0 0 0.3em;
border-bottom: 1px solid $white-dark;
}
......
......@@ -14,7 +14,7 @@
background: $gray-light;
border-bottom: 1px solid $border-color;
padding: 10px 16px;
color: $gl-diff-text-color;
color: $gl-text-color;
z-index: 10;
border-radius: 3px 3px 0 0;
......@@ -50,7 +50,7 @@
overflow: auto;
overflow-y: hidden;
background: $white-light;
color: $gl-title-color;
color: $gl-text-color;
border-radius: 0 0 3px 3px;
.unfold {
......@@ -380,7 +380,7 @@
}
cursor: default;
color: $gl-title-color;
color: $gl-text-color;
}
&.disabled {
......
......@@ -72,25 +72,25 @@
.external-url,
.dropdown-new {
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
.dropdown-menu {
.fa {
margin-right: 6px;
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
}
.build-link,
.branch-name {
color: $gl-dark-link-color;
color: $gl-text-color;
}
.stop-env-link,
.external-url {
color: $gl-gray-light;
color: $gl-text-color-secondary;
.stop-env-icon {
font-size: 14px;
......@@ -101,7 +101,7 @@
.build-column {
.build-link {
color: $gl-dark-link-color;
color: $gl-text-color;
}
.avatar {
......
......@@ -21,7 +21,7 @@
}
a {
color: $gl-dark-link-color;
color: $gl-text-color;
}
.avatar {
......
......@@ -13,7 +13,7 @@
.stats {
float: right;
line-height: $list-text-height;
color: $gl-gray;
color: $gl-text-color;
span {
margin-right: 15px;
......
......@@ -5,6 +5,12 @@
}
}
.title {
padding: 0;
margin: 0;
border-bottom: none;
}
// Border around images in issue and MR descriptions.
.description img:not(.emoji) {
border: 1px solid $white-normal;
......@@ -97,7 +103,7 @@
}
.edit-link {
color: $gl-gray;
color: $gl-text-color;
&:not([href]):hover {
color: rgba($avatar-border, .2);
......@@ -133,7 +139,7 @@
}
.btn-clipboard:hover {
color: $gl-gray;
color: $gl-text-color;
}
}
......@@ -168,7 +174,7 @@
}
.no-value {
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
.sidebar-collapsed-icon {
......@@ -236,7 +242,7 @@
color: $issuable-sidebar-color;
&:hover {
color: $gl-gray;
color: $gl-text-color;
}
span {
......@@ -249,16 +255,16 @@
}
.avatar:hover {
border-color: $issuable-avatar-hover-border;
border-color: $issuable-sidebar-color;
}
.btn-clipboard {
border: none;
color: $issuable-clipboard-color;
color: $issuable-sidebar-color;
&:hover {
background: transparent;
color: $gl-gray;
color: $gl-text-color;
}
}
}
......@@ -336,7 +342,7 @@
margin-left: 5px;
a {
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
}
......
......@@ -117,7 +117,7 @@
.manage-labels-list {
.btn-action {
color: $gl-dark-link-color;
color: $gl-text-color;
.fa {
font-size: 18px;
......
......@@ -17,14 +17,19 @@
line-height: 1.5;
p {
font-size: 18px;
font-size: 16px;
color: $login-brand-holder-color;
}
h1:first-child {
font-weight: normal;
margin-bottom: 30px;
margin-bottom: 0.68em;
margin-top: 0;
font-size: 34px;
}
h3 {
font-size: 22px;
}
img {
......
......@@ -4,7 +4,7 @@
*/
.mr-state-widget {
background: $gray-light;
color: $gl-gray;
color: $gl-text-color;
border: 1px solid $border-color;
border-radius: 2px;
......@@ -58,7 +58,7 @@
padding-right: 0;
a {
color: $gl-gray;
color: $gl-text-color;
}
}
......@@ -70,7 +70,7 @@
.ci_widget {
border-bottom: 1px solid $well-inner-border;
color: $gl-gray;
color: $gl-text-color;
svg {
margin-right: 4px;
......@@ -94,7 +94,7 @@
}
.normal {
color: $gl-text-color-dark;
color: $gl-text-color;
}
.js-deployment-link {
......@@ -106,7 +106,7 @@
font-weight: 600;
font-size: 16px;
margin: 5px 0;
color: $gl-gray-dark;
color: $gl-text-color;
&.has-conflicts .fa-exclamation-triangle {
color: $gl-warning;
......@@ -190,7 +190,7 @@
}
.label-branch {
color: $gl-gray-dark;
color: $gl-text-color;
font-family: $monospace_font;
font-weight: bold;
overflow: hidden;
......@@ -310,10 +310,6 @@
left: 0;
top: 2px;
}
.commit-row-info {
line-height: 20px;
}
}
.btn-clipboard {
......@@ -367,7 +363,7 @@
th {
background-color: $white-light;
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
}
}
......
......@@ -102,7 +102,7 @@
margin-top: 7px;
.issuable-number {
color: $gl-gray-light;
color: $gl-text-color-secondary;
margin-right: 5px;
}
......
......@@ -27,6 +27,7 @@
.new-note,
.note-edit-form {
.note-form-actions {
position: relative;
margin-top: $gl-padding;
}
......@@ -44,7 +45,7 @@
.note-textarea {
display: block;
padding: 10px 0;
color: $gl-gray;
color: $gl-text-color;
font-family: $regular_font;
border: 0;
......@@ -204,7 +205,7 @@
.comment-toolbar {
padding-top: $gl-padding-top;
color: $gl-gray-light;
color: $gl-text-color-secondary;
border-top: 1px solid $border-color;
}
......@@ -265,3 +266,18 @@
}
}
}
.note-edit-warning.settings-message {
display: none;
padding: 5px 10px;
position: absolute;
left: 127px;
top: 2px;
@media (max-width: $screen-xs-max) {
position: relative;
top: 0;
left: 0;
margin-bottom: 10px;
}
}
......@@ -43,7 +43,7 @@ ul.notes {
}
.system-note-message {
display: inline-block;
display: inline;
&::first-letter {
text-transform: lowercase;
......@@ -55,7 +55,7 @@ ul.notes {
}
p {
display: inline-block;
display: inline;
margin: 0;
&::first-letter {
......@@ -345,7 +345,7 @@ ul.notes {
}
.author_link {
color: $gl-gray;
color: $gl-text-color;
}
}
......@@ -353,6 +353,14 @@ ul.notes {
font-size: 14px;
}
.note-headline-light {
display: inline;
@media (max-width: $screen-xs-min) {
display: block;
}
}
.note-headline-light,
.discussion-headline-light {
color: $notes-light-color;
......@@ -580,13 +588,11 @@ ul.notes {
// Merge request notes in diffs
.diff-file {
// Diff is side by side
.notes_content.parallel .note-header .note-headline-light {
display: block;
position: relative;
}
// Diff is inline
.notes_content .note-header .note-headline-light {
display: inline-block;
......
This diff is collapsed.
......@@ -26,7 +26,7 @@
margin-bottom: 5px;
}
&> .form-group {
& > .form-group {
padding-left: 0;
}
}
......@@ -73,7 +73,7 @@
border: 1px solid $border-color;
}
&+ .select2 a {
& + .select2 a {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
......@@ -292,7 +292,7 @@
.option-title {
font-weight: normal;
display: inline-block;
color: $gl-gray-dark;
color: $gl-text-color;
}
.option-descr {
......@@ -331,7 +331,7 @@
a.deploy-project-label {
padding: 5px;
margin-right: 5px;
color: $gl-gray;
color: $gl-text-color;
background-color: $row-hover;
&:hover {
......@@ -372,7 +372,7 @@ a.deploy-project-label {
}
a {
color: $gl-dark-link-color;
color: $gl-text-color;
}
.dropdown-menu {
......@@ -426,7 +426,7 @@ a.deploy-project-label {
width: 100%;
height: 100%;
padding-top: $gl-padding;
color: $gl-gray;
color: $gl-text-color;
.caption {
min-height: 30px;
......@@ -552,7 +552,7 @@ pre.light-well {
margin: 0 7px 7px;
h5 {
color: $gl-text-color-dark;
color: $gl-text-color;
}
.light-well {
......@@ -618,7 +618,6 @@ pre.light-well {
margin: 0;
}
.activity-filter-block {
.controls {
padding-bottom: 7px;
......@@ -663,7 +662,7 @@ pre.light-well {
}
.commit-row-message {
color: $gl-gray;
color: $gl-text-color;
}
.commit_short_id {
......@@ -751,7 +750,7 @@ pre.light-well {
.protected-branches-list {
a {
color: $gl-gray;
color: $gl-text-color;
&:hover {
color: $gl-link-color;
......@@ -811,8 +810,32 @@ pre.light-well {
.compare-form-group {
.dropdown-menu {
width: 100%;
@media (min-width: $screen-sm-min) {
width: 300px;
}
}
+ .compare-ellipsis {
width: 100%;
vertical-align: middle;
text-align: center;
margin-top: -20px;
@media (min-width: $screen-sm-min) {
margin-top: 0;
width: auto;
}
}
.inline-input-group {
width: 100%;
@media (min-width: $screen-sm-min) {
width: 250px;
}
}
}
.clearable-input {
......
.settings-list-icon {
color: $gl-gray-light;
color: $gl-text-color-secondary;
font-size: $settings-icon-size;
line-height: 42px;
}
......
......@@ -61,15 +61,15 @@
&.ci-canceled,
&.ci-disabled {
color: $gl-gray;
border-color: $gl-gray;
color: $gl-text-color;
border-color: $gl-text-color;
&:not(span):hover {
background-color: rgba($gl-gray, .07);
background-color: rgba($gl-text-color, .07);
}
svg {
fill: $gl-gray;
fill: $gl-text-color;
}
}
......@@ -101,15 +101,15 @@
&.ci-created,
&.ci-skipped {
color: $gl-gray-light;
border-color: $gl-gray-light;
color: $gl-text-color-secondary;
border-color: $gl-text-color-secondary;
&:not(span):hover {
background-color: rgba($gl-gray-light, .07);
background-color: rgba($gl-text-color-secondary, .07);
}
svg {
fill: $gl-gray-light;
fill: $gl-text-color-secondary;
}
}
......@@ -135,3 +135,9 @@
left: 5px;
}
}
.ci-status-link {
svg {
overflow: visible;
}
}
......@@ -90,7 +90,7 @@
}
p {
color: $gl-text-color-dark;
color: $gl-text-color;
}
}
......
......@@ -78,7 +78,7 @@
i,
a {
color: $gl-dark-link-color;
color: $gl-text-color;
}
img {
......@@ -104,21 +104,21 @@
padding-right: 8px;
.commit-author-name {
color: $gl-gray;
color: $gl-text-color;
}
}
.tree-time-ago {
min-width: 135px;
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
.tree-commit {
max-width: 320px;
color: $gl-gray-light;
color: $gl-text-color-secondary;
.tree-commit-link {
color: $gl-gray-light;
color: $gl-text-color-secondary;
&:hover {
text-decoration: underline;
......@@ -134,21 +134,18 @@
.blob-commit-info {
list-style: none;
padding: $gl-padding;
background: $gray-light;
padding: 6px 0;
border: 1px solid $border-color;
border-bottom: none;
margin: 0;
.commit {
padding-top: 0;
padding-bottom: 0;
.commit-row-title {
.commit-row-message {
font-weight: normal;
}
.table-list-cell {
border-bottom: none;
}
.commit-actions {
width: 200px;
}
}
......
......@@ -15,7 +15,7 @@
}
.wiki-last-edit-by {
color: $gl-gray-light;
color: $gl-text-color-secondary;
strong {
color: $gl-text-color;
......@@ -24,7 +24,7 @@
.light {
font-weight: normal;
color: $gl-gray-light;
color: $gl-text-color-secondary;
}
.git-access-header {
......
......@@ -30,7 +30,7 @@ class Projects::MattermostsController < Projects::ApplicationController
def configure_params
params.require(:mattermost).permit(:trigger, :team_id).merge(
url: service_trigger_url(@service),
icon_url: asset_url('gitlab_logo.png'))
icon_url: asset_url('slash-command-logo.png'))
end
def teams
......
......@@ -98,7 +98,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
@start_version = @comparable_diffs.find { |diff| diff.head_commit_sha == @start_sha }
unless @start_version
render_404
@start_sha = @merge_request_diff.head_commit_sha
@start_version = @merge_request_diff
end
end
......
......@@ -7,7 +7,6 @@ class RegistrationsController < Devise::RegistrationsController
end
def create
if !Gitlab::Recaptcha.load_configurations! || verify_recaptcha
# To avoid duplicate form fields on the login page, the registration form
# names fields using `new_user`, but Devise still wants the params in
# `user`.
......@@ -15,9 +14,10 @@ class RegistrationsController < Devise::RegistrationsController
params[resource_name] = params.delete(:"new_#{resource_name}")
end
if !Gitlab::Recaptcha.load_configurations! || verify_recaptcha
super
else
flash[:alert] = "There was an error with the reCAPTCHA code below. Please re-enter the code."
flash[:alert] = 'There was an error with the reCAPTCHA. Please re-solve the reCAPTCHA.'
flash.delete :recaptcha_error
render action: 'new'
end
......@@ -57,7 +57,7 @@ class RegistrationsController < Devise::RegistrationsController
end
def sign_up_params
params.require(:user).permit(:username, :email, :name, :password, :password_confirmation)
params.require(:user).permit(:username, :email, :email_confirmation, :name, :password)
end
def resource_name
......
......@@ -110,6 +110,28 @@ module GitlabMarkdownHelper
end
end
# Returns the text necessary to reference `entity` across projects
#
# project - Project to reference
# entity - Object that responds to `to_reference`
#
# Examples:
#
# cross_project_reference(project, project.issues.first)
# # => 'namespace1/project1#123'
#
# cross_project_reference(project, project.merge_requests.first)
# # => 'namespace1/project1!345'
#
# Returns a String
def cross_project_reference(project, entity)
if entity.respond_to?(:to_reference)
entity.to_reference(project, full: true)
else
''
end
end
private
# Return +text+, truncated to +max_chars+ characters, excluding any HTML
......@@ -158,28 +180,6 @@ module GitlabMarkdownHelper
end
end
# Returns the text necessary to reference `entity` across projects
#
# project - Project to reference
# entity - Object that responds to `to_reference`
#
# Examples:
#
# cross_project_reference(project, project.issues.first)
# # => 'namespace1/project1#123'
#
# cross_project_reference(project, project.merge_requests.first)
# # => 'namespace1/project1!345'
#
# Returns a String
def cross_project_reference(project, entity)
if entity.respond_to?(:to_reference)
entity.to_reference(project)
else
''
end
end
def markdown_toolbar_button(options = {})
data = options[:data].merge({ container: "body" })
content_tag :button,
......
......@@ -58,13 +58,13 @@ module IssuesHelper
end
def status_box_class(item)
if item.respond_to?(:expired?) && item.expired?
if item.try(:expired?)
'status-box-expired'
elsif item.respond_to?(:merged?) && item.merged?
elsif item.try(:merged?)
'status-box-merged'
elsif item.closed?
'status-box-closed'
elsif item.respond_to?(:upcoming?) && item.upcoming?
elsif item.try(:upcoming?)
'status-box-upcoming'
else
'status-box-open'
......@@ -128,8 +128,10 @@ module IssuesHelper
names.to_sentence
end
def award_active_class(awards, current_user)
if current_user && awards.find { |a| a.user_id == current_user.id }
def award_state_class(awards, current_user)
if !current_user
"disabled"
elsif current_user && awards.find { |a| a.user_id == current_user.id }
"active"
else
""
......
......@@ -91,8 +91,8 @@ class Commit
@link_reference_pattern ||= super("commit", /(?<commit>\h{7,40})/)
end
def to_reference(from_project = nil)
commit_reference(from_project, id)
def to_reference(from_project = nil, full: false)
commit_reference(from_project, id, full: full)
end
def reference_link_text(from_project = nil)
......@@ -320,8 +320,8 @@ class Commit
private
def commit_reference(from_project, referable_commit_id)
reference = project.to_reference(from_project)
def commit_reference(from_project, referable_commit_id, full: false)
reference = project.to_reference(from_project, full: full)
if reference.present?
"#{reference}#{self.class.reference_prefix}#{referable_commit_id}"
......
......@@ -89,8 +89,8 @@ class CommitRange
alias_method :id, :to_s
def to_reference(from_project = nil)
project_reference = project.to_reference(from_project)
def to_reference(from_project = nil, full: false)
project_reference = project.to_reference(from_project, full: full)
if project_reference.present?
project_reference + self.class.reference_prefix + self.id
......
......@@ -17,7 +17,7 @@ module Referable
# Issue.last.to_reference(other_project) # => "cross-project#1"
#
# Returns a String
def to_reference(_from_project = nil)
def to_reference(_from_project = nil, full:)
''
end
......
......@@ -38,7 +38,7 @@ class ExternalIssue
@reference_pattern ||= %r{(?<issue>\b([A-Z][A-Z0-9_]+-)\d+)}
end
def to_reference(_from_project = nil)
def to_reference(_from_project = nil, full: nil)
id
end
......
......@@ -80,7 +80,7 @@ class Group < Namespace
end
end
def to_reference(_from_project = nil)
def to_reference(_from_project = nil, full: nil)
"#{self.class.reference_prefix}#{name}"
end
......
......@@ -8,8 +8,4 @@ class GroupLabel < Label
def subject_foreign_key
'group_id'
end
def to_reference(source_project = nil, target_project = nil, format: :id)
super(source_project, target_project, format: format)
end
end
......@@ -97,10 +97,10 @@ class Issue < ActiveRecord::Base
end
end
def to_reference(from_project = nil)
def to_reference(from_project = nil, full: false)
reference = "#{self.class.reference_prefix}#{iid}"
"#{project.to_reference(from_project)}#{reference}"
"#{project.to_reference(from_project, full: full)}#{reference}"
end
def referenced_merge_requests(current_user = nil)
......
......@@ -146,17 +146,17 @@ class Label < ActiveRecord::Base
#
# Label.first.to_reference # => "~1"
# Label.first.to_reference(format: :name) # => "~\"bug\""
# Label.first.to_reference(project, same_namespace_project) # => "gitlab-ce~1"
# Label.first.to_reference(project, another_namespace_project) # => "gitlab-org/gitlab-ce~1"
# Label.first.to_reference(project, target_project: same_namespace_project) # => "gitlab-ce~1"
# Label.first.to_reference(project, target_project: another_namespace_project) # => "gitlab-org/gitlab-ce~1"
#
# Returns a String
#
def to_reference(source_project = nil, target_project = nil, format: :id)
def to_reference(from_project = nil, target_project: nil, format: :id, full: false)
format_reference = label_format_reference(format)
reference = "#{self.class.reference_prefix}#{format_reference}"
if source_project
"#{source_project.to_reference(target_project)}#{reference}"
if from_project
"#{from_project.to_reference(target_project, full: full)}#{reference}"
else
reference
end
......
......@@ -175,10 +175,10 @@ class MergeRequest < ActiveRecord::Base
work_in_progress?(title) ? title : "WIP: #{title}"
end
def to_reference(from_project = nil)
def to_reference(from_project = nil, full: false)
reference = "#{self.class.reference_prefix}#{iid}"
"#{project.to_reference(from_project)}#{reference}"
"#{project.to_reference(from_project, full: full)}#{reference}"
end
def first_commit
......
class MergeRequestDiff < ActiveRecord::Base
include Sortable
include Importable
include EncodingHelper
include Gitlab::Git::EncodingHelper
# Prevent store of diff if commits amount more then 500
COMMITS_SAFE_SIZE = 100
......
......@@ -118,11 +118,11 @@ class Milestone < ActiveRecord::Base
# Milestone.first.to_reference(cross_namespace_project) # => "gitlab-org/gitlab-ce%1"
# Milestone.first.to_reference(same_namespace_project) # => "gitlab-ce%1"
#
def to_reference(from_project = nil, format: :iid)
def to_reference(from_project = nil, format: :iid, full: false)
format_reference = milestone_format_reference(format)
reference = "#{self.class.reference_prefix}#{format_reference}"
"#{project.to_reference(from_project)}#{reference}"
"#{project.to_reference(from_project, full: full)}#{reference}"
end
def reference_link_text(from_project = nil)
......
......@@ -589,8 +589,8 @@ class Project < ActiveRecord::Base
end
end
def to_reference(from_project = nil)
if cross_namespace_reference?(from_project)
def to_reference(from_project = nil, full: false)
if full || cross_namespace_reference?(from_project)
path_with_namespace
elsif cross_project_reference?(from_project)
path
......@@ -609,10 +609,6 @@ class Project < ActiveRecord::Base
Gitlab::Routing.url_helpers.namespace_project_url(self.namespace, self)
end
def web_url_without_protocol
web_url.split('://')[1]
end
def new_issue_address(author)
return unless Gitlab::IncomingEmail.supports_issue_creation? && author
......
......@@ -16,8 +16,8 @@ class ProjectLabel < Label
'project_id'
end
def to_reference(target_project = nil, format: :id)
super(project, target_project, format: format)
def to_reference(target_project = nil, format: :id, full: false)
super(project, target_project: target_project, format: format, full: full)
end
private
......
......@@ -64,11 +64,11 @@ class Snippet < ActiveRecord::Base
@link_reference_pattern ||= super("snippets", /(?<snippet>\d+)/)
end
def to_reference(from_project = nil)
def to_reference(from_project = nil, full: false)
reference = "#{self.class.reference_prefix}#{id}"
if project.present?
"#{project.to_reference(from_project)}#{reference}"
"#{project.to_reference(from_project, full: full)}#{reference}"
else
reference
end
......
......@@ -99,6 +99,7 @@ class User < ActiveRecord::Base
#
# Note: devise :validatable above adds validations for :email and :password
validates :name, presence: true
validates_confirmation_of :email
validates :notification_email, presence: true
validates :notification_email, email: true, if: ->(user) { user.notification_email != user.email }
validates :public_email, presence: true, uniqueness: true, email: true, allow_blank: true
......@@ -332,7 +333,7 @@ class User < ActiveRecord::Base
username
end
def to_reference(_from_project = nil, _target_project = nil)
def to_reference(_from_project = nil, target_project: nil, full: nil)
"#{self.class.reference_prefix}#{username}"
end
......
......@@ -10,4 +10,15 @@ class AvatarUploader < GitlabUploader
def exists?
model.avatar.file && model.avatar.file.exists?
end
# We set move_to_store and move_to_cache to 'false' to prevent stealing
# the avatar file from a project when forking it.
# https://gitlab.com/gitlab-org/gitlab-ce/issues/26158
def move_to_store
false
end
def move_to_cache
false
end
end
......@@ -2,8 +2,7 @@
.awards.js-awards-block{ class: ("hidden" if !inline && grouped_emojis.empty?), data: { award_url: toggle_award_url(awardable) } }
- awards_sort(grouped_emojis).each do |emoji, awards|
%button.btn.award-control.js-emoji-btn.has-tooltip{ type: "button",
disabled: !current_user,
class: (award_active_class(awards, current_user)),
class: (award_state_class(awards, current_user)),
data: { placement: "bottom", title: award_user_list(awards, current_user) } }
= emoji_icon(emoji, sprite: false)
%span.award-control-text.js-counter
......
-# Renders the content of each li in the dropdown
- subject = local_assigns.fetch(:subject)
- status = subject.detailed_status(current_user)
- klass = "ci-status-icon ci-status-icon-#{status.group}"
- tooltip = "#{subject.name} - #{status.label}"
- if status.has_details?
= link_to status.details_path, class: 'mini-pipeline-graph-dropdown-item', data: { toggle: 'tooltip', title: tooltip } do
%span{ class: klass }= custom_icon(status.icon)
%span.ci-build-text= subject.name
- else
.mini-pipeline-graph-dropdown-item{ data: { toggle: 'tooltip', title: tooltip } }
%span{ class: klass }= custom_icon(status.icon)
%span.ci-build-text= subject.name
- if status.has_action?
= link_to status.action_path, class: 'ci-action-icon-wrapper js-ci-action-icon', method: status.action_method, data: { toggle: 'tooltip', title: status.action_title } do
= icon(status.action_icon, class: status.action_class)
......@@ -15,6 +15,9 @@
.form-group
= f.label :email
= f.email_field :email, class: "form-control middle", required: true, title: "Please provide a valid email address."
.form-group
= f.label :email_confirmation
= f.email_field :email_confirmation, class: "form-control middle", required: true, title: "Please retype the email address."
.form-group.append-bottom-20#password-strength
= f.label :password
= f.password_field :password, class: "form-control bottom", required: true, pattern: ".{#{@minimum_password_length},}", title: "Minimum length is #{@minimum_password_length} characters."
......
......@@ -31,7 +31,7 @@
= link_to admin_abuse_reports_path, title: "Abuse Reports" do
%span
Abuse Reports
%span.badge.badge-dark.count= number_with_delimiter(AbuseReport.count(:all))
%span.badge.count= number_with_delimiter(AbuseReport.count(:all))
- if askimet_enabled?
= nav_link(controller: :spam_logs) do
......
......@@ -26,13 +26,13 @@
%span
Issues
- issues = IssuesFinder.new(current_user, group_id: @group.id, state: 'opened').execute
%span.badge.badge-dark.count= number_with_delimiter(issues.count)
%span.badge.count= number_with_delimiter(issues.count)
= nav_link(path: 'groups#merge_requests') do
= link_to merge_requests_group_path(@group), title: 'Merge Requests' do
%span
Merge Requests
- merge_requests = MergeRequestsFinder.new(current_user, group_id: @group.id, state: 'opened', non_archived: true).execute
%span.badge.badge-dark.count= number_with_delimiter(merge_requests.count)
%span.badge.count= number_with_delimiter(merge_requests.count)
= nav_link(controller: [:group_members]) do
= link_to group_group_members_path(@group), title: 'Members' do
%span
......
......@@ -61,14 +61,14 @@
%span
Issues
- if @project.default_issues_tracker?
%span.badge.badge-dark.count.issue_counter= number_with_delimiter(IssuesFinder.new(current_user, project_id: @project.id).execute.opened.count)
%span.badge.count.issue_counter= number_with_delimiter(IssuesFinder.new(current_user, project_id: @project.id).execute.opened.count)
- if project_nav_tab? :merge_requests
= nav_link(controller: :merge_requests) do
= link_to namespace_project_merge_requests_path(@project.namespace, @project), title: 'Merge Requests', class: 'shortcuts-merge_requests' do
%span
Merge Requests
%span.badge.badge-dark.count.merge_counter= number_with_delimiter(MergeRequestsFinder.new(current_user, project_id: @project.id).execute.opened.count)
%span.badge.count.merge_counter= number_with_delimiter(MergeRequestsFinder.new(current_user, project_id: @project.id).execute.opened.count)
- if project_nav_tab? :wiki
= nav_link(controller: :wikis) do
......
......@@ -18,7 +18,7 @@
- else
= link_to title, '#'
%ul.blob-commit-info.hidden-xs
%ul.blob-commit-info.table-list.hidden-xs
- blob_commit = @repository.last_commit_for_path(@commit.id, blob.path)
= render blob_commit, project: @project, ref: @ref
......
......@@ -47,22 +47,19 @@
- icon_status = "#{detailed_status.icon}_borderless"
- status_klass = "ci-status-icon ci-status-icon-#{detailed_status.group}"
.stage-container.mini-pipeline-graph
.dropdown.inline.build-content
%button.has-tooltip.builds-dropdown.js-builds-dropdown-button{ type: 'button', data: { toggle: 'dropdown', title: "#{stage.name}: #{detailed_status.label}", placement: 'top', "stage-endpoint" => stage_namespace_project_pipeline_path(pipeline.project.namespace, pipeline.project, pipeline, stage: stage.name) } }
%span.has-tooltip{ class: status_klass }
%span.mini-pipeline-graph-icon-container
%span{ class: status_klass }= custom_icon(icon_status)
= icon('caret-down', class: 'dropdown-caret')
.stage-container.dropdown.js-mini-pipeline-graph
%button.mini-pipeline-graph-dropdown-toggle.has-tooltip.js-builds-dropdown-button{ class: "ci-status-icon-#{detailed_status.group}", type: 'button', data: { toggle: 'dropdown', title: "#{stage.name}: #{detailed_status.label}", placement: 'top', "stage-endpoint" => stage_namespace_project_pipeline_path(pipeline.project.namespace, pipeline.project, pipeline, stage: stage.name) } }
= custom_icon(icon_status)
= icon('caret-down')
.js-builds-dropdown-container
.dropdown-menu.grouped-pipeline-dropdown
%ul.dropdown-menu.mini-pipeline-graph-dropdown-menu.js-builds-dropdown-container
.arrow-up
.js-builds-dropdown-list
.js-builds-dropdown-list.scrollable-menu
.js-builds-dropdown-loading.builds-dropdown-loading.hidden
%span.fa.fa-spinner.fa-spin
%td
- if pipeline.duration
%p.duration
......
%ul.content-list.pipelines
%div
- if pipelines.blank?
%li
%div
.nothing-here-block No pipelines to show
- else
.table-holder
.table-holder.pipelines
%table.table.ci-table.js-pipeline-table
%thead
%th.pipeline-status Status
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment