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 += ' 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 += ' 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 += '' 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 += '' # 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 += ' 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 += '' @make_href_button: (settings, row, col) -> sliced_text = settings['name'] if col? 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) it_is_link = false it_is_link = true if (settings.url || settings.symlink_controller || settings.symlink_action || settings.symlink_id || settings.symlink_outer_controller || settings.symlink_outer_id) if it_is_link stringified_settings = JSON.stringify(settings) stringified_settings = stringified_settings.replace(/"/g, '"') # this is crutial unless the double quotes will fuck up html non_ajax_url = build_get_url(settings) EditableTableBuilder.html += ' 0 # todo ladas asi prohodit i v table builder, pokud se zada js_code onclick, mel bz mit prioritu if settings.js_code? # a javascrip code can be passed, it will be put as onclick javascript of the button EditableTableBuilder.html += ' onclick="' + settings.js_code EditableTableBuilder.html += '"' else if it_is_link if (settings.confirm) EditableTableBuilder.html += ' onclick="if (confirm(\'' + settings.confirm + '\')){ load_page(' + stringified_settings + ',this); }; return false;"' else EditableTableBuilder.html += ' onclick="load_page(' + stringified_settings + ',this); return false;"' EditableTableBuilder.html += '>' + sliced_text if it_is_link EditableTableBuilder.html += '' else EditableTableBuilder.html += '' @valid_table: (table_name) -> if (table_name == "___sql_expression___") false else true @make_row_function_button: (button_settings, row, col) -> button_settings.symlink_id = row.row_id if row? # only for generic row functions, they are defined without the id EditableTableBuilder.make_href_button(button_settings, row, col) @make_column_from_hash: (button_settings, row, col) -> button_settings['origin'] = 'table' EditableTableBuilder.make_href_button(button_settings, row, col) @invalidate_sumarizatios: (obj) -> # if row gets updated, summarizations must be invalidated $("#" + obj.form_id).find('td.summarize span').each (index, element) => $(element).html('Obnovit') window.EditableTableBuilder = EditableTableBuilder