@@ -88,6 +88,84 @@ def get_navigation_items(self, req):
88
88
]
89
89
90
90
91
+ class CustomSubNavigationBar (Component ):
92
+ """Add queue items for the sub navigation bar."""
93
+
94
+ implements (INavigationContributor )
95
+
96
+ queues = [
97
+ {
98
+ "name" : "unreviewed" ,
99
+ "label" : "Needs Triage" ,
100
+ "params" : "stage=Unreviewed&status=!closed&order=changetime&desc=1" ,
101
+ },
102
+ {
103
+ "name" : "needs_patch" ,
104
+ "label" : "Needs Patch" ,
105
+ "params" : "has_patch=0&stage=Accepted&status=!closed&order=changetime&desc=1" ,
106
+ },
107
+ {
108
+ "name" : "needs_pr_review" ,
109
+ "label" : "Needs PR Review" ,
110
+ "params" : (
111
+ "has_patch=1&needs_better_patch=0&needs_docs=0&needs_tests=0&stage=Accepted"
112
+ "&status=!closed&order=changetime&desc=1"
113
+ ),
114
+ },
115
+ {
116
+ "name" : "waiting_on_author" ,
117
+ "label" : "Waiting On Author" ,
118
+ "params" : (
119
+ "has_patch=1&needs_better_patch=1&stage=Accepted&status=assigned&status=new"
120
+ "&or&has_patch=1&needs_docs=1&stage=Accepted&status=assigned&status=new"
121
+ "&or&has_patch=1&needs_tests=1&stage=Accepted&status=assigned&status=new"
122
+ "&order=changetime&desc=1"
123
+ ),
124
+ },
125
+ {
126
+ "name" : "ready_for_checkin" ,
127
+ "label" : "Ready For Checkin" ,
128
+ "params" : "stage=Ready+for+checkin&status=!closed&order=changetime&desc=1" ,
129
+ },
130
+ ]
131
+
132
+ def get_active_navigation_item (self , req ):
133
+ stage = req .args .get ("stage" )
134
+
135
+ if stage == "Unreviewed" :
136
+ return "unreviewed"
137
+ if stage == "Ready for checkin" :
138
+ return "ready_for_checkin"
139
+ if stage == "Accepted" :
140
+ if req .query_string == self .queues [1 ]["params" ]:
141
+ return "needs_patch"
142
+ elif req .query_string == self .queues [2 ]["params" ]:
143
+ return "needs_pr_review"
144
+ elif req .query_string == self .queues [3 ]["params" ]:
145
+ return "waiting_on_author"
146
+
147
+ return ""
148
+
149
+ def _get_active_class (self , active_item , subnav_name ):
150
+ return "active" if active_item == subnav_name else None
151
+
152
+ def get_navigation_items (self , req ):
153
+ if req .path_info .startswith ("/query" ):
154
+ active_item = self .get_active_navigation_item (req )
155
+ return [
156
+ (
157
+ "subnav" ,
158
+ queue ["name" ],
159
+ tag .a (
160
+ queue ["label" ],
161
+ href = "/query?" + queue ["params" ],
162
+ class_ = self ._get_active_class (active_item , queue ["name" ]),
163
+ ),
164
+ )
165
+ for queue in self .queues
166
+ ]
167
+
168
+
91
169
class GitHubBrowserWithSVNChangesets (GitHubBrowser ):
92
170
def _format_changeset_link (self , formatter , ns , chgset , label , fullmatch = None ):
93
171
# Dead-simple version for SVN changesets.
0 commit comments