Show More
@@ -360,19 +360,15 b' class ReposGroupsController(BaseControll' | |||||
360 | .filter(RepoGroup.group_parent_id == c.group.group_id).all() |
|
360 | .filter(RepoGroup.group_parent_id == c.group.group_id).all() | |
361 | c.groups = self.scm_model.get_repos_groups(groups) |
|
361 | c.groups = self.scm_model.get_repos_groups(groups) | |
362 |
|
362 | |||
363 | if not c.visual.lightweight_dashboard: |
|
363 | c.repos_list = Repository.query()\ | |
364 | c.repos_list = self.scm_model.get_repos(all_repos=gr_filter) |
|
364 | .filter(Repository.group_id == c.group.group_id)\ | |
365 | ## lightweight version of dashboard |
|
365 | .order_by(func.lower(Repository.repo_name))\ | |
366 | else: |
|
366 | .all() | |
367 | c.repos_list = Repository.query()\ |
|
|||
368 | .filter(Repository.group_id == c.group.group_id)\ |
|
|||
369 | .order_by(func.lower(Repository.repo_name))\ |
|
|||
370 | .all() |
|
|||
371 |
|
367 | |||
372 |
|
|
368 | repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list, | |
373 |
|
|
369 | admin=False) | |
374 |
|
|
370 | #json used to render the grid | |
375 |
|
|
371 | c.data = json.dumps(repos_data) | |
376 |
|
372 | |||
377 | return render('admin/repos_groups/repos_groups.html') |
|
373 | return render('admin/repos_groups/repos_groups.html') | |
378 |
|
374 |
@@ -198,11 +198,6 b' class SettingsController(BaseController)' | |||||
198 | form_result['rhodecode_stylify_metatags'] |
|
198 | form_result['rhodecode_stylify_metatags'] | |
199 | Session().add(sett3) |
|
199 | Session().add(sett3) | |
200 |
|
200 | |||
201 | sett4 = RhodeCodeSetting.get_by_name_or_create('lightweight_dashboard') |
|
|||
202 | sett4.app_settings_value = \ |
|
|||
203 | form_result['rhodecode_lightweight_dashboard'] |
|
|||
204 | Session().add(sett4) |
|
|||
205 |
|
||||
206 | sett4 = RhodeCodeSetting.get_by_name_or_create('repository_fields') |
|
201 | sett4 = RhodeCodeSetting.get_by_name_or_create('repository_fields') | |
207 | sett4.app_settings_value = \ |
|
202 | sett4.app_settings_value = \ | |
208 | form_result['rhodecode_repository_fields'] |
|
203 | form_result['rhodecode_repository_fields'] |
@@ -52,19 +52,15 b' class HomeController(BaseController):' | |||||
52 | c.groups = self.scm_model.get_repos_groups() |
|
52 | c.groups = self.scm_model.get_repos_groups() | |
53 | c.group = None |
|
53 | c.group = None | |
54 |
|
54 | |||
55 | if not c.visual.lightweight_dashboard: |
|
55 | c.repos_list = Repository.query()\ | |
56 | c.repos_list = self.scm_model.get_repos() |
|
56 | .filter(Repository.group_id == None)\ | |
57 | ## lightweight version of dashboard |
|
57 | .order_by(func.lower(Repository.repo_name))\ | |
58 | else: |
|
58 | .all() | |
59 | c.repos_list = Repository.query()\ |
|
|||
60 | .filter(Repository.group_id == None)\ |
|
|||
61 | .order_by(func.lower(Repository.repo_name))\ |
|
|||
62 | .all() |
|
|||
63 |
|
59 | |||
64 |
|
|
60 | repos_data = RepoModel().get_repos_as_dict(repos_list=c.repos_list, | |
65 |
|
|
61 | admin=False) | |
66 |
|
|
62 | #json used to render the grid | |
67 |
|
|
63 | c.data = json.dumps(repos_data) | |
68 |
|
64 | |||
69 | return render('/index.html') |
|
65 | return render('/index.html') | |
70 |
|
66 |
@@ -271,8 +271,7 b' class BaseController(WSGIController):' | |||||
271 | c.visual.show_public_icon = str2bool(rc_config.get('rhodecode_show_public_icon')) |
|
271 | c.visual.show_public_icon = str2bool(rc_config.get('rhodecode_show_public_icon')) | |
272 | c.visual.show_private_icon = str2bool(rc_config.get('rhodecode_show_private_icon')) |
|
272 | c.visual.show_private_icon = str2bool(rc_config.get('rhodecode_show_private_icon')) | |
273 | c.visual.stylify_metatags = str2bool(rc_config.get('rhodecode_stylify_metatags')) |
|
273 | c.visual.stylify_metatags = str2bool(rc_config.get('rhodecode_stylify_metatags')) | |
274 |
c.visual. |
|
274 | c.visual.dashboard_items = safe_int(config.get('dashboard_items', 100)) | |
275 | c.visual.lightweight_dashboard_items = safe_int(config.get('dashboard_items', 100)) |
|
|||
276 | c.visual.repository_fields = str2bool(rc_config.get('rhodecode_repository_fields')) |
|
275 | c.visual.repository_fields = str2bool(rc_config.get('rhodecode_repository_fields')) | |
277 | c.repo_name = get_repo_slug(request) # can be empty |
|
276 | c.repo_name = get_repo_slug(request) # can be empty | |
278 | c.backends = BACKENDS.keys() |
|
277 | c.backends = BACKENDS.keys() |
@@ -282,7 +282,6 b' def ApplicationVisualisationForm():' | |||||
282 | rhodecode_show_private_icon = v.StringBoolean(if_missing=False) |
|
282 | rhodecode_show_private_icon = v.StringBoolean(if_missing=False) | |
283 | rhodecode_stylify_metatags = v.StringBoolean(if_missing=False) |
|
283 | rhodecode_stylify_metatags = v.StringBoolean(if_missing=False) | |
284 |
|
284 | |||
285 | rhodecode_lightweight_dashboard = v.StringBoolean(if_missing=False) |
|
|||
286 | rhodecode_repository_fields = v.StringBoolean(if_missing=False) |
|
285 | rhodecode_repository_fields = v.StringBoolean(if_missing=False) | |
287 | rhodecode_lightweight_journal = v.StringBoolean(if_missing=False) |
|
286 | rhodecode_lightweight_journal = v.StringBoolean(if_missing=False) | |
288 |
|
287 |
@@ -130,12 +130,6 b'' | |||||
130 | </div> |
|
130 | </div> | |
131 | <div class="checkboxes"> |
|
131 | <div class="checkboxes"> | |
132 | <div class="checkbox"> |
|
132 | <div class="checkbox"> | |
133 | ${h.checkbox('rhodecode_lightweight_dashboard','True')} |
|
|||
134 | <label for="rhodecode_lightweight_dashboard">${_('Use lightweight dashboard')}</label> |
|
|||
135 | </div> |
|
|||
136 | </div> |
|
|||
137 | <div class="checkboxes"> |
|
|||
138 | <div class="checkbox"> |
|
|||
139 | ${h.checkbox('rhodecode_repository_fields','True')} |
|
133 | ${h.checkbox('rhodecode_repository_fields','True')} | |
140 | <label for="rhodecode_repository_fields">${_('Use repository extra fields')}</label> |
|
134 | <label for="rhodecode_repository_fields">${_('Use repository extra fields')}</label> | |
141 | </div> |
|
135 | </div> |
@@ -70,160 +70,13 b'' | |||||
70 | <div id="welcome" style="display:none;text-align:center"> |
|
70 | <div id="welcome" style="display:none;text-align:center"> | |
71 | <h1><a href="${h.url('home')}">${c.rhodecode_name} ${c.rhodecode_version}</a></h1> |
|
71 | <h1><a href="${h.url('home')}">${c.rhodecode_name} ${c.rhodecode_version}</a></h1> | |
72 | </div> |
|
72 | </div> | |
73 |
|
|
73 | <%cnt=0%> | |
74 |
|
|
74 | <%namespace name="dt" file="/data_table/_dt_elements.html"/> | |
75 | % if not c.visual.lightweight_dashboard: |
|
75 | <div class="yui-skin-sam" id="repos_list_wrap"></div> | |
76 | ## old full detailed version |
|
76 | <div id="user-paginator" style="padding: 0px 0px 0px 0px"></div> | |
77 | <div id='repos_list_wrap' class="yui-skin-sam"> |
|
|||
78 | <table id="repos_list"> |
|
|||
79 | <thead> |
|
|||
80 | <tr> |
|
|||
81 | <th class="left"></th> |
|
|||
82 | <th class="left">${_('Name')}</th> |
|
|||
83 | <th class="left">${_('Description')}</th> |
|
|||
84 | <th class="left">${_('Last change')}</th> |
|
|||
85 | <th class="left">${_('Tip')}</th> |
|
|||
86 | <th class="left">${_('Owner')}</th> |
|
|||
87 | <th class="left">${_('Atom')}</th> |
|
|||
88 | </tr> |
|
|||
89 | </thead> |
|
|||
90 | <tbody> |
|
|||
91 | %for cnt,repo in enumerate(c.repos_list): |
|
|||
92 | <tr class="parity${(cnt+1)%2}"> |
|
|||
93 | ##QUICK MENU |
|
|||
94 | <td class="quick_repo_menu"> |
|
|||
95 | ${dt.quick_menu(repo['name'])} |
|
|||
96 | </td> |
|
|||
97 | ##REPO NAME AND ICONS |
|
|||
98 | <td class="reponame"> |
|
|||
99 | ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],h.AttributeDict(repo['dbrepo_fork']),pageargs.get('short_repo_names'))} |
|
|||
100 | </td> |
|
|||
101 | ##DESCRIPTION |
|
|||
102 | <td><span class="tooltip" title="${h.tooltip(repo['description'])}"> |
|
|||
103 | %if c.visual.stylify_metatags: |
|
|||
104 | ${h.urlify_text(h.desc_stylize(h.truncate(repo['description'],60)))}</span> |
|
|||
105 | %else: |
|
|||
106 | ${h.truncate(repo['description'],60)}</span> |
|
|||
107 | %endif |
|
|||
108 | </td> |
|
|||
109 | ##LAST CHANGE DATE |
|
|||
110 | <td> |
|
|||
111 | ${dt.last_change(repo['last_change'])} |
|
|||
112 | </td> |
|
|||
113 | ##LAST REVISION |
|
|||
114 | <td> |
|
|||
115 | ${dt.revision(repo['name'],repo['rev'],repo['tip'],repo['author'],repo['last_msg'])} |
|
|||
116 | </td> |
|
|||
117 | ## |
|
|||
118 | <td title="${repo['contact']}">${h.person(repo['contact'])}</td> |
|
|||
119 | <td> |
|
|||
120 | ${dt.atom(repo['name'])} |
|
|||
121 | </td> |
|
|||
122 | </tr> |
|
|||
123 | %endfor |
|
|||
124 | </tbody> |
|
|||
125 | </table> |
|
|||
126 | </div> |
|
|||
127 | % else: |
|
|||
128 | ## lightweight version |
|
|||
129 | <div class="yui-skin-sam" id="repos_list_wrap"></div> |
|
|||
130 | <div id="user-paginator" style="padding: 0px 0px 0px 0px"></div> |
|
|||
131 | % endif |
|
|||
132 | </div> |
|
77 | </div> | |
133 | </div> |
|
78 | </div> | |
134 | % if not c.visual.lightweight_dashboard: |
|
|||
135 | <script> |
|
|||
136 | YUD.get('repo_count').innerHTML = ${cnt+1 if cnt else 0}; |
|
|||
137 |
|
79 | |||
138 | // groups table sorting |
|
|||
139 | var myColumnDefs = [ |
|
|||
140 | {key:"name",label:"${_('Group name')}",sortable:true, |
|
|||
141 | sortOptions: { sortFunction: groupNameSort }}, |
|
|||
142 | {key:"desc",label:"${_('Description')}",sortable:true}, |
|
|||
143 | ]; |
|
|||
144 |
|
||||
145 | var myDataSource = new YAHOO.util.DataSource(YUD.get("groups_list")); |
|
|||
146 |
|
||||
147 | myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE; |
|
|||
148 | myDataSource.responseSchema = { |
|
|||
149 | fields: [ |
|
|||
150 | {key:"name"}, |
|
|||
151 | {key:"desc"}, |
|
|||
152 | ] |
|
|||
153 | }; |
|
|||
154 |
|
||||
155 | var myDataTable = new YAHOO.widget.DataTable("groups_list_wrap", myColumnDefs, myDataSource,{ |
|
|||
156 | sortedBy:{key:"name",dir:"asc"}, |
|
|||
157 | paginator: new YAHOO.widget.Paginator({ |
|
|||
158 | rowsPerPage: 50, |
|
|||
159 | alwaysVisible: false, |
|
|||
160 | template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}", |
|
|||
161 | pageLinks: 5, |
|
|||
162 | containerClass: 'pagination-wh', |
|
|||
163 | currentPageClass: 'pager_curpage', |
|
|||
164 | pageLinkClass: 'pager_link', |
|
|||
165 | nextPageLinkLabel: '>', |
|
|||
166 | previousPageLinkLabel: '<', |
|
|||
167 | firstPageLinkLabel: '<<', |
|
|||
168 | lastPageLinkLabel: '>>', |
|
|||
169 | containers:['group-user-paginator'] |
|
|||
170 | }), |
|
|||
171 | MSG_SORTASC:"${_('Click to sort ascending')}", |
|
|||
172 | MSG_SORTDESC:"${_('Click to sort descending')}" |
|
|||
173 | }); |
|
|||
174 |
|
||||
175 | // main table sorting |
|
|||
176 | var myColumnDefs = [ |
|
|||
177 | {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"}, |
|
|||
178 | {key:"name",label:"${_('Name')}",sortable:true, |
|
|||
179 | sortOptions: { sortFunction: nameSort }}, |
|
|||
180 | {key:"desc",label:"${_('Description')}",sortable:true}, |
|
|||
181 | {key:"last_change",label:"${_('Last Change')}",sortable:true, |
|
|||
182 | sortOptions: { sortFunction: ageSort }}, |
|
|||
183 | {key:"tip",label:"${_('Tip')}",sortable:true, |
|
|||
184 | sortOptions: { sortFunction: revisionSort }}, |
|
|||
185 | {key:"owner",label:"${_('Owner')}",sortable:true}, |
|
|||
186 | {key:"atom",label:"",sortable:false}, |
|
|||
187 | ]; |
|
|||
188 |
|
||||
189 | var myDataSource = new YAHOO.util.DataSource(YUD.get("repos_list")); |
|
|||
190 |
|
||||
191 | myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE; |
|
|||
192 |
|
||||
193 | myDataSource.responseSchema = { |
|
|||
194 | fields: [ |
|
|||
195 | {key:"menu"}, |
|
|||
196 | //{key:"raw_name"}, |
|
|||
197 | {key:"name"}, |
|
|||
198 | {key:"desc"}, |
|
|||
199 | {key:"last_change"}, |
|
|||
200 | {key:"tip"}, |
|
|||
201 | {key:"owner"}, |
|
|||
202 | {key:"atom"}, |
|
|||
203 | ] |
|
|||
204 | }; |
|
|||
205 |
|
||||
206 | var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource, |
|
|||
207 | { |
|
|||
208 | sortedBy:{key:"name",dir:"asc"}, |
|
|||
209 | MSG_SORTASC:"${_('Click to sort ascending')}", |
|
|||
210 | MSG_SORTDESC:"${_('Click to sort descending')}", |
|
|||
211 | MSG_EMPTY:"${_('No records found.')}", |
|
|||
212 | MSG_ERROR:"${_('Data error.')}", |
|
|||
213 | MSG_LOADING:"${_('Loading...')}", |
|
|||
214 | } |
|
|||
215 | ); |
|
|||
216 | myDataTable.subscribe('postRenderEvent',function(oArgs) { |
|
|||
217 | tooltip_activate(); |
|
|||
218 | quick_repo_menu(); |
|
|||
219 | var func = function(node){ |
|
|||
220 | return node.parentNode.parentNode.parentNode.parentNode; |
|
|||
221 | } |
|
|||
222 | q_filter('q_filter',YUQ('div.table tr td a.repo_name'),func); |
|
|||
223 | }); |
|
|||
224 |
|
||||
225 | </script> |
|
|||
226 | % else: |
|
|||
227 | <script> |
|
80 | <script> | |
228 | var data = ${c.data|n}; |
|
81 | var data = ${c.data|n}; | |
229 | var myDataSource = new YAHOO.util.DataSource(data); |
|
82 | var myDataSource = new YAHOO.util.DataSource(data); | |
@@ -279,7 +132,7 b'' | |||||
279 | var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{ |
|
132 | var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{ | |
280 | sortedBy:{key:"name",dir:"asc"}, |
|
133 | sortedBy:{key:"name",dir:"asc"}, | |
281 | paginator: new YAHOO.widget.Paginator({ |
|
134 | paginator: new YAHOO.widget.Paginator({ | |
282 |
rowsPerPage: ${c.visual. |
|
135 | rowsPerPage: ${c.visual.dashboard_items}, | |
283 | alwaysVisible: false, |
|
136 | alwaysVisible: false, | |
284 | template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}", |
|
137 | template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}", | |
285 | pageLinks: 5, |
|
138 | pageLinks: 5, | |
@@ -336,4 +189,3 b'' | |||||
336 | filterTimeout = setTimeout(updateFilter,600); |
|
189 | filterTimeout = setTimeout(updateFilter,600); | |
337 | }); |
|
190 | }); | |
338 | </script> |
|
191 | </script> | |
339 | % endif |
|
@@ -17,19 +17,22 b' class TestHomeController(TestController)' | |||||
17 | response = self.app.get(url(controller='home', action='index')) |
|
17 | response = self.app.get(url(controller='home', action='index')) | |
18 | #if global permission is set |
|
18 | #if global permission is set | |
19 | response.mustcontain('Add repository') |
|
19 | response.mustcontain('Add repository') | |
20 | response.mustcontain('href="/%s"' % HG_REPO) |
|
20 | # html in javascript variable: | |
|
21 | response.mustcontain("""var data = {"totalRecords": %s""" | |||
|
22 | % len(Repository.getAll())) | |||
|
23 | response.mustcontain(r'href=\"/%s\"' % HG_REPO) | |||
21 |
|
24 | |||
22 | response.mustcontain("""<img class="icon" title="Mercurial repository" """ |
|
25 | response.mustcontain(r"""<img class=\"icon\" title=\"Mercurial repository\" """ | |
23 | """alt="Mercurial repository" src="/images/icons/hg""" |
|
26 | r"""alt=\"Mercurial repository\" src=\"/images/icons/hg""" | |
24 | """icon.png"/>""") |
|
27 | r"""icon.png\"/>""") | |
25 | response.mustcontain("""<img class="icon" title="Public repository" """ |
|
28 | response.mustcontain(r"""<img class=\"icon\" title=\"Public repository\" """ | |
26 | """alt="Public repository" src="/images/icons/lock_""" |
|
29 | r"""alt=\"Public repository\" src=\"/images/icons/lock_""" | |
27 | """open.png"/>""") |
|
30 | r"""open.png\"/>""") | |
28 |
|
31 | |||
29 | response.mustcontain( |
|
32 | response.mustcontain( | |
30 | """<a title="Marcin Kuzminski &lt;marcin@python-works.com&gt;:\n |
|
33 | r"""<a title=\"Marcin Kuzminski &lt;marcin@python-works.com&gt;:\n\n""" | |
31 |
|
|
34 | r"""merge\" class=\"tooltip\" href=\"/vcs_test_hg/changeset/27cd5cce30c96924232""" | |
32 | """dffcd24178a07ffeb5dfc">r173:27cd5cce30c9</a>""" |
|
35 | r"""dffcd24178a07ffeb5dfc\">r173:27cd5cce30c9</a>""" | |
33 | ) |
|
36 | ) | |
34 |
|
37 | |||
35 | def test_repo_summary_with_anonymous_access_disabled(self): |
|
38 | def test_repo_summary_with_anonymous_access_disabled(self): | |
@@ -66,22 +69,6 b' merge" class="tooltip" href="/vcs_test_h' | |||||
66 | Session().add(anon) |
|
69 | Session().add(anon) | |
67 | Session().commit() |
|
70 | Session().commit() | |
68 |
|
71 | |||
69 | def _set_l_dash(self, set_to): |
|
|||
70 | self.app.post(url('admin_setting', setting_id='visual'), |
|
|||
71 | params=dict(_method='put', |
|
|||
72 | rhodecode_lightweight_dashboard=set_to,)) |
|
|||
73 |
|
||||
74 | def test_index_with_lightweight_dashboard(self): |
|
|||
75 | self.log_user() |
|
|||
76 | self._set_l_dash(True) |
|
|||
77 |
|
||||
78 | try: |
|
|||
79 | response = self.app.get(url(controller='home', action='index')) |
|
|||
80 | response.mustcontain("""var data = {"totalRecords": %s""" |
|
|||
81 | % len(Repository.getAll())) |
|
|||
82 | finally: |
|
|||
83 | self._set_l_dash(False) |
|
|||
84 |
|
||||
85 | def test_index_page_on_groups(self): |
|
72 | def test_index_page_on_groups(self): | |
86 | self.log_user() |
|
73 | self.log_user() | |
87 | gr = fixture.create_group('gr1') |
|
74 | gr = fixture.create_group('gr1') | |
@@ -94,18 +81,3 b' merge" class="tooltip" href="/vcs_test_h' | |||||
94 | RepoModel().delete('gr1/repo_in_group') |
|
81 | RepoModel().delete('gr1/repo_in_group') | |
95 | ReposGroupModel().delete(repos_group='gr1', force_delete=True) |
|
82 | ReposGroupModel().delete(repos_group='gr1', force_delete=True) | |
96 | Session().commit() |
|
83 | Session().commit() | |
97 |
|
||||
98 | def test_index_page_on_groups_with_lightweight_dashboard(self): |
|
|||
99 | self.log_user() |
|
|||
100 | self._set_l_dash(True) |
|
|||
101 | fixture.create_repo(name='gr1/repo_in_group', |
|
|||
102 | repos_group=fixture.create_group('gr1')) |
|
|||
103 | response = self.app.get(url('repos_group_home', group_name='gr1')) |
|
|||
104 |
|
||||
105 | try: |
|
|||
106 | response.mustcontain("""gr1/repo_in_group""") |
|
|||
107 | finally: |
|
|||
108 | self._set_l_dash(False) |
|
|||
109 | RepoModel().delete('gr1/repo_in_group') |
|
|||
110 | ReposGroupModel().delete(repos_group='gr1', force_delete=True) |
|
|||
111 | Session().commit() |
|
General Comments 0
You need to be logged in to leave comments.
Login now