Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: chrome/common/extensions/docs/server2/sidenav_data_source.py

Issue 491653002: Docserver: Use GitilesFileSystem instead of SubversionFileSystem (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import copy 5 import copy
6 import logging 6 import logging
7 import posixpath 7 import posixpath
8 8
9 from compiled_file_system import SingleFile, Unicode 9 from compiled_file_system import SingleFile, Unicode
10 from data_source import DataSource 10 from data_source import DataSource
11 from extensions_paths import JSON_TEMPLATES 11 from extensions_paths import JSON_TEMPLATES
12 from future import Future 12 from future import Future
13 from third_party.json_schema_compiler.json_parse import Parse 13 from third_party.json_schema_compiler.json_parse import Parse
14 14
15 15
16 def _AddLevels(items, level): 16 def _AddLevels(items, level):
17 '''Add a 'level' key to each item in |items|. 'level' corresponds to how deep 17 '''Add a 'level' key to each item in |items|. 'level' corresponds to how deep
18 in |items| an item is. |level| sets the starting depth. 18 in |items| an item is. |level| sets the starting depth.
19 ''' 19 '''
20 for item in items: 20 for item in items:
21 item['level'] = level 21 item['level'] = level
22 if 'items' in item: 22 if 'items' in item:
23 _AddLevels(item['items'], level + 1) 23 _AddLevels(item['items'], level + 1)
24 24
25 25
26 def _AddAnnotations(items, path, parent=None): 26 def _AddAnnotations(items, path, parent=None):
27 '''Add 'selected', 'child_selected' and 'related' properties to 27 '''Add 'selected', 'child_selected' and 'related' properties to
28 |items| so that the sidenav can be expanded to show which menu item has 28 |items| so that the sidenav can be expanded to show which menu item has
29 been selected and the related pages section can be drawn. 'related' 29 been selected and the related pages section can be drawn. 'related'
30 is added to all items with the same parent as the selected item. 30 is added to all items with the same parent as the selected item.
31 If more than one item exactly matches the path, the deepest one is considered 31 If more than one item exactly matches the path, the deepest one is considered
32 'selected'. A 'parent' property is added to the selected path. 32 'selected'. A 'parent' property is added to the selected path.
33 33
34 Returns True if an item was marked 'selected'. 34 Returns True if an item was marked 'selected'.
35 ''' 35 '''
36 for item in items: 36 for item in items:
37 if 'items' in item: 37 if 'items' in item:
38 if _AddAnnotations(item['items'], path, item): 38 if _AddAnnotations(item['items'], path, item):
39 item['child_selected'] = True 39 item['child_selected'] = True
40 return True 40 return True
41 41
42 if item.get('href', '') == path: 42 if item.get('href', '') == path:
43 item['selected'] = True 43 item['selected'] = True
44 if parent: 44 if parent:
45 item['parent'] = { 'title': parent.get('title', None), 45 item['parent'] = { 'title': parent.get('title', None),
46 'href': parent.get('href', None) } 46 'href': parent.get('href', None) }
47 47
48 for sibling in items: 48 for sibling in items:
49 sibling['related'] = True 49 sibling['related'] = True
50 50
51 return True 51 return True
52 52
53 return False 53 return False
54 54
55 55
56 class SidenavDataSource(DataSource): 56 class SidenavDataSource(DataSource):
57 '''Provides templates with access to JSON files used to create the side 57 '''Provides templates with access to JSON files used to create the side
58 navigation bar. 58 navigation bar.
59 ''' 59 '''
60 def __init__(self, server_instance, request): 60 def __init__(self, server_instance, request):
61 self._cache = server_instance.compiled_fs_factory.Create( 61 self._cache = server_instance.compiled_fs_factory.Create(
62 server_instance.host_file_system_provider.GetTrunk(), 62 server_instance.host_file_system_provider.GetMaster(),
63 self._CreateSidenavDict, 63 self._CreateSidenavDict,
64 SidenavDataSource) 64 SidenavDataSource)
65 self._server_instance = server_instance 65 self._server_instance = server_instance
66 self._request = request 66 self._request = request
67 67
68 @SingleFile 68 @SingleFile
69 @Unicode 69 @Unicode
70 def _CreateSidenavDict(self, _, content): 70 def _CreateSidenavDict(self, _, content):
71 items = Parse(content) 71 items = Parse(content)
72 # Start at level 2, the top <ul> element is level 1. 72 # Start at level 2, the top <ul> element is level 1.
(...skipping 24 matching lines...) Expand all
97 97
98 def get(self, key): 98 def get(self, key):
99 # TODO(mangini/kalman): Use |key| to decide which sidenav to use, 99 # TODO(mangini/kalman): Use |key| to decide which sidenav to use,
100 # which will require a more complex Cron method. 100 # which will require a more complex Cron method.
101 sidenav = self._cache.GetFromFile( 101 sidenav = self._cache.GetFromFile(
102 posixpath.join(JSON_TEMPLATES, 'chrome_sidenav.json')).Get() 102 posixpath.join(JSON_TEMPLATES, 'chrome_sidenav.json')).Get()
103 sidenav = copy.deepcopy(sidenav) 103 sidenav = copy.deepcopy(sidenav)
104 _AddAnnotations(sidenav, 104 _AddAnnotations(sidenav,
105 self._server_instance.base_path + self._request.path) 105 self._server_instance.base_path + self._request.path)
106 return sidenav 106 return sidenav
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698