diff options
-rw-r--r-- | install/ui/aci.js | 26 | ||||
-rw-r--r-- | install/ui/details.js | 13 | ||||
-rw-r--r-- | install/ui/entity.js | 55 | ||||
-rw-r--r-- | install/ui/group.js | 153 | ||||
-rw-r--r-- | install/ui/hbacrule.js | 5 | ||||
-rw-r--r-- | install/ui/hbacsvc.js | 7 | ||||
-rw-r--r-- | install/ui/hbacsvcgroup.js | 8 | ||||
-rw-r--r-- | install/ui/host.js | 6 | ||||
-rw-r--r-- | install/ui/hostgroup.js | 6 | ||||
-rw-r--r-- | install/ui/ipa.js | 16 | ||||
-rw-r--r-- | install/ui/netgroup.js | 5 | ||||
-rw-r--r-- | install/ui/policy.js | 43 | ||||
-rw-r--r-- | install/ui/search.js | 9 | ||||
-rw-r--r-- | install/ui/serverconfig.js | 41 | ||||
-rw-r--r-- | install/ui/service.js | 6 | ||||
-rw-r--r-- | install/ui/sudocmd.js | 6 | ||||
-rw-r--r-- | install/ui/sudocmdgroup.js | 8 | ||||
-rw-r--r-- | install/ui/sudorule.js | 6 | ||||
-rw-r--r-- | install/ui/test/details_tests.js | 17 | ||||
-rw-r--r-- | install/ui/test/entity_tests.js | 35 | ||||
-rw-r--r-- | install/ui/test/navigation_tests.js | 52 | ||||
-rw-r--r-- | install/ui/user.js | 149 | ||||
-rw-r--r-- | install/ui/webui.js | 5 | ||||
-rw-r--r-- | install/ui/widget.js | 7 |
24 files changed, 313 insertions, 371 deletions
diff --git a/install/ui/aci.js b/install/ui/aci.js index b1ac1d529..f7d7266f5 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 aad77a9c4..84a5c4098 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 c5c423dba..8d39b8e79 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 13017ac5a..0188031f7 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 8b354312d..6983e7923 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 dc0bc3230..c190c8cde 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 2dd049cbe..381dcb0bc 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 422c87a77..453b61788 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 0525c05f2..b7d3e8d3c 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 725bf17c5..406dce6d4 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 205673514..052008439 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 fedf40726..7f078a728 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 934000b9f..b88de20a7 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 6c0a824b4..dbf46df43 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 e24088848..69b4777ca 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 e398ae8fa..335bb3e44 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 6cb2b83dc..c0ce2aa08 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 427a368a8..ab4d9ab4f 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 d832bd26d..38609072f 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 21fff48f8..a5878a6ce 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 bc198ac0c..916259b41 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 1b499a824..fcec05e22 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 f5b77c851..06b76c358 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 f34532d23..cea86fad0 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]; |