Index: chrome/common/extensions/docs/server2/sidenav_data_source.py |
diff --git a/chrome/common/extensions/docs/server2/sidenav_data_source.py b/chrome/common/extensions/docs/server2/sidenav_data_source.py |
index 598122a8ff39313dc66f1fb7d2aacb272e032d55..cc43d52b93d4a6bfc54dcdbee92bf3cefbec2f4a 100644 |
--- a/chrome/common/extensions/docs/server2/sidenav_data_source.py |
+++ b/chrome/common/extensions/docs/server2/sidenav_data_source.py |
@@ -22,20 +22,33 @@ def _AddLevels(items, level): |
_AddLevels(item['items'], level + 1) |
-def _AddSelected(items, path): |
- '''Add 'selected' and 'child_selected' properties to |items| so that the |
- sidenav can be expanded to show which menu item has been selected. Returns |
- True if an item was marked 'selected'. |
+def _AddAnnotations(items, path, parent=None): |
+ '''Add 'selected', 'child_selected' and 'related' properties to |
+ |items| so that the sidenav can be expanded to show which menu item has |
+ been selected and the related pages section can be drawn. 'related' |
+ is added to all items with the same parent as the selected item. |
+ If more than one item exactly matches the path, the deepest one is considered |
+ 'selected'. A 'parent' property is added to the selected path. |
+ |
+ Returns True if an item was marked 'selected'. |
''' |
for item in items: |
- if item.get('href', '') == path: |
- item['selected'] = True |
- return True |
if 'items' in item: |
- if _AddSelected(item['items'], path): |
+ if _AddAnnotations(item['items'], path, item): |
item['child_selected'] = True |
return True |
+ if item.get('href', '') == path: |
+ item['selected'] = True |
+ if parent: |
+ item['parent'] = { 'title': parent.get('title', None), |
+ 'href': parent.get('href', None) } |
+ |
+ for sibling in items: |
+ sibling['related'] = True |
+ |
+ return True |
+ |
return False |
@@ -78,13 +91,14 @@ class SidenavDataSource(DataSource): |
item['href'] = self._server_instance.base_path + href |
def Cron(self): |
- futures = [self._cache.GetFromFile('%s/%s_sidenav.json' % |
- (JSON_TEMPLATES, platform)) |
- for platform in ('apps', 'extensions')] |
- return Future(delegate=Gettable(lambda: [f.Get() for f in futures])) |
+ return self._cache.GetFromFile('%s/chrome_sidenav.json' % (JSON_TEMPLATES)) |
def get(self, key): |
- sidenav = copy.deepcopy(self._cache.GetFromFile( |
- '%s/%s_sidenav.json' % (JSON_TEMPLATES, key)).Get()) |
- _AddSelected(sidenav, self._server_instance.base_path + self._request.path) |
+ # TODO(mangini/kalman): Use |key| to decide which sidenav to use, |
+ # which will require a more complex Cron method. |
+ sidenav = self._cache.GetFromFile( |
+ '%s/chrome_sidenav.json' % JSON_TEMPLATES).Get() |
+ sidenav = copy.deepcopy(sidenav) |
+ _AddAnnotations(sidenav, |
+ self._server_instance.base_path + self._request.path) |
return sidenav |