-
Notifications
You must be signed in to change notification settings - Fork 106
/
dashboard_helper.rb
82 lines (69 loc) · 2.33 KB
/
dashboard_helper.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# Helper for the dashboard (root) page(s).
module DashboardHelper
#FIXME: copied from awesim-dev-dashboard
def markdown(text)
RenderManifestMarkdown.renderer.render(text)
rescue
text
end
def logo_image_tag(url)
if url
uri = Addressable::URI.parse(url)
uri.query_values = (uri.query_values || {}).merge({timestamp: Time.now.to_i})
tag.img(src: uri, alt: "logo", height: @user_configuration.dashboard_logo_height, class: 'py-2 w-100')
else # default logo image
image_tag("OpenOnDemand_stack_RGB.svg", alt: "logo", height: "85", class: 'py-2 w-100')
end
end
def invalid_clusters
@invalid_clusters ||= OodCore::Clusters.new(OodAppkit.clusters.select { |c| not c.valid? })
end
def xdmod?
Configuration.xdmod_integration_enabled?
end
def pinned_apps?
@pinned_apps.present?
end
def motd?
@motd.present?
end
def dashboard_layout
#FIXME: should sanitize the landing_page_layout or cast somethings to Array in the upper layers
@user_configuration.dashboard_layout || default_dashboard_layout
end
def render_widget(widget)
begin
render partial: "widgets/#{widget}"
rescue SyntaxError, StandardError => e
render partial: 'shared/widget_error', locals: { error: e, widget: widget.to_s }
end
end
private
def default_dashboard_layout
if xdmod?
if pinned_apps? || motd?
left_column = { width: 8, widgets: ['pinned_apps', 'motd'] }
right_column = { width: 4, widgets: ['xdmod_widget_job_efficiency', 'xdmod_widget_jobs'] }
else
left_column = { width: 4, widgets: ['xdmod_widget_job_efficiency'] }
right_column = { width: 8, widgets: ['xdmod_widget_jobs'] }
end
elsif pinned_apps? && motd?
left_column = { width: 8, widgets: ['pinned_apps'] }
right_column = { width: 4, widgets: ['motd'] }
else
left_column = { width: 12, widgets: ['pinned_apps', 'motd'] }
right_column = nil
end
{ rows: [{ columns: [left_column, right_column].compact }] }
end
def render_motd_rss_item(item)
return '' unless item.description
content = if Configuration.motd_render_html?
item.description.html_safe
else
sanitize(item.description)
end
content_tag(:div, content, data: { 'motd-rss-item': true })
end
end