diff options
Diffstat (limited to 'install/ui/rule.js')
-rw-r--r-- | install/ui/rule.js | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/install/ui/rule.js b/install/ui/rule.js new file mode 100644 index 000000000..f625f8535 --- /dev/null +++ b/install/ui/rule.js @@ -0,0 +1,174 @@ +/*jsl:import ipa.js */ + +/* Authors: + * Endi Sukma Dewata <edewata@redhat.com> + * + * Copyright (C) 2010 Red Hat + * see file 'COPYING' for use and warranty information + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */ + +IPA.rule_details_section = function (spec){ + + spec = spec || {}; + + var that = IPA.details_section(spec); + + that.text = spec.text; + that.field_name = spec.field_name; + that.options = spec.options || []; + that.tables = spec.tables || []; + that.columns = spec.columns; + + that.create = function(container) { + + if (that.template) return; + + if (that.text) container.append(that.text); + + var param_info = IPA.get_param_info(that.entity_name, that.field_name); + + var span = $('<span/>', { + name: that.field_name, + title: param_info.doc + }).appendTo(container); + + if (that.options.length) { + for (var i=0; i<that.options.length; i++) { + var option = that.options[i]; + + $('<input/>', { + 'type': 'radio', + 'name': that.field_name, + 'value': option.value + }).appendTo(span); + + span.append(option.label); + } + + span.append(' '); + + $('<span/>', { + 'name': 'undo', + 'class': 'ui-state-highlight ui-corner-all', + 'style': 'display: none;', + 'html': 'undo' + }).appendTo(span); + + span.append('<br/>'); + } + + for (var j=0; j<that.tables.length; j++) { + var table = that.tables[j]; + + param_info = IPA.get_param_info(that.entity_name, table.field_name); + + var table_span = $('<span/>', { + name: table.field_name, + title: param_info ? param_info.doc : table.field_name + }).appendTo(span); + + var field = that.get_field(table.field_name); + field.create(table_span); + } + }; + + that.setup = function(container) { + + that.section_setup(container); + + function update_tables(value) { + + var enabled = ('' === value); + + for (var i=0; i<that.tables.length; i++) { + var table = that.tables[i]; + + var field = that.get_field(table.field_name); + field.set_enabled(enabled); + } + } + + var category = that.get_field(that.field_name); + category.reset = function() { + category.widget_reset(); + var values = category.save(); + if (values.length === 0){ + return; + } + var value = values[0]; + update_tables(value); + }; + + var inputs = $('input[name='+that.field_name+']', container); + inputs.change(function() { + var input = $(this); + var value = input.val(); + update_tables(value); + }); + }; + + return that; +}; + + +IPA.rule_association_table_widget = function (spec) { + + spec = spec || {}; + + var that = IPA.association_table_widget(spec); + + that.category = spec.category; + + that.add = function(values, on_success, on_error) { + + var pkey = $.bbq.getState(that.entity_name + '-pkey', true) || ''; + + var batch = IPA.batch_command({ + 'on_success': on_success, + 'on_error': on_error + }); + + var command; + + if (that.category) { + command = IPA.command({ + 'method': that.entity_name+'_mod', + 'args': [pkey], + 'options': {'all': true, 'rights': true}, + 'on_success': function() { + var record = {}; + record[that.category.name] = ['']; + that.category.load(record); + } + }); + command.set_option(that.category.name, ''); + batch.add_command(command); + } + + command = IPA.command({ + 'method': that.entity_name+'_'+that.add_method, + 'args': [pkey] + }); + command.set_option(that.other_entity, values.join(',')); + batch.add_command(command); + + batch.execute(); + }; + + return that; +}; |