mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-14 13:16:28 +08:00
99 lines
3.4 KiB
Ruby
99 lines
3.4 KiB
Ruby
module ReportsHelper
|
|
|
|
def render_new_element(hide)
|
|
render partial: "reports/elements/new_element.html.erb",
|
|
locals: { hide: hide }
|
|
end
|
|
|
|
def render_report_element(element, provided_locals = nil)
|
|
children_html = "".html_safe
|
|
|
|
# First, recursively render element's children
|
|
if element.comments? or element.project_header?
|
|
# Render no children
|
|
elsif element.result?
|
|
# Special handling for result comments
|
|
if element.has_children?
|
|
children_html.safe_concat render_new_element(true)
|
|
element.children.each do |child|
|
|
children_html.safe_concat render_report_element(child, provided_locals)
|
|
end
|
|
else
|
|
children_html.safe_concat render_new_element(false)
|
|
end
|
|
else
|
|
if element.has_children?
|
|
element.children.each do |child|
|
|
children_html.safe_concat render_new_element(false)
|
|
children_html.safe_concat render_report_element(child, provided_locals)
|
|
end
|
|
end
|
|
children_html.safe_concat render_new_element(false)
|
|
end
|
|
|
|
view = "reports/elements/#{element.type_of}_element.html.erb"
|
|
|
|
locals = provided_locals.nil? ? {} : provided_locals.clone
|
|
locals[:children] = children_html
|
|
|
|
if element.project_header?
|
|
locals[:project] = element.element_reference
|
|
elsif element.experiment?
|
|
locals[:experiment] = element.element_reference
|
|
elsif element.my_module?
|
|
locals[:my_module] = element.element_reference
|
|
elsif element.step?
|
|
locals[:step] = element.element_reference
|
|
elsif element.result_asset?
|
|
locals[:result] = element.element_reference
|
|
elsif element.result_table?
|
|
locals[:result] = element.element_reference
|
|
elsif element.result_text?
|
|
locals[:result] = element.element_reference
|
|
elsif element.my_module_activity?
|
|
locals[:my_module] = element.element_reference
|
|
locals[:order] = element.sort_order
|
|
elsif element.my_module_samples?
|
|
locals[:my_module] = element.element_reference
|
|
locals[:order] = element.sort_order
|
|
elsif element.step_checklist?
|
|
locals[:checklist] = element.element_reference
|
|
elsif element.step_asset?
|
|
locals[:asset] = element.element_reference
|
|
elsif element.step_table?
|
|
locals[:table] = element.element_reference
|
|
elsif element.step_comments?
|
|
locals[:step] = element.element_reference
|
|
locals[:order] = element.sort_order
|
|
elsif element.result_comments?
|
|
locals[:result] = element.element_reference
|
|
locals[:order] = element.sort_order
|
|
elsif element.project_activity?
|
|
# TODO
|
|
elsif element.project_samples?
|
|
# TODO
|
|
end
|
|
|
|
return (render partial: view, locals: locals).html_safe
|
|
end
|
|
|
|
# "Hack" to omit file preview URL because of WKHTML issues
|
|
def report_image_asset_url(asset)
|
|
prefix = (ENV["PAPERCLIP_STORAGE"].present? && ENV["MAIL_SERVER_URL"].present? && ENV["PAPERCLIP_STORAGE"] == "filesystem") ? ENV["MAIL_SERVER_URL"] : ""
|
|
prefix = (!prefix.empty? && !prefix.include?("http://") && !prefix.include?("https://")) ? "http://#{prefix}" : prefix
|
|
url = prefix + asset.url(:medium, timeout: 86_400)
|
|
image_tag(url)
|
|
end
|
|
|
|
# "Hack" to load Glyphicons css directly from the CDN site so they work in report
|
|
def bootstrap_cdn_link_tag
|
|
specs = Gem.loaded_specs["bootstrap-sass"]
|
|
specs.present? ? stylesheet_link_tag("http://netdna.bootstrapcdn.com/bootstrap/#{specs.version.version}/css/bootstrap.min.css", media: "all") : ""
|
|
end
|
|
|
|
def font_awesome_cdn_link_tag
|
|
stylesheet_link_tag(
|
|
'https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css'
|
|
)
|
|
end
|
|
end
|