class EditableTableBuilder
@render_tbody: (obj) ->
EditableTableBuilder.obj = obj
EditableTableBuilder.html = ""
EditableTableBuilder.make_table()
return EditableTableBuilder.html
@update_rows: (obj) ->
EditableTableBuilder.obj = obj
EditableTableBuilder.invalidate_sumarizatios(obj)
row_count = 0
for row in EditableTableBuilder.obj.data
do (row) ->
EditableTableBuilder.html = ""
row_count += 1
# load and render new row
EditableTableBuilder.add_row_checkboxes(row, row_count)
EditableTableBuilder.add_row_functions(row, row_count)
EditableTableBuilder.add_row_columns(row, row_count)
row_color = ""
if EditableTableBuilder.obj.row_colors?
if EditableTableBuilder.obj.row_colors[row.row_id]?
row_color = EditableTableBuilder.obj.row_colors[row.row_id]["color"]
row_background_color = EditableTableBuilder.obj.row_colors[row.row_id]["background_color"]
# update row
$('.centerContainer tr[data-row-id="' + row.row_id + '"]').html(EditableTableBuilder.html).css({"background-color" : row_background_color, "color" : row_color })
EditableTableAligner.align_after_rows_update(obj)
#############################################################################33
##############################private #######################################333
##############################################################################33
@make_table: ->
CheckboxPool.checkboxes_initialize()
row_count = 0
for row in EditableTableBuilder.obj.data
do (row) ->
row_count += 1
EditableTableBuilder.html += '
'
# todo make possible to insertt function on the first or last column
EditableTableBuilder.add_row_checkboxes(row, row_count)
EditableTableBuilder.add_row_functions(row, row_count)
EditableTableBuilder.add_row_columns(row, row_count)
EditableTableBuilder.html += '
'
CheckboxPool.checkboxes_finalize()
EditableTableBuilder.add_summary_row()
@add_summary_row: ->
functions_present = EditableTableBuilder.obj.row? && EditableTableBuilder.obj.row.functions?
# code for sumarizes of the page (paginated)
summarize_page_present = false
summarize_page = ""
summarize_page += '
'
# todo make sure functions collumn got skipped when placement is different, eg. on the end
if EditableTableBuilder.obj.static_columns_left_side?
summarize_page += '
Celkem na stránce:
' if EditableTableBuilder.obj.checkboxes?
summarize_page += '
Celkem na stránce:
' if functions_present && !EditableTableBuilder.obj.checkboxes?
else
summarize_page += '
Celkem na stránce:
' if EditableTableBuilder.obj.checkboxes?
summarize_page += '
Celkem na stránce:
' if functions_present && !EditableTableBuilder.obj.checkboxes?
#headcol" if ((EditableTableBuilder.obj.static_columns_left_side).indexOf(col.name) != -1)
col_count = 0
for col in EditableTableBuilder.obj.columns
do (col) ->
col_count += 1
# the sumarize label has 2 colspan, so it has to be without 1 first column if there is no function column
unless col_count == 1 && !functions_present
summarize_page += '
'
summarize_page += if col.summarize_page_label? then col.summarize_page_label else ''
summarize_page += ''
# todo ladas toto je treba uzavrit do formatovani jedne bunky
if col.summarize_page_value?
if (is_hash(col.summarize_page_value ))
if col.summarize_page_value.name?
summarize_page += col.summarize_page_value.name
else
summarize_page += 0
else
summarize_page += col.summarize_page_value
else
summarize_page += 0
summarize_page += ''
summarize_page += '
'
summarize_page += '
'
summarize_page += '
'
EditableTableBuilder.html += summarize_page if summarize_page_present
# code for sumarizes of the all filtered data (paginated is not used)
summarize_all_present = false
summarize_all = ""
summarize_all += '
'
if EditableTableBuilder.obj.static_columns_left_side?
summarize_all += '
Celkem:
' if EditableTableBuilder.obj.checkboxes?
#it has colspan 2 so there is no function column
summarize_all += '
Celkem:
' if functions_present && !EditableTableBuilder.obj.checkboxes?
else
summarize_all += '
Celkem:
' if EditableTableBuilder.obj.checkboxes?
#it has colspan 2 so there is no function column
summarize_all += '
Celkem:
' if functions_present && !EditableTableBuilder.obj.checkboxes?
col_count = 0
for col in EditableTableBuilder.obj.columns
do (col) ->
col_count += 1
# the sumarize label has 2 colspan, so it has to without 1 first column if there is no function column
unless col_count == 1 && !functions_present
summarize_all += '
'
summarize_all += if col.summarize_all_label? then col.summarize_all_label else ''
summarize_all += ''
# todo ladas toto je treba uzavrit do formatovani jedne bunky
if col.summarize_all_value?
if (is_hash(col.summarize_all_value ))
if col.summarize_all_value.name?
summarize_all += col.summarize_all_value.name
else
summarize_all += 0
else
summarize_all += col.summarize_all_value
else
summarize_all += 0
summarize_all += ''
summarize_all += '
'
summarize_all += '
'
summarize_all += '
'
EditableTableBuilder.html += summarize_all if summarize_all_present
@add_row_checkboxes: (row, row_count) ->
if EditableTableBuilder.obj.checkboxes?
el_class = "chbox"
el_class += static_left_column_class = " headcol" if EditableTableBuilder.obj.static_columns_left_side?
if row_count == 1
EditableTableBuilder.html += '
'
@add_row_functions: (row, row_count) ->
if EditableTableBuilder.obj.row? && EditableTableBuilder.obj.row.functions?
static_left_column_class = ""
static_left_column_class = "headcol" if EditableTableBuilder.obj.static_columns_left_side?
if row_count == 1
EditableTableBuilder.html += '
'
else
EditableTableBuilder.html += '
'
# todo editacni tabulka si bude mit fixni vysku radku
EditableTableBuilder.html += '
' if true
#col.non_breakable? && col.non_breakable
for function_name, settings of EditableTableBuilder.obj.row.functions
EditableTableBuilder.make_row_function_button(settings, row)
EditableTableBuilder.html += '
'
EditableTableBuilder.html += '
'
@add_row_columns: (row, row_count) ->
for col in EditableTableBuilder.obj.columns
do (col) ->
cell_name = ""
cell_name += col.table if col.table?
cell_name += '___' + col.name if col.name?
EditableTableBuilder.html += '
'
# todo editacni tabulka si bude mit fixni vysku radku
EditableTableBuilder.html += '
' if true
#col.non_breakable? && col.non_breakable
active_cell
if EditableTableBuilder.valid_table(col.table)
active_cell = row[col.table + '_' + col.name]
else
active_cell = row[col.name]
if (is_hash(active_cell))
# hash span or href (styled as button)
button_settings = active_cell
button_settings = {} if !button_settings?
EditableTableBuilder.make_column_from_hash(button_settings, row, col)
else if (is_array(active_cell))
# array of hashes (probably buttons)
one_cell_buttons = active_cell
for one_cell_button in one_cell_buttons
do (one_cell_button) ->
one_cell_button = {} if !one_cell_buttons?
EditableTableBuilder.make_column_from_hash(one_cell_button, row, col)
else if (is_string(active_cell))
# its just string
text = ""
text = row[col.table + '_' + col.name] if row[col.table + '_' + col.name]?
text = row[col.name] if row[col.name]? && text? && text.length <= 0
sliced_text = text
if (col.max_text_length)
max = col.max_text_length - 3
sliced_text = sliced_text.slice(0, col.max_text_length) + "..." if ( max > 0 && sliced_text.length > max)
else
# i will be always slicing
max = 30
sliced_text = sliced_text.slice(0, max + 3) + "..." if ( max > 0 && sliced_text.length > max)
EditableTableBuilder.html += '' + sliced_text + ''
else
# its something else eg. number cant be sliced, or its probably aliens Kveigars
text = ""
text = row[col.table + '_' + col.name] if row[col.table + '_' + col.name]?
text = row[col.name] if row[col.name]? && text? && text.length <= 0
# console.log[text]
EditableTableBuilder.html += '' + text + ''
EditableTableBuilder.html += '
' if col.non_breakable? && col.non_breakable
EditableTableBuilder.html += '