From 724dd997447c84c6eb3893fe40fb2c5a78d4efd7 Mon Sep 17 00:00:00 2001 From: "Endi S. Dewata" Date: Tue, 14 Jun 2011 00:02:54 -0500 Subject: Renamed associate.js to association.js. --- install/ui/association.js | 1094 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1094 insertions(+) create mode 100644 install/ui/association.js (limited to 'install/ui/association.js') diff --git a/install/ui/association.js b/install/ui/association.js new file mode 100644 index 00000000..2115e0fe --- /dev/null +++ b/install/ui/association.js @@ -0,0 +1,1094 @@ +/*jsl:import ipa.js */ + +/* Authors: + * Adam Young + * + * 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 . +*/ + +/* REQUIRES: ipa.js */ +/* CURRENTLY ALSO REQUIRES search.js, because it reuses it's code to create + * the AssociationList elements; IT NEEDS IT'S OWN CODE! */ + +IPA.associator = function (spec) { + + spec = spec || {}; + + var that = {}; + + that.entity_name = spec.entity_name; + that.pkey = spec.pkey; + + that.other_entity = spec.other_entity; + that.values = spec.values; + + that.method = spec.method; + + that.on_success = spec.on_success; + that.on_error = spec.on_error; + + that.execute = function() { + }; + + return that; +}; + + +/** +*This associator is built for the case where each association requires a separate rpc +*/ +IPA.serial_associator = function(spec) { + + spec = spec || {}; + + var that = IPA.associator(spec); + + that.execute = function() { + + if (!that.values || !that.values.length) { + that.on_success(); + return; + } + + var value = that.values.shift(); + if (!value) { + that.on_success(); + return; + } + + var args = [value]; + var options = {}; + options[that.entity_name] = that.pkey; + + var command = IPA.command({ + entity: that.other_entity, + method: that.method, + args: args, + options: options, + on_success: that.execute, + on_error: that.on_error + }); + + //alert(JSON.stringify(command.to_json())); + + command.execute(); + }; + + return that; +}; + +/** +*This associator is for the common case where all the asociations can be sent +in a single rpc +*/ +IPA.bulk_associator = function(spec) { + + spec = spec || {}; + + var that = IPA.associator(spec); + + that.execute = function() { + + if (!that.values || !that.values.length) { + that.on_success(); + return; + } + + var value = that.values.shift(); + if (!value) { + that.on_success(); + return; + } + + while (that.values.length > 0) { + value += ',' + that.values.shift(); + } + + var args = [that.pkey]; + var options = { 'all': true }; + options[that.other_entity] = value; + + var command = IPA.command({ + entity: that.entity_name, + method: that.method, + args: args, + options: options, + on_success: that.on_success, + on_error: that.on_error + }); + + //alert(JSON.stringify(command.to_json())); + + command.execute(); + }; + + return that; +}; + +/** + * This dialog is used for adding associations between two entities. + */ +IPA.association_adder_dialog = function (spec) { + + spec = spec || {}; + + var that = IPA.adder_dialog(spec); + + that.entity_name = spec.entity_name; + that.pkey = spec.pkey; + that.other_entity = spec.other_entity; + that.attribute_member = spec.attribute_member; + + that.init = function() { + if (!that.columns.length) { + var pkey_name = IPA.metadata.objects[that.other_entity].primary_key; + that.create_column({ + name: pkey_name, + label: IPA.metadata.objects[that.other_entity].label, + primary_key: true, + width: '200px' + }); + } + + /* FIXME: event not firing? */ + $('input[name=hidememb]', that.container).click(that.search); + + that.adder_dialog_init(); + }; + + that.search = function() { + function on_success(data, text_status, xhr) { + var results = data.result; + that.clear_available_values(); + + var pkey_attr = IPA.metadata.objects[that.entity_name].primary_key; + + for (var i=0; i', { + 'href': '#'+value, + 'html': value, + 'click': function (value) { + return function() { + IPA.nav.show_page(other_entity, 'default', value); + return false; + }; + }(value) + }).appendTo(container); +}; + + +IPA.association_table_widget = function (spec) { + + spec = spec || {}; + + var that = IPA.table_widget(spec); + + that.other_entity = spec.other_entity; + that.attribute_member = spec.attribute_member; + + that.associator = spec.associator || IPA.bulk_associator; + that.add_method = spec.add_method || 'add_member'; + that.remove_method = spec.remove_method || 'remove_member'; + + that.adder_columns = $.ordered_map(); + + that.get_adder_column = function(name) { + return that.adder_columns.get(name); + }; + + that.add_adder_column = function(column) { + that.adder_columns.put(column.name, column); + }; + + that.create_adder_column = function(spec) { + var column = IPA.column(spec); + that.add_adder_column(column); + return column; + }; + + that.super_create_column = that.create_column; + + that.create_column = function(spec){ + if (spec.link_entity){ + spec.setup = IPA.association_pkey_setup; + } + return that.super_create_column(spec); + }; + /*this is duplicated in the facet... should be unified*/ + var i; + if (spec.columns){ + for (i = 0; i < spec.columns.length; i+= 1){ + that.create_column(spec.columns[i]); + } + } + if (spec.adder_columns){ + for (i = 0; i < spec.adder_columns.length; i+= 1){ + that.create_adder_column(spec.adder_columns[i]); + } + } + + that.create = function(container) { + + var column; + + // create a column if none defined + if (!that.columns.length) { + that.create_column({ + 'name': that.name, + 'label': IPA.metadata.objects[that.other_entity].label, + 'primary_key': true + }); + } + + var columns = that.columns.values; + for (var i=0; i', { + 'type': 'button', + 'name': 'remove', + 'value': IPA.messages.buttons.remove + }).appendTo(buttons); + + $('', { + 'type': 'button', + 'name': 'add', + 'value': IPA.messages.buttons.add + }).appendTo(buttons); + }; + + that.setup = function(container) { + + that.table_setup(container); + + var entity = IPA.get_entity(that.entity_name); + var facet_name = IPA.current_facet(entity); + var facet = entity.get_facet(facet_name); + + var button = $('input[name=remove]', container); + button.replaceWith(IPA.action_button({ + 'label': button.val(), + 'icon': 'ui-icon-trash', + 'click': function() { + if ($(this).hasClass('action-button-disabled')) { + return false; + } + + if (facet.is_dirty()) { + var dialog = IPA.dirty_dialog({ + facet: facet + }); + + dialog.callback = function() { + that.show_remove_dialog(); + }; + + dialog.init(); + dialog.open(that.container); + + } else { + that.show_remove_dialog(); + } + + return false; + } + })); + + button = $('input[name=add]', container); + button.replaceWith(IPA.action_button({ + 'label': button.val(), + 'icon': 'ui-icon-plus', + 'click': function() { + if ($(this).hasClass('action-button-disabled')) { + return false; + } + + if (facet.is_dirty()) { + var dialog = IPA.dirty_dialog({ + facet: facet + }); + + dialog.callback = function() { + that.show_add_dialog(); + }; + + dialog.init(); + dialog.open(that.container); + + } else { + that.show_add_dialog(); + } + + return false; + } + })); + }; + + that.set_enabled = function(enabled) { + that.table_set_enabled(enabled); + if (enabled) { + $('.action-button', that.table).removeClass('action-button-disabled'); + } else { + $('.action-button', that.table).addClass('action-button-disabled'); + } + }; + + that.get_records = function(on_success, on_error) { + + var length = that.values.length; + if (!length) return; + + if (length > 100) { + length = 100; + } + + var batch = IPA.batch_command({ + 'name': that.entity_name+'_'+that.name, + 'on_success': on_success, + 'on_error': on_error + }); + + for (var i=0; i', { + 'href': '#'+value, + 'html': value, + 'click': function (value) { + return function() { + IPA.nav.show_page(that.other_entity, 'default', value); + return false; + }; + }(value) + }).appendTo(container); + }; + } + + for (i=0; i total ? total : end; + + var summary = 'Showing '+start+' to '+end+' of '+total+' entries.'; + that.table.summary.text(summary); + + var list = pkeys.slice(start-1, end); + + var columns = that.table.columns.values; + if (columns.length == 1) { // show pkey only + var name = columns[0].name; + that.table.empty(); + for (var i=0; i