summaryrefslogtreecommitdiffstats
path: root/install/ui/dialog.js
diff options
context:
space:
mode:
Diffstat (limited to 'install/ui/dialog.js')
-rw-r--r--install/ui/dialog.js211
1 files changed, 65 insertions, 146 deletions
diff --git a/install/ui/dialog.js b/install/ui/dialog.js
index eb1bbd1d..e533e4af 100644
--- a/install/ui/dialog.js
+++ b/install/ui/dialog.js
@@ -39,32 +39,22 @@ IPA.dialog = function(spec) {
that.buttons = {};
- that.fields = $.ordered_map();
that.sections = $.ordered_map();
- that.conditional_fields = [];
+ var init = function() {
+
+ var sections = spec.sections || [];
- that.enable_conditional_fields = function(){
- for (var i =0; i < that.conditional_fields.length; i+=1) {
- $('label[id='+
- that.conditional_fields[i] +'-label]',
- that.container).css('visibility','visible');
- $('input[name='+
- that.conditional_fields[i] +
- ']',that.container).css('visibility','visible');
+ for (var i=0; i<sections.length; i++) {
+ var section_spec = sections[i];
+ that.create_section(section_spec);
}
- };
- that.disable_conditional_fields = function(){
- for (var i =0; i < that.conditional_fields.length; i+=1) {
- $('label[id='+
- that.conditional_fields[i] +'-label]',
- that.container).css('visibility','hidden');
+ var fields = spec.fields || [];
- $('input[name='+
- that.conditional_fields[i] +
- ']',that.container).css('visibility','hidden');
- }
+ // add fields to the default section
+ var section = that.get_section();
+ section.add_fields(fields);
};
that.add_button = function(name, handler) {
@@ -72,15 +62,29 @@ IPA.dialog = function(spec) {
};
that.get_field = function(name) {
- return that.fields.get(name);
+ for (var i=0; i<that.sections.length; i++) {
+ var section = that.sections.values[i];
+ var field = section.fields.get(name);
+ if (field) return field;
+ }
+ return null;
+ };
+
+ that.get_fields = function() {
+ var fields = [];
+ for (var i=0; i<that.sections.length; i++) {
+ var section = that.sections.values[i];
+ $.merge(fields, section.fields.values);
+ }
+ return fields;
};
that.add_field = function(field) {
field.dialog = that;
- that.fields.put(field.name, field);
- if (field.conditional){
- that.conditional_fields.push(field.name);
- }
+
+ var section = that.get_section();
+ section.add_field(field);
+
return field;
};
@@ -90,23 +94,13 @@ IPA.dialog = function(spec) {
};
that.is_valid = function() {
- var fields = that.fields.values;
- for (var i=0; i<fields.length; i++) {
- var field = fields[i];
- if (!field.valid) return false;
+ for (var i=0; i<that.sections.length; i++) {
+ var section = that.sections.values[i];
+ if (!section.is_valid()) return false;
}
return true;
};
- that.text = function(name){
- that.field(IPA.text_widget({
- name: name,
- undo: false,
- entity : that.entity
- }));
- return that;
- };
-
that.add_section = function(section) {
that.sections.put(section.name, section);
return that;
@@ -118,72 +112,42 @@ IPA.dialog = function(spec) {
};
that.create_section = function(spec) {
- var section = IPA.details_section(spec);
+
+ var factory = spec.factory || IPA.details_table_section;
+ spec.entity = that.entity;
+ spec.undo = false;
+
+ var section = factory(spec);
that.add_section(section);
+
return section;
};
- /**
- * Create content layout
- */
- that.create = function() {
+ that.get_section = function(name) {
- var table = $('<table/>', {
- 'class': 'section-table'
- }).appendTo(that.container);
+ if (name) {
+ return that.sections.get(name);
- var fields = that.fields.values;
- for (var i=0; i<fields.length; i++) {
- var field = fields[i];
- if (field.hidden) continue;
-
- var tr = $('<tr/>').appendTo(table);
-
- var td = $('<td/>', {
- 'class': 'section-cell-label'
- }).appendTo(tr);
-
- $('<label/>', {
- name: field.name,
- title: field.label,
- 'class': 'field-label',
- text: field.label+':'
- }).appendTo(td);
-
- td = $('<td/>', {
- 'class': 'section-cell-field'
- }).appendTo(tr);
-
- var field_container = $('<div/>', {
- name: field.name,
- title: field.label,
- 'class': 'field'
- }).appendTo(td);
-
- field.create(field_container);
-
- if (field.optional) {
- field_container.css('display', 'none');
-
- var link = $('<a/>', {
- text: IPA.messages.widget.optional,
- href: ''
- }).appendTo(td);
-
- link.click(function(field_container, link) {
- return function() {
- field_container.css('display', 'inline');
- link.css('display', 'none');
- return false;
- };
- }(field_container, link));
+ } else {
+ var length = that.sections.length;
+ if (length) {
+ // get the last section
+ return that.sections.values[length-1];
+ } else {
+ // create a default section
+ return that.create_section({ name: 'general' });
}
-
}
+ };
+
+ /**
+ * Create content layout
+ */
+ that.create = function() {
var sections = that.sections.values;
- for (var j=0; j<sections.length; j++) {
- var section = sections[j];
+ for (var i=0; i<sections.length; i++) {
+ var section = sections[i];
var div = $('<div/>', {
name: section.name,
@@ -228,20 +192,10 @@ IPA.dialog = function(spec) {
};
that.save = function(record) {
- var fields = that.fields.values;
- for (var i=0; i<fields.length; i++) {
- var field = fields[i];
- var values = field.save();
- record[field.name] = values.join(',');
- }
-
var sections = that.sections.values;
- for (var j=0; j<sections.length; j++) {
- var section = sections[j];
-
- if (section.save) {
- section.save(record);
- }
+ for (var i=0; i<sections.length; i++) {
+ var section = sections[i];
+ section.save(record);
}
};
@@ -251,55 +205,20 @@ IPA.dialog = function(spec) {
};
that.reset = function() {
- var fields = that.fields.values;
- for (var i=0; i<fields.length; i++) {
- var field = fields[i];
- field.reset();
- }
-
var sections = that.sections.values;
- for (var j=0; j<sections.length; j++) {
- sections[j].reset();
+ for (var i=0; i<sections.length; i++) {
+ sections[i].reset();
}
};
+ init();
+
that.dialog_create = that.create;
that.dialog_open = that.open;
that.dialog_close = that.close;
that.dialog_save = that.save;
that.dialog_reset = that.reset;
- var fields = spec.fields || [];
- for (var i=0; i<fields.length; i++) {
- var field_spec = fields[i];
- var field;
-
- if (field_spec instanceof Object) {
- var factory = field_spec.factory || IPA.text_widget;
- field_spec.entity = that.entity;
- field = factory(field_spec);
-
- /* This is a bit of a hack, and is here to support ACI
- permissions. The target section is a group of several
- widgets together. It makes more sense to do them as a
- section than as a widget. However, since they can be mixed
- into the flow with the other widgets, the section needs to
- be defined here with the fields to get the order correct.*/
- if (field.section) {
- that.add_section(field);
- } else {
- that.add_field(field);
- }
-
- } else {
- field = IPA.text_widget({
- name: field_spec,
- entity:that.entity,
- undo: false });
- that.add_field(field);
- }
- }
-
return that;
};