From 4f107f3fc4333fe2234fac1bf1247164542484a2 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Tue, 25 Oct 2016 14:25:46 -0500 Subject: refactor Diff to es6 class syntax --- app/assets/javascripts/diff.js.es6 | 96 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 app/assets/javascripts/diff.js.es6 (limited to 'app/assets/javascripts/diff.js.es6') diff --git a/app/assets/javascripts/diff.js.es6 b/app/assets/javascripts/diff.js.es6 new file mode 100644 index 00000000000..27aa67ba09d --- /dev/null +++ b/app/assets/javascripts/diff.js.es6 @@ -0,0 +1,96 @@ +/* eslint-disable */ + +((global) => { + const UNFOLD_COUNT = 20; + + class Diff { + constructor() { + $('.files .diff-file').singleFileDiff(); + $('.files .diff-file').filesCommentButton(); + + if (this.diffViewType() === 'parallel') { + $('.content-wrapper .container-fluid').removeClass('container-limited'); + } + $(document) + .off('click', '.js-unfold') + .on('click', '.js-unfold', (event) => { + var line_number, link, file, offset, old_line, params, prev_new_line, prev_old_line, ref, ref1, since, target, to, unfold, unfoldBottom; + target = $(event.target); + unfoldBottom = target.hasClass('js-unfold-bottom'); + unfold = true; + ref = this.lineNumbers(target.parent()), old_line = ref[0], line_number = ref[1]; + offset = line_number - old_line; + if (unfoldBottom) { + line_number += 1; + since = line_number; + to = line_number + UNFOLD_COUNT; + } else { + ref1 = this.lineNumbers(target.parent().prev()), prev_old_line = ref1[0], prev_new_line = ref1[1]; + line_number -= 1; + to = line_number; + if (line_number - UNFOLD_COUNT > prev_new_line + 1) { + since = line_number - UNFOLD_COUNT; + } else { + since = prev_new_line + 1; + unfold = false; + } + } + file = target.parents('.diff-file'); + link = file.data('blob-diff-path'); + params = { + since: since, + to: to, + bottom: unfoldBottom, + offset: offset, + unfold: unfold, + view: file.data('view') + }; + return $.get(link, params, function(response) { + return target.parent().replaceWith(response); + }); + }) + .off('click', '.diff-line-num a') + .on('click', '.diff-line-num a', (event) => { + var hash = $(event.currentTarget).attr('href'); + event.preventDefault(); + if ( history.pushState ) { + history.pushState(null, null, hash); + } else { + window.location.hash = hash; + } + this.highlighSelectedLine(); + }); + + this.highlighSelectedLine(); + } + + diffViewType() { + return $('.inline-parallel-buttons a.active').data('view-type'); + } + + lineNumbers(line) { + if (!line.children().length) { + return [0, 0]; + } + + return line.find('.diff-line-num').map(function() { + return parseInt($(this).data('linenumber')); + }); + } + + highlighSelectedLine() { + const $diffFiles = $('.diff-file'); + $diffFiles.find('.hll').removeClass('hll'); + + if (window.location.hash !== '') { + const hash = window.location.hash.replace('#', ''); + $diffFiles + .find(`tr#${hash}:not(.match) td, td#${hash}, td[data-line-code="${hash}"]`) + .addClass('hll'); + } + } + } + + global.Diff = Diff; + +})(window.gl || (window.gl = {})); -- cgit v1.2.1 From 1d3b77683dc13bdf354436c9f6b16e6842810488 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Tue, 25 Oct 2016 20:22:09 -0500 Subject: refactor Diff class event bindings --- app/assets/javascripts/diff.js.es6 | 96 +++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 48 deletions(-) (limited to 'app/assets/javascripts/diff.js.es6') diff --git a/app/assets/javascripts/diff.js.es6 b/app/assets/javascripts/diff.js.es6 index 27aa67ba09d..343285cebd1 100644 --- a/app/assets/javascripts/diff.js.es6 +++ b/app/assets/javascripts/diff.js.es6 @@ -11,59 +11,59 @@ if (this.diffViewType() === 'parallel') { $('.content-wrapper .container-fluid').removeClass('container-limited'); } + $(document) - .off('click', '.js-unfold') - .on('click', '.js-unfold', (event) => { - var line_number, link, file, offset, old_line, params, prev_new_line, prev_old_line, ref, ref1, since, target, to, unfold, unfoldBottom; - target = $(event.target); - unfoldBottom = target.hasClass('js-unfold-bottom'); - unfold = true; - ref = this.lineNumbers(target.parent()), old_line = ref[0], line_number = ref[1]; - offset = line_number - old_line; - if (unfoldBottom) { - line_number += 1; - since = line_number; - to = line_number + UNFOLD_COUNT; - } else { - ref1 = this.lineNumbers(target.parent().prev()), prev_old_line = ref1[0], prev_new_line = ref1[1]; - line_number -= 1; - to = line_number; - if (line_number - UNFOLD_COUNT > prev_new_line + 1) { - since = line_number - UNFOLD_COUNT; - } else { - since = prev_new_line + 1; - unfold = false; - } - } - file = target.parents('.diff-file'); - link = file.data('blob-diff-path'); - params = { - since: since, - to: to, - bottom: unfoldBottom, - offset: offset, - unfold: unfold, - view: file.data('view') - }; - return $.get(link, params, function(response) { - return target.parent().replaceWith(response); - }); - }) - .off('click', '.diff-line-num a') - .on('click', '.diff-line-num a', (event) => { - var hash = $(event.currentTarget).attr('href'); - event.preventDefault(); - if ( history.pushState ) { - history.pushState(null, null, hash); - } else { - window.location.hash = hash; - } - this.highlighSelectedLine(); - }); + .off('click', '.js-unfold, .diff-line-num a') + .on('click', '.js-unfold', this.handleClickUnfold.bind(this)) + .on('click', '.diff-line-num a', this.handleClickLineNum.bind(this)); this.highlighSelectedLine(); } + handleClickUnfold(event) { + const $target = $(event.target); + const [oldLineNumber, newLineNumber] = this.lineNumbers($target.parent()); + const offset = newLineNumber - oldLineNumber; + const bottom = $target.hasClass('js-unfold-bottom'); + let since, to; + let unfold = true; + + if (bottom) { + const lineNumber = newLineNumber + 1; + since = lineNumber; + to = lineNumber + UNFOLD_COUNT; + } else { + const lineNumber = newLineNumber - 1; + since = lineNumber - UNFOLD_COUNT; + to = lineNumber; + + // make sure we aren't loading more than we need + const [prevOldLine, prevNewLine] = this.lineNumbers($target.parent().prev()); + if (since <= prevNewLine + 1) { + since = prevNewLine + 1; + unfold = false; + } + } + + const file = $target.parents('.diff-file'); + const link = file.data('blob-diff-path'); + const view = file.data('view'); + + const params = { since, to, bottom, offset, unfold, view }; + $.get(link, params, (response) => $target.parent().replaceWith(response)); + } + + handleClickLineNum(event) { + const hash = $(event.currentTarget).attr('href'); + event.preventDefault(); + if (history.pushState) { + history.pushState(null, null, hash); + } else { + window.location.hash = hash; + } + this.highlighSelectedLine(); + }; + diffViewType() { return $('.inline-parallel-buttons a.active').data('view-type'); } -- cgit v1.2.1 From 825fea63a39aa586b07ba9ffc62252a90435c8ad Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Wed, 26 Oct 2016 09:37:17 -0500 Subject: remove array destructuring until we can fix babel config --- app/assets/javascripts/diff.js.es6 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'app/assets/javascripts/diff.js.es6') diff --git a/app/assets/javascripts/diff.js.es6 b/app/assets/javascripts/diff.js.es6 index 343285cebd1..462658419be 100644 --- a/app/assets/javascripts/diff.js.es6 +++ b/app/assets/javascripts/diff.js.es6 @@ -22,7 +22,11 @@ handleClickUnfold(event) { const $target = $(event.target); - const [oldLineNumber, newLineNumber] = this.lineNumbers($target.parent()); + // current babel config relies on iterators implementation, so we cannot simply do: + // const [oldLineNumber, newLineNumber] = this.lineNumbers($target.parent()); + const ref = this.lineNumbers($target.parent()); + const oldLineNumber = ref[0]; + const newLineNumber = ref[1]; const offset = newLineNumber - oldLineNumber; const bottom = $target.hasClass('js-unfold-bottom'); let since, to; @@ -38,7 +42,7 @@ to = lineNumber; // make sure we aren't loading more than we need - const [prevOldLine, prevNewLine] = this.lineNumbers($target.parent().prev()); + const prevNewLine = this.lineNumbers($target.parent().prev())[1]; if (since <= prevNewLine + 1) { since = prevNewLine + 1; unfold = false; -- cgit v1.2.1 From f6624b5ce433b7148287e898f164476608868433 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Thu, 27 Oct 2016 15:32:30 -0500 Subject: fix eslint failures on Diff and MergeRequestTabs --- app/assets/javascripts/diff.js.es6 | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'app/assets/javascripts/diff.js.es6') diff --git a/app/assets/javascripts/diff.js.es6 b/app/assets/javascripts/diff.js.es6 index 462658419be..eacf53d1e1b 100644 --- a/app/assets/javascripts/diff.js.es6 +++ b/app/assets/javascripts/diff.js.es6 @@ -1,4 +1,4 @@ -/* eslint-disable */ +/* eslint-disable class-methods-use-this, no-param-reassign */ ((global) => { const UNFOLD_COUNT = 20; @@ -29,7 +29,8 @@ const newLineNumber = ref[1]; const offset = newLineNumber - oldLineNumber; const bottom = $target.hasClass('js-unfold-bottom'); - let since, to; + let since; + let to; let unfold = true; if (bottom) { @@ -54,19 +55,19 @@ const view = file.data('view'); const params = { since, to, bottom, offset, unfold, view }; - $.get(link, params, (response) => $target.parent().replaceWith(response)); + $.get(link, params, response => $target.parent().replaceWith(response)); } handleClickLineNum(event) { const hash = $(event.currentTarget).attr('href'); event.preventDefault(); - if (history.pushState) { - history.pushState(null, null, hash); + if (window.history.pushState) { + window.history.pushState(null, null, hash); } else { window.location.hash = hash; } this.highlighSelectedLine(); - }; + } diffViewType() { return $('.inline-parallel-buttons a.active').data('view-type'); @@ -76,10 +77,7 @@ if (!line.children().length) { return [0, 0]; } - - return line.find('.diff-line-num').map(function() { - return parseInt($(this).data('linenumber')); - }); + return line.find('.diff-line-num').map((i, elm) => parseInt($(elm).data('linenumber'), 10)); } highlighSelectedLine() { @@ -96,5 +94,4 @@ } global.Diff = Diff; - })(window.gl || (window.gl = {})); -- cgit v1.2.1 From c434568f3759dfcdb8f9c55a11aa037a760ec7d2 Mon Sep 17 00:00:00 2001 From: Luke Bennett Date: Fri, 9 Sep 2016 16:47:43 +0100 Subject: re-apply MR !6285 "Added forceLoad ability to singleFileDiffs, added callback to getContentHTML, added conditional force load if a collapsed diff line anchor is found" Use url utility to retrieve hash --- app/assets/javascripts/diff.js.es6 | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'app/assets/javascripts/diff.js.es6') diff --git a/app/assets/javascripts/diff.js.es6 b/app/assets/javascripts/diff.js.es6 index eacf53d1e1b..239dd84d8a3 100644 --- a/app/assets/javascripts/diff.js.es6 +++ b/app/assets/javascripts/diff.js.es6 @@ -58,6 +58,17 @@ $.get(link, params, response => $target.parent().replaceWith(response)); } + openAnchoredDiff(anchoredDiff, cb) { + const diffTitle = $(`#file-path-${anchoredDiff}`); + const diffFile = diffTitle.closest('.diff-file'); + const nothingHereBlock = $('.nothing-here-block:visible', diffFile); + if (nothingHereBlock.length) { + diffFile.singleFileDiff(true, cb); + } else { + cb(); + } + } + handleClickLineNum(event) { const hash = $(event.currentTarget).attr('href'); event.preventDefault(); -- cgit v1.2.1 From 6dd2a5204e9c17410c627737c7fed14642ed4e76 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Thu, 1 Dec 2016 11:35:26 -0600 Subject: use e instead of event variable name --- app/assets/javascripts/diff.js.es6 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'app/assets/javascripts/diff.js.es6') diff --git a/app/assets/javascripts/diff.js.es6 b/app/assets/javascripts/diff.js.es6 index 239dd84d8a3..4730d4b4e7b 100644 --- a/app/assets/javascripts/diff.js.es6 +++ b/app/assets/javascripts/diff.js.es6 @@ -20,8 +20,8 @@ this.highlighSelectedLine(); } - handleClickUnfold(event) { - const $target = $(event.target); + handleClickUnfold(e) { + const $target = $(e.target); // current babel config relies on iterators implementation, so we cannot simply do: // const [oldLineNumber, newLineNumber] = this.lineNumbers($target.parent()); const ref = this.lineNumbers($target.parent()); @@ -69,9 +69,9 @@ } } - handleClickLineNum(event) { - const hash = $(event.currentTarget).attr('href'); - event.preventDefault(); + handleClickLineNum(e) { + const hash = $(e.currentTarget).attr('href'); + e.preventDefault(); if (window.history.pushState) { window.history.pushState(null, null, hash); } else { -- cgit v1.2.1 From ed5f22cb93cbabcd2bcf38e7a6b22efb03d7e212 Mon Sep 17 00:00:00 2001 From: Mike Greiling Date: Fri, 2 Dec 2016 17:43:20 -0600 Subject: satisfy eslint no-param-reassign rule --- app/assets/javascripts/diff.js.es6 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'app/assets/javascripts/diff.js.es6') diff --git a/app/assets/javascripts/diff.js.es6 b/app/assets/javascripts/diff.js.es6 index 4730d4b4e7b..ecf9d1de81c 100644 --- a/app/assets/javascripts/diff.js.es6 +++ b/app/assets/javascripts/diff.js.es6 @@ -1,6 +1,6 @@ -/* eslint-disable class-methods-use-this, no-param-reassign */ +/* eslint-disable class-methods-use-this */ -((global) => { +(() => { const UNFOLD_COUNT = 20; class Diff { @@ -104,5 +104,6 @@ } } - global.Diff = Diff; -})(window.gl || (window.gl = {})); + window.gl = window.gl || {}; + window.gl.Diff = Diff; +})(); -- cgit v1.2.1 From c3415873b969ab3a8708da1f35388aa4f2e4155a Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" Date: Sun, 4 Dec 2016 11:12:23 +0000 Subject: Instantiate ImageFile for diff-files in Diff --- app/assets/javascripts/diff.js.es6 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'app/assets/javascripts/diff.js.es6') diff --git a/app/assets/javascripts/diff.js.es6 b/app/assets/javascripts/diff.js.es6 index ecf9d1de81c..9cf33e62958 100644 --- a/app/assets/javascripts/diff.js.es6 +++ b/app/assets/javascripts/diff.js.es6 @@ -5,8 +5,11 @@ class Diff { constructor() { - $('.files .diff-file').singleFileDiff(); - $('.files .diff-file').filesCommentButton(); + const $diffFile = $('.files .diff-file'); + $diffFile.singleFileDiff(); + $diffFile.filesCommentButton(); + + $diffFile.each((index, file) => new gl.ImageFile(file)); if (this.diffViewType() === 'parallel') { $('.content-wrapper .container-fluid').removeClass('container-limited'); -- cgit v1.2.1