canvas-lms/app/helpers/context_external_tools_help...

75 lines
2.3 KiB
Ruby

# frozen_string_literal: true
#
# Copyright (C) 2015 - present Instructure, Inc.
#
# This file is part of Canvas.
#
# Canvas 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, version 3 of the License.
#
# Canvas 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/>.
module ContextExternalToolsHelper
def external_tools_menu_items(tools, options = {})
markup = tools.map do |tool|
external_tool_menu_item_tag(tool, options)
end
raw(markup.join)
end
def external_tool_menu_item_tag(tool, options = {})
defaults = {
show_icon: true,
in_list: false,
url_params: {}
}
options = defaults.merge(options)
url_params = options.delete(:url_params)
if tool.respond_to?(:extension_setting)
tool = external_tool_display_hash(tool, options[:settings_key], url_params)
elsif !url_params.empty?
# url_params were supplied, but we aren't hitting the url helper
# we need to make sure the tool url includes the url_params
parsed = URI.parse(tool[:base_url])
parsed.query = Rack::Utils.parse_nested_query(parsed.query).merge(url_params).to_query
tool[:base_url] = parsed.to_s
end
link_attrs = {
:href => tool[:base_url],
"data-tool-id" => tool[:id],
"data-tool-launch-type" => options[:settings_key]
}
link_attrs[:class] = options[:link_class] if options[:link_class]
if options[:show_icon]
rendered_icon = render(partial: "external_tools/helpers/icon", locals: { tool: })
rendered_icon = sanitize(rendered_icon.squish) if options[:remove_space_between_icon_and_text]
end
link = content_tag(:a, link_attrs) do
concat(rendered_icon) if rendered_icon
concat(tool[:title])
end
if options[:in_list]
li_attrs = {
role: "presentation",
class: options[:settings_key]
}
link = content_tag(:li, li_attrs) { link }
end
raw(link)
end
end