Added possibility to define facet/dialog specific policies

After deleting section as a special type of object a new way of defining inter-field logic is needed.

For this purpose a facet_policy was created. It is a simple object with init() method. Init method should contain logic for attaching to fields' or widgets' events.
When a policy is added to facet or dialog its container property should be set to that facet or dialog. It gives the policy an access to fields and widgets.
Init method should be called after widgets creation.

https://fedorahosted.org/freeipa/ticket/2040
This commit is contained in:
Petr Vobornik
2011-11-23 16:57:57 +01:00
committed by Endi S. Dewata
parent e021542120
commit 5b26a383ce
2 changed files with 79 additions and 1 deletions

View File

@@ -163,6 +163,70 @@ IPA.section_builder = function(spec) {
return that;
};
IPA.facet_policy = function() {
var that = {};
that.init = function() {
};
that.post_create = function() {
};
that.post_load = function() {
};
return that;
};
IPA.facet_policies = function(spec) {
var that = {};
that.container = spec.container;
that.policies = [];
that.add_policy = function(policy) {
policy.container = that.container;
that.policies.push(policy);
};
that.add_policies = function(policies) {
if (!policies) return;
for (var i=0; i<policies.length; i++) {
that.add_policy(policies[i]);
}
};
that.init = function() {
for (var i=0; i<that.policies.length; i++) {
that.policies[i].init();
}
};
that.post_create = function() {
for (var i=0; i<that.policies.length; i++) {
that.policies[i].post_create();
}
};
that.post_load = function(data) {
for (var i=0; i<that.policies.length; i++) {
that.policies[i].post_load(data);
}
};
that.add_policies(spec.policies);
return that;
};
IPA.details_facet = function(spec) {
spec = spec || {};
@@ -181,6 +245,10 @@ IPA.details_facet = function(spec) {
that.widgets = IPA.widget_container();
that.fields = IPA.field_container({ container: that });
that.policies = IPA.facet_policies({
container: that,
policies: spec.policies
});
that.fields.add_field = function(field) {
@@ -228,6 +296,7 @@ IPA.details_facet = function(spec) {
}
that.facet_create(container);
that.policies.post_create();
};
that.create_controls = function() {
@@ -390,6 +459,7 @@ IPA.details_facet = function(spec) {
var field = fields[i];
field.load(data);
}
that.policies.post_load(data);
that.enable_update(false);
};
@@ -658,6 +728,7 @@ IPA.details_facet = function(spec) {
that.create_builder();
that.builder.build(spec);
that.fields.widgets_created();
that.policies.init();
};
that.init();

View File

@@ -1,6 +1,7 @@
/*jsl:import ipa.js */
/* Authors:
* Endi Sukma Dewata <edewata@redhat.com>
* Petr Vobornik <pvoborni@redhat.com>
*
* Copyright (C) 2010 Red Hat
* see file 'COPYING' for use and warranty information
@@ -19,7 +20,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* REQUIRES: widget.js */
/* REQUIRES: widget.js, details.js */
IPA.dialog_button = function(spec) {
@@ -68,6 +69,10 @@ IPA.dialog = function(spec) {
that.widgets = IPA.widget_container();
that.fields = IPA.field_container({ container: that });
that.buttons = $.ordered_map();
that.policies = IPA.facet_policies({
container: that,
policies: spec.policies
});
that.create_button = function(spec) {
var factory = spec.factory || IPA.dialog_button;
@@ -122,6 +127,7 @@ IPA.dialog = function(spec) {
widget.create(div);
}
that.policies.post_create();
};
that.show_message = function(message) {
@@ -233,6 +239,7 @@ IPA.dialog = function(spec) {
that.create_builder();
that.builder.build(spec);
that.fields.widgets_created();
that.policies.init();
};
that.init();