2018-05-07 16:47:29 -07:00
# frozen_string_literal: true
2017-03-06 23:54:29 +05:30
module FormatHelper
##
# Includes functions related to formatting (like adding classes, colors)
##
2018-06-01 12:01:58 -07:00
def status_icon ( object )
case object . state
2017-07-20 14:20:46 +03:00
when 'new' , 'to_reject' , 'to_accept'
'fa-eye'
2018-06-01 12:01:58 -07:00
when 'unconfirmed' , 'accepted'
2017-07-20 14:20:46 +03:00
'fa-check text-muted'
when 'confirmed'
'fa-check text-success'
when 'rejected' , 'withdrawn' , 'canceled'
'fa-ban'
end
end
2017-03-06 23:54:29 +05:30
def event_progress_color ( progress )
progress = progress . to_i
if progress == 100
'progress-bar-success'
elsif progress > = 85
'progress-bar-info'
elsif progress > = 71
'progress-bar-warning'
else
'progress-bar-danger'
end
end
2018-09-26 12:23:59 -07:00
def variant_from_delta ( delta , reverse : false )
if delta . to_i . positive?
reverse ? 'warning' : 'success'
elsif delta . to_i . negative?
reverse ? 'success' : 'warning'
else
'info'
end
end
2017-03-06 23:54:29 +05:30
def target_progress_color ( progress )
progress = progress . to_i
result =
case
when progress > = 90 then 'green'
when progress < 90 && progress > = 80 then 'orange'
else 'red'
end
result
end
def days_left_color ( days_left )
days_left = days_left . to_i
if days_left > 30
result = 'green'
elsif days_left < 30 && days_left > 10
result = 'orange'
else
result = 'red'
end
result
end
def bootstrap_class_for ( flash_type )
case flash_type
when 'success'
'alert-success'
when 'error'
'alert-danger'
when 'alert'
'alert-warning'
when 'notice'
'alert-info'
else
'alert-warning'
end
end
def label_for ( event_state )
result = ''
case event_state
when 'new'
result = 'label label-primary'
when 'withdrawn'
result = 'label label-danger'
when 'unconfirmed'
result = 'label label-success'
when 'confirmed'
result = 'label label-success'
when 'rejected'
result = 'label label-warning'
when 'canceled'
result = 'label label-danger'
end
result
end
def icon_for_todo ( bool )
if bool
2022-05-18 06:31:12 +02:00
'fa-solid fa-check'
2017-03-06 23:54:29 +05:30
else
2022-05-18 06:31:12 +02:00
'fa-solid fa-xmark'
2017-03-06 23:54:29 +05:30
end
end
def class_for_todo ( bool )
if bool
2017-12-04 13:05:23 +05:30
'todolist-ok'
2017-03-06 23:54:29 +05:30
else
2017-12-04 13:05:23 +05:30
'todolist-missing'
2017-03-06 23:54:29 +05:30
end
end
# Returns black or white deppending on what of them contrast more with the
# given color. Useful to print text in a coloured background.
# hexcolor is a hex color of 7 characters, being the first one '#'.
# Reference: https://24ways.org/2010/calculating-color-contrast
def contrast_color ( hexcolor )
r = hexcolor [ 1 .. 2 ] . to_i ( 16 )
g = hexcolor [ 3 .. 4 ] . to_i ( 16 )
b = hexcolor [ 5 .. 6 ] . to_i ( 16 )
yiq = ( ( r * 299 ) + ( g * 587 ) + ( b * 114 ) ) / 1000
( yiq > = 128 ) ? 'black' : 'white'
end
def td_height ( rooms )
td_height = 500 / rooms . length
# we want all least 3 lines in events and td padding = 3px, speaker picture height >= 25px
# and line-height = 17px => (17 * 3) + 6 + 25 = 82
td_height < 82 ? 82 : td_height
end
def room_height ( rooms )
room_lines ( rooms ) * 17
end
def room_lines ( rooms )
# line-height = 17px, td padding = 3px
( td_height ( rooms ) - 6 ) / 17
end
def event_height ( rooms )
event_lines ( rooms ) * 17
end
def event_lines ( rooms )
# line-height = 17px, td padding = 3px, speaker picture height >= 25px
( td_height ( rooms ) - 31 ) / 17
end
def speaker_height ( rooms )
# td padding = 3px
speaker_height = td_height ( rooms ) - 6 - event_height ( rooms )
# The speaker picture is a circle and the width must be <= 37 to avoid making the cell widther
speaker_height > = 37 ? 37 : speaker_height
end
def speaker_width ( rooms )
# speaker picture padding: 4px 2px; and we want the picture to be a circle
speaker_height ( rooms ) - 4
end
def carousel_item_class ( number , carousel_number , num_cols , col )
item_class = 'item'
item_class += ' first' if number == 0
item_class += ' last' if number == ( carousel_number - 1 )
if ( col && ( ( col / num_cols ) == number ) ) || ( ! col && number == 0 )
item_class += ' active'
end
item_class
end
def selected_scheduled? ( schedule )
( schedule == @selected_schedule ) ? 'Yes' : 'No'
end
2017-06-16 02:51:01 +03:00
def markdown ( text , escape_html = true )
2017-03-06 23:54:29 +05:30
return '' if text . nil?
2022-03-17 16:47:47 -07:00
markdown_options = {
2021-07-05 21:56:25 +02:00
autolink : true ,
space_after_headers : true ,
no_intra_emphasis : true ,
fenced_code_blocks : true ,
2022-03-17 16:47:47 -07:00
disable_indented_code_blocks : true
2017-03-06 23:54:29 +05:30
}
2022-03-17 16:47:47 -07:00
render_options = {
escape_html : escape_html ,
safe_links_only : true
}
markdown = Redcarpet :: Markdown . new ( Redcarpet :: Render :: HTML . new ( render_options ) , markdown_options )
2023-03-03 16:51:01 -08:00
sanitize ( sanitize ( markdown . render ( text ) ) , scrubber : Loofah :: Scrubbers :: NoFollow . new )
2017-03-06 23:54:29 +05:30
end
def markdown_hint ( text = '' )
2017-06-16 02:51:01 +03:00
markdown ( " #{ text } Please look at #{ link_to '**Markdown Syntax**' , 'https://daringfireball.net/projects/markdown/syntax' , target : '_blank' } to format your text " , false )
2017-03-06 23:54:29 +05:30
end
2017-03-10 02:18:26 +05:30
def quantity_left_of ( resource )
return '-/-' if resource . quantity . blank?
2018-11-13 18:01:49 -08:00
2017-03-10 02:18:26 +05:30
" #{ resource . quantity - resource . used } / #{ resource . quantity } "
2017-03-06 23:54:29 +05:30
end
end