summaryrefslogtreecommitdiffstats
path: root/install/ui/src/freeipa/Application_controller.js
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2013-03-13 18:39:54 +0100
committerPetr Vobornik <pvoborni@redhat.com>2013-05-06 16:22:18 +0200
commit9657c757f6622bcbbf8e811b1c1d6b6acf6805dc (patch)
tree9a3d31ce4ac112d60497f5ca40f7b25e41b96239 /install/ui/src/freeipa/Application_controller.js
parent364e0ec5afbcce8a40ce63439bcb53dd663597cc (diff)
downloadfreeipa-9657c757f6622bcbbf8e811b1c1d6b6acf6805dc.tar.gz
freeipa-9657c757f6622bcbbf8e811b1c1d6b6acf6805dc.tar.xz
freeipa-9657c757f6622bcbbf8e811b1c1d6b6acf6805dc.zip
Add menu memory
Parent items remember last selected child. https://fedorahosted.org/freeipa/ticket/3236
Diffstat (limited to 'install/ui/src/freeipa/Application_controller.js')
-rw-r--r--install/ui/src/freeipa/Application_controller.js69
1 files changed, 37 insertions, 32 deletions
diff --git a/install/ui/src/freeipa/Application_controller.js b/install/ui/src/freeipa/Application_controller.js
index 6406e8bc4..16b639e73 100644
--- a/install/ui/src/freeipa/Application_controller.js
+++ b/install/ui/src/freeipa/Application_controller.js
@@ -259,27 +259,38 @@ define(['dojo/_base/declare',
_navigate_to_menu_item: function(menu_item) {
- if (menu_item.entity) {
- // entity pages
- this.router.navigate_to_entity_facet(
- menu_item.entity,
- menu_item.facet,
- menu_item.pkeys,
- menu_item.args);
- } else if (menu_item.facet) {
- // concrete facets
- this.router.navigate_to_facet(menu_item.facet, menu_item.args);
- } else {
- // categories, select first posible child
- var children = this.menu.query({parent: menu_item.name });
- if (children.total) {
- var success = false;
- for (var i=0; i<children.total;i++) {
- success = this._navigate_to_menu_item(children[i]);
- if (success) break;
- }
+ var child;
+
+ // always go deeper if child previuosly selected
+ if (menu_item.selected_child) {
+ child = this.menu.items.get(menu_item.selected_child);
+ if (child) {
+ this._navigate_to_menu_item(child);
+ }
+ }
+ if (!child) {
+ if(menu_item.entity) {
+ // entity pages
+ this.router.navigate_to_entity_facet(
+ menu_item.entity,
+ menu_item.facet,
+ menu_item.pkeys,
+ menu_item.args);
+ } else if (menu_item.facet) {
+ // concrete facets
+ this.router.navigate_to_facet(menu_item.facet, menu_item.args);
} else {
- return false;
+ // categories, select first posible child, it may be the last
+ var children = this.menu.query({parent: menu_item.name });
+ if (children.total) {
+ var success = false;
+ for (var i=0; i<children.total;i++) {
+ success = this._navigate_to_menu_item(children[i]);
+ if (success) break;
+ }
+ } else {
+ return false;
+ }
}
}
@@ -298,20 +309,14 @@ define(['dojo/_base/declare',
*/
on_menu_select: function(select_state) {
- var has_visible = function(query_result) {
- for (var i=0; i<query_result.total; i++) {
- if (!query_result[i].hidden) return true;
- }
- return false;
- };
-
- var item = select_state.item;
- var visible_simblings = has_visible(this.menu.query({parent: item.parent}));
- var visible_children = has_visible(this.menu.query({parent: item.name}));
-
+ var visible_levels = 0;
var levels = select_state.new_selection.length;
+ for (var i=0; i< levels; i++) {
+ var item = select_state.new_selection[i];
+ if(!item.hidden) visible_levels++;
+ }
- var three_levels = levels >= 3 && (visible_children > 0 || visible_simblings > 0);
+ var three_levels = visible_levels >= 3;
dom_class.toggle(this.app_widget.content_node,
'nav-space-3',