X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/23825c0b5ecf436b29a36a1c27efe1120485827e..9c0ea426167e01ea69ff022a811803aa95a302d4:/apps/workbench/app/helpers/application_helper.rb diff --git a/apps/workbench/app/helpers/application_helper.rb b/apps/workbench/app/helpers/application_helper.rb index 4112802935..c4a801d68b 100644 --- a/apps/workbench/app/helpers/application_helper.rb +++ b/apps/workbench/app/helpers/application_helper.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + module ApplicationHelper def current_user controller.current_user @@ -12,7 +16,8 @@ module ApplicationHelper end def render_markup(markup) - raw RedCloth.new(markup.to_s).to_html(:refs_arvados, :textile) if markup + allowed_tags = Rails::Html::Sanitizer.white_list_sanitizer.allowed_tags + %w(table tbody th tr td col colgroup caption thead tfoot) + sanitize(raw(RedCloth.new(markup.to_s).to_html(:refs_arvados, :textile)), tags: allowed_tags) if markup end def human_readable_bytes_html(n) @@ -39,13 +44,6 @@ module ApplicationHelper end return h(n) - #raw = n.to_s - #cooked = '' - #while raw.length > 3 - # cooked = ',' + raw[-3..-1] + cooked - # raw = raw[0..-4] - #end - #cooked = raw + cooked end def resource_class_for_uuid(attrvalue, opts={}) @@ -422,18 +420,23 @@ module ApplicationHelper lt end - def get_cwl_inputs(workflow) - if workflow[:inputs] - return workflow[:inputs] + def get_cwl_main(workflow) + if workflow[:"$graph"].nil? + return workflow else workflow[:"$graph"].each do |tool| if tool[:id] == "#main" - return tool[:inputs] + return tool end end end end + def get_cwl_inputs(workflow) + get_cwl_main(workflow)[:inputs] + end + + def cwl_shortname(id) if id[0] == "#" id = id[1..-1] @@ -584,30 +587,6 @@ module ApplicationHelper end end - # yields collection id (pdh or uuid), and full file_path - def cwl_input_collections(path, &b) - case path - when ArvadosBase - path.class.columns.each do |c| - cwl_input_collections(path[c.name.to_sym], &b) - end - when Hash - path.each do |k, v| - cwl_input_collections(v, &b) - end - when Array - path.each do |v| - cwl_input_collections(v, &b) - end - when String - if m = /[a-f0-9]{32}\+\d+/.match(path) - yield m[0], path.split('keep:')[-1] - elsif m = /[0-9a-z]{5}-4zz18-[0-9a-z]{15}/.match(path) - yield m[0], path.split('keep:')[-1] - end - end - end - def render_arvados_object_list_start(list, button_text, button_href, params={}, *rest, &block) show_max = params.delete(:show_max) || 3 @@ -694,6 +673,13 @@ module ApplicationHelper render_runtime duration, use_words, round_to_min end + # Keep locators are expected to be of the form \"...\" + JSON_KEEP_LOCATOR_REGEXP = /([0-9a-f]{32}\+\d+[^'"]*?)(?=['"]|\z|$)/ + def keep_locator_in_json str + # Return a list of all matches + str.scan(JSON_KEEP_LOCATOR_REGEXP).flatten + end + private def is_textile?( object, attr ) is_textile = object.textile_attributes.andand.include?(attr)