discourse/lib/upload_markdown.rb
Martin Brennan 4b4f2330da
DEV: Expand UploadMarkdown generation capabilities (#15930)
The chat quoting mechanism will need to be able to generate
markdown for all kinds of uploads. The UploadMarkdown class
was missing generation for video and audio uploads. This
commit adds that in, and also expands the server-side regex
recognition of FileHelper types to match those in uploads.js,
and adds a spec for UploadMarkdown
2022-02-14 15:48:27 +10:00

40 lines
1.1 KiB
Ruby

# frozen_string_literal: true
class UploadMarkdown
def initialize(upload)
@upload = upload
end
def to_markdown(display_name: nil)
if FileHelper.is_supported_image?(@upload.original_filename)
image_markdown
elsif FileHelper.is_supported_playable_media?(@upload.original_filename)
playable_media_markdown
else
attachment_markdown(display_name: display_name)
end
end
def image_markdown
"![#{@upload.original_filename}|#{@upload.width}x#{@upload.height}](#{@upload.short_url})"
end
def attachment_markdown(display_name: nil, with_filesize: true)
human_filesize = with_filesize ? " (#{@upload.human_filesize})" : ""
display_name ||= @upload.original_filename
"[#{display_name}|attachment](#{@upload.short_url})#{human_filesize}"
end
def playable_media_markdown
type = \
if FileHelper.is_supported_audio?(@upload.original_filename)
"audio"
elsif FileHelper.is_supported_video?(@upload.original_filename)
"video"
end
return attachment_markdown if !type
"![#{@upload.original_filename}|#{type}](#{@upload.short_url})"
end
end