summaryrefslogtreecommitdiffstats
path: root/install
diff options
context:
space:
mode:
authorAdam Young <ayoung@redhat.com>2011-01-19 21:10:18 -0500
committerAdam Young <ayoung@redhat.com>2011-01-27 16:46:44 -0500
commitf904df0f0dfd4734f978cdc3ddf5badabc067ed6 (patch)
treea9da10718ae2982b0f8721cdf7df4bad05532f93 /install
parent442d6ad30ce1156914e6245aa7502499e50ec0da (diff)
downloadfreeipa-f904df0f0dfd4734f978cdc3ddf5badabc067ed6.tar.gz
freeipa-f904df0f0dfd4734f978cdc3ddf5badabc067ed6.tar.xz
freeipa-f904df0f0dfd4734f978cdc3ddf5badabc067ed6.zip
declarative defintions
Delay the creation of entities until after ipa init is called made the user and group entity definitions declarative removed unused facet from groups adjusted unit tests made review changes: factories are now in an associative array entity init called right after factory init dialogs in entity init fixed type on search
Diffstat (limited to 'install')
-rw-r--r--install/ui/aci.js26
-rw-r--r--install/ui/details.js13
-rw-r--r--install/ui/entity.js55
-rw-r--r--install/ui/group.js153
-rw-r--r--install/ui/hbacrule.js5
-rw-r--r--install/ui/hbacsvc.js7
-rw-r--r--install/ui/hbacsvcgroup.js8
-rw-r--r--install/ui/host.js6
-rw-r--r--install/ui/hostgroup.js6
-rw-r--r--install/ui/ipa.js16
-rw-r--r--install/ui/netgroup.js5
-rw-r--r--install/ui/policy.js43
-rw-r--r--install/ui/search.js9
-rw-r--r--install/ui/serverconfig.js41
-rw-r--r--install/ui/service.js6
-rw-r--r--install/ui/sudocmd.js6
-rw-r--r--install/ui/sudocmdgroup.js8
-rw-r--r--install/ui/sudorule.js6
-rw-r--r--install/ui/test/details_tests.js17
-rw-r--r--install/ui/test/entity_tests.js35
-rw-r--r--install/ui/test/navigation_tests.js52
-rw-r--r--install/ui/user.js149
-rw-r--r--install/ui/webui.js5
-rw-r--r--install/ui/widget.js7
24 files changed, 313 insertions, 371 deletions
diff --git a/install/ui/aci.js b/install/ui/aci.js
index b1ac1d52..f7d7266f 100644
--- a/install/ui/aci.js
+++ b/install/ui/aci.js
@@ -561,7 +561,7 @@ IPA.target_section = function () {
};
-IPA.permission = function () {
+IPA.entity_factories.permission = function () {
var that = IPA.entity({
'name': 'permission'
@@ -593,9 +593,6 @@ IPA.permission = function () {
};
-IPA.add_entity(IPA.permission());
-
-
IPA.permission_add_dialog = function (spec) {
@@ -675,7 +672,7 @@ IPA.permission_details_facet = function () {
};
-IPA.add_entity( function() {
+IPA.entity_factories.privilege = function() {
var that = IPA.entity({
'name': 'privilege'
});
@@ -715,10 +712,10 @@ IPA.add_entity( function() {
that.entity_init();
};
return that;
-}());
+};
-IPA.add_entity( function() {
+IPA.entity_factories.role = function() {
var that = IPA.entity({
'name': 'role'
});
@@ -756,10 +753,10 @@ IPA.add_entity( function() {
that.entity_init();
};
return that;
-}());
+};
-IPA.add_entity( function() {
+IPA.entity_factories.selfservice = function() {
var that = IPA.entity({
'name': 'selfservice'
});
@@ -783,7 +780,8 @@ IPA.add_entity( function() {
that.init = function() {
that.add_section(
- IPA.stanza({name:'general', label:'General'}).
+ IPA.stanza({name:'general', label:'General',
+ entity_name:'selfservice'}).
input({name:'aciname'}).
custom_input(IPA.attribute_table_widget({
object_type:'user',
@@ -793,7 +791,6 @@ IPA.add_entity( function() {
return that;
}());
-
that.parent_init = that.init;
that.init = function(){
that.parent_init();
@@ -810,10 +807,10 @@ IPA.add_entity( function() {
dialog.init();
};
return that;
-}());
+};
-IPA.add_entity( function() {
+IPA.entity_factories.delegation = function() {
var that = IPA.entity({
'name': 'delegation'
});
@@ -870,4 +867,5 @@ IPA.add_entity( function() {
};
return that;
-}());
+
+};
diff --git a/install/ui/details.js b/install/ui/details.js
index aad77a9c..84a5c409 100644
--- a/install/ui/details.js
+++ b/install/ui/details.js
@@ -485,6 +485,7 @@ IPA.stanza = function (spec) {
IPA.details_facet = function (spec) {
spec = spec || {};
+ spec.name = spec.name || 'details';
var that = IPA.facet(spec);
@@ -498,8 +499,6 @@ IPA.details_facet = function (spec) {
that.refresh = spec.refresh || IPA.details_refresh;
that.sections = [];
- that.sections_by_name = {};
-
that.__defineGetter__("entity_name", function(){
return that._entity_name;
});
@@ -512,17 +511,17 @@ IPA.details_facet = function (spec) {
}
});
- that.get_section = function(name) {
- return that.sections_by_name[name];
- };
-
that.add_section = function(section) {
section.entity_name = that.entity_name;
that.sections.push(section);
- that.sections_by_name[section.name] = section;
return section;
};
+ that.section = function(section) {
+ that.add_section(section);
+ return that;
+ };
+
that.create_section = function(spec) {
var section = IPA.details_section(spec);
that.add_section(section);
diff --git a/install/ui/entity.js b/install/ui/entity.js
index c5c423db..8d39b8e7 100644
--- a/install/ui/entity.js
+++ b/install/ui/entity.js
@@ -110,8 +110,17 @@ IPA.entity = function (spec) {
dialog.entity_name = that.name;
that.dialogs.push(dialog);
that.dialogs_by_name[dialog.name] = dialog;
+ return that;
};
+ function init_dialogs (){
+ var i;
+ for (i = 0; i < that.dialogs.length; i += 1){
+ that.dialogs[i].init();
+ }
+ return that;
+ }
+
that.get_facet = function(name) {
return that.facets_by_name[name];
};
@@ -120,6 +129,14 @@ IPA.entity = function (spec) {
facet.entity_name = that.name;
that.facets.push(facet);
that.facets_by_name[facet.name] = facet;
+ return that;
+ };
+
+ that.facet = function(facet) {
+ facet.entity_name = that.name;
+ that.facets.push(facet);
+ that.facets_by_name[facet.name] = facet;
+ return that;
};
that.get_associations = function() {
@@ -141,6 +158,13 @@ IPA.entity = function (spec) {
return config;
};
+ that.association = function(spec) {
+ var config = IPA.association_config(spec);
+ that.add_association(config);
+ return that;
+ };
+
+
that.create_association_facet = function(attribute_member, other_entity, label, facet_group) {
if (!attribute_member) {
@@ -190,8 +214,12 @@ IPA.entity = function (spec) {
that.add_facet(facet);
}
}
+ return that;
};
+ that.standard_associations = that.create_association_facets;
+
+
that.init = function() {
if (!that.label) {
@@ -206,6 +234,7 @@ IPA.entity = function (spec) {
var facet = that.facets[i];
facet.init();
}
+ init_dialogs();
};
that.entity_init = that.init;
@@ -221,6 +250,7 @@ var window_hash_cache = {};
IPA.fetch_entity = function (entity_name) {
var entity = IPA.get_entity(entity_name);
+/*
if (entity) return entity;
entity = IPA.entity({
@@ -228,6 +258,7 @@ IPA.fetch_entity = function (entity_name) {
});
IPA.add_entity(entity);
+*/
return entity;
};
@@ -264,30 +295,6 @@ IPA.entity_set_search_definition = function (entity_name, data) {
};
-IPA.entity_set_add_definition = function (entity_name, data) {
-
- var entity = IPA.fetch_entity(entity_name);
-
- var dialog = IPA.add_dialog({
- 'name': 'add',
- 'title': data[1]
- });
- entity.add_dialog(dialog);
-
- for (var i=0; i<data[2].length; i++) {
- var field = data[2][i];
- dialog.add_field(IPA.text_widget({
- name: field[0],
- label: field[1],
- setup: field[2],
- undo: false
- }));
- }
-
- dialog.init();
-};
-
-
IPA.entity_get_add_dialog = function (entity_name) {
var entity = IPA.fetch_entity(entity_name);
diff --git a/install/ui/group.js b/install/ui/group.js
index 13017ac5..0188031f 100644
--- a/install/ui/group.js
+++ b/install/ui/group.js
@@ -2,6 +2,8 @@
/* Authors:
* Pavel Zuna <pzuna@redhat.com>
+ * Endi Dewata <edewata@redhat.com>
+ * Adam Young <ayoung@redhat.com>
*
* Copyright (C) 2010 Red Hat
* see file 'COPYING' for use and warranty information
@@ -22,123 +24,53 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.group = function () {
+IPA.entity_factories.group = function () {
- var that = IPA.entity({
+ return IPA.entity({
'name': 'group'
- });
-
- that.init = function() {
-
- that.create_association({
+ }).
+ facet(IPA.search_facet().
+ column({name:'cn'}).
+ column({name:'gidnumber'}).
+ column({name:'description'})).
+ facet(
+ IPA.details_facet().section(
+ IPA.stanza({label: 'Group Settings' }).
+ input({name: 'cn' }).
+ input({name: 'description'}).
+ input({name: 'gidnumber' }))).
+ facet( IPA.group_member_user_facet({
+ 'name': 'member_user',
+ 'label': 'Users',
+ 'other_entity': 'user'
+ })).
+ association({
name: 'netgroup',
associator: 'serial'
- });
-
- that.create_association({
+ }).
+ association({
name: 'rolegroup',
associator: 'serial'
- });
-
- that.create_association({
+ }).
+ association({
name: 'taskgroup',
associator: 'serial'
- });
-
- var dialog = IPA.group_add_dialog({
- 'name': 'add',
- 'title': 'Add New Group'
- });
- that.add_dialog(dialog);
- dialog.init();
-
- var facet = IPA.group_search_facet({
- 'name': 'search',
- 'label': 'Search'
- });
- that.add_facet(facet);
-
- facet = IPA.group_details_facet({
- 'name': 'details'
- });
- that.add_facet(facet);
-
- that.create_association_facets();
-
- that.entity_init();
- };
-
- return that;
-};
-
-
-IPA.add_entity(IPA.group());
-
-
-IPA.group_add_dialog = function (spec) {
-
- spec = spec || {};
-
- var that = IPA.add_dialog(spec);
-
- that.init = function() {
-
- that.add_field(IPA.text_widget({name:'cn', undo: false}));
- that.add_field(IPA.text_widget({name:'description', undo: false}));
- // TODO: Replace with i18n label
- that.add_field(IPA.checkbox_widget({
- name:'posix',
- label:'Is this a POSIX group?',
- undo: false,
- checked:'checked'}));
- that.add_field(IPA.text_widget({name:'gidnumber', undo: false}));
-
- that.add_dialog_init();
- };
-
- return that;
-};
-
-
-IPA.group_search_facet = function (spec) {
-
- spec = spec || {};
-
- var that = IPA.search_facet(spec);
-
- that.init = function() {
- that.create_column({name:'cn'});
- that.create_column({name:'gidnumber'});
- that.create_column({name:'description'});
- that.search_facet_init();
- };
-
- return that;
-};
-
-
-IPA.group_details_facet = function (spec) {
-
- spec = spec || {};
-
- var that = IPA.details_facet(spec);
-
- that.init = function() {
-
- var section = IPA.details_list_section({
- name: 'details',
- label: 'Group Settings'
- });
- that.add_section(section);
-
- section.create_field({name: 'cn' });
- section.create_field({name: 'description'});
- section.create_field({name: 'gidnumber' });
-
- that.details_facet_init();
- };
-
- return that;
+ }).
+ add_dialog(
+ IPA.add_dialog({
+ 'name': 'add',
+ 'title': 'Add New Group'
+ }).
+ field(IPA.text_widget({name:'cn', undo: false})).
+ field(IPA.text_widget({name:'description', undo: false})).
+ // TODO: Replace with i18n label
+ field(IPA.checkbox_widget({
+ name:'posix',
+ label:'Is this a POSIX group?',
+ undo: false,
+ checked:'checked'})).
+ field(IPA.text_widget({name:'gidnumber', undo: false}))).
+ standard_associations();
};
@@ -198,4 +130,5 @@ IPA.group_member_user_facet = function (spec) {
};
return that;
-};
+
+}; \ No newline at end of file
diff --git a/install/ui/hbacrule.js b/install/ui/hbacrule.js
index 8b354312..6983e792 100644
--- a/install/ui/hbacrule.js
+++ b/install/ui/hbacrule.js
@@ -22,7 +22,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.hbacrule = function () {
+IPA.entity_factories.hbacrule = function () {
var that = IPA.entity({
'name': 'hbacrule'
@@ -35,7 +35,7 @@ IPA.hbacrule = function () {
'title': 'Add New Rule'
});
that.add_dialog(dialog);
- dialog.init();
+
var facet = IPA.hbacrule_search_facet({
'name': 'search',
@@ -55,7 +55,6 @@ IPA.hbacrule = function () {
};
-IPA.add_entity(IPA.hbacrule());
IPA.hbacrule_add_dialog = function (spec) {
diff --git a/install/ui/hbacsvc.js b/install/ui/hbacsvc.js
index dc0bc323..c190c8cd 100644
--- a/install/ui/hbacsvc.js
+++ b/install/ui/hbacsvc.js
@@ -22,7 +22,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.hbacsvc = function () {
+IPA.entity_factories.hbacsvc = function () {
var that = IPA.entity({
'name': 'hbacsvc'
@@ -35,8 +35,7 @@ IPA.hbacsvc = function () {
'title': 'Add New HBAC Service'
});
that.add_dialog(dialog);
- dialog.init();
-
+
var facet = IPA.hbacsvc_search_facet({
'name': 'search',
'label': 'Search'
@@ -55,8 +54,6 @@ IPA.hbacsvc = function () {
};
-IPA.add_entity(IPA.hbacsvc());
-
IPA.hbacsvc_add_dialog = function (spec) {
diff --git a/install/ui/hbacsvcgroup.js b/install/ui/hbacsvcgroup.js
index 2dd049cb..381dcb0b 100644
--- a/install/ui/hbacsvcgroup.js
+++ b/install/ui/hbacsvcgroup.js
@@ -22,7 +22,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.hbacsvcgroup = function () {
+IPA.entity_factories.hbacsvcgroup = function () {
var that = IPA.entity({
'name': 'hbacsvcgroup'
@@ -41,8 +41,7 @@ IPA.hbacsvcgroup = function () {
'title': 'Add New HBAC Service Group'
});
that.add_dialog(dialog);
- dialog.init();
-
+
var facet = IPA.hbacsvcgroup_search_facet({
'name': 'search',
'label': 'Search'
@@ -61,9 +60,6 @@ IPA.hbacsvcgroup = function () {
};
-IPA.add_entity(IPA.hbacsvcgroup());
-
-
IPA.hbacsvcgroup_add_dialog = function (spec) {
spec = spec || {};
diff --git a/install/ui/host.js b/install/ui/host.js
index 422c87a7..453b6178 100644
--- a/install/ui/host.js
+++ b/install/ui/host.js
@@ -24,7 +24,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.host = function () {
+IPA.entity_factories.host = function () {
var that = IPA.entity({
'name': 'host'
@@ -47,7 +47,6 @@ IPA.host = function () {
'title': 'Add New Host'
});
that.add_dialog(dialog);
- dialog.init();
var facet = IPA.host_search_facet({
'name': 'search',
@@ -76,9 +75,6 @@ IPA.host = function () {
};
-IPA.add_entity(IPA.host());
-
-
IPA.host_add_dialog = function (spec) {
spec = spec || {};
diff --git a/install/ui/hostgroup.js b/install/ui/hostgroup.js
index 0525c05f..b7d3e8d3 100644
--- a/install/ui/hostgroup.js
+++ b/install/ui/hostgroup.js
@@ -23,7 +23,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.add_entity( function() {
+IPA.entity_factories.hostgroup = function() {
var that = IPA.entity({
'name': 'hostgroup'
});
@@ -55,13 +55,11 @@ IPA.add_entity( function() {
dialog.add_field(IPA.text_widget({name: 'cn', undo: false}));
dialog.add_field(IPA.text_widget({name: 'description', undo: false}));
- dialog.init();
-
that.create_association_facets();
that.entity_init();
};
return that;
-}());
+};
diff --git a/install/ui/ipa.js b/install/ui/ipa.js
index 725bf17c..406dce6d 100644
--- a/install/ui/ipa.js
+++ b/install/ui/ipa.js
@@ -49,6 +49,8 @@ var IPA = ( function () {
that.entities = [];
+ that.entity_factories = {};
+
that.entities_by_name = {};
that.error_dialog = $('<div/>', {
@@ -113,11 +115,21 @@ var IPA = ( function () {
return that.entities_by_name[name];
};
- that.add_entity = function (entity) {
+ function add_entity(entity) {
that.entities.push(entity);
that.entities_by_name[entity.name] = entity;
- };
+ }
+ that.start_entities = function(){
+ var factory;
+ var name ;
+ for (name in that.entity_factories){
+ factory = that.entity_factories[name];
+ var entity = factory();
+ add_entity(entity);
+ entity.init();
+ }
+ };
that.show_page = function (entity_name, facet_name) {
diff --git a/install/ui/netgroup.js b/install/ui/netgroup.js
index 20567351..05200843 100644
--- a/install/ui/netgroup.js
+++ b/install/ui/netgroup.js
@@ -22,7 +22,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.add_entity( function() {
+IPA.entity_factories.netgroup = function() {
var that = IPA.entity({
'name': 'netgroup'
});
@@ -55,13 +55,12 @@ IPA.add_entity( function() {
dialog.add_field(IPA.text_widget({ name: 'cn', undo: false}));
dialog.add_field(IPA.text_widget({ name: 'description', undo: false}));
- dialog.init();
that.create_association_facets();
that.entity_init();
};
return that;
-}());
+};
diff --git a/install/ui/policy.js b/install/ui/policy.js
index fedf4072..7f078a72 100644
--- a/install/ui/policy.js
+++ b/install/ui/policy.js
@@ -24,8 +24,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
/* DNS */
-
-IPA.add_entity(function (){
+IPA.entity_factories.dnszone = function() {
var that = IPA.entity({
name: 'dnszone'
});
@@ -74,15 +73,14 @@ IPA.add_entity(function (){
dialog.add_field(IPA.text_widget({ name: 'idnsname', undo: false}));
dialog.add_field(IPA.text_widget({ name: 'idnssoamname', undo: false}));
dialog.add_field(IPA.text_widget({ name: 'idnssoarname', undo: false}));
- dialog.init();
+
that.create_association_facets();
that.entity_init();
};
-
return that;
-}());
+};
IPA.records_facet = function (spec){
@@ -418,7 +416,6 @@ IPA.records_facet = function (spec){
options.data = data_filter;
}
-
var pkey = $.bbq.getState(that.entity_name + '-pkey', true);
IPA.cmd('dnsrecord_find',[pkey],options,load_on_win, load_on_fail);
@@ -499,7 +496,7 @@ IPA.records_facet = function (spec){
/**Automount*/
-IPA.add_entity(function (){
+IPA.entity_factories.automountlocation = function (){
var that = IPA.entity({
name: 'automountlocation'
});
@@ -530,20 +527,19 @@ IPA.add_entity(function (){
that.add_dialog(dialog);
dialog.add_field(IPA.text_widget({ name: 'cn', undo: false}));
- dialog.init();
that.create_association_facets();
that.entity_init();
};
return that;
-}());
+};
/**pwpolicy*/
-IPA.add_entity(function (){
+IPA.entity_factories.pwpolicy = function() {
var that = IPA.entity({
name: 'pwpolicy'
});
@@ -580,14 +576,13 @@ IPA.add_entity(function (){
that.add_dialog(dialog);
dialog.add_field(IPA.text_widget({ name: 'cn', undo: false}));
- dialog.init();
that.create_association_facets();
that.entity_init();
};
return that;
-}());
+};
@@ -595,13 +590,19 @@ IPA.add_entity(function (){
krbtpolicy
Does not have search
*/
+IPA.entity_factories.krbtpolicy = function() {
+ var that = IPA.entity({
+ name: 'krbtpolicy'
+ });
-IPA.entity_set_details_definition('krbtpolicy', [
- IPA.stanza({name:'identity', label:'Kerberos ticket policy'}).
- //input({name:'uid',label:' '}).
- input({name:'krbmaxrenewableage'}).
- input({name:'krbmaxticketlife'})
-]);
-
-IPA.entity_set_association_definition('krbtpolicy', {
-});
+ var details = IPA.details_facet({
+ 'name': 'details'
+ });
+ details.add_section(
+ IPA.stanza({name:'identity', label:'Kerberos ticket policy'}).
+ //input({name:'uid',label:' '}).
+ input({name:'krbmaxrenewableage'}).
+ input({name:'krbmaxticketlife'}));
+ that.add_facet(details);
+ return that;
+};
diff --git a/install/ui/search.js b/install/ui/search.js
index 934000b9..b88de20a 100644
--- a/install/ui/search.js
+++ b/install/ui/search.js
@@ -254,6 +254,10 @@ IPA.search_facet = function (spec) {
spec = spec || {};
+ spec.name = spec.name || 'search';
+ spec.label = spec.label || IPA.messages.facets.search;
+
+
spec.display_class = 'search-facet';
var that = IPA.facet(spec);
@@ -298,6 +302,11 @@ IPA.search_facet = function (spec) {
return column;
};
+ that.column = function(spec){
+ that.create_column(spec);
+ return that;
+ };
+
that.setup_column = function(column) {
column.setup = function(container, record) {
container.empty();
diff --git a/install/ui/serverconfig.js b/install/ui/serverconfig.js
index 6c0a824b..dbf46df4 100644
--- a/install/ui/serverconfig.js
+++ b/install/ui/serverconfig.js
@@ -26,18 +26,29 @@
/* Configuration */
-IPA.entity_set_details_definition('config',[
-
- IPA.stanza({name:'ipaserver', label:'Configuration'}).
- input({name:'cn', label:'Name'}).
- input({name:'ipacertificatesubjectbase'}).
- input({name:'ipadefaultloginshell'}).
- input({name:'ipadefaultprimarygroup'}).
- input({name:'ipagroupsearchfields'}).
- input({name:'ipahomesrootdir'}).
- input({name:'ipamaxusernamelength'}).
- input({name:'ipamigrationenabled'}).
- input({name:'ipasearchrecordslimit'}).
- input({name:'ipasearchtimelimit'}).
- input({name:'ipausersearchfields'})
-]);
+
+IPA.entity_factories.config = function(){
+
+ var that = IPA.entity({
+ name: 'config'
+ });
+
+ var details = IPA.details_facet();
+
+ details.add_section(
+ IPA.stanza({name:'ipaserver', label:'Configuration'}).
+ input({name:'cn', label:'Name'}).
+ input({name:'ipacertificatesubjectbase'}).
+ input({name:'ipadefaultloginshell'}).
+ input({name:'ipadefaultprimarygroup'}).
+ input({name:'ipagroupsearchfields'}).
+ input({name:'ipahomesrootdir'}).
+ input({name:'ipamaxusernamelength'}).
+ input({name:'ipamigrationenabled'}).
+ input({name:'ipasearchrecordslimit'}).
+ input({name:'ipasearchtimelimit'}).
+ input({name:'ipausersearchfields'}));
+
+ that.add_facet(details);
+ return that;
+}; \ No newline at end of file
diff --git a/install/ui/service.js b/install/ui/service.js
index e2408884..69b4777c 100644
--- a/install/ui/service.js
+++ b/install/ui/service.js
@@ -23,7 +23,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.service = function () {
+IPA.entity_factories.service = function () {
var that = IPA.entity({
'name': 'service'
@@ -42,7 +42,6 @@ IPA.service = function () {
'title': 'Add New Service'
});
that.add_dialog(dialog);
- dialog.init();
var facet = IPA.service_search_facet({
'name': 'search',
@@ -69,9 +68,6 @@ IPA.service = function () {
};
-IPA.add_entity(IPA.service());
-
-
IPA.service_add_dialog = function (spec) {
spec = spec || {};
diff --git a/install/ui/sudocmd.js b/install/ui/sudocmd.js
index e398ae8f..335bb3e4 100644
--- a/install/ui/sudocmd.js
+++ b/install/ui/sudocmd.js
@@ -22,7 +22,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.sudocmd = function () {
+IPA.entity_factories.sudocmd = function () {
var that = IPA.entity({
'name': 'sudocmd'
@@ -35,7 +35,6 @@ IPA.sudocmd = function () {
'title': 'Add New SUDO Command'
});
that.add_dialog(dialog);
- dialog.init();
var facet = IPA.sudocmd_search_facet({
'name': 'search',
@@ -55,9 +54,6 @@ IPA.sudocmd = function () {
};
-IPA.add_entity(IPA.sudocmd());
-
-
IPA.sudocmd_add_dialog = function (spec) {
spec = spec || {};
diff --git a/install/ui/sudocmdgroup.js b/install/ui/sudocmdgroup.js
index 6cb2b83d..c0ce2aa0 100644
--- a/install/ui/sudocmdgroup.js
+++ b/install/ui/sudocmdgroup.js
@@ -22,7 +22,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.sudocmdgroup = function () {
+IPA.entity_factories.sudocmdgroup = function () {
var that = IPA.entity({
'name': 'sudocmdgroup'
@@ -41,8 +41,7 @@ IPA.sudocmdgroup = function () {
'title': 'Add New SUDO Command Group'
});
that.add_dialog(dialog);
- dialog.init();
-
+
var facet = IPA.sudocmdgroup_search_facet({
'name': 'search',
'label': 'Search'
@@ -61,9 +60,6 @@ IPA.sudocmdgroup = function () {
};
-IPA.add_entity(IPA.sudocmdgroup());
-
-
IPA.sudocmdgroup_add_dialog = function (spec) {
spec = spec || {};
diff --git a/install/ui/sudorule.js b/install/ui/sudorule.js
index 427a368a..ab4d9ab4 100644
--- a/install/ui/sudorule.js
+++ b/install/ui/sudorule.js
@@ -22,7 +22,7 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.sudorule = function () {
+IPA.entity_factories.sudorule = function () {
var that = IPA.entity({
'name': 'sudorule'
@@ -35,7 +35,6 @@ IPA.sudorule = function () {
'title': 'Add New Rule'
});
that.add_dialog(dialog);
- dialog.init();
var facet = IPA.sudorule_search_facet({
'name': 'search',
@@ -55,9 +54,6 @@ IPA.sudorule = function () {
};
-IPA.add_entity(IPA.sudorule());
-
-
IPA.sudorule_add_dialog = function (spec) {
spec = spec || {};
diff --git a/install/ui/test/details_tests.js b/install/ui/test/details_tests.js
index d832bd26..38609072 100644
--- a/install/ui/test/details_tests.js
+++ b/install/ui/test/details_tests.js
@@ -19,7 +19,19 @@
*/
-module('details');
+module('details', {
+ setup: function() {
+ var obj_name = 'user';
+ IPA.register_entity(
+ function(){
+ return IPA.entity({name:obj_name});
+ });
+ IPA.start_entities();
+ },
+ teardown: function() {
+ }
+});
+
test("Testing IPA.details_section.create().", function() {
@@ -146,7 +158,10 @@ test("Testing details lifecycle: create, setup, load.", function(){
}
var container = $("<div/>");
+
var obj_name = 'user';
+
+
IPA.entity_set_details_definition(obj_name, [
IPA.stanza({name:'identity', label:'Identity Details'}).
input({name:'title'}).
diff --git a/install/ui/test/entity_tests.js b/install/ui/test/entity_tests.js
index 21fff48f..a5878a6c 100644
--- a/install/ui/test/entity_tests.js
+++ b/install/ui/test/entity_tests.js
@@ -18,7 +18,14 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-module('entity');
+module('entity',{
+ setup: function() {
+ IPA.register_entity(function(){return IPA.entity({name:'user'})});
+ IPA.start_entities();
+ },
+ teardown: function() {
+ }
+});
test('Testing IPA.entity_set_search_definition().', function() {
@@ -79,19 +86,25 @@ test('Testing ipa_facet_setup_views().', function() {
}
);
- var entity = IPA.entity({
- 'name': 'user'
- });
- IPA.add_entity(entity);
+ IPA.register_entity(function(){
+ var entity = IPA.entity({
+ 'name': 'user'
+ });
- var facet = IPA.search_facet({
- 'name': 'search',
- 'label': 'Search'
+ return entity;
});
- entity.add_facet(facet);
- entity.create_association_facets();
+ IPA.start_entities();
+
+ var entity = IPA.get_entity('user');
+ var facet = IPA.search_facet({
+ 'name': 'search',
+ 'label': 'Search'
+ });
+ entity.add_facet(facet);
+ entity.create_association_facets();
+
var container = $('<div/>');
@@ -167,5 +180,3 @@ test('Testing ipa_facet_setup_views().', function() {
IPA.switch_and_show_page = orig_switch_and_show_page;
});
-
-
diff --git a/install/ui/test/navigation_tests.js b/install/ui/test/navigation_tests.js
index bc198ac0..916259b4 100644
--- a/install/ui/test/navigation_tests.js
+++ b/install/ui/test/navigation_tests.js
@@ -23,28 +23,36 @@ module('navigation');
test("Testing nav_create().", function() {
- var mock_tabs_lists =
- [
- { name:'identity', label:'IDENTITY', children: [
- {name:'user', entity:'user'},
- {name:'group', entity:'group'}
- ]}];
-
- var entity = IPA.entity({name: 'user'});
- entity.setup = function(container){
- user_mock_called = true;
- same(container[0].id,'user','user id');
- same(container[0].nodeName,'DIV','user div');
- };
- IPA.add_entity(entity);
-
- entity = IPA.entity({name: 'group'});
- entity.setup = function(container){
- group_mock_called = true;
- same(container[0].id,'group','group id');
- same(container[0].nodeName,'DIV','group Div');
- };
- IPA.add_entity(entity);
+ var mock_tabs_lists = [
+ { name:'identity', label:'IDENTITY', children: [
+ {name:'user', entity:'user'},
+ {name:'group', entity:'group'}
+ ]}];
+
+ var entity;
+
+ IPA.register_entity( function() {
+ var that = IPA.entity({name: 'user'});
+ that.setup = function(container){
+ user_mock_called = true;
+ same(container[0].id,'user','user id');
+ same(container[0].nodeName,'DIV','user div');
+ }
+ return that;
+ });
+
+ IPA.register_entity( function(){
+
+ var that = IPA.entity({name: 'group'});
+ that.setup = function(container){
+ group_mock_called = true;
+ same(container[0].id,'group','group id');
+ same(container[0].nodeName,'DIV','group Div');
+ };
+ return that;
+ });
+
+ IPA.start_entities();
IPA.metadata = {};
var navigation = $('<div id="navigation"/>').appendTo(document.body);
diff --git a/install/ui/user.js b/install/ui/user.js
index 1b499a82..fcec05e2 100644
--- a/install/ui/user.js
+++ b/install/ui/user.js
@@ -2,6 +2,7 @@
/* Authors:
* Pavel Zuna <pzuna@redhat.com>
+ * Adam Young <ayoung@redhat.com>
*
* Copyright (C) 2010 Red Hat
* see file 'COPYING' for use and warranty information
@@ -22,108 +23,76 @@
/* REQUIRES: ipa.js, details.js, search.js, add.js, entity.js */
-IPA.user = function (){
+IPA.entity_factories.user = function (){
- var that = IPA.entity({
+ return IPA.entity({
name: 'user'
- });
-
- that.init = function() {
-
- that.create_association({
+ }).
+ association({
'name': 'group',
'associator': 'serial'
- });
-
- that.create_association({
+ }).
+ association({
'name': 'netgroup',
'associator': 'serial'
- });
-
- var search_facet = IPA.search_facet({
- 'name': 'search',
- 'label': 'Search',
- entity_name: that.name
- });
- that.add_facet(search_facet);
-
- search_facet.create_column({name:'cn'});
- search_facet.create_column({name:'uid'});
- search_facet.create_column({name:'uidnumber'});
- search_facet.create_column({name:'mail'});
- search_facet.create_column({name:'telephonenumber'});
- search_facet.create_column({name:'title'});
-
- that.add_facet(details_facet({name:'details'}));
-
- var dialog = IPA.add_dialog({
- 'name': 'add',
- 'title': 'Add User'
- });
- that.add_dialog(dialog);
-
- dialog.add_field(IPA.text_widget({ name: 'uid', undo: false }));
- dialog.add_field(IPA.text_widget({ name: 'givenname', undo: false }));
- dialog.add_field(IPA.text_widget({ name: 'sn', undo: false }));
- dialog.init();
-
- /*eventually, we need to call
- entity.create_association_facets();
- but we are currently defining the associator using the global
- function after the registration of the entity */
- that.create_association_facets();
-
- that.entity_init();
- };
-
- function details_facet(spec) {
- spec = spec || {};
- var that = IPA.details_facet(spec);
-
- var sections =[
- IPA.stanza({name:'identity', label:IPA.messages.details.identity}).
+ }).
+ facet(
+ IPA.search_facet().
+ column({name:'cn'}).
+ column({name:'uid'}).
+ column({name:'uidnumber'}).
+ column({name:'mail'}).
+ column({name:'telephonenumber'}).
+ column({name:'title'})).
+ facet(IPA.details_facet().
+ section(
+ IPA.stanza({label:IPA.messages.details.identity}).
input({name:'title'}).
input({name:'givenname'}).
input({name:'sn'}).
input({name:'cn'}).
input({name:'displayname'}).
- input({name:'initials'}),
- IPA.stanza({name:'account', label:IPA.messages.details.account}).
- custom_input(user_status_widget({name:'nsaccountlock'})).
- input({name:'uid'}).
- input({name:'userpassword', load: user_password_load}).
- input({name:'uidnumber'}).
- input({name:'gidnumber'}).
- input({name:'loginshell'}).
- input({name:'homedirectory'}),
- IPA.stanza({name:'contact', label:IPA.messages.details.contact}).
- input({name:'mail'}).
- input({name:'telephonenumber'}).
- input({name:'pager'}).
- input({name:'mobile'}).
- input({name:'facsimiletelephonenumber'}),
- IPA.stanza({name:'address', label: IPA.messages.details.mailing}).
- input({name:'street'}).
- input({name:'location'}).
- input({name:'state', load:user_state_load}).
- input({name:'postalcode'}),
- IPA.stanza({name:'employee', label:IPA.messages.details.employee}).
- input({name:'ou', label:'Org. Unit'}).
- input({name:'manager'}),
- IPA.stanza({name:'misc', label:IPA.messages.details.misc}).
- input({name:'carlicense'})
- ];
- for (var i = 0; i < sections.length; i += 1){
- that.add_section(sections[i]);
- }
- return that;
- }
- return that;
+ input({name:'initials'})).
+ section(
+ IPA.stanza({label:IPA.messages.details.account}).
+ custom_input(user_status_widget({name:'nsaccountlock'})).
+ input({name:'uid'}).
+ input({name:'userpassword', load: user_password_load}).
+ input({name:'uidnumber'}).
+ input({name:'gidnumber'}).
+ input({name:'loginshell'}).
+ input({name:'homedirectory'})).
+ section(
+ IPA.stanza({label:IPA.messages.details.contact}).
+ input({name:'mail'}).
+ input({name:'telephonenumber'}).
+ input({name:'pager'}).
+ input({name:'mobile'}).
+ input({name:'facsimiletelephonenumber'})).
+ section(
+ IPA.stanza({label: IPA.messages.details.mailing}).
+ input({name:'street'}).
+ input({name:'location'}).
+ input({name:'state', load:user_state_load}).
+ input({name:'postalcode'})).
+ section(
+ IPA.stanza({label:IPA.messages.details.employee}).
+ input({name:'ou', label:'Org. Unit'}).
+ input({name:'manager'})).
+ section(
+ IPA.stanza({label:IPA.messages.details.misc}).
+ input({name:'carlicense'}))).
+ standard_associations().
+ add_dialog(
+ IPA.add_dialog({
+ 'name': 'add',
+ 'title': 'Add User'
+ }).
+ field(IPA.text_widget({ name: 'uid', undo: false })).
+ field(IPA.text_widget({ name: 'givenname', undo: false })).
+ field(IPA.text_widget({ name: 'sn', undo: false })));
};
-
-IPA.add_entity(IPA.user());
-
/* ATTRIBUTE CALLBACKS */
@@ -294,5 +263,3 @@ function user_state_load(result) {
else
sel.val('');
}
-
-
diff --git a/install/ui/webui.js b/install/ui/webui.js
index f5b77c85..06b76c35 100644
--- a/install/ui/webui.js
+++ b/install/ui/webui.js
@@ -135,10 +135,7 @@ $(function() {
$('#loggedinas a').fragment(
{'user-facet':'details', 'user-pkey':IPA.whoami_pkey},2);
- for (var i=0; i<IPA.entities.length; i++) {
- var entity = IPA.entities[i];
- entity.init();
- }
+ IPA.start_entities();
var navigation = $('#navigation');
diff --git a/install/ui/widget.js b/install/ui/widget.js
index f34532d2..cea86fad 100644
--- a/install/ui/widget.js
+++ b/install/ui/widget.js
@@ -58,7 +58,7 @@ IPA.widget = function(spec) {
});
/*returns true and clears the error message if the field value passes
- the validation pattern. If the field value does not pass validation,
+ the validation pattern. If the field value does not pass validation,
displays the error message and returns false. */
function validate_input(text) {
if (!(that.param_info && that.param_info.pattern)) {
@@ -898,6 +898,11 @@ IPA.dialog = function(spec) {
that.fields_by_name[field.name] = field;
};
+ that.field = function(field){
+ that.add_field(field);
+ return that;
+ };
+
that.init = function() {
for (var i=0; i<that.fields.length; i++) {
var field = that.fields[i];