X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c9f04f87062eec4097dc74dcc79b364fb905851c..77cfd1ee241b4a2d408bd3ec5ebc69f34c7496f5:/apps/workbench/app/helpers/collections_helper.rb diff --git a/apps/workbench/app/helpers/collections_helper.rb b/apps/workbench/app/helpers/collections_helper.rb index 1f867a60b6..f5f54851e7 100644 --- a/apps/workbench/app/helpers/collections_helper.rb +++ b/apps/workbench/app/helpers/collections_helper.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + module CollectionsHelper def d3ify_links(links) links.collect do |x| @@ -5,14 +9,47 @@ module CollectionsHelper end end - def self.match(uuid) - /^([a-f0-9]{32})(\+[0-9]+)?(\+.*?)?(\/.*)?$/.match(uuid.to_s) + ## + # Regex match for collection portable data hash, returns a regex match object with the + # hash in group 1, (optional) size in group 2, (optional) subsequent uuid + # fields in group 3, and (optional) file path within the collection as group + # 4 + # returns nil for no match. + # + # +pdh+ the portable data hash string to match + # + def self.match(pdh) + /^([a-f0-9]{32})(\+\d+)(\+[^+]+)*?(\/.*)?$/.match(pdh.to_s) + end + + ## + # Regex match for collection UUIDs, returns a regex match object with the + # uuid in group 1, empty groups 2 and 3 (for consistency with the match + # method above), and (optional) file path within the collection as group + # 4. + # returns nil for no match. + # + def self.match_uuid_with_optional_filepath(uuid_with_optional_file) + /^([0-9a-z]{5}-4zz18-[0-9a-z]{15})()()(\/.*)?$/.match(uuid_with_optional_file.to_s) end + ## + # Regex match for common image file extensions, returns a regex match object + # with the matched extension in group 1; or nil for no match. + # + # +file+ the file string to match + # def self.is_image file /\.(jpg|jpeg|gif|png|svg)$/i.match(file) end + ## + # Generates a relative file path than can be appended to the URL of a + # collection to get a file download link without adding a spurious ./ at the + # beginning for files in the default stream. + # + # +file+ an entry in the Collection.files list in the form [stream, name, size] + # def self.file_path file f0 = file[0] f0 = '' if f0 == '.' @@ -20,4 +57,25 @@ module CollectionsHelper f0 += '/' if not f0.empty? file_path = "#{f0}#{file[1]}" end + + ## + # Check if collection preview is allowed for the given filename with extension + # + def preview_allowed_for file_name + file_type = MIME::Types.type_for(file_name).first + if file_type.nil? + if file_name.downcase.end_with?('.cwl') # unknown mime type, but we support preview + true + else + false + end + elsif (file_type.raw_media_type == "text") || (file_type.raw_media_type == "image") + true + elsif (file_type.raw_media_type == "application") && + (Rails.configuration.application_mimetypes_with_view_icon.include? (file_type.sub_type)) + true + else + false + end + end end