Merge branch '21369-make-it-clearer-that-diffs-can-be-collapsed' into 'master'
Updated diff toggle targets and added icon ## What does this MR do? Adds the new diff toggle icon and alters the toggle targets. User can now click on the file header bar _(where no other elements are above it, apart from the icon)_ and the `Click to expand` link to expand the diff and no where else. ## Are there points in the code the reviewer needs to double check? ## Why was this MR needed? ## Screenshots (if relevant) ![Screen_Shot_2016-09-02_at_15.35.15](/uploads/c1cb8c0547328153250294d6c95dd96a/Screen_Shot_2016-09-02_at_15.35.15.png) #### Gif ![2016-09-02_15.34.31](/uploads/abaefaeba9ce8ef129522dae34574c57/2016-09-02_15.34.31.gif) ## Does this MR meet the acceptance criteria? - [ ] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added - [ ] [Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md) - [ ] API support added - Tests - [ ] Added for this feature/bug - [ ] All builds are passing - [ ] Conform by the [merge request performance guides](http://docs.gitlab.com/ce/development/merge_request_performance_guidelines.html) - [ ] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides) - [ ] Branch has no merge conflicts with `master` (if you do - rebase it please) - [ ] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) ## What are the relevant issue numbers? Closes #21369 Closes #20326 See merge request !6183
This commit is contained in:
commit
964d1bb143
6 changed files with 58 additions and 15 deletions
|
@ -10,12 +10,13 @@
|
||||||
|
|
||||||
ERROR_HTML = '<div class="nothing-here-block"><i class="fa fa-warning"></i> Could not load diff</div>';
|
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>';
|
COLLAPSED_HTML = '<div class="nothing-here-block diff-collapsed">This diff is collapsed. <a class="click-to-expand">Click to expand it.</a></div>';
|
||||||
|
|
||||||
function SingleFileDiff(file) {
|
function SingleFileDiff(file) {
|
||||||
this.file = file;
|
this.file = file;
|
||||||
this.toggleDiff = bind(this.toggleDiff, this);
|
this.toggleDiff = bind(this.toggleDiff, this);
|
||||||
this.content = $('.diff-content', this.file);
|
this.content = $('.diff-content', this.file);
|
||||||
|
this.$toggleIcon = $('.diff-toggle-caret', this.file);
|
||||||
this.diffForPath = this.content.find('[data-diff-for-path]').data('diff-for-path');
|
this.diffForPath = this.content.find('[data-diff-for-path]').data('diff-for-path');
|
||||||
this.isOpen = !this.diffForPath;
|
this.isOpen = !this.diffForPath;
|
||||||
if (this.diffForPath) {
|
if (this.diffForPath) {
|
||||||
|
@ -23,18 +24,22 @@
|
||||||
this.loadingContent = $(WRAPPER).addClass('loading').html(LOADING_HTML).hide();
|
this.loadingContent = $(WRAPPER).addClass('loading').html(LOADING_HTML).hide();
|
||||||
this.content = null;
|
this.content = null;
|
||||||
this.collapsedContent.after(this.loadingContent);
|
this.collapsedContent.after(this.loadingContent);
|
||||||
|
this.$toggleIcon.addClass('fa-caret-right');
|
||||||
} else {
|
} else {
|
||||||
this.collapsedContent = $(WRAPPER).html(COLLAPSED_HTML).hide();
|
this.collapsedContent = $(WRAPPER).html(COLLAPSED_HTML).hide();
|
||||||
this.content.after(this.collapsedContent);
|
this.content.after(this.collapsedContent);
|
||||||
|
this.$toggleIcon.addClass('fa-caret-down');
|
||||||
}
|
}
|
||||||
this.collapsedContent.on('click', this.toggleDiff);
|
$('.file-title, .click-to-expand', this.file).on('click', this.toggleDiff);
|
||||||
$('.file-title > a', this.file).on('click', this.toggleDiff);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SingleFileDiff.prototype.toggleDiff = function(e) {
|
SingleFileDiff.prototype.toggleDiff = function(e) {
|
||||||
|
var $target = $(e.target);
|
||||||
|
if (!$target.hasClass('file-title') && !$target.hasClass('click-to-expand') && !$target.hasClass('diff-toggle-caret')) return;
|
||||||
this.isOpen = !this.isOpen;
|
this.isOpen = !this.isOpen;
|
||||||
if (!this.isOpen && !this.hasError) {
|
if (!this.isOpen && !this.hasError) {
|
||||||
this.content.hide();
|
this.content.hide();
|
||||||
|
this.$toggleIcon.addClass('fa-caret-right').removeClass('fa-caret-down');
|
||||||
this.collapsedContent.show();
|
this.collapsedContent.show();
|
||||||
if (typeof DiffNotesApp !== 'undefined') {
|
if (typeof DiffNotesApp !== 'undefined') {
|
||||||
DiffNotesApp.compileComponents();
|
DiffNotesApp.compileComponents();
|
||||||
|
@ -42,10 +47,12 @@
|
||||||
} else if (this.content) {
|
} else if (this.content) {
|
||||||
this.collapsedContent.hide();
|
this.collapsedContent.hide();
|
||||||
this.content.show();
|
this.content.show();
|
||||||
|
this.$toggleIcon.addClass('fa-caret-down').removeClass('fa-caret-right');
|
||||||
if (typeof DiffNotesApp !== 'undefined') {
|
if (typeof DiffNotesApp !== 'undefined') {
|
||||||
DiffNotesApp.compileComponents();
|
DiffNotesApp.compileComponents();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
this.$toggleIcon.addClass('fa-caret-down').removeClass('fa-caret-right');
|
||||||
return this.getContentHTML();
|
return this.getContentHTML();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -19,10 +19,8 @@
|
||||||
|
|
||||||
&.diff-collapsed {
|
&.diff-collapsed {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
cursor: pointer;
|
.click-to-expand {
|
||||||
|
cursor: pointer;
|
||||||
&:hover {
|
|
||||||
background-color: $row-hover;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,15 @@
|
||||||
padding: 10px $gl-padding;
|
padding: 10px $gl-padding;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
border-radius: 3px 3px 0 0;
|
border-radius: 3px 3px 0 0;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: $dark-background-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.diff-toggle-caret {
|
||||||
|
padding-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
&.file-title-clear {
|
&.file-title-clear {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
|
|
|
@ -11,7 +11,9 @@
|
||||||
- elsif diff_file.collapsed?
|
- elsif diff_file.collapsed?
|
||||||
- url = url_for(params.merge(action: :diff_for_path, old_path: diff_file.old_path, new_path: diff_file.new_path))
|
- url = url_for(params.merge(action: :diff_for_path, old_path: diff_file.old_path, new_path: diff_file.new_path))
|
||||||
.nothing-here-block.diff-collapsed{data: { diff_for_path: url } }
|
.nothing-here-block.diff-collapsed{data: { diff_for_path: url } }
|
||||||
This diff is collapsed. Click to expand it.
|
This diff is collapsed.
|
||||||
|
%a.click-to-expand
|
||||||
|
Click to expand it.
|
||||||
- elsif diff_file.diff_lines.length > 0
|
- elsif diff_file.diff_lines.length > 0
|
||||||
- if diff_view == :parallel
|
- if diff_view == :parallel
|
||||||
= render "projects/diffs/parallel_view", diff_file: diff_file, project: project, blob: blob
|
= render "projects/diffs/parallel_view", diff_file: diff_file, project: project, blob: blob
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
%i.fa.diff-toggle-caret
|
||||||
- if defined?(blob) && blob && diff_file.submodule?
|
- if defined?(blob) && blob && diff_file.submodule?
|
||||||
%span
|
%span
|
||||||
= icon('archive fw')
|
= icon('archive fw')
|
||||||
|
|
|
@ -68,7 +68,7 @@ feature 'Expand and collapse diffs', js: true, feature: true do
|
||||||
|
|
||||||
context 'expanding a diff for a renamed file' do
|
context 'expanding a diff for a renamed file' do
|
||||||
before do
|
before do
|
||||||
large_diff_renamed.find('.nothing-here-block').click
|
large_diff_renamed.find('.click-to-expand').click
|
||||||
wait_for_ajax
|
wait_for_ajax
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -87,7 +87,10 @@ feature 'Expand and collapse diffs', js: true, feature: true do
|
||||||
|
|
||||||
context 'expanding a large diff' do
|
context 'expanding a large diff' do
|
||||||
before do
|
before do
|
||||||
click_link('large_diff.md')
|
# Wait for diffs
|
||||||
|
find('.file-title', match: :first)
|
||||||
|
# Click `large_diff.md` title
|
||||||
|
all('.file-title')[1].click
|
||||||
wait_for_ajax
|
wait_for_ajax
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -128,7 +131,10 @@ feature 'Expand and collapse diffs', js: true, feature: true do
|
||||||
|
|
||||||
context 'expanding the diff' do
|
context 'expanding the diff' do
|
||||||
before do
|
before do
|
||||||
click_link('large_diff.md')
|
# Wait for diffs
|
||||||
|
find('.file-title', match: :first)
|
||||||
|
# Click `large_diff.md` title
|
||||||
|
all('.file-title')[1].click
|
||||||
wait_for_ajax
|
wait_for_ajax
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -146,7 +152,12 @@ feature 'Expand and collapse diffs', js: true, feature: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'collapsing an expanded diff' do
|
context 'collapsing an expanded diff' do
|
||||||
before { click_link('small_diff.md') }
|
before do
|
||||||
|
# Wait for diffs
|
||||||
|
find('.file-title', match: :first)
|
||||||
|
# Click `small_diff.md` title
|
||||||
|
all('.file-title')[3].click
|
||||||
|
end
|
||||||
|
|
||||||
it 'hides the diff content' do
|
it 'hides the diff content' do
|
||||||
expect(small_diff).not_to have_selector('.code')
|
expect(small_diff).not_to have_selector('.code')
|
||||||
|
@ -154,7 +165,12 @@ feature 'Expand and collapse diffs', js: true, feature: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 're-expanding the same diff' do
|
context 're-expanding the same diff' do
|
||||||
before { click_link('small_diff.md') }
|
before do
|
||||||
|
# Wait for diffs
|
||||||
|
find('.file-title', match: :first)
|
||||||
|
# Click `small_diff.md` title
|
||||||
|
all('.file-title')[3].click
|
||||||
|
end
|
||||||
|
|
||||||
it 'shows the diff content' do
|
it 'shows the diff content' do
|
||||||
expect(small_diff).to have_selector('.code')
|
expect(small_diff).to have_selector('.code')
|
||||||
|
@ -231,7 +247,12 @@ feature 'Expand and collapse diffs', js: true, feature: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'collapsing an expanded diff' do
|
context 'collapsing an expanded diff' do
|
||||||
before { click_link('small_diff.md') }
|
before do
|
||||||
|
# Wait for diffs
|
||||||
|
find('.file-title', match: :first)
|
||||||
|
# Click `small_diff.md` title
|
||||||
|
all('.file-title')[3].click
|
||||||
|
end
|
||||||
|
|
||||||
it 'hides the diff content' do
|
it 'hides the diff content' do
|
||||||
expect(small_diff).not_to have_selector('.code')
|
expect(small_diff).not_to have_selector('.code')
|
||||||
|
@ -239,7 +260,12 @@ feature 'Expand and collapse diffs', js: true, feature: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 're-expanding the same diff' do
|
context 're-expanding the same diff' do
|
||||||
before { click_link('small_diff.md') }
|
before do
|
||||||
|
# Wait for diffs
|
||||||
|
find('.file-title', match: :first)
|
||||||
|
# Click `small_diff.md` title
|
||||||
|
all('.file-title')[3].click
|
||||||
|
end
|
||||||
|
|
||||||
it 'shows the diff content' do
|
it 'shows the diff content' do
|
||||||
expect(small_diff).to have_selector('.code')
|
expect(small_diff).to have_selector('.code')
|
||||||
|
|
Loading…
Reference in a new issue