summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/diff.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/diff.js')
-rw-r--r--app/assets/javascripts/diff.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/app/assets/javascripts/diff.js b/app/assets/javascripts/diff.js
new file mode 100644
index 00000000000..3dd7ceba92f
--- /dev/null
+++ b/app/assets/javascripts/diff.js
@@ -0,0 +1,66 @@
+(function() {
+ this.Diff = (function() {
+ var UNFOLD_COUNT;
+
+ UNFOLD_COUNT = 20;
+
+ function Diff() {
+ $('.files .diff-file').singleFileDiff();
+ this.filesCommentButton = $('.files .diff-file').filesCommentButton();
+ $(document).off('click', '.js-unfold');
+ $(document).on('click', '.js-unfold', (function(_this) {
+ return function(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,
+ indent: 1,
+ view: file.data('view')
+ };
+ return $.get(link, params, function(response) {
+ return target.parent().replaceWith(response);
+ });
+ };
+ })(this));
+ }
+
+ Diff.prototype.lineNumbers = function(line) {
+ if (!line.children().length) {
+ return [0, 0];
+ }
+
+ return line.find('.diff-line-num').map(function() {
+ return parseInt($(this).data('linenumber'));
+ });
+ };
+
+ return Diff;
+
+ })();
+
+}).call(this);