summaryrefslogtreecommitdiffstats
path: root/install/static/associate.js
diff options
context:
space:
mode:
Diffstat (limited to 'install/static/associate.js')
-rw-r--r--install/static/associate.js254
1 files changed, 36 insertions, 218 deletions
diff --git a/install/static/associate.js b/install/static/associate.js
index 088d4079..a25144ef 100644
--- a/install/static/associate.js
+++ b/install/static/associate.js
@@ -129,188 +129,81 @@ function bulk_associator(spec) {
}
/**
- * Create a form for a one to many association.
- *
+ * This dialog is used for adding associations between two entities.
*/
-function ipa_adder_dialog(spec) {
+function ipa_association_adder_dialog(spec) {
spec = spec || {};
- var that = {};
+ var that = ipa_adder_dialog(spec);
- that.name = spec.name;
- that.title = spec.title;
that.entity_name = spec.entity_name;
-
that.pkey = spec.pkey;
that.other_entity = spec.other_entity;
- that.setup = spec.setup || ipa_adder_dialog_setup;
- that.execute = spec.execute || execute;
- that.on_success = spec.on_success;
- that.on_error = spec.on_error;
-
that.associator = spec.associator;
that.method = spec.method || 'add_member';
- that.dialog = $('<div/>', {
- 'title': that.title
- });
-
- that.open = function() {
-
- that.setup();
-
- var availableList = $('#availableList', that.dialog);
- availableList.html('');
-
- var enrollments = $('#enrollments', that.dialog);
- enrollments.html('');
-
- $('#addToList', that.dialog).click(function(){
- $('#availableList :selected', that.dialog).each(function(i, selected){
- enrollments.append(selected);
- });
- $('#availableList :selected', that.dialog).remove();
- });
- $('#removeFromList', that.dialog).click(function(){
- $('#enrollments :selected', that.dialog).each(function(i, selected){
- availableList.append(selected);
- });
- $('#enrollments :selected', that.dialog).remove();
- });
-
- $('#find', that.dialog).click(function(){
- that.search();
- });
-
- that.dialog.dialog({
- modal: true,
- width: 600,
- buttons: {
- 'Enroll': function() {
- var values = [];
- $('#enrollments', that.dialog).children().each(function (i, selected) {
- values.push(selected.value);
- });
- that.execute(values);
- },
- 'Cancel': that.close
- }
- });
- };
-
- that.close = function() {
- that.dialog.dialog('close');
- };
+ that.on_success = spec.on_success;
+ that.on_error = spec.on_error;
that.search = function() {
- function search_on_win(data, text_status, xhr) {
+ function on_success(data, text_status, xhr) {
var results = data.result;
- var list = $('#availableList', that.dialog);
- list.html('');
+ that.clear_available_values();
- var searchColumn = IPA.metadata[that.other_entity].primary_key;
+ var pkey = IPA.metadata[that.other_entity].primary_key;
- for (var i =0; i != results.count; i++){
+ for (var i=0; i<results.count; i++){
var result = results.result[i];
- $('<option></option>',{
- value: result[searchColumn][0],
- html: result[searchColumn][0]
- }).appendTo(list);
+ that.add_available_value(result[pkey][0]);
}
}
- function search_on_fail(xhr, text_status, errow_thrown) {
- alert('associationSearchFailure');
- }
-
- var queryFilter = $('#associateFilter', that.dialog).val();
- ipa_cmd('find', [queryFilter], {}, search_on_win, null, that.other_entity);
+ var filter = that.get_filter();
+ ipa_cmd('find', [filter], {}, on_success, null, that.other_entity);
};
- that.get_values = function() {
- var values = [];
- $('#enrollments', that.dialog).children().each(function (i, selected) {
- values.push(selected.value);
- });
- return values;
- };
-
- function execute(values) {
+ that.add = function() {
var associator = that.associator({
'entity_name': that.entity_name,
'pkey': that.pkey,
'other_entity': that.other_entity,
- 'values': that.get_values(),
+ 'values': that.get_selected_values(),
'method': that.method,
'on_success': that.on_success,
'on_error': that.on_error
});
associator.execute();
- }
+ };
return that;
}
-function ipa_deleter_dialog(spec) {
+/**
+ * This dialog is used for removing associations between two entities.
+ */
+function ipa_association_deleter_dialog(spec) {
spec = spec || {};
- var that = {};
+ var that = ipa_deleter_dialog(spec);
- that.name = spec.name;
- that.title = spec.title || IPA.messages.button.deletes;
that.entity_name = spec.entity_name;
-
that.pkey = spec.pkey;
that.other_entity = spec.other_entity;
-
- that.setup = spec.setup || ipa_deleter_dialog_setup;
- that.execute = spec.execute || execute;
- that.on_success = spec.on_success;
- that.on_error = spec.on_error;
+ that.values = spec.values;
that.associator = spec.associator;
that.method = spec.method || 'remove_member';
- that.values = spec.values || [];
-
- that.dialog = $('<div/>', {
- 'title': that.title,
- 'class': 'search-dialog-delete'
- });
-
- that.add_value = function(value) {
- that.values.push(value);
- };
-
- that.set_values = function(values) {
- that.values = that.values.concat(values);
- };
-
- that.get_values = function() {
- return that.values;
- };
-
- that.open = function() {
-
- that.setup();
-
- that.dialog.dialog({
- modal: true,
- width: 400,
- buttons: {
- 'Delete': that.execute,
- 'Cancel': that.close
- }
- });
- };
+ that.on_success = spec.on_success;
+ that.on_error = spec.on_error;
- function execute() {
+ that.remove = function() {
var associator = that.associator({
'entity_name': that.entity_name,
@@ -323,16 +216,13 @@ function ipa_deleter_dialog(spec) {
});
associator.execute();
- }
-
- that.close = function() {
- that.dialog.dialog('close');
};
return that;
}
function ipa_association_config(spec) {
+
spec = spec || {};
var that = {};
@@ -349,9 +239,6 @@ function ipa_association_widget(spec) {
spec = spec || {};
- spec.add = spec.add || add;
- spec.remove = spec.remove || remove;
-
var that = ipa_table_widget(spec);
that.other_entity = spec.other_entity;
@@ -402,17 +289,20 @@ function ipa_association_widget(spec) {
that.add_method = association ? association.add_method : null;
that.delete_method = association ? association.delete_method : null;
+
+ that.add_method = that.add_method || "add_member";
+ that.delete_method = that.delete_method || "remove_member";
};
- function add(container) {
+ that.add = function(container) {
var pkey = $.bbq.getState(that.entity_name + '-pkey', true) || '';
var label = IPA.metadata[that.other_entity].label;
var title = 'Enroll '+that.entity_name+' '+pkey+' in '+label;
- var dialog = ipa_adder_dialog({
- 'name': 'adder_dialog',
+ var dialog = ipa_association_adder_dialog({
'title': title,
+ 'parent': container,
'entity_name': that.entity_name,
'pkey': pkey,
'other_entity': that.other_entity,
@@ -429,9 +319,9 @@ function ipa_association_widget(spec) {
});
dialog.open();
- }
+ };
- function remove(container) {
+ that.remove = function(container) {
var values = that.get_selected_values();
@@ -444,9 +334,9 @@ function ipa_association_widget(spec) {
var label = IPA.metadata[that.other_entity].label;
var title = 'Remove '+label+' from '+that.entity_name+' '+pkey;
- var dialog = ipa_deleter_dialog({
- 'name': 'deleter_dialog',
+ var dialog = ipa_association_deleter_dialog({
'title': title,
+ 'parent': container,
'entity_name': that.entity_name,
'pkey': pkey,
'other_entity': that.other_entity,
@@ -464,7 +354,7 @@ function ipa_association_widget(spec) {
});
dialog.open();
- }
+ };
return that;
}
@@ -514,78 +404,6 @@ function ipa_association_facet(spec) {
}
-function ipa_adder_dialog_setup() {
-
- var that = this;
-
- var div = $('<div id="associations"></div>');
-
- var form = $('<form></form>');
- var form_div = $('<div></div>');
- form_div.css('border-width', '1px');
- var sub_div = $('<div></div>');
- sub_div.append($('<input />', {
- id: 'associateFilter',
- type: 'text'
- }));
- sub_div.append($('<input />', {
- id: 'find',
- type: 'button',
- value: 'Find'
- }));
-
- form_div.append(sub_div);
- form.append(form_div);
- var form_div = $('<div id="results"></div>');
- form_div.css('border', '2px solid rgb(0, 0, 0)');
- form_div.css('position', 'relative');
- form_div.css('height', '200px');
- var sub_div = $('<div></div>');
- sub_div.css('float', 'left');
- sub_div.append($('<div></div>', {
- text: 'Available'
- }));
- sub_div.append($('<select></select>', {
- id: 'availableList',
- width: '150px',
- size: '10',
- multiple: 'true'
- }));
- form_div.append(sub_div);
- var sub_div = $('<div></div>');
- sub_div.css('float', 'left');
- var p = $('<p></p>');
- p.append($('<input />', {
- id: 'removeFromList',
- type: 'button',
- value: '<<'
- }));
- sub_div.append(p);
- var p = $('<p></p>');
- p.append($('<input />', {
- id: 'addToList',
- type: 'button',
- value: '>>'
- }));
- sub_div.append(p);
- form_div.append(sub_div);
- var sub_div = $('<div></div>');
- sub_div.css('float', 'left');
- sub_div.append($('<div></div>', {
- text: 'Prospective'
- }));
- sub_div.append($('<select></select>', {
- id: 'enrollments',
- width: '150px',
- size: '10',
- multiple: 'true'
- }));
- form_div.append(sub_div);
- form.append(form_div);
- div.append(form);
- that.dialog.append(div);
-}
-
function association_list_create(obj_name, jobj)
{
search_create(obj_name, [], jobj);