diff options
Diffstat (limited to 'install/static/entity.js')
-rw-r--r-- | install/static/entity.js | 85 |
1 files changed, 49 insertions, 36 deletions
diff --git a/install/static/entity.js b/install/static/entity.js index 713dbf31..5d59b3c7 100644 --- a/install/static/entity.js +++ b/install/static/entity.js @@ -68,11 +68,11 @@ function ipa_facet(spec) { } that.get_client_area = function() { - return $('#' + that.entity_name+' .client'); + return $('.client', that.container); }; that.get_action_panel = function() { - return $('#' + that.entity_name+' .action-panel'); + return $('.action-panel', that.container); }; that.facet_init = that.init; @@ -100,6 +100,8 @@ function ipa_entity(spec) { that.facet_name = null; + that.autogenerate_associations = false; + that.associations = []; that.associations_by_name = {}; @@ -149,7 +151,46 @@ function ipa_entity(spec) { return config; }; + that.create_association_facet = function(other_entity, attribute_member) { + + var label = IPA.metadata[other_entity].label; + + if (!attribute_member) { + attribute_member = ipa_get_member_attribute( + that.entity_name, other_entity + ); + } + + return ipa_association_facet({ + 'name': attribute_member+'_'+other_entity, + 'label': label, + 'other_entity': other_entity + }); + }; + + that.create_association_facets = function() { + + var attribute_members = IPA.metadata[that.name].attribute_members; + + for (var attribute_member in attribute_members) { + var other_entities = attribute_members[attribute_member]; + + for (var j = 0; j < other_entities.length; j++) { + var other_entity = other_entities[j]; + + var facet = that.create_association_facet(other_entity, attribute_member); + if (that.get_facet(facet.name)) continue; + that.add_facet(facet); + } + } + }; + that.init = function() { + + if (that.autogenerate_associations) { + that.create_association_facets(); + } + for (var i=0; i<that.facets.length; i++) { var facet = that.facets[i]; facet.init(); @@ -261,26 +302,11 @@ function ipa_entity_set_details_definition(entity_name, sections) { } } -function ipa_entity_get_association_facet(entity_name) { - - var entity = ipa_get_entity(entity_name); - - var facet = entity.get_facet('associate'); - if (facet) return facet; - - facet = ipa_association_facet({ - 'name': 'associate' - }); - entity.add_facet(facet); - - return facet; -} - function ipa_entity_set_association_definition(entity_name, data) { var entity = ipa_get_entity(entity_name); - ipa_entity_get_association_facet(entity_name); + entity.autogenerate_associations = true; for (var other_entity in data) { var config = data[other_entity]; @@ -353,10 +379,10 @@ function ipa_facet_create_action_panel(container) { }) }).appendTo(container); - function build_link(other_facet,label,other_entity){ + function build_link(other_facet,label){ var li = $('<li/>', { "class" : other_facet.display_class, - title: other_entity, + title: other_facet.name, text: label, click: function(entity_name, other_facet_name) { return function() { @@ -366,7 +392,7 @@ function ipa_facet_create_action_panel(container) { var this_pkey = $('input[id=pkey]', action_panel).val(); IPA.switch_and_show_page( entity_name, other_facet_name, - this_pkey, other_entity); + this_pkey); return false; }; @@ -390,7 +416,7 @@ function ipa_facet_create_action_panel(container) { var other_facet = entity.facets[0]; var other_facet_name = other_facet.name; - var main_facet = build_link(other_facet,other_facet.label) + var main_facet = build_link(other_facet,other_facet.label); /*assumeing for now that entities with only a single facet do not have search*/ @@ -404,20 +430,7 @@ function ipa_facet_create_action_panel(container) { other_facet = entity.facets[i]; other_facet_name = other_facet.name; - if (other_facet.label) { - ul.append(build_link(other_facet,other_facet.label)); - - } else { // For now empty label indicates an association facet - var attribute_members = IPA.metadata[entity_name].attribute_members; - for (var attribute_member in attribute_members) { - var other_entities = attribute_members[attribute_member]; - for (var j = 0; j < other_entities.length; j++) { - var other_entity = other_entities[j]; - var label = IPA.metadata[other_entity].label; - ul.append(build_link(other_facet,label,other_entity)); - } - } - } + ul.append(build_link(other_facet,other_facet.label)); } /*When we land on the search page, disable all facets |