summaryrefslogtreecommitdiffstats
path: root/install/static/add.js
diff options
context:
space:
mode:
Diffstat (limited to 'install/static/add.js')
-rw-r--r--install/static/add.js143
1 files changed, 96 insertions, 47 deletions
diff --git a/install/static/add.js b/install/static/add.js
index 71d08338e..b5f9c16d4 100644
--- a/install/static/add.js
+++ b/install/static/add.js
@@ -1,5 +1,6 @@
/* Authors:
* Pavel Zuna <pzuna@redhat.com>
+ * Endi Sukma Dewata <edewata@redhat.com>
*
* Copyright (C) 2010 Red Hat
* see file 'COPYING' for use and warranty information
@@ -23,40 +24,108 @@
var IPA_ADD_POPULATE = 1;
var IPA_ADD_UPDATE = 2;
-function add_dialog_create(obj_name, adl)
-{
- var add_dialog = $('<div></div>');
+function ipa_add_field(spec) {
- function add(evt, called_from_add_and_edit) {
+ spec = spec || {};
+
+ var that = {};
+ that.name = spec.name;
+ that.label = spec.label;
+
+ that.init = spec.init;
+ that.setup = spec.setup;
+
+ return that;
+}
+
+function ipa_add_dialog(spec) {
+
+ spec = spec || {};
+
+ var that = {};
+ that.name = spec.name;
+ that.title = spec.title;
+ that.entity_name = spec.entity_name;
+
+ that.init = spec.init;
+
+ that.fields = [];
+ that.fields_by_name = {};
+
+ var dialog = $('<div/>');
+
+ that.get_fields = function() {
+ return that.fields;
+ };
+
+ that.get_field = function(name) {
+ return that.fields_by_name[name];
+ };
+
+ that.add_field = function(field) {
+ that.fields.push(field);
+ that.fields_by_name[field.name] = field;
+ };
+
+ that.create_field = function(spec) {
+ var field = ipa_add_field(spec);
+ that.add_field(field);
+ return field;
+ };
+
+ that.open = function() {
+ dialog.empty();
+ dialog.attr('id', that.name);
+ dialog.attr('title', that.title);
+
+ for (var i = 0; i < that.fields.length; ++i) {
+ var field = that.fields[i];
+ if (field.setup) {
+ field.setup(dialog, IPA_ADD_POPULATE);
+ } else {
+ dialog.append('<label>' + field.label + '</label>');
+ dialog.append('<input type="text" name="' + field.name + '" />');
+ }
+ }
+
+ dialog.dialog({
+ modal: true,
+ buttons: {
+ 'Add': that.add,
+ 'Add and edit': that.add_and_edit,
+ 'Cancel': that.cancel
+ }
+ });
+ };
+
+ that.add = function(evt, called_from_add_and_edit) {
var pkey = [];
var options = {};
- var pkey_name = ipa_objs[obj_name].primary_key;
+ var pkey_name = IPA.metadata[that.entity_name].primary_key;
function add_win(data, text_status, xhr) {
if (called_from_add_and_edit) {
var state = {};
- state[obj_name + '-facet'] = 'details';
- state[obj_name + '-pkey'] = pkey[0];
+ state[that.entity_name + '-facet'] = 'details';
+ state[that.entity_name + '-pkey'] = pkey[0];
$.bbq.pushState(state);
}
- };
-
- var fields = adl[2];
- for (var i = 0; i < fields.length; ++i) {
- var f = fields[i];
- var attr = f[0];
- if (typeof f[2] == 'function') {
- var value = f[2](add_dialog, IPA_ADD_UPDATE);
+ }
+
+ for (var i = 0; i < that.fields.length; ++i) {
+ var field = that.fields[i];
+ if (field.setup) {
+ var value = field.setup(dialog, IPA_ADD_UPDATE);
if (value != null) {
- if (attr == pkey_name)
+ if (field.name == pkey_name)
pkey = [value];
else
- options[attr] = value;
+ options[field.name] = value;
}
}
}
- add_dialog.find('input').each(function () {
+ dialog.find('input').each(function () {
var jobj = $(this);
var attr = jobj.attr('name');
var value = jobj.val();
@@ -68,40 +137,20 @@ function add_dialog_create(obj_name, adl)
}
});
- ipa_cmd('add', pkey, options, add_win, null, obj_name);
- add_dialog.dialog('close');
+ ipa_cmd('add', pkey, options, add_win, null, that.entity_name);
};
- function add_and_edit(evt) {
- add(evt, true);
- add_dialog.dialog('close');
+ that.add_and_edit = function(evt) {
+ that.add(evt, true);
+ dialog.dialog('close');
};
- function cancel() {
- add_dialog.dialog('close');
+ that.cancel = function() {
+ dialog.dialog('close');
};
- add_dialog.attr('id', adl[0]);
- add_dialog.attr('title', adl[1]);
-
- var fields = adl[2];
- for (var i = 0; i < fields.length; ++i) {
- var f = fields[i];
- if (typeof f[2] == 'function') {
- f[2](add_dialog, IPA_ADD_POPULATE);
- } else {
- add_dialog.append('<label>' + f[1] + '</label>');
- add_dialog.append('<input type="text" name="' + f[0] + '" />');
- }
- }
-
- add_dialog.dialog({
- modal: true,
- buttons: {
- 'Add': add,
- 'Add and edit': add_and_edit,
- 'Cancel': cancel
- }
- });
+ if (that.init) that.init();
+
+ return that;
}