From b9ad279ad2d8d93dd501115a028783cf8fe7fcbd Mon Sep 17 00:00:00 2001
From: Adam Young
Date: Wed, 19 Jan 2011 12:26:14 -0500
Subject: rename static to ui
Directory rename
---
install/ui/associate.js | 944 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 944 insertions(+)
create mode 100644 install/ui/associate.js
(limited to 'install/ui/associate.js')
diff --git a/install/ui/associate.js b/install/ui/associate.js
new file mode 100644
index 00000000..9fc90723
--- /dev/null
+++ b/install/ui/associate.js
@@ -0,0 +1,944 @@
+/*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
+*/
+function serial_associator(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;
+
+ IPA.cmd(
+ that.method,
+ args,
+ options,
+ that.execute,
+ that.on_error,
+ that.other_entity);
+ };
+
+ return that;
+}
+
+/**
+*This associator is for the common case where all the asociations can be sent
+in a single rpc
+*/
+function bulk_associator(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;
+
+ IPA.cmd(
+ that.method,
+ args,
+ options,
+ that.on_success,
+ that.on_error,
+ that.entity_name);
+ };
+
+ 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[that.other_entity].primary_key;
+ that.create_column({
+ name: pkey_name,
+ label: IPA.metadata[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[that.entity_name].primary_key;
+
+ for (var i=0; i', {
+ 'type': 'button',
+ 'name': 'remove',
+ 'value': 'Remove'
+ }).appendTo(buttons);
+
+ $('', {
+ 'type': 'button',
+ 'name': 'add',
+ 'value': 'Add'
+ }).appendTo(buttons);
+ };
+
+ that.setup = function(container) {
+
+ that.table_setup(container);
+
+ 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;
+ }
+ 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;
+ 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) {
+
+ if (!that.values.length) return;
+
+ 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() {
+ var state = IPA.tab_state(that.other_entity);
+ state[that.other_entity + '-facet'] = 'details';
+ state[that.other_entity + '-pkey'] = value;
+ $.bbq.pushState(state);
+ return false;
+ };
+ }(value)
+ }).appendTo(container);
+ };
+ }
+
+ for (i=0; i', {
+ 'id': that.entity_name+'-'+that.other_entity,
+ html: $('',{ html: header_message })
+ }).appendTo(container);
+
+ var span = $('', { 'name': 'association' }).appendTo(container);
+
+ that.table.create(span);
+
+ var action_panel = that.get_action_panel();
+ var li = $('.action-controls', action_panel);
+
+ // creating generic buttons for layout
+ $('', {
+ 'type': 'button',
+ 'name': 'remove',
+ 'value': IPA.messages.button.remove
+ }).appendTo(li);
+
+ /* TODO: genering handling of different relationships */
+ if ((relationship[0] == 'Member')||(relationship[0] == 'Member Of')) {
+ $('', {
+ 'type': 'button',
+ 'name': 'add',
+ 'value': IPA.messages.button.enroll
+ }).appendTo(li);
+ }
+ };
+
+ that.setup = function(container) {
+
+ that.facet_setup(container);
+
+ var span = $('span[name=association]', that.container);
+
+ that.table.setup(span);
+
+ // replacing generic buttons with IPA.button and setting click handler
+ var action_panel = that.get_action_panel();
+
+ var button = $('input[name=remove]', action_panel);
+ button.replaceWith(IPA.action_button({
+ 'label': button.val(),
+ 'icon': 'ui-icon-trash',
+ 'click': function() { that.show_remove_dialog(); }
+ }));
+
+ button = $('input[name=add]', action_panel);
+ button.replaceWith(IPA.action_button({
+ 'label': button.val(),
+ 'icon': 'ui-icon-plus',
+ 'click': function() { that.show_add_dialog(); }
+ }));
+ };
+
+ that.show_add_dialog = function() {
+
+ var pkey = $.bbq.getState(that.entity_name + '-pkey', true) || '';
+ var label = IPA.metadata[that.other_entity] ? IPA.metadata[that.other_entity].label : that.other_entity;
+ var title = 'Enroll ' + label + ' in ' + that.entity_name + ' ' + pkey;
+
+ var dialog = IPA.association_adder_dialog({
+ 'title': title,
+ 'entity_name': that.entity_name,
+ 'pkey': pkey,
+ 'other_entity': that.other_entity,
+ 'attribute_member': that.attribute_member
+ });
+
+ if (that.adder_columns.length) {
+ dialog.set_columns(that.adder_columns);
+ }
+
+ dialog.execute = function() {
+
+ var pkey = $.bbq.getState(that.entity_name + '-pkey', true) || '';
+
+ var associator = that.associator({
+ 'entity_name': that.entity_name,
+ 'pkey': pkey,
+ 'other_entity': that.other_entity,
+ 'values': dialog.get_selected_values(),
+ 'method': that.add_method,
+ 'on_success': function() {
+ that.refresh();
+ dialog.close();
+ },
+ 'on_error': function() {
+ that.refresh();
+ dialog.close();
+ }
+ });
+
+ associator.execute();
+ };
+
+ dialog.init();
+
+ dialog.open(that.container);
+ };
+
+ that.show_remove_dialog = function() {
+
+ var label = IPA.metadata[that.other_entity] ? IPA.metadata[that.other_entity].label : that.other_entity;
+ var values = that.table.get_selected_values();
+
+ if (!values.length) {
+ alert('Select '+label+' to be removed.');
+ return;
+ }
+
+ var pkey = $.bbq.getState(that.entity_name + '-pkey', true) || '';
+ var title = 'Remove '+label+' from '+that.entity_name+' '+pkey;
+
+ var dialog = IPA.association_deleter_dialog({
+ 'title': title,
+ 'entity_name': that.entity_name,
+ 'pkey': pkey,
+ 'other_entity': that.other_entity,
+ 'values': values,
+ 'associator': that.associator,
+ 'method': that.remove_method,
+ 'on_success': function() {
+ that.refresh();
+ dialog.close();
+ },
+ 'on_error': function() {
+ that.refresh();
+ dialog.close();
+ }
+ });
+
+ dialog.init();
+
+ dialog.open(that.container);
+ };
+
+ that.get_records = function(pkeys, on_success, on_error) {
+
+ if (!pkeys.length) return;
+
+ var batch = IPA.batch_command({
+ 'name': that.entity_name+'_'+that.name,
+ 'on_success': on_success,
+ 'on_error': on_error
+ });
+
+ for (var i=0; iError: '+error_thrown.name+'
');
+ summary.append(''+error_thrown.title+'
');
+ summary.append(''+error_thrown.message+'
');
+ }
+
+ var pkey = $.bbq.getState(that.entity_name + '-pkey', true) || '';
+ IPA.cmd('show', [pkey], {'rights': true}, on_success, on_error, that.entity_name);
+ };
+
+ that.association_facet_init = that.init;
+
+ return that;
+};
+
+
+IPA.deleter_dialog_setup = function () {
+
+ var that = this;
+
+ var ul = $('');
+ ul.appendTo(that.dialog);
+
+ for (var i=0; i',{
+ 'text': that.values[i]
+ }).appendTo(ul);
+ }
+
+ $('', {
+ 'text': IPA.messages.search.delete_confirm
+ }).appendTo(that.dialog);
+};
--
cgit