summaryrefslogtreecommitdiffstats
path: root/sonar-server/src/main/coffee/component-viewer/mixins/main-scm.coffee
blob: 23c899f185fda465fac3aaade1326a23c01e9fce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
define [], () ->

  $ = jQuery
  API_SCM = "#{baseUrl}/api/sources/scm"


  class SCMMixin

    requestSCM: (key) ->
      $.get API_SCM, key: key, (data) =>
        if data?.scm?
          @state.set 'hasSCM', true
          @source.set scm: data.scm
          @augmentWithSCM data.scm


    augmentWithSCM: (scm) ->
      formattedSource = @source.get 'formattedSource'
      scmLength = scm.length
      if scmLength > 0
        scmIndex = 0
        scmCurrent = scm[scmIndex]
        scmDetails = {}
        formattedSource.forEach (line) ->
          if line.lineNumber == scmCurrent[0]
            scmDetails = author: scmCurrent[1], date: scmCurrent[2]
            if scmIndex < scmLength - 1
              scmIndex++
              scmCurrent = scm[scmIndex]
          line.scm = scmDetails
        @source.set 'formattedSource', formattedSource



    showSCM: (store = false) ->
      @settings.set 'scm', true
      @storeSettings() if store
      unless @state.get 'hasSCM'
        @requestSCM(@key).done => @sourceView.render()
      else
        @sourceView.render()


    hideSCM: (store = false) ->
      @settings.set 'scm', false
      @storeSettings() if store
      @sourceView.render()


    filterBySCM: ->
      requests = [@requestSCM(@key)]
      if @settings.get('issues') && !@state.get('hasIssues')
        requests.push @requestIssues @key
      $.when.apply($, requests).done =>
        @_filterBySCM()


    _filterBySCM: () ->
      formattedSource = @source.get 'formattedSource'
      period = @state.get 'period'
      unless period?
        return @showAllLines()
      else
        periodDate = period.get 'sinceDate'
      @settings.set 'scm', true
      @sourceView.resetShowBlocks()
      scmBlockLine = 1
      predicate = false
      formattedSource.forEach (line) =>
        scmBlockDate = new Date line.scm.date
        if scmBlockDate >= periodDate
          scmBlockLine = line.lineNumber if predicate == false
          predicate = true
        else if predicate == true
          predicate = false
          @sourceView.addShowBlock scmBlockLine, line.lineNumber - 1
      if predicate
        @sourceView.addShowBlock scmBlockLine, _.size @source.get 'source'
      @sourceView.render()