### codetube
    Copyright (C) 2011 payload payload@lavabit.com
    Copyright (C) 2011 dodo dodo.the.last@gmail.com

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>
###

unless @static
    coffeescript ->
        do require './diff'

{ owner, id, source } = @project

div class: 'diff', ->
    table class: 'diff', ->
        tr class: 'headline', ->
            th ->
                if @static
                    '&nbsp;'
                else
                    partial 'inc/loadingbar'
            th class: 'diff', ->
                a href: "/#{owner.id}/#{id}/commit/#{@diff.sha}", (@diff.sha)
        tr class: 'spaceline'

    div class: 'files', ->
        text @lift 'diff', compile ->
            { owner, id, sha } = @project
            fahref = (path) -> "/#{owner}/#{id}/blob/#{sha}/#{path}"
            div class:'small-headline', ->
                div class:'filename', ->
                    a href:fahref(@file.src), (@file.src)
                unless @file.src is @file.dst
                    span class:'arrow', " → "
                    span class:'filename', ->
                        a href:fahref(@file.dst), (@file.dst)
            for chunk in @file.chunks
                div class:'head', (chunk.head.line)
                pre -> code class: 'code', ->
                    for line in chunk.lines
                        switch line.type
                            when ' '
                                div "&nbsp;#{line.line}"
                            when '-'
                                div class: 'del', ->
                                    text "-"
                                    if typeof line.line is 'string'
                                        text line.line
                                    else
                                        for diff in line.line
                                            unless diff.added or diff.removed
                                                text diff.value
                                            else if diff.removed
                                                span class: 'specific', (diff.value)
                            when '+'
                                div class: 'add', ->
                                    text "+"
                                    if typeof line.line is 'string'
                                        text line.line
                                    else
                                        for diff in line.line
                                            unless diff.added or diff.removed
                                                text diff.value
                                            else if diff.added
                                                span class: 'specific', (diff.value)
