From 4b43c159536ce27b93d05a52e6e71c677a9ba375 Mon Sep 17 00:00:00 2001 From: Fabio Teixeira Date: Mon, 15 Dec 2014 17:06:32 -0200 Subject: [PATCH] Buid dynamic table into software database --- lib/database_helper.rb | 100 +++++++++++++++++++++++++++------------------------------------------------------------------------- lib/dynamic_table_helper.rb | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 73 deletions(-) create mode 100644 lib/dynamic_table_helper.rb diff --git a/lib/database_helper.rb b/lib/database_helper.rb index 48e09f8..2285245 100644 --- a/lib/database_helper.rb +++ b/lib/database_helper.rb @@ -64,84 +64,38 @@ module DatabaseHelper end def self.database_html_structure(database_data) - database_name = if database_data[:database_description_id].blank? - "" + database_name, database_id = if database_data[:database_description_id].blank? + ["", ""] else - DatabaseDescription.find( + [DatabaseDescription.find( database_data[:database_description_id], :select=>"name" - ).name + ).name, database_data[:database_description_id]] end - Proc::new do - content_tag( - 'table', - content_tag( - 'tr', - content_tag('td', label_tag(_("database Name: ")))+ - content_tag( - 'td', - text_field_tag( - "database_autocomplete", - database_name, - :class=>"database_autocomplete", - :placeholder=>_("Autocomplete field, type something") - ) + - content_tag( - 'div', - _("Pick an item on the list"), - :class=>"autocomplete_validation_message hide-field" - ) - )+ - content_tag( - 'td', - hidden_field_tag( - "database[][database_description_id]", - database_data[:database_description_id], - :class => "database_description_id", - :data => {:label => database_name} - ) - ) - )+ - - content_tag( - 'tr', - content_tag('td', label_tag(_("Version")))+ - content_tag( - 'td', - text_field_tag( - "database[][version]", - database_data[:version], - :maxlength=>"20" - ) - )+ - content_tag('td') - )+ - - content_tag( - 'tr', - content_tag('td', label_tag(_("Operating System")))+ - content_tag( - 'td', - text_field_tag( - "database[][operating_system]", - database_data[:operating_system], - :maxlength=>"20" - ) - )+ - content_tag( - 'td', - button_without_text( - :delete, - _('Delete'), - "#" , - :class=>"delete-dynamic-table" - ), - :align => 'right' - ) - ), :class => 'dynamic-table database-table' - ) - end + data = { + model_name: "database", + field_name: "database_description_id", + name: { + label: _("Name"), + value: database_name, + hidden: true, + autocomplete: true, + id: database_id + }, + version: { + label: _("Version"), + value: database_data[:version], + hidden: true + }, + operating_system: { + label: _("Operating system"), + value: database_data[:operating_system], + delete: true + } + } + + DynamicTableHelper.table_html_structure(data) end def self.add_dynamic_table diff --git a/lib/dynamic_table_helper.rb b/lib/dynamic_table_helper.rb new file mode 100644 index 0000000..49225b4 --- /dev/null +++ b/lib/dynamic_table_helper.rb @@ -0,0 +1,73 @@ +module DynamicTableHelper + +extend( + ActionView::Helpers::TagHelper, + ActionView::Helpers::FormTagHelper, + ActionView::Helpers::UrlHelper, + ApplicationHelper + ) + + def self.table_html_structure data + Proc::new do + content_tag :table , DynamicTableHelper.generate_table_lines(data), :class => "dynamic-table" + end + end + + def self.generate_table_lines data + @model = data[:model_name].to_css_class + @field_name = data[:field_name] + @value = data[:name][:value] + @hidden_id = data[:name][:id] + + [ + self.table_line(data[:name]), + self.table_line(data[:version]), + self.table_line(data[:operating_system]||data[:license]) + ].join() + end + + def self.table_line row_data + content_tag :tr, [ + self.label_collumn(row_data[:label]), + self.value_collumn(row_data[:value], row_data[:autocomplete]), + self.hidden_collumn(row_data[:delete], row_data[:hidden]) + ].join() + end + + def self.label_collumn label + content_tag :td, label_tag(label) + end + + def self.value_collumn value, autocomplete=false + html_options = + if autocomplete + { + :class => "#{@model}_autocomplete", + :placeholder => _("Autocomplete field, type something") + } + else + {} + end + + content_tag :td, text_field_tag("#{@model}", value, html_options) + end + + def self.hidden_collumn delete=false, hidden_data=false + value = + if delete + button_without_text( + :delete, _('Delete'), "#" , :class=>"delete-dynamic-table" + ) + elsif hidden_data + hidden_field_tag( + "#{@model}[][#{@field_name}]", + @hidden_id, + :class => "#{@field_name}", + :data => {:label => @value } #check how to get the name of an object of the current model + ) + else + nil + end + content_tag(:td, value, :align => 'right') + end +end \ No newline at end of file -- libgit2 0.21.2