Class: DrgcmsFormFields::TextAutocomplete
- Inherits:
-
DrgcmsField
- Object
- DrgcmsField
- DrgcmsFormFields::TextAutocomplete
- Defined in:
- app/models/drgcms_form_fields/text_autocomplete.rb
Overview
Implementation of text_autocomplete DRG CMS form field.
Form options:
-
name:field name (required) -
type:text_autocomplete (required) -
tableCollection (table) name. When defined search must contain field name -
with_newWill add an icon for shortcut to add new document to collection -
not_idField value represent value not an id. Field will save entered value when not selected wit autocomplete. -
search:Search may consist of three parameters from which are separated either by dot (.)-
search_field_name; when table option is defined search must define field name which will be used for search query
-
collection_name.search_field_name; Same as above except that table options must be ommited.
-
collection_name.search_field_name.method_name; When searching is more complex custom search
method may be defined in CollectionName model which will provide result set for search.
-
Form example:
10:
name: user_id
type: text_autocomplete
search: dc_user.name
html:
size: 30
Instance Attribute Summary
Attributes inherited from DrgcmsField
Class Method Summary collapse
-
.get_data(params, name) ⇒ Object
Return value.
Instance Method Summary collapse
-
#render ⇒ Object
Render text_autocomplete field html code.
Methods inherited from DrgcmsField
#css_code, #hash_to_options, #html, #initialize, #record_text_for, #ro_standard, #set_css_code, #set_initial_value, #set_style, #t
Constructor Details
This class inherits a constructor from DrgcmsFormFields::DrgcmsField
Class Method Details
.get_data(params, name) ⇒ Object
Return value. Return nil if input field is empty
150 151 152 |
# File 'app/models/drgcms_form_fields/text_autocomplete.rb', line 150 def self.get_data(params, name) params['record']["_#{name}"].blank? ? nil : params['record'][name] end |
Instance Method Details
#render ⇒ Object
Render text_autocomplete field html code
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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'app/models/drgcms_form_fields/text_autocomplete.rb', line 53 def render # Return descriptive text and put it into input field # search field name if @yaml['search'].class == Hash table = @yaml['search']['table'] ret_name = @yaml['search']['field'] method = @yaml['search']['method'] elsif @yaml['search'].match(/\./) table, ret_name, method = @yaml['search'].split('.') else ret_name = @yaml['search'] end # determine table name if @yaml['table'] table = if @yaml['table'].class == String @yaml['table'] # eval(how_to_get_my_table_name) elsif @yaml['table']['eval'] eval @yaml['table']['eval'] else Rails.logger.error "Field #{@yaml['name']}: Invalid table parameter!" nil end end return 'Table or field keyword not defined!' unless (table and ret_name) # TODO check if table exists t = table.classify.constantize # find record and return value of field value_send_as = 'p_' + @yaml['name'] value = if @parent.params[value_send_as] @parent.params[value_send_as] elsif @record and @record[@yaml['name']] @record[@yaml['name']] end # Found value to be written in field. If field is not found write out value. if value record = t.find(value) unless @yaml['not_id'] # don't if it's is not an id value_displayed = record ? record.send(ret_name) : value end # return if readonly #return ro_standard(value_displayed) if @readonly # Add method back, so autocomplete will know that it must search for method inside class ret_name = "#{ret_name}.#{method}" if method @yaml['html'] ||= {} @yaml['html']['value'] = value_displayed @yaml['html']['placeholder'] ||= t('drgcms.search_placeholder') || nil # _name = '_' + @yaml['name'] record = record_text_for(@yaml['name']) @html << @parent.text_field(record, _name, @yaml['html']) if @yaml['with_new'] @html << ' ' + @parent.fa_icon('plus-square lg', class: 'in-edit-add', title: t('drgcms.new'), style: "vertical-align: top;", 'data-table' => @yaml['with_new'] ) end @html << @parent.hidden_field(record, @yaml['name'], value: value) # actual value will be in hidden field # JS stuff # allow unselected values on not_id: true option not_id_code = %Q[ if (ui.item == null) { $("##{record}_#{@yaml['name']}").val($("##{record}__#{@yaml['name']}").val() ); return; } ] if @yaml['not_id'] # @js << <<EOJS $(document).ready(function() { $("##{record}_#{_name}").autocomplete( { source: function(request, response) { $.ajax({ url: '/dc_common/autocomplete', type: "POST", dataType: "json", data: { input: request.term, table: "#{table}", search: "#{ret_name}" #{(',id: "'+@yaml['id'] + '"') if @yaml['id']} }, success: function(data) { response( $.map( data, function(key) { return key; })); } }); }, change: function (event, ui) { #{not_id_code} $("##{record}_#{@yaml['name']}").val(ui.item.id); }, minLength: 2 }); }); EOJS self end |