summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2014-09-12 15:26:28 +0200
committerPetr Vobornik <pvoborni@redhat.com>2014-09-30 10:47:03 +0200
commit15b6ed67056ce918e11f7ea5c2d193534b5ce6b5 (patch)
tree29b0893c60c750b8113407be92d23c61a5b558f4
parent2a230b6cc16037fbf56d79bfde2fb4d1ab386ef6 (diff)
downloadfreeipa-15b6ed67056ce918e11f7ea5c2d193534b5ce6b5.tar.gz
freeipa-15b6ed67056ce918e11f7ea5c2d193534b5ce6b5.tar.xz
freeipa-15b6ed67056ce918e11f7ea5c2d193534b5ce6b5.zip
webui: improve breadcrumb navigation
Fixes issue when: - user navigates to a nested facet - refreshes browser - uses breadcrumb navigation to go to parent entity page which requires a pkey. E.g. from automount keys to maps. The old code relies on the facet, that user visited the parent facet before and therefore the facet has pkey stored. It fails after the browser reload. Allows to specify a containing_facet. It allows breadcrumb navigation to return to a different facet than the 'default'. Reviewed-By: Endi Sukma Dewata <edewata@redhat.com>
-rw-r--r--install/ui/src/freeipa/facet.js44
1 files changed, 29 insertions, 15 deletions
diff --git a/install/ui/src/freeipa/facet.js b/install/ui/src/freeipa/facet.js
index 594f9af5c..07b43e032 100644
--- a/install/ui/src/freeipa/facet.js
+++ b/install/ui/src/freeipa/facet.js
@@ -298,6 +298,15 @@ exp.facet = IPA.facet = function(spec, no_init) {
*/
that.redirect_info = spec.redirect_info;
+ /**
+ * Name of containing facet of containing entity
+ *
+ * A guide for breadcrumb navigation
+ *
+ * @property {string}
+ */
+ that.containing_facet = spec.containing_facet;
+
/**
* Facet requires authenticated user
@@ -1130,25 +1139,30 @@ exp.facet_header = IPA.facet_header = function(spec) {
if (!that.breadcrumb) return;
var items = [];
- var item, i, l;
+ var item, i, l, keys, target_facet, target_facet_keys, containing_entity;
// all pkeys should be available in facet
- var keys = that.facet.get_pkeys();
- var entity = that.facet.entity.get_containing_entity();
- i = keys.length - 2; //set pointer to first containing entity
- while (entity) {
+ keys = that.facet.get_pkeys();
+
+ target_facet_keys = keys;
+ containing_entity = that.facet.entity.get_containing_entity();
+ target_facet = that.facet;
+
+ while (containing_entity) {
+ target_facet = containing_entity.get_facet(
+ target_facet.containing_facet || 'default');
+ target_facet_keys = target_facet_keys.slice(0, -1);
items.unshift({
- text: keys[i],
- title: entity.metadata.label_singular,
- handler: function(entity) {
+ text: target_facet_keys.slice(-1),
+ title: containing_entity.metadata.label_singular,
+ handler: function(facet, keys) {
return function() {
- navigation.show_entity(entity.name, 'default');
+ navigation.show(facet, keys);
return false;
};
- }(entity)
+ }(target_facet, target_facet_keys)
});
- entity = entity.get_containing_entity();
- i--;
+ containing_entity = containing_entity.get_containing_entity();
}
//calculation of breadcrumb keys length
@@ -1167,12 +1181,12 @@ exp.facet_header = IPA.facet_header = function(spec) {
}
max_key_l = ((max_bc_l - bc_l) / to_limit) - 4;
+ target_facet = target_facet.get_redirect_facet();
// main level item
- var redirect_facet = that.facet.get_redirect_facet();
items.unshift({
- text: redirect_facet.label,
+ text: target_facet.label,
handler: function() {
- that.facet.redirect();
+ navigation.show(target_facet);
return false;
}
});