/* Authors: * Endi Sukma Dewata * * 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 . */ define([ './ipa', './jquery', './phases', './reg', './details', './search', './association', './entity'], function(IPA, $, phases, reg) { IPA.rule_details_widget = function(spec) { spec = spec || {}; var that = IPA.composite_widget(spec); that.radio_name = spec.radio_name; that.options = spec.options || []; that.tables = spec.tables || []; that.columns = spec.columns; that.init = function() { that.enable_radio = IPA.radio_widget({ name: that.radio_name, options: that.options }); that.widgets.add_widget(that.enable_radio); that.enable_radio.value_changed.attach(that.on_enable_radio_changed); that.enable_radio.updated.attach(that.on_enable_radio_changed); }; that.on_enable_radio_changed = function() { var value = that.enable_radio.save(); if(value.length > 0) { var enabled = ('' === value[0]); for (var i=0; i', { name: that.radio_name, title: title, 'class': 'field' }).appendTo(container); enable_radio_container.append(title+': '); that.enable_radio.create(enable_radio_container); //tables for (var j=0; j', { name: table.name, title: metadata ? metadata.doc : table.name, 'class': 'field' }).appendTo(container); var widget = that.widgets.get_widget(table.name); widget.create(table_container); } }; that.init(); return that; }; IPA.rule_association_table_widget = function(spec) { spec = spec || {}; var that = IPA.association_table_widget(spec); that.external = spec.external; that.enabled = spec.enabled !== undefined ? spec.enabled : true; that.setup_column = function(column, div, record) { var suppress_link = false; if (that.external) { suppress_link = record[that.external] === 'true'; } column.setup(div, record, suppress_link); }; that.create_columns = function() { if (!that.columns.length) { that.association_table_widget_create_columns(); if (that.external) { that.create_column({ name: that.external, label: '@i18n:objects.sudorule.external', entity: that.other_entity, formatter: 'boolean', width: '200px' }); } } }; that.create_add_dialog = function() { var entity_label = that.entity.metadata.label_singular; var pkey = that.facet.get_pkey(); var other_entity_label = that.other_entity.metadata.label; var title = that.add_title; title = title.replace('${entity}', entity_label); title = title.replace('${primary_key}', pkey); title = title.replace('${other_entity}', other_entity_label); var exclude = that.values; if (that.external) { exclude = []; for (var i=0; i 0) { //no need to delete if has no values var command = IPA.command({ entity: that.entity.name, method: that.widget.remove_method, args: that.facet.get_pkeys() }); command.set_option(that.widget.other_entity.name, values); update_info.append_command(command, that.priority); } } return update_info; }; return that; }; IPA.rule_association_adder_dialog = function(spec) { spec = spec || {}; var that = IPA.association_adder_dialog(spec); that.external = spec.external; that.add = function() { var rows = that.available_table.remove_selected_rows(); that.selected_table.add_rows(rows); if (that.external) { var pkey_name = that.other_entity.metadata.primary_key; var value = that.external_field.val(); if (!value) return; var record = {}; record[pkey_name] = value; that.selected_table.add_record(record); that.external_field.val(''); } }; return that; }; phases.on('registration', function() { var w = reg.widget; var f = reg.field; w.register('rule_association_table', IPA.rule_association_table_widget); f.register('rule_association_table', IPA.rule_association_table_field); }); return {}; });