diff options
Diffstat (limited to 'install/static/entity.js')
-rw-r--r-- | install/static/entity.js | 65 |
1 files changed, 49 insertions, 16 deletions
diff --git a/install/static/entity.js b/install/static/entity.js index f26f219b7..24a49fc76 100644 --- a/install/static/entity.js +++ b/install/static/entity.js @@ -28,11 +28,19 @@ function ipa_facet(spec) { var that = {}; that.name = spec.name; that.label = spec.label; - that.entity_name = spec.entity_name; + that._entity_name = spec.entity_name; that.init = spec.init; that.setup = spec.setup; + that.__defineGetter__("entity_name", function(){ + return that._entity_name; + }); + + that.__defineSetter__("entity_name", function(entity_name){ + that._entity_name = entity_name; + }); + that.setup_views = ipa_facet_setup_views; return that; @@ -55,6 +63,9 @@ function ipa_entity(spec) { this.facet_name = null; + that.associations = []; + that.associations_by_name = {}; + that.get_add_dialog = function() { return that.add_dialog; }; @@ -74,31 +85,49 @@ function ipa_entity(spec) { }; that.add_facet = function(facet) { + facet.entity_name = that.name; that.facets.push(facet); that.facets_by_name[facet.name] = facet; }; that.create_search_facet = function(spec) { - spec.entity_name = that.name; var facet = ipa_search_facet(spec); that.add_facet(facet); return facet; }; that.create_details_facet = function(spec) { - spec.entity_name = that.name; var facet = ipa_details_facet(spec); that.add_facet(facet); + facet.init(); return facet; }; that.create_association_facet = function(spec) { - spec.entity_name = that.name; var facet = ipa_association_facet(spec); that.add_facet(facet); return facet; }; + that.get_associations = function() { + return that.associations; + }; + + that.get_association = function(name) { + return that.associations_by_name[name]; + }; + + that.add_association = function(config) { + that.associations.push(config); + that.associations_by_name[config.name] = config; + }; + + that.create_association = function(spec) { + var config = ipa_association_config(spec); + that.add_association(config); + return config; + }; + return that; } @@ -213,14 +242,17 @@ function ipa_entity_get_association_facet(entity_name) { function ipa_entity_set_association_definition(entity_name, data) { - var facet = ipa_entity_get_association_facet(entity_name); + var entity = ipa_get_entity(entity_name); + + ipa_entity_get_association_facet(entity_name); for (var other_entity in data) { var config = data[other_entity]; - facet.create_config({ + entity.create_association({ 'name': other_entity, 'associator': config.associator, - 'method': config.method + 'add_method': config.add_method, + 'delete_method': config.delete_method }); } } @@ -231,7 +263,6 @@ function ipa_entity_set_facet_definition(entity_name, list) { for (var i=0; i<list.length; i++) { var facet = list[i]; - facet.entity_name = entity_name; entity.add_facet(facet); } } @@ -244,8 +275,6 @@ function ipa_entity_setup(container, unspecified) { var entity = this; - container.empty(); - var facet_name = $.bbq.getState(entity.name + '-facet', true) || unspecified || 'search'; var facet = entity.get_facet(facet_name); @@ -262,6 +291,8 @@ function ipa_entity_setup(container, unspecified) { IPA.entity_name = entity.name; } + container.empty(); + if (facet.setup) { facet.setup(container, unspecified); } @@ -271,7 +302,7 @@ function ipa_facet_setup_views(container) { var facet = this; - var ul = $('<ul/>', {'class': 'entity-views'}); + var ul = $('<ul/>', {'class': 'entity-views'}).appendTo(container); var entity = IPA.get_entity(facet.entity_name); var facets = entity.get_facets(); @@ -289,7 +320,9 @@ function ipa_facet_setup_views(container) { title: other_facet.name, text: label, click: function(entity_name, facet_name) { - return function() { IPA.show_page(entity_name, facet_name); } + return function() { + IPA.show_page(entity_name, facet_name); + }; }(facet.entity_name, facet_name) })); @@ -308,20 +341,20 @@ function ipa_facet_setup_views(container) { title: other_entity, text: label, click: function(entity_name, facet_name, other_entity) { - return function() { IPA.show_page(entity_name, facet_name, other_entity); } + return function() { + IPA.show_page(entity_name, facet_name, other_entity); + }; }(facet.entity_name, facet_name, other_entity) })); } } } } - - container.append(ul); } function ipa_entity_quick_links(tr, attr, value, entry_attrs) { - var obj_name = tr.closest('.search-container').attr('title'); + var obj_name = tr.closest('.entity-container').attr('title'); var pkey = IPA.metadata[obj_name].primary_key; var pkey_value = entry_attrs[pkey][0]; |