# encoding: utf-8
#--
# Copyright (C) 2012 Gitorious AS
#
# 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 .
#++
require "htmlentities"
module Dolt
module View
module Blob
def entityfy(content)
@coder ||= HTMLEntities.new
@coder.encode(content)
end
def format_blob(path, content)
multiline(entityfy(content))
end
def blob_url(repository, ref, path)
repo_url(repository, "/blob/#{ref}:#{path}")
end
def blame_url(repository, ref, path)
repo_url(repository, "/blame/#{ref}:#{path}")
end
def history_url(repository, ref, path)
repo_url(repository, "/history/#{ref}:#{path}")
end
def raw_url(repository, ref, path)
repo_url(repository, "/raw/#{ref}:#{path}")
end
def format_whitespace(text)
text
end
def multiline(blob, options = {})
class_names = options[:class_names] || []
class_names << "prettyprint" << "linenums"
num = 0
lines = blob.split("\n").inject("") do |html, line|
num += 1
# Empty elements causes annoying rendering artefacts
# Forcing one space on each line affects copy-paste negatively
# TODO: Don't force one space, find CSS fix
line = format_whitespace(line).sub(/^$/, " ")
"#{html}
#{line}"
end
"" +
"#{lines}
"
end
end
end
end