From b8b2ac53573620711ce1acfce34a919ffa23e143 Mon Sep 17 00:00:00 2001 From: Adam Young Date: Wed, 29 Jun 2011 09:26:49 -0400 Subject: containing entity pkeys Instead of looking for a match on the entity name, use the nesting structure of containing entites to grab their pkeys. Code review fixes https://fedorahosted.org/freeipa/ticket/674 --- install/ui/entity.js | 7 ++++++- install/ui/navigation.js | 28 +++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/install/ui/entity.js b/install/ui/entity.js index c04f85d6d..7fa00f1fa 100644 --- a/install/ui/entity.js +++ b/install/ui/entity.js @@ -597,7 +597,12 @@ IPA.entity = function (spec) { pkey.unshift(IPA.nav.get_state(current_entity.name+'-pkey')); return pkey; }; - + /* most entites only require -pkey for their primary keys, but some + are more specific. This call allows those entites a place + to override the other parameters. */ + that.get_key_names = function() { + return [that.name + '-pkey']; + }; that.entity_init = that.init; diff --git a/install/ui/navigation.js b/install/ui/navigation.js index d0b45cc3c..9bcb20f05 100644 --- a/install/ui/navigation.js +++ b/install/ui/navigation.js @@ -115,14 +115,32 @@ IPA.navigation = function(spec) { while(state[key]){ var value = state[key]; url_state[key] = value; - var entity = value; - for (var key2 in state){ - if ((key2 === entity) || (key2.search('^'+entity) > -1)){ - url_state[key2] = state[key2]; + key = value; + } + + /*We are at the leaf node, which is the sleected entity.*/ + var entity = value; + for (var key2 in state){ + if ((key2 === entity) || (key2.search('^'+entity +'-') > -1)){ + url_state[key2] = state[key2]; + } + } + + /* + Trace back up the nested entities for their pkeys as well + */ + var current_entity = IPA.get_entity(entity); + while(current_entity !== null){ + var key_names = current_entity.get_key_names(); + for (var j = 0; j < key_names.length; j+= 1){ + var key_name = key_names[j]; + if (state[key_name]){ + url_state[key_name] = state[key_name]; } } - key = value; + current_entity = current_entity.containing_entity; } + $.bbq.pushState(url_state,2); return true; }; -- cgit