Allow expanding all diffs at once

This commit is contained in:
Sean McGivern 2016-07-06 13:04:52 +01:00
parent 90a6be190f
commit c082d92fb9
4 changed files with 45 additions and 1 deletions

View file

@ -8,6 +8,10 @@ module DiffHelper
[marked_old_line, marked_new_line]
end
def expand_all?
@expand_all || params[:expand].present?
end
def render_diff_for_path(diffs, diff_refs, project)
diff_file = safe_diff_files(diffs, diff_refs).first

View file

@ -9,7 +9,7 @@
- if !project.repository.diffable?(blob)
.nothing-here-block This diff was suppressed by a .gitattributes entry.
- elsif diff_file.diff_lines.length > 0
- if diff_file.collapsed_by_default? && !@expand_all
- if diff_file.collapsed_by_default? && !expand_all?
- url = url_for(params.merge(action: :diff_for_path, path: diff_file.file_path, format: nil))
.nothing-here-block.diff-collapsed{data: { diff_for_path: url } }
This diff is collapsed. Click to expand it.

View file

@ -6,6 +6,8 @@
.content-block.oneline-block.files-changed
.inline-parallel-buttons
- unless expand_all?
= link_to 'Expand all', url_for(params.merge(expand: 1, format: 'html')), class: 'btn btn-default'
- if show_whitespace_toggle
- if current_controller?(:commit)
= commit_diff_whitespace_link(@project, @commit, class: 'hidden-xs')

View file

@ -135,4 +135,42 @@ feature 'Expand and collapse diffs', js: true, feature: true do
end
end
end
context 'expanding all diffs' do
before do
click_link('Expand all')
wait_for_ajax
execute_script('window.ajaxUris = []; $(document).ajaxSend(function(event, xhr, settings) { ajaxUris.push(settings.url) });')
end
it 'reloads the page with all diffs expanded' do
expect(small_diff).to have_selector('.code')
expect(small_diff).not_to have_selector('.nothing-here-block')
expect(large_diff).to have_selector('.code')
expect(large_diff).not_to have_selector('.nothing-here-block')
end
context 'collapsing an expanded diff' do
before { click_link('small_diff.md') }
it 'hides the diff content' do
expect(small_diff).not_to have_selector('.code')
expect(small_diff).to have_selector('.nothing-here-block')
end
context 're-expanding the same diff' do
before { click_link('small_diff.md') }
it 'shows the diff content' do
expect(small_diff).to have_selector('.code')
expect(small_diff).not_to have_selector('.nothing-here-block')
end
it 'does not make a new HTTP request' do
expect(evaluate_script('ajaxUris')).to be_empty
end
end
end
end
end