Removing sections as special type of object

Sections are changed into pure widget objects. Introduced IPA.composite_widget, basic widget for widget nesting (it's using IPA.widget_container). It's base class for section widgets.

TODO: change old custom sections into custom fields and widgets.

Note: usage of section in HBAC and SUDO is kept - whole logic will be removed in #1515 patch.

https://fedorahosted.org/freeipa/ticket/2040
This commit is contained in:
Petr Vobornik 2011-11-22 17:33:09 +01:00 committed by Endi S. Dewata
parent 6cdf09812d
commit e021542120
13 changed files with 404 additions and 627 deletions

View File

@ -127,31 +127,24 @@ IPA.entity_adder_dialog = function(spec) {
var record = {};
that.save(record);
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
var fields = that.fields.get_fields();
for (var j=0; j<fields.length; j++) {
var field = fields[j];
var section_fields = section.fields.values;
for (var j=0; j<section_fields.length; j++) {
var field = section_fields[j];
var values = record[field.name];
if (!values) continue;
var values = record[field.name];
if (!values) continue;
// TODO: Handle multi-valued attributes like in detail facet's update()
var value = values.join(',');
if (!value) continue;
// TODO: Handle multi-valued attributes like in detail facet's update()
var value = values.join(',');
if (!value) continue;
if (field.name == pkey_name) {
command.add_arg(value);
} else {
command.set_option(field.name, value);
}
if (field.name == pkey_name) {
command.add_arg(value);
} else {
command.set_option(field.name, value);
}
}
//alert(JSON.stringify(command.to_json()));
if (that.pre_execute_hook) {
that.pre_execute_hook(command);
}

View File

@ -241,9 +241,9 @@ IPA.automountmap_adder_dialog = function(spec) {
that.create = function() {
that.entity_adder_dialog_create();
var method_field = that.get_field('method');
var method_field = that.fields.get_field('method');
var indirect_section = that.get_section('indirect');
var key_field = that.get_field('key');
var key_field = that.fields.get_field('key');
var direct_input = $('input[value="add"]', method_field.container);
direct_input.change(function() {
@ -267,7 +267,7 @@ IPA.automountmap_adder_dialog = function(spec) {
that.reset = function() {
that.dialog_reset();
var method_field = that.get_field('method');
var method_field = that.fields.get_field('method');
var direct_input = $('input[value="add"]', method_field.container);
direct_input.click();

View File

@ -4,6 +4,7 @@
* Pavel Zuna <pzuna@redhat.com>
* Adam Young <ayoung@redhat.com>
* Endi S. Dewata <edewata@redhat.com>
* Petr Vobornik <pvoborni@redhat.com>
*
* Copyright (C) 2010 Red Hat
* see file 'COPYING' for use and warranty information
@ -162,295 +163,13 @@ IPA.section_builder = function(spec) {
return that;
};
IPA.details_section = function(spec) {
spec = spec || {};
var that = {};
that.name = spec.name || '';
that.label = spec.label || '';
that.entity = spec.entity;
that.fields = $.ordered_map();
that.dirty = false;
that.dirty_changed = IPA.observer();
that.undo = typeof spec.undo == 'undefined' ? true : spec.undo;
var init = function() {
var fields = spec.fields || [];
that.add_fields(fields);
};
that.get_field = function(name) {
return that.fields.get(name);
};
that.add_field = function(field) {
field.entity = that.entity;
field.undo = that.undo;
that.fields.put(field.name, field);
field.dirty_changed.attach(that.field_dirty_changed);
return field;
};
that.add_fields = function(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);
that.add_field(field);
} else {
that.text({ name: field_spec });
}
}
};
that.field = function(field) {
that.add_field(field);
return that;
};
that.text = function(spec) {
spec.entity = that.entity;
var field = IPA.text_widget(spec);
that.add_field(field);
return that;
};
that.multivalued_text = function(spec) {
spec.entity = that.entity;
var field = IPA.multivalued_text_widget(spec);
that.add_field(field);
return that;
};
that.textarea = function(spec) {
spec.entity = that.entity;
var field = IPA.textarea_widget(spec);
that.add_field(field);
return that;
};
that.radio = function(spec) {
spec.entity = that.entity;
var field = IPA.radio_widget(spec);
that.add_field(field);
return that;
};
that.create = function(container) {
that.container = container;
var fields = that.fields.values;
for (var i=0; i<fields.length; i++) {
var field = fields[i];
var field_container = $('<div/>', {
name: field.name,
title: field.label,
'class': 'field'
});
if (field.hidden) {
field_container.css('display', 'none');
}
field_container.appendTo(container);
field.create(field_container);
}
};
that.load = function(record) {
that.record = record;
var fields = that.fields.values;
for (var j=0; j<fields.length; j++) {
var field = fields[j];
field.load(record);
}
};
that.save = function(record) {
var fields = that.fields.values;
for (var i=0; i<fields.length; i++) {
var field = fields[i];
record[field.name] = field.save();
}
};
that.reset = function() {
var fields = that.fields.values;
for (var i=0; i<fields.length; i++) {
var field = fields[i];
field.reset();
}
};
that.field_dirty_changed = function(dirty) {
var old = that.dirty;
if(dirty) {
that.dirty = true;
} else {
that.dirty = that.is_dirty();
}
if(old !== that.dirty) {
that.dirty_changed.notify([that.dirty], that);
}
};
that.is_dirty = function() {
var fields = that.fields.values;
for (var i=0; i<fields.length; i++) {
var field = fields[i];
if (field.is_dirty()) {
return true;
}
}
return false;
};
that.validate = function() {
var valid = true;
var fields = that.fields.values;
for (var i=0; i<fields.length; i++) {
var field = fields[i];
valid &= field.validate() && field.validate_required();
}
return valid;
};
that.set_visible = function(visible) {
if (visible) {
that.container.show();
} else {
that.container.hide();
}
};
that.clear = function() {
var fields = that.fields.values;
for (var i=0; i< fields.length; i++) {
fields[i].clear();
}
};
that.get_update_info = function() {
var update_info = IPA.update_info_builder.new_update_info();
var fields = that.fields.values;
for(var i=0; i < fields.length; i++) {
update_info = IPA.update_info_builder.merge(
update_info,
fields[i].get_update_info());
}
return update_info;
};
init();
// methods that should be invoked by subclasses
that.section_create = that.create;
that.section_load = that.load;
that.section_reset = that.reset;
return that;
};
IPA.details_table_section = function(spec) {
spec = spec || {};
var that = IPA.details_section(spec);
that.rows = $.ordered_map();
that.create = function(container) {
that.container = container;
// do not call section_create() here
var table = $('<table/>', {
'class': 'section-table'
}).appendTo(that.container);
var fields = that.fields.values;
for (var i=0; i<fields.length; i++) {
var field = fields[i];
var tr = $('<tr/>');
that.add_row(field.name, tr);
if (field.hidden) {
tr.css('display', 'none');
}
tr.appendTo(table);
var td = $('<td/>', {
'class': 'section-cell-label',
title: field.label
}).appendTo(tr);
$('<label/>', {
name: field.name,
'class': 'field-label',
text: field.label+':'
}).appendTo(td);
field.create_required(td);
td = $('<td/>', {
'class': 'section-cell-field',
title: field.label
}).appendTo(tr);
var field_container = $('<div/>', {
name: field.name,
'class': 'field'
}).appendTo(td);
field.create(field_container);
}
};
that.add_row = function(name, row) {
that.rows.put(name, row);
};
that.get_row = function(name) {
return that.rows.get(name);
};
that.set_row_visible = function(name, visible) {
var row = that.get_row(name);
row.css('display', visible ? '' : 'none');
};
that.table_section_create = that.create;
return that;
};
IPA.details_facet = function(spec) {
spec = spec || {};
spec.name = spec.name || 'details';
var that = IPA.facet(spec);
that.entity = spec.entity;
that.pre_execute_hook = spec.pre_execute_hook;
that.post_update_hook = spec.post_update_hook;
@ -460,58 +179,19 @@ IPA.details_facet = function(spec) {
that.label = spec.label || IPA.messages && IPA.messages.facets && IPA.messages.facets.details;
that.facet_group = spec.facet_group || 'settings';
that.sections = $.ordered_map();
that.widgets = IPA.widget_container();
that.fields = IPA.field_container({ container: that });
that.add_sections = function(sections) {
that.fields.add_field = function(field) {
if(sections) {
for(var i=0; i < sections.length; i++) {
var section_spec = sections[i];
section_spec.entity = that.entity;
if (!section_spec.label) {
var obj_messages = IPA.messages.objects[that.entity.name];
section_spec.label = obj_messages[section_spec.name];
}
section_spec.factory = section_spec.factory || IPA.details_table_section;
var section = section_spec.factory(section_spec);
that.add_section(section);
}
if (field.dirty_changed) {
field.dirty_changed.attach(that.field_dirty_changed);
}
that.fields.container_add_field(field);
};
that.dirty = false;
that.add_section = function(section) {
section.entity = that.entity;
that.sections.put(section.name, section);
section.dirty_changed.attach(that.section_dirty_changed);
return section;
};
that.get_section = function(name) {
return that.sections.get(name);
};
that.create_section = function(spec) {
spec.entity = that.entity;
var section = IPA.details_section(spec);
that.add_section(section);
return section;
};
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;
};
/* the primary key used for show and update is built as an array.
for most entities, this will be a single element long, but for some
it requires the containing entities primary keys as well.*/
@ -601,10 +281,12 @@ IPA.details_facet = function(spec) {
that.expand_button.css('display', 'none');
that.collapse_button.css('display', 'inline');
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
that.toggle(section, true);
var widgets = that.widgets.get_widgets();
for (var i=0; i<widgets.length; i++) {
var widget = widgets[i];
if(widget.toggle) {
widget.toggle(true);
}
}
return false;
}
@ -619,58 +301,29 @@ IPA.details_facet = function(spec) {
that.expand_button.css('display', 'inline');
that.collapse_button.css('display', 'none');
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
that.toggle(section, false);
var widgets = that.widgets.get_widgets();
for (var i=0; i<widgets.length; i++) {
var widget = widgets[i];
if(widget.toggle) {
widget.toggle(false);
}
}
return false;
}
}).appendTo(that.controls);
};
that.widgets.create_widget_delimiter = function(container) {
container.append('<hr/>');
};
that.create_content = function(container) {
that.content = $('<div/>', {
'class': 'details-content'
}).appendTo(container);
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
var header = $('<h2/>', {
name: section.name,
title: section.label
}).appendTo(that.content);
var icon = $('<span/>', {
name: 'icon',
'class': 'icon section-expand '+IPA.expanded_icon
}).appendTo(header);
header.append(' ');
header.append(section.label);
var div = $('<div/>', {
name: section.name,
'class': 'details-section'
}).appendTo(that.content);
header.click(function(section, div) {
return function() {
var visible = div.is(":visible");
that.toggle(section, !visible);
};
}(section, div));
section.create(div);
if (i < sections.length-1) {
that.content.append('<hr/>');
}
}
that.widgets.create(that.content);
$('<span/>', {
name: 'summary',
@ -685,27 +338,13 @@ IPA.details_facet = function(spec) {
that.header.set_pkey(that.pkey);
};
that.toggle = function(section, visible) {
var header = $('h2[name='+section.name+']', that.container);
var icon = $('span[name=icon]', header);
icon.toggleClass(IPA.expanded_icon, visible);
icon.toggleClass(IPA.collapsed_icon, !visible);
var div = section.container;
if (visible != div.is(":visible")) {
div.slideToggle('slow');
}
};
that.needs_update = function() {
if (that._needs_update !== undefined) return that._needs_update;
var pkey = IPA.nav.get_state(that.entity.name+'-pkey');
return pkey !== that.pkey;
};
that.section_dirty_changed = function(dirty) {
that.field_dirty_changed = function(dirty) {
if(dirty) {
that.dirty = true;
} else {
@ -716,9 +355,9 @@ IPA.details_facet = function(spec) {
};
that.is_dirty = function() {
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
if (sections[i].is_dirty()) {
var fields = that.fields.get_fields();
for (var i=0; i<fields.length; i++) {
if (fields[i].is_dirty()) {
return true;
}
}
@ -746,19 +385,19 @@ IPA.details_facet = function(spec) {
that.load = function(data) {
that.facet_load(data);
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
section.load(data);
var fields = that.fields.get_fields();
for (var i=0; i<fields.length; i++) {
var field = fields[i];
field.load(data);
}
that.enable_update(false);
};
that.save = function(record) {
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
section.save(record);
var fields = that.fields.get_fields();
for (var i=0; i<fields.length; i++) {
var field = fields[i];
field.save(record);
}
};
@ -766,33 +405,29 @@ IPA.details_facet = function(spec) {
var record = {};
var update_info = IPA.update_info_builder.new_update_info();
var sections = that.sections.values;
var fields = that.fields.get_fields();
that.save(record);
for (var i=0; i<sections.length; i++) {
var section = sections[i];
for (var i=0; i<fields.length; i++) {
var field = fields[i];
var section_fields = section.fields.values;
for (var j=0; j<section_fields.length; j++) {
var field = section_fields[j];
if (only_dirty && !field.is_dirty()) continue;
if (only_dirty && !field.is_dirty()) continue;
var values = record[field.name];
if (require_value && !values) continue;
var values = record[field.name];
if (require_value && !values) continue;
update_info.append_field(field, values);
}
update_info.append_field(field, values);
}
return update_info;
};
that.reset = function() {
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
section.reset();
var fields = that.fields.get_fields();
for (var i=0; i<fields.length; i++) {
var field = fields[i];
field.reset();
}
that.enable_update(false);
};
@ -800,10 +435,10 @@ IPA.details_facet = function(spec) {
that.validate = function() {
var valid = true;
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
valid &= section.validate();
var fields = that.fields.get_fields();
for (var i=0; i<fields.length; i++) {
var field = fields[i];
valid &= field.validate() && field.validate_required();
}
return valid;
};
@ -971,30 +606,61 @@ IPA.details_facet = function(spec) {
that.clear = function() {
that.header.clear();
var sections = that.sections.values;
for (var i=0; i< sections.length; i++) {
sections[i].clear();
}
that.widgets.clear();
};
that.get_update_info = function() {
var update_info = IPA.update_info_builder.new_update_info();
for (var i = 0; i < that.sections.length; i++) {
var section = that.sections.values[i];
if(section.get_update_info) {
var fields = that.fields.get_fields();
for (var i = 0; i < fields.length; i++) {
var field = fields[i];
if(field.get_update_info) {
update_info = IPA.update_info_builder.merge(
update_info,
section.get_update_info());
field.get_update_info());
}
}
return update_info;
};
that.add_sections(spec.sections);
that.create_builder = function() {
var widget_builder = IPA.widget_builder({
widget_options: {
entity: that.entity
}
});
var field_builder = IPA.field_builder({
field_options: {
entity: that.entity
}
});
var section_builder = IPA.section_builder({
container: that,
widget_builder: widget_builder,
field_builder: field_builder
});
that.builder = IPA.details_builder({
container: that,
widget_builder: widget_builder,
field_builder: field_builder,
section_builder: section_builder
});
};
that.init = function() {
that.create_builder();
that.builder.build(spec);
that.fields.widgets_created();
};
that.init();
that.details_facet_create_content = that.create_content;
that.details_facet_load = that.load;

View File

@ -65,24 +65,9 @@ IPA.dialog = function(spec) {
that.width = spec.width || 500;
that.height = spec.height;
that.widgets = IPA.widget_container();
that.fields = IPA.field_container({ container: that });
that.buttons = $.ordered_map();
that.sections = $.ordered_map();
var init = function() {
var sections = spec.sections || [];
for (var i=0; i<sections.length; i++) {
var section_spec = sections[i];
that.create_section(section_spec);
}
var fields = spec.fields || [];
// add fields to the default section
var section = that.get_section();
section.add_fields(fields);
};
that.create_button = function(spec) {
var factory = spec.factory || IPA.dialog_button;
@ -99,83 +84,21 @@ IPA.dialog = function(spec) {
return that.buttons.get(name);
};
that.get_field = function(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) {
var section = that.get_section();
section.add_field(field);
return field;
};
that.field = function(field) {
that.add_field(field);
that.fields.add_field(field);
return that;
};
that.validate = function() {
var valid = true;
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
valid &= section.validate();
var fields = that.fields.get_fields();
for (var i=0; i<fields.length; i++) {
var field = fields[i];
valid &= field.validate() && field.validate_required();
}
return valid;
};
that.add_section = function(section) {
that.sections.put(section.name, section);
return that;
};
that.section = function(section) {
that.add_section(section);
return that;
};
that.create_section = function(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;
};
that.get_section = function(name) {
if (name) {
return that.sections.get(name);
} 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
@ -187,16 +110,16 @@ IPA.dialog = function(spec) {
'class': 'dialog-message ui-state-highlight ui-corner-all'
}).appendTo(that.container);
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
var widgets = that.widgets.get_widgets();
for (var i=0; i<widgets.length; i++) {
var widget = widgets[i];
var div = $('<div/>', {
name: section.name,
name: widget.name,
'class': 'dialog-section'
}).appendTo(that.container);
section.create(div);
widget.create(div);
}
};
@ -258,10 +181,10 @@ IPA.dialog = function(spec) {
};
that.save = function(record) {
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
section.save(record);
var fields = that.fields.get_fields();
for (var i=0; i<fields.length; i++) {
var field = fields[i];
field.save(record);
}
};
@ -271,13 +194,48 @@ IPA.dialog = function(spec) {
};
that.reset = function() {
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
sections[i].reset();
var fields = that.fields.get_fields();
for (var i=0; i<fields.length; i++) {
fields[i].reset();
}
};
init();
that.create_builder = function() {
var widget_builder = IPA.widget_builder({
widget_options: {
entity: that.entity
}
});
var field_builder = IPA.field_builder({
field_options: {
undo: false,
entity: that.entity
}
});
var section_builder = IPA.section_builder({
container: that,
section_factory: IPA.details_table_section_nc,
widget_builder: widget_builder,
field_builder: field_builder
});
that.builder = IPA.details_builder({
container: that,
widget_builder: widget_builder,
field_builder: field_builder,
section_builder: section_builder
});
};
that.init = function() {
that.create_builder();
that.builder.build(spec);
that.fields.widgets_created();
};
that.init();
that.dialog_create = that.create;
that.dialog_open = that.open;

View File

@ -183,52 +183,47 @@ IPA.dnszone_details_facet = function(spec) {
var record = {};
that.save(record);
var sections = that.sections.values;
for (var i=0; i<sections.length; i++) {
var section = sections[i];
var fields = that.fields.get_fields();
for (var i=0; i<fields.length; i++) {
var field = fields[i];
if (!field.is_dirty()) continue;
var section_fields = section.fields.values;
for (var j=0; j<section_fields.length; j++) {
var field = section_fields[j];
if (!field.is_dirty()) continue;
var values = record[field.name];
if (!values) continue;
var values = record[field.name];
if (!values) continue;
var metadata = field.metadata;
var metadata = field.metadata;
// skip primary key
if (metadata && metadata.primary_key) continue;
// skip primary key
if (metadata && metadata.primary_key) continue;
// check enable/disable
if (field.name == 'idnszoneactive') {
if (values[0] == 'FALSE') enable_operation.command.method = 'disable';
enable_operation.execute = true;
continue;
}
if (metadata) {
if (values.length == 1) {
modify_operation.command.set_option(field.name, values[0]);
} else if (field.join) {
modify_operation.command.set_option(field.name, values.join(','));
} else {
modify_operation.command.set_option(field.name, values);
}
} else {
if (values.length) {
modify_operation.command.set_option('setattr', field.name+'='+values[0]);
} else {
modify_operation.command.set_option('setattr', field.name+'=');
}
for (var l=1; l<values.length; l++) {
modify_operation.command.set_option('addattr', field.name+'='+values[l]);
}
}
modify_operation.execute = true;
// check enable/disable
if (field.name == 'idnszoneactive') {
if (values[0] == 'FALSE') enable_operation.command.method = 'disable';
enable_operation.execute = true;
continue;
}
if (metadata) {
if (values.length == 1) {
modify_operation.command.set_option(field.name, values[0]);
} else if (field.join) {
modify_operation.command.set_option(field.name, values.join(','));
} else {
modify_operation.command.set_option(field.name, values);
}
} else {
if (values.length) {
modify_operation.command.set_option('setattr', field.name+'='+values[0]);
} else {
modify_operation.command.set_option('setattr', field.name+'=');
}
for (var l=1; l<values.length; l++) {
modify_operation.command.set_option('addattr', field.name+'='+values[l]);
}
}
modify_operation.execute = true;
}
var batch = IPA.batch_command({
@ -275,7 +270,7 @@ IPA.dnszone_name_section = function(spec) {
'class': 'section-table'
}).appendTo(that.container);
var idnsname = that.get_field('idnsname');
var idnsname = that.fields.get_field('idnsname');
var tr = $('<tr/>').appendTo(table);
@ -315,7 +310,7 @@ IPA.dnszone_name_section = function(spec) {
var idnsname_input = $('input', span);
var name_from_ip = that.get_field('name_from_ip');
var name_from_ip = that.fields.get_field('name_from_ip');
tr = $('<tr/>').appendTo(table);
@ -380,8 +375,8 @@ IPA.dnszone_name_section = function(spec) {
that.save = function(record) {
var idnsname = that.get_field('idnsname');
var name_from_ip = that.get_field('name_from_ip');
var idnsname = that.fields.get_field('idnsname');
var name_from_ip = that.fields.get_field('name_from_ip');
if (idnsname.radio.is(':checked')) {
record.idnsname = idnsname.save();

View File

@ -150,13 +150,13 @@ IPA.group_adder_dialog = function(spec) {
var init = function() {
var posix_field = that.get_field('nonposix');
var posix_field = that.fields.get_field('nonposix');
posix_field.value_changed.attach(that.on_posix_change);
};
that.on_posix_change = function (value) {
var gid_field = that.get_field('gidnumber');
var gid_field = that.fields.get_field('gidnumber');
if(value) {
gid_field.reset();
}

View File

@ -197,8 +197,8 @@ IPA.host_fqdn_section = function(spec) {
that.create = function(container) {
that.container = container;
var hostname = that.get_field('hostname');
var dnszone = that.get_field('dnszone');
var hostname = that.fields.get_field('hostname');
var dnszone = that.fields.get_field('dnszone');
var table = $('<table/>', {
'class': 'fqdn'
@ -268,10 +268,10 @@ IPA.host_fqdn_section = function(spec) {
};
that.save = function(record) {
var field = that.get_field('hostname');
var field = that.fields.get_field('hostname');
var hostname = field.save()[0];
field = that.get_field('dnszone');
field = that.fields.get_field('dnszone');
var dnszone = field.save()[0];
record.fqdn = hostname && dnszone ? [ hostname+'.'+dnszone ] : [];
@ -444,8 +444,8 @@ IPA.host_enrollment_section = function(spec) {
that.create = function(container) {
that.table_section_create(container);
var keytab_field = that.get_field('has_keytab');
var password_field = that.get_field('has_password');
var keytab_field = that.fields.get_field('has_keytab');
var password_field = that.fields.get_field('has_password');
/**
* The set_password() in the password field is being customized to

View File

@ -37,7 +37,7 @@ IPA.rule_details_section = function(spec) {
that.container = container;
var field = that.get_field(that.field_name);
var field = that.fields.get_field(that.field_name);
var metadata = IPA.get_entity_param(that.entity.name, that.field_name);
container.append(metadata.doc+':');
@ -55,13 +55,13 @@ IPA.rule_details_section = function(spec) {
for (var i=0; i<that.tables.length; i++) {
var table = that.tables[i];
var field = that.get_field(table.field_name);
var field = that.fields.get_field(table.field_name);
field.set_enabled(enabled);
}
}
if (that.options.length) {
var category = that.get_field(that.field_name);
var category = that.fields.get_field(that.field_name);
category.options=that.options;
category.reset = function() {
category.widget_reset();
@ -95,7 +95,7 @@ IPA.rule_details_section = function(spec) {
'class': 'field'
}).appendTo(span);
field = that.get_field(table.field_name);
field = that.fields.get_field(table.field_name);
field.create(table_span);
}

View File

@ -139,15 +139,15 @@ IPA.service_adder_dialog = function(spec) {
that.save = function(record) {
var field = that.get_field('service');
var field = that.fields.get_field('service');
var service = field.save()[0];
field = that.get_field('host');
field = that.fields.get_field('host');
var host = field.save()[0];
record['krbprincipalname'] = [ service+'/'+host ];
field = that.get_field('force');
field = that.fields.get_field('force');
record['force'] = field.save();
};

View File

@ -830,7 +830,7 @@ IPA.sudo.rule_details_command_section = function(spec) {
that.container = container;
var field = that.get_field('cmdcategory');
var field = that.fields.get_field('cmdcategory');
var metadata = IPA.get_entity_param(that.entity.name, 'cmdcategory');
var span = $('<span/>', {
@ -857,7 +857,7 @@ IPA.sudo.rule_details_command_section = function(spec) {
'class': 'field'
}).appendTo(span);
field = that.get_field('memberallowcmd_sudocmd');
field = that.fields.get_field('memberallowcmd_sudocmd');
field.create(table_span);
metadata = IPA.get_entity_param(
@ -869,7 +869,7 @@ IPA.sudo.rule_details_command_section = function(spec) {
'class': 'field'
}).appendTo(span);
field = that.get_field('memberallowcmd_sudocmdgroup');
field = that.fields.get_field('memberallowcmd_sudocmdgroup');
field.create(table_span);
$('<h3/>', {
@ -886,7 +886,7 @@ IPA.sudo.rule_details_command_section = function(spec) {
'class': 'field'
}).appendTo(span);
field = that.get_field('memberdenycmd_sudocmd');
field = that.fields.get_field('memberdenycmd_sudocmd');
field.create(table_span);
metadata = IPA.get_entity_param(
@ -898,21 +898,21 @@ IPA.sudo.rule_details_command_section = function(spec) {
'class': 'field'
}).appendTo(span);
field = that.get_field('memberdenycmd_sudocmdgroup');
field = that.fields.get_field('memberdenycmd_sudocmdgroup');
field.create(table_span);
function update_tables(value) {
var enabled = ('' === value);
var field = that.get_field('memberallowcmd_sudocmd');
var field = that.fields.get_field('memberallowcmd_sudocmd');
field.set_enabled(enabled);
field = that.get_field('memberallowcmd_sudocmdgroup');
field = that.fields.get_field('memberallowcmd_sudocmdgroup');
field.set_enabled(enabled);
}
var cmdcategory = that.get_field('cmdcategory');
var cmdcategory = that.fields.get_field('cmdcategory');
cmdcategory.reset = function() {
cmdcategory.widget_reset();
var values = cmdcategory.save();
@ -1007,7 +1007,7 @@ IPA.sudo.rule_details_runas_section = function(spec) {
that.create = function(container) {
that.container = container;
var field = that.get_field('ipasudorunasusercategory');
var field = that.fields.get_field('ipasudorunasusercategory');
var metadata = IPA.get_entity_param(
that.entity.name, 'ipasudorunasusercategory');
@ -1028,7 +1028,7 @@ IPA.sudo.rule_details_runas_section = function(spec) {
'class': 'field'
}).appendTo(span);
field = that.get_field('ipasudorunas_user');
field = that.fields.get_field('ipasudorunas_user');
field.create(table_span);
metadata = IPA.get_entity_param(that.entity.name, 'ipasudorunas_group');
@ -1039,10 +1039,10 @@ IPA.sudo.rule_details_runas_section = function(spec) {
'class': 'field'
}).appendTo(span);
field = that.get_field('ipasudorunas_group');
field = that.fields.get_field('ipasudorunas_group');
field.create(table_span);
field = that.get_field('ipasudorunasgroupcategory');
field = that.fields.get_field('ipasudorunasgroupcategory');
metadata = IPA.get_entity_param(
that.entity.name, 'ipasudorunasgroupcategory');
@ -1065,21 +1065,21 @@ IPA.sudo.rule_details_runas_section = function(spec) {
'class': 'field'
}).appendTo(span);
field = that.get_field('ipasudorunasgroup_group');
field = that.fields.get_field('ipasudorunasgroup_group');
field.create(table_span);
function user_update_tables(value) {
var enabled = ('' === value);
var field = that.get_field('ipasudorunas_user');
var field = that.fields.get_field('ipasudorunas_user');
field.set_enabled(enabled);
field = that.get_field('ipasudorunas_group');
field = that.fields.get_field('ipasudorunas_group');
field.set_enabled(enabled);
}
var user_category = that.get_field('ipasudorunasusercategory');
var user_category = that.fields.get_field('ipasudorunasusercategory');
user_category.reset = function() {
user_category.widget_reset();
var values = user_category.save();
@ -1099,11 +1099,11 @@ IPA.sudo.rule_details_runas_section = function(spec) {
var enabled = ('' === value);
var field = that.get_field('ipasudorunasgroup_group');
var field = that.fields.get_field('ipasudorunasgroup_group');
field.set_enabled(enabled);
}
var group_category = that.get_field('ipasudorunasgroupcategory');
var group_category = that.fields.get_field('ipasudorunasgroupcategory');
group_category.reset = function() {
group_category.widget_reset();
var values = group_category.save();

View File

@ -64,7 +64,7 @@ test("Testing IPA.details_section.create().", function() {
section.entity_name = 'user';
var fields = section.fields.values;
var fields = section.fields.get_fields();
var container = $("<div/>");
section.create(container);
@ -276,7 +276,7 @@ test("Testing IPA.details_section_create again()",function(){
text({name:'cn', label:'Entity Name'}).
text({name:'description', label:'Description'}).
text({name:'number', label:'Entity ID'});
var fields = section.fields.values;
var fields = section.fields.get_fields();
var container = $("<div title='entity'/>");
var details = $("<div/>");
container.append(details);

View File

@ -181,8 +181,8 @@ IPA.user_adder_dialog = function(spec) {
that.validate = function() {
var valid = that.dialog_validate();
var field1 = that.get_field('userpassword');
var field2 = that.get_field('userpassword2');
var field1 = that.fields.get_field('userpassword');
var field2 = that.fields.get_field('userpassword2');
var password1 = field1.save()[0];
var password2 = field2.save()[0];

View File

@ -1786,6 +1786,171 @@ IPA.button = function(spec) {
return button;
};
IPA.composite_widget = function(spec) {
spec = spec || {};
var that = IPA.widget(spec);
that.widgets = IPA.widget_container();
that.create = function(container) {
that.widget_create(container);
that.widgets.create(container);
};
that.clear = function() {
var widgets = that.widgets.get_widgets();
for (var i=0; i< widgets.length; i++) {
widgets[i].clear();
}
};
that.composite_widget_create = that.create;
that.composite_widget_clear = that.clear;
return that;
};
IPA.collapsible_section = function(spec) {
spec = spec || {};
var that = IPA.composite_widget(spec);
that.create = function(container) {
that.header = $('<h2/>', {
name: that.name,
title: that.label
}).appendTo(container);
that.icon = $('<span/>', {
name: 'icon',
'class': 'icon section-expand '+IPA.expanded_icon
}).appendTo(that.header);
that.header.append(' ');
that.header.append(that.label);
that.content_container = $('<div/>', {
name: that.name,
'class': 'details-section'
}).appendTo(container);
that.header.click(function() {
var visible = that.content_container.is(":visible");
that.toggle(!visible);
});
that.composite_widget_create(that.content_container);
};
that.toggle = function(visible) {
that.icon.toggleClass(IPA.expanded_icon, visible);
that.icon.toggleClass(IPA.collapsed_icon, !visible);
if (visible != that.content_container.is(":visible")) {
that.content_container.slideToggle('slow');
}
};
return that;
};
IPA.details_section = IPA.collapsible_section;
IPA.details_table_section = function(spec) {
spec = spec || {};
var that = IPA.details_section(spec);
that.rows = $.ordered_map();
that.composite_widget_create = function(container) {
var table = $('<table/>', {
'class': 'section-table'
}).appendTo(container);
var widgets = that.widgets.get_widgets();
for (var i=0; i<widgets.length; i++) {
var widget = widgets[i];
var tr = $('<tr/>');
that.add_row(widget.name, tr);
if (widget.hidden) {
tr.css('display', 'none');
}
tr.appendTo(table);
var td = $('<td/>', {
'class': 'section-cell-label',
title: widget.label
}).appendTo(tr);
$('<label/>', {
name: widget.name,
'class': 'field-label',
text: widget.label+':'
}).appendTo(td);
if(widget.create_required) {
widget.create_required(td);
}
td = $('<td/>', {
'class': 'section-cell-field',
title: widget.label
}).appendTo(tr);
var widget_container = $('<div/>', {
name: widget.name,
'class': 'field'
}).appendTo(td);
widget.create(widget_container);
}
};
that.add_row = function(name, row) {
that.rows.put(name, row);
};
that.get_row = function(name) {
return that.rows.get(name);
};
that.set_row_visible = function(name, visible) {
var row = that.get_row(name);
row.css('display', visible ? '' : 'none');
};
that.table_section_create = that.composite_widget_create;
return that;
};
//non-collabsible section
IPA.details_table_section_nc = function(spec) {
spec = spec || {};
var that = IPA.details_table_section(spec);
that.create = that.table_section_create;
return that;
};
IPA.observer = function(spec) {
var that = {};