From b8d3016abbfeaa0658216a9d21138435f2379e38 Mon Sep 17 00:00:00 2001 From: "Luke \"Jared\" Bennett" <lbennett@gitlab.com> Date: Wed, 29 Jun 2016 17:14:17 +0100 Subject: [PATCH] Added frontend collapsible behavior --- app/assets/javascripts/diff.js.coffee | 2 + .../javascripts/merge_request_tabs.js.coffee | 1 + app/assets/javascripts/single_diff.js.coffee | 52 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 app/assets/javascripts/single_diff.js.coffee diff --git a/app/assets/javascripts/diff.js.coffee b/app/assets/javascripts/diff.js.coffee index 6d9b364cb8d..49c43c09983 100644 --- a/app/assets/javascripts/diff.js.coffee +++ b/app/assets/javascripts/diff.js.coffee @@ -1,6 +1,8 @@ class @Diff UNFOLD_COUNT = 20 constructor: -> + $('.files .diff-file').singleDiff() + $(document).off('click', '.js-unfold') $(document).on('click', '.js-unfold', (event) => target = $(event.target) diff --git a/app/assets/javascripts/merge_request_tabs.js.coffee b/app/assets/javascripts/merge_request_tabs.js.coffee index 894f80586f1..728ee5a2aa2 100644 --- a/app/assets/javascripts/merge_request_tabs.js.coffee +++ b/app/assets/javascripts/merge_request_tabs.js.coffee @@ -160,6 +160,7 @@ class @MergeRequestTabs $('#diffs').html data.html gl.utils.localTimeAgo($('.js-timeago', 'div#diffs')) $('#diffs .js-syntax-highlight').syntaxHighlight() + $('#diffs .diff-file').singleDiff() @expandViewContainer() if @diffViewType() is 'parallel' @diffsLoaded = true @scrollToElement("#diffs") diff --git a/app/assets/javascripts/single_diff.js.coffee b/app/assets/javascripts/single_diff.js.coffee new file mode 100644 index 00000000000..4d1c28c082b --- /dev/null +++ b/app/assets/javascripts/single_diff.js.coffee @@ -0,0 +1,52 @@ +class @SingleDiff + + LOADING_HTML = '<i class="fa fa-spinner fa-spin"></i>' + ERROR_HTML = '<div class="nothing-here-block"><i class="fa fa-warning"></i> Could not load diff</div>' + + constructor: (@file) -> + @content = $('.diff-content', @file) + @diffForPath = @content.data 'diff-for-path' + @setOpenState() + + $('.file-title > a', @file).on 'click', @toggleDiff + + setOpenState: -> + if @diffForPath + @isOpen = false + else + @isOpen = true + @contentHTML = @content.html() + return + + toggleDiff: (e) => + e.preventDefault() + @isOpen = !@isOpen + if not @isOpen and not @hasError + @content.empty() + return + if @contentHTML + @setContentHTML() + else + @getContentHTML() + return + + getContentHTML: -> + @content.html(LOADING_HTML).addClass 'loading' + $.get @diffForPath, (data) => + if data.html + @setContentHTML data.html + else + @hasError = true + @content.html ERROR_HTML + @content.removeClass 'loading' + return + + setContentHTML: (contentHTML) -> + @contentHTML = contentHTML if contentHTML + @content.html @contentHTML + @content.syntaxHighlight() + +$.fn.singleDiff = -> + return @each -> + if not $.data this, 'singleDiff' + $.data this, 'singleDiff', new SingleDiff this -- GitLab