Show More
@@ -1,149 +1,150 b'' | |||
|
1 | 1 | ## -*- coding: utf-8 -*- |
|
2 | 2 | <%inherit file="/base/base.html"/> |
|
3 | 3 | |
|
4 | 4 | <%def name="title()"> |
|
5 | 5 | %if c.show_private: |
|
6 | 6 | ${_('Private Gists for user %s') % c.rhodecode_user.username} |
|
7 | 7 | %elif c.show_public: |
|
8 | 8 | ${_('Public Gists for user %s') % c.rhodecode_user.username} |
|
9 | 9 | %else: |
|
10 | 10 | ${_('Public Gists')} |
|
11 | 11 | %endif |
|
12 | 12 | %if c.rhodecode_name: |
|
13 | 13 | · ${h.branding(c.rhodecode_name)} |
|
14 | 14 | %endif |
|
15 | 15 | </%def> |
|
16 | 16 | |
|
17 | 17 | <%def name="breadcrumbs_links()"> |
|
18 | 18 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
19 | 19 | %if c.show_private and not c.show_public: |
|
20 | 20 | ${_('Private Gists for user %s') % c.rhodecode_user.username} |
|
21 | 21 | %elif c.show_public and not c.show_private: |
|
22 | 22 | ${_('Public Gists for user %s') % c.rhodecode_user.username} |
|
23 | 23 | %elif c.show_public and c.show_private: |
|
24 | 24 | ${_('All Gists for user %s') % c.rhodecode_user.username} |
|
25 | 25 | %else: |
|
26 | 26 | ${_('All Public Gists')} |
|
27 | 27 | %endif |
|
28 | 28 | - <span id="gists_count">0</span> |
|
29 | 29 | </%def> |
|
30 | 30 | |
|
31 | 31 | <%def name="menu_bar_nav()"> |
|
32 | 32 | ${self.menu_items(active='gists')} |
|
33 | 33 | </%def> |
|
34 | 34 | |
|
35 | 35 | |
|
36 | 36 | |
|
37 | 37 | <%def name="main()"> |
|
38 | 38 | <div class="box"> |
|
39 | 39 | <div class="title"> |
|
40 | 40 | ${self.breadcrumbs(class_="breadcrumbs block-left")} |
|
41 | 41 | %if c.rhodecode_user.username != h.DEFAULT_USER: |
|
42 | 42 | <ul class="links block-right"> |
|
43 | 43 | <li> |
|
44 | 44 | <a href="${h.url('new_gist')}" class="btn btn-primary">${_(u'Create New Gist')}</a> |
|
45 | 45 | </li> |
|
46 | 46 | </ul> |
|
47 | 47 | %endif |
|
48 | 48 | </div> |
|
49 | 49 | |
|
50 | 50 | |
|
51 | 51 | <div class="sidebar-col-wrapper scw-small"> |
|
52 | 52 | ##main |
|
53 | 53 | <div class="sidebar"> |
|
54 | 54 | <ul class="nav nav-pills nav-stacked"> |
|
55 | 55 | % if h.HasPermissionAll('hg.admin')('access admin gists page'): |
|
56 | 56 | <li class="${'active' if c.active=='all' else ''}"><a href="${h.url('gists', all=1)}">${_('All gists')}</a></li> |
|
57 | 57 | %endif |
|
58 | 58 | <li class="${'active' if c.active=='public' else ''}"><a href="${h.url('gists')}">${_('All public')}</a></li> |
|
59 | 59 | %if c.rhodecode_user.username != h.DEFAULT_USER: |
|
60 | 60 | <li class="${'active' if c.active=='my_all' else ''}"><a href="${h.url('gists', public=1, private=1)}">${_('My gists')}</a></li> |
|
61 | 61 | <li class="${'active' if c.active=='my_private' else ''}"><a href="${h.url('gists', private=1)}">${_('My private')}</a></li> |
|
62 | 62 | <li class="${'active' if c.active=='my_public' else ''}"><a href="${h.url('gists', public=1)}">${_('My public')}</a></li> |
|
63 | 63 | %endif |
|
64 | 64 | </ul> |
|
65 | 65 | </div> |
|
66 | 66 | |
|
67 | 67 | <div class="main-content"> |
|
68 | 68 | <div id="repos_list_wrap"> |
|
69 | 69 | <table id="gist_list_table" class="display"></table> |
|
70 | 70 | </div> |
|
71 | 71 | </div> |
|
72 | 72 | </div> |
|
73 | 73 | </div> |
|
74 | 74 | <script> |
|
75 | 75 | $(document).ready(function() { |
|
76 | 76 | |
|
77 | 77 | var get_datatable_count = function(){ |
|
78 | 78 | var api = $('#gist_list_table').dataTable().api(); |
|
79 | 79 | $('#gists_count').text(api.page.info().recordsDisplay); |
|
80 | 80 | }; |
|
81 | 81 | |
|
82 | 82 | |
|
83 | 83 | // custom filter that filters by access_id, description or author |
|
84 | 84 | $.fn.dataTable.ext.search.push( |
|
85 | 85 | function( settings, data, dataIndex ) { |
|
86 | 86 | var query = $('#q_filter').val(); |
|
87 | 87 | var author = data[0].strip(); |
|
88 | 88 | var access_id = data[2].strip(); |
|
89 | 89 | var description = data[3].strip(); |
|
90 | 90 | |
|
91 | 91 | var query_str = (access_id + " " + author + " " + description).toLowerCase(); |
|
92 | 92 | |
|
93 | 93 | if(query_str.indexOf(query.toLowerCase()) !== -1){ |
|
94 | 94 | return true; |
|
95 | 95 | } |
|
96 | 96 | return false; |
|
97 | 97 | } |
|
98 | 98 | ); |
|
99 | 99 | |
|
100 | 100 | // gists list |
|
101 | 101 | $('#gist_list_table').DataTable({ |
|
102 | 102 | data: ${c.data|n}, |
|
103 | 103 | dom: 'rtp', |
|
104 | 104 | pageLength: ${c.visual.dashboard_items}, |
|
105 | 105 | order: [[ 4, "desc" ]], |
|
106 | 106 | columns: [ |
|
107 | 107 | { data: {"_": "author", |
|
108 | 108 | "sort": "author_raw"}, title: "${_("Author")}", width: "250px", className: "td-user" }, |
|
109 | 109 | { data: {"_": "type", |
|
110 | 110 | "sort": "type"}, title: "${_("Type")}", width: "70px", className: "td-tags" }, |
|
111 | 111 | { data: {"_": "access_id", |
|
112 | 112 | "sort": "access_id"}, title: "${_("Name")}", width:"150px", className: "td-componentname" }, |
|
113 | 113 | { data: {"_": "description", |
|
114 | 114 | "sort": "description"}, title: "${_("Description")}", width: "250px", className: "td-description" }, |
|
115 | 115 | { data: {"_": "created_on", |
|
116 | 116 | "sort": "created_on_raw"}, title: "${_("Created on")}", className: "td-time" }, |
|
117 | 117 | { data: {"_": "expires", |
|
118 | 118 | "sort": "expires"}, title: "${_("Expires")}", className: "td-exp" } |
|
119 | 119 | ], |
|
120 | 120 | language: { |
|
121 | paginate: DEFAULT_GRID_PAGINATION | |
|
121 | paginate: DEFAULT_GRID_PAGINATION, | |
|
122 | emptyTable: "No gists available yet." | |
|
122 | 123 | }, |
|
123 | 124 | "initComplete": function( settings, json ) { |
|
124 | 125 | timeagoActivate(); |
|
125 | 126 | get_datatable_count(); |
|
126 | 127 | } |
|
127 | 128 | }); |
|
128 | 129 | |
|
129 | 130 | // update the counter when things change |
|
130 | 131 | $('#gist_list_table').on('draw.dt', function() { |
|
131 | 132 | timeagoActivate(); |
|
132 | 133 | get_datatable_count(); |
|
133 | 134 | }); |
|
134 | 135 | |
|
135 | 136 | // filter, filter both grids |
|
136 | 137 | $('#q_filter').on( 'keyup', function () { |
|
137 | 138 | var repo_api = $('#gist_list_table').dataTable().api(); |
|
138 | 139 | repo_api |
|
139 | 140 | .draw(); |
|
140 | 141 | }); |
|
141 | 142 | |
|
142 | 143 | // refilter table if page load via back button |
|
143 | 144 | $("#q_filter").trigger('keyup'); |
|
144 | 145 | |
|
145 | 146 | }); |
|
146 | 147 | |
|
147 | 148 | </script> |
|
148 | 149 | </%def> |
|
149 | 150 |
@@ -1,67 +1,68 b'' | |||
|
1 | 1 | <div class="panel panel-default"> |
|
2 | 2 | <div class="panel-heading"> |
|
3 | 3 | <h3 class="panel-title">${_('Repositories You Own')}</h3> |
|
4 | 4 | </div> |
|
5 | 5 | |
|
6 | 6 | <div class="panel-body"> |
|
7 | 7 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
8 | 8 | |
|
9 | 9 | <div id="repos_list_wrap"> |
|
10 | 10 | <table id="repo_list_table" class="display"></table> |
|
11 | 11 | </div> |
|
12 | 12 | </div> |
|
13 | 13 | </div> |
|
14 | 14 | |
|
15 | 15 | <script> |
|
16 | 16 | $(document).ready(function() { |
|
17 | 17 | |
|
18 | 18 | var get_datatable_count = function(){ |
|
19 | 19 | var api = $('#repo_list_table').dataTable().api(); |
|
20 | 20 | $('#repo_count').text(api.page.info().recordsDisplay); |
|
21 | 21 | }; |
|
22 | 22 | |
|
23 | 23 | // repo list |
|
24 | 24 | $('#repo_list_table').DataTable({ |
|
25 | 25 | data: ${c.data|n}, |
|
26 | 26 | dom: 'rtp', |
|
27 | 27 | pageLength: ${c.visual.admin_grid_items}, |
|
28 | 28 | order: [[ 0, "asc" ]], |
|
29 | 29 | columns: [ |
|
30 | 30 | { data: {"_": "name", |
|
31 | 31 | "sort": "name_raw"}, title: "${_('Name')}", className: "td-componentname" }, |
|
32 | 32 | { data: 'menu', className: "quick_repo_menu" }, |
|
33 | 33 | { data: {"_": "last_changeset", |
|
34 | 34 | "sort": "last_changeset_raw", |
|
35 | 35 | "type": Number}, title: "${_('Commit')}", className: "td-hash" }, |
|
36 | 36 | { data: {"_": "action", |
|
37 | 37 | "sort": "action"}, title: "${_('Action')}", className: "td-action" } |
|
38 | 38 | ], |
|
39 | 39 | language: { |
|
40 | paginate: DEFAULT_GRID_PAGINATION | |
|
40 | paginate: DEFAULT_GRID_PAGINATION, | |
|
41 | emptyTable: "No repositories available yet." | |
|
41 | 42 | }, |
|
42 | 43 | "initComplete": function( settings, json ) { |
|
43 | 44 | get_datatable_count(); |
|
44 | 45 | quick_repo_menu(); |
|
45 | 46 | } |
|
46 | 47 | }); |
|
47 | 48 | |
|
48 | 49 | // update the counter when doing search |
|
49 | 50 | $('#repo_list_table').on( 'search.dt', function (e,settings) { |
|
50 | 51 | get_datatable_count(); |
|
51 | 52 | }); |
|
52 | 53 | |
|
53 | 54 | // filter, filter both grids |
|
54 | 55 | $('#q_filter').on( 'keyup', function () { |
|
55 | 56 | var repo_api = $('#repo_list_table').dataTable().api(); |
|
56 | 57 | repo_api |
|
57 | 58 | .columns(0) |
|
58 | 59 | .search(this.value) |
|
59 | 60 | .draw(); |
|
60 | 61 | }); |
|
61 | 62 | |
|
62 | 63 | // refilter table if page load via back button |
|
63 | 64 | $("#q_filter").trigger('keyup'); |
|
64 | 65 | |
|
65 | 66 | }); |
|
66 | 67 | |
|
67 | 68 | </script> |
@@ -1,65 +1,66 b'' | |||
|
1 | 1 | <div class="panel panel-default"> |
|
2 | 2 | <div class="panel-heading"> |
|
3 | 3 | <h3 class="panel-title">${_('Your Watched Repositories')}</h3> |
|
4 | 4 | </div> |
|
5 | 5 | |
|
6 | 6 | <div class="panel-body"> |
|
7 | 7 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
8 | 8 | |
|
9 | 9 | <div id="repos_list_wrap"> |
|
10 | 10 | <table id="repo_list_table" class="display"></table> |
|
11 | 11 | </div> |
|
12 | 12 | </div> |
|
13 | 13 | </div> |
|
14 | 14 | |
|
15 | 15 | <script> |
|
16 | 16 | $(document).ready(function() { |
|
17 | 17 | |
|
18 | 18 | var get_datatable_count = function(){ |
|
19 | 19 | var api = $('#repo_list_table').dataTable().api(); |
|
20 | 20 | $('#repo_count').text(api.page.info().recordsDisplay); |
|
21 | 21 | }; |
|
22 | 22 | |
|
23 | 23 | // repo list |
|
24 | 24 | $('#repo_list_table').DataTable({ |
|
25 | 25 | data: ${c.data|n}, |
|
26 | 26 | dom: 'rtp', |
|
27 | 27 | pageLength: ${c.visual.admin_grid_items}, |
|
28 | 28 | order: [[ 0, "asc" ]], |
|
29 | 29 | columns: [ |
|
30 | 30 | { data: {"_": "name", |
|
31 | 31 | "sort": "name_raw"}, title: "${_('Name')}", className: "td-componentname" }, |
|
32 | 32 | { data: 'menu', className: "quick_repo_menu" }, |
|
33 | 33 | { data: {"_": "last_changeset", |
|
34 | 34 | "sort": "last_changeset_raw", |
|
35 | 35 | "type": Number}, title: "${_('Commit')}", className: "td-hash" } |
|
36 | 36 | ], |
|
37 | 37 | language: { |
|
38 | paginate: DEFAULT_GRID_PAGINATION | |
|
38 | paginate: DEFAULT_GRID_PAGINATION, | |
|
39 | emptyTable: "No repositories available yet." | |
|
39 | 40 | }, |
|
40 | 41 | "initComplete": function( settings, json ) { |
|
41 | 42 | get_datatable_count(); |
|
42 | 43 | quick_repo_menu(); |
|
43 | 44 | } |
|
44 | 45 | }); |
|
45 | 46 | |
|
46 | 47 | // update the counter when doing search |
|
47 | 48 | $('#repo_list_table').on( 'search.dt', function (e,settings) { |
|
48 | 49 | get_datatable_count(); |
|
49 | 50 | }); |
|
50 | 51 | |
|
51 | 52 | // filter, filter both grids |
|
52 | 53 | $('#q_filter').on( 'keyup', function () { |
|
53 | 54 | var repo_api = $('#repo_list_table').dataTable().api(); |
|
54 | 55 | repo_api |
|
55 | 56 | .columns(0) |
|
56 | 57 | .search(this.value) |
|
57 | 58 | .draw(); |
|
58 | 59 | }); |
|
59 | 60 | |
|
60 | 61 | // refilter table if page load via back button |
|
61 | 62 | $("#q_filter").trigger('keyup'); |
|
62 | 63 | |
|
63 | 64 | }); |
|
64 | 65 | |
|
65 | 66 | </script> |
@@ -1,93 +1,94 b'' | |||
|
1 | 1 | ## -*- coding: utf-8 -*- |
|
2 | 2 | <%inherit file="/base/base.html"/> |
|
3 | 3 | |
|
4 | 4 | <%def name="title()"> |
|
5 | 5 | ${_('Repository groups administration')} |
|
6 | 6 | %if c.rhodecode_name: |
|
7 | 7 | · ${h.branding(c.rhodecode_name)} |
|
8 | 8 | %endif |
|
9 | 9 | </%def> |
|
10 | 10 | |
|
11 | 11 | <%def name="breadcrumbs_links()"> |
|
12 | 12 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
13 | 13 | ${h.link_to(_('Admin'),h.url('admin_home'))} » <span id="repo_group_count">0</span> ${_('repository groups')} |
|
14 | 14 | </%def> |
|
15 | 15 | |
|
16 | 16 | <%def name="menu_bar_nav()"> |
|
17 | 17 | ${self.menu_items(active='admin')} |
|
18 | 18 | </%def> |
|
19 | 19 | |
|
20 | 20 | <%def name="main()"> |
|
21 | 21 | <div class="box"> |
|
22 | 22 | <div class="title"> |
|
23 | 23 | ${self.breadcrumbs()} |
|
24 | 24 | <ul class="links"> |
|
25 | 25 | %if h.HasPermissionAny('hg.admin','hg.repogroup.create.true')(): |
|
26 | 26 | <li> |
|
27 | 27 | <a href="${h.url('new_repo_group')}" class="btn btn-small btn-success">${_(u'Add Repository Group')}</a> |
|
28 | 28 | </li> |
|
29 | 29 | %endif |
|
30 | 30 | </ul> |
|
31 | 31 | </div> |
|
32 | 32 | <div id="repos_list_wrap"> |
|
33 | 33 | <table id="group_list_table" class="display"></table> |
|
34 | 34 | </div> |
|
35 | 35 | </div> |
|
36 | 36 | |
|
37 | 37 | <script> |
|
38 | 38 | $(document).ready(function() { |
|
39 | 39 | |
|
40 | 40 | var get_datatable_count = function(){ |
|
41 | 41 | var api = $('#group_list_table').dataTable().api(); |
|
42 | 42 | $('#repo_group_count').text(api.page.info().recordsDisplay); |
|
43 | 43 | }; |
|
44 | 44 | |
|
45 | 45 | // repo group list |
|
46 | 46 | $('#group_list_table').DataTable({ |
|
47 | 47 | data: ${c.data|n}, |
|
48 | 48 | dom: 'rtp', |
|
49 | 49 | pageLength: ${c.visual.admin_grid_items}, |
|
50 | 50 | order: [[ 0, "asc" ]], |
|
51 | 51 | columns: [ |
|
52 | 52 | { data: {"_": "name", |
|
53 | 53 | "sort": "name_raw"}, title: "${_('Name')}", className: "td-componentname" }, |
|
54 | 54 | { data: 'menu', "bSortable": false, className: "quick_repo_menu" }, |
|
55 | 55 | { data: {"_": "desc", |
|
56 | 56 | "sort": "desc"}, title: "${_('Description')}", className: "td-description" }, |
|
57 | 57 | { data: {"_": "top_level_repos", |
|
58 | 58 | "sort": "top_level_repos"}, title: "${_('Number of top level repositories')}" }, |
|
59 | 59 | { data: {"_": "owner", |
|
60 | 60 | "sort": "owner"}, title: "${_('Owner')}", className: "td-user" }, |
|
61 | 61 | { data: {"_": "action", |
|
62 | 62 | "sort": "action"}, title: "${_('Action')}", className: "td-action" } |
|
63 | 63 | ], |
|
64 | 64 | language: { |
|
65 | paginate: DEFAULT_GRID_PAGINATION | |
|
65 | paginate: DEFAULT_GRID_PAGINATION, | |
|
66 | emptyTable: "No repository groups available yet." | |
|
66 | 67 | }, |
|
67 | 68 | "initComplete": function( settings, json ) { |
|
68 | 69 | get_datatable_count(); |
|
69 | 70 | quick_repo_menu(); |
|
70 | 71 | } |
|
71 | 72 | }); |
|
72 | 73 | |
|
73 | 74 | // update the counter when doing search |
|
74 | 75 | $('#group_list_table').on( 'search.dt', function (e,settings) { |
|
75 | 76 | get_datatable_count(); |
|
76 | 77 | }); |
|
77 | 78 | |
|
78 | 79 | // filter, filter both grids |
|
79 | 80 | $('#q_filter').on( 'keyup', function () { |
|
80 | 81 | |
|
81 | 82 | var repo_group_api = $('#group_list_table').dataTable().api(); |
|
82 | 83 | repo_group_api |
|
83 | 84 | .columns(0) |
|
84 | 85 | .search(this.value) |
|
85 | 86 | .draw(); |
|
86 | 87 | }); |
|
87 | 88 | |
|
88 | 89 | // refilter table if page load via back button |
|
89 | 90 | $("#q_filter").trigger('keyup'); |
|
90 | 91 | }); |
|
91 | 92 | </script> |
|
92 | 93 | </%def> |
|
93 | 94 |
@@ -1,100 +1,101 b'' | |||
|
1 | 1 | ## -*- coding: utf-8 -*- |
|
2 | 2 | <%inherit file="/base/base.html"/> |
|
3 | 3 | |
|
4 | 4 | <%def name="title()"> |
|
5 | 5 | ${_('Repositories administration')} |
|
6 | 6 | %if c.rhodecode_name: |
|
7 | 7 | · ${h.branding(c.rhodecode_name)} |
|
8 | 8 | %endif |
|
9 | 9 | </%def> |
|
10 | 10 | |
|
11 | 11 | <%def name="breadcrumbs_links()"> |
|
12 | 12 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
13 | 13 | ${h.link_to(_('Admin'),h.url('admin_home'))} » <span id="repo_count">0</span> ${_('repositories')} |
|
14 | 14 | </%def> |
|
15 | 15 | |
|
16 | 16 | <%def name="menu_bar_nav()"> |
|
17 | 17 | ${self.menu_items(active='admin')} |
|
18 | 18 | </%def> |
|
19 | 19 | |
|
20 | 20 | <%def name="main()"> |
|
21 | 21 | <div class="box"> |
|
22 | 22 | <div class="title"> |
|
23 | 23 | ${self.breadcrumbs()} |
|
24 | 24 | <ul class="links"> |
|
25 | 25 | %if h.HasPermissionAny('hg.admin','hg.create.repository')(): |
|
26 | 26 | <li> |
|
27 | 27 | <a href="${h.url('new_repo')}" class="btn btn-small btn-success">${_(u'Add Repository')}</a> |
|
28 | 28 | </li> |
|
29 | 29 | %endif |
|
30 | 30 | </ul> |
|
31 | 31 | </div> |
|
32 | 32 | <div id="repos_list_wrap"> |
|
33 | 33 | <table id="repo_list_table" class="display"></table> |
|
34 | 34 | </div> |
|
35 | 35 | </div> |
|
36 | 36 | |
|
37 | 37 | <script> |
|
38 | 38 | $(document).ready(function() { |
|
39 | 39 | |
|
40 | 40 | var get_datatable_count = function(){ |
|
41 | 41 | var api = $('#repo_list_table').dataTable().api(); |
|
42 | 42 | $('#repo_count').text(api.page.info().recordsDisplay); |
|
43 | 43 | }; |
|
44 | 44 | |
|
45 | 45 | |
|
46 | 46 | // repo list |
|
47 | 47 | $('#repo_list_table').DataTable({ |
|
48 | 48 | data: ${c.data|n}, |
|
49 | 49 | dom: 'rtp', |
|
50 | 50 | pageLength: ${c.visual.admin_grid_items}, |
|
51 | 51 | order: [[ 0, "asc" ]], |
|
52 | 52 | columns: [ |
|
53 | 53 | { data: {"_": "name", |
|
54 | 54 | "sort": "name_raw"}, title: "${_('Name')}", className: "td-componentname" }, |
|
55 | 55 | { data: 'menu', "bSortable": false, className: "quick_repo_menu" }, |
|
56 | 56 | { data: {"_": "desc", |
|
57 | 57 | "sort": "desc"}, title: "${_('Description')}", className: "td-description" }, |
|
58 | 58 | { data: {"_": "last_change", |
|
59 | 59 | "sort": "last_change_raw", |
|
60 | 60 | "type": Number}, title: "${_('Last Change')}", className: "td-time" }, |
|
61 | 61 | { data: {"_": "last_changeset", |
|
62 | 62 | "sort": "last_changeset_raw", |
|
63 | 63 | "type": Number}, title: "${_('Commit')}", className: "td-commit" }, |
|
64 | 64 | { data: {"_": "owner", |
|
65 | 65 | "sort": "owner"}, title: "${_('Owner')}", className: "td-user" }, |
|
66 | 66 | { data: {"_": "state", |
|
67 | 67 | "sort": "state"}, title: "${_('State')}", className: "td-tags td-state" }, |
|
68 | 68 | { data: {"_": "action", |
|
69 | 69 | "sort": "action"}, title: "${_('Action')}", className: "td-action" } |
|
70 | 70 | ], |
|
71 | 71 | language: { |
|
72 | paginate: DEFAULT_GRID_PAGINATION | |
|
72 | paginate: DEFAULT_GRID_PAGINATION, | |
|
73 | emptyTable: "No repositories available yet." | |
|
73 | 74 | }, |
|
74 | 75 | "initComplete": function( settings, json ) { |
|
75 | 76 | get_datatable_count(); |
|
76 | 77 | quick_repo_menu(); |
|
77 | 78 | } |
|
78 | 79 | }); |
|
79 | 80 | |
|
80 | 81 | // update the counter when doing search |
|
81 | 82 | $('#repo_list_table').on( 'search.dt', function (e,settings) { |
|
82 | 83 | get_datatable_count(); |
|
83 | 84 | }); |
|
84 | 85 | |
|
85 | 86 | // filter, filter both grids |
|
86 | 87 | $('#q_filter').on( 'keyup', function () { |
|
87 | 88 | var repo_api = $('#repo_list_table').dataTable().api(); |
|
88 | 89 | repo_api |
|
89 | 90 | .columns(0) |
|
90 | 91 | .search(this.value) |
|
91 | 92 | .draw(); |
|
92 | 93 | }); |
|
93 | 94 | |
|
94 | 95 | // refilter table if page load via back button |
|
95 | 96 | $("#q_filter").trigger('keyup'); |
|
96 | 97 | }); |
|
97 | 98 | |
|
98 | 99 | </script> |
|
99 | 100 | |
|
100 | 101 | </%def> |
@@ -1,97 +1,98 b'' | |||
|
1 | 1 | ## -*- coding: utf-8 -*- |
|
2 | 2 | <%inherit file="/base/base.html"/> |
|
3 | 3 | |
|
4 | 4 | <%def name="title()"> |
|
5 | 5 | ${_('User groups administration')} |
|
6 | 6 | %if c.rhodecode_name: |
|
7 | 7 | · ${h.branding(c.rhodecode_name)} |
|
8 | 8 | %endif |
|
9 | 9 | </%def> |
|
10 | 10 | |
|
11 | 11 | <%def name="breadcrumbs_links()"> |
|
12 | 12 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
13 | 13 | ${h.link_to(_('Admin'),h.url('admin_home'))} » <span id="user_group_count">0</span> ${_('user groups')} |
|
14 | 14 | </%def> |
|
15 | 15 | |
|
16 | 16 | <%def name="menu_bar_nav()"> |
|
17 | 17 | ${self.menu_items(active='admin')} |
|
18 | 18 | </%def> |
|
19 | 19 | |
|
20 | 20 | <%def name="main()"> |
|
21 | 21 | <div class="box"> |
|
22 | 22 | |
|
23 | 23 | <div class="title"> |
|
24 | 24 | ${self.breadcrumbs()} |
|
25 | 25 | <ul class="links"> |
|
26 | 26 | %if h.HasPermissionAny('hg.admin', 'hg.usergroup.create.true')(): |
|
27 | 27 | <li> |
|
28 | 28 | <a href="${h.url('new_users_group')}" class="btn btn-small btn-success">${_(u'Add User Group')}</a> |
|
29 | 29 | </li> |
|
30 | 30 | %endif |
|
31 | 31 | </ul> |
|
32 | 32 | </div> |
|
33 | 33 | |
|
34 | 34 | <div id="repos_list_wrap"> |
|
35 | 35 | <table id="user_group_list_table" class="display"></table> |
|
36 | 36 | </div> |
|
37 | 37 | |
|
38 | 38 | </div> |
|
39 | 39 | <script> |
|
40 | 40 | $(document).ready(function() { |
|
41 | 41 | |
|
42 | 42 | var get_datatable_count = function(){ |
|
43 | 43 | var api = $('#user_group_list_table').dataTable().api(); |
|
44 | 44 | $('#user_group_count').text(api.page.info().recordsDisplay); |
|
45 | 45 | }; |
|
46 | 46 | |
|
47 | 47 | // user list |
|
48 | 48 | $('#user_group_list_table').DataTable({ |
|
49 | 49 | data: ${c.data|n}, |
|
50 | 50 | dom: 'rtp', |
|
51 | 51 | pageLength: ${c.visual.admin_grid_items}, |
|
52 | 52 | order: [[ 0, "asc" ]], |
|
53 | 53 | columns: [ |
|
54 | 54 | { data: {"_": "group_name", |
|
55 | 55 | "sort": "group_name_raw"}, title: "${_('Name')}", className: "td-componentname" }, |
|
56 | 56 | { data: {"_": "desc", |
|
57 | 57 | "sort": "desc"}, title: "${_('Description')}", className: "td-description" }, |
|
58 | 58 | { data: {"_": "members", |
|
59 | 59 | "sort": "members", |
|
60 | 60 | "type": Number}, title: "${_('Members')}", className: "td-number" }, |
|
61 | 61 | { data: {"_": "active", |
|
62 | 62 | "sort": "active"}, title: "${_('Active')}", className: "td-active", className: "td-number"}, |
|
63 | 63 | { data: {"_": "owner", |
|
64 | 64 | "sort": "owner"}, title: "${_('Owner')}", className: "td-user" }, |
|
65 | 65 | { data: {"_": "action", |
|
66 | 66 | "sort": "action"}, title: "${_('Action')}", className: "td-action" } |
|
67 | 67 | ], |
|
68 | 68 | language: { |
|
69 | paginate: DEFAULT_GRID_PAGINATION | |
|
69 | paginate: DEFAULT_GRID_PAGINATION, | |
|
70 | emptyTable: "No user groups available yet." | |
|
70 | 71 | }, |
|
71 | 72 | "initComplete": function( settings, json ) { |
|
72 | 73 | get_datatable_count(); |
|
73 | 74 | } |
|
74 | 75 | }); |
|
75 | 76 | |
|
76 | 77 | // update the counter when doing search |
|
77 | 78 | $('#user_group_list_table').on( 'search.dt', function (e,settings) { |
|
78 | 79 | get_datatable_count(); |
|
79 | 80 | }); |
|
80 | 81 | |
|
81 | 82 | // filter, filter both grids |
|
82 | 83 | $('#q_filter').on( 'keyup', function () { |
|
83 | 84 | var user_api = $('#user_group_list_table').dataTable().api(); |
|
84 | 85 | user_api |
|
85 | 86 | .columns(0) |
|
86 | 87 | .search(this.value) |
|
87 | 88 | .draw(); |
|
88 | 89 | }); |
|
89 | 90 | |
|
90 | 91 | // refilter table if page load via back button |
|
91 | 92 | $("#q_filter").trigger('keyup'); |
|
92 | 93 | |
|
93 | 94 | }); |
|
94 | 95 | |
|
95 | 96 | </script> |
|
96 | 97 | |
|
97 | 98 | </%def> |
@@ -1,140 +1,141 b'' | |||
|
1 | 1 | ## -*- coding: utf-8 -*- |
|
2 | 2 | <%inherit file="/base/base.html"/> |
|
3 | 3 | |
|
4 | 4 | <%def name="title()"> |
|
5 | 5 | ${_('Users administration')} |
|
6 | 6 | %if c.rhodecode_name: |
|
7 | 7 | · ${h.branding(c.rhodecode_name)} |
|
8 | 8 | %endif |
|
9 | 9 | </%def> |
|
10 | 10 | |
|
11 | 11 | <%def name="breadcrumbs_links()"> |
|
12 | 12 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
13 | 13 | ${h.link_to(_('Admin'),h.url('admin_home'))} » <span id="user_count">0</span> |
|
14 | 14 | </%def> |
|
15 | 15 | |
|
16 | 16 | <%def name="menu_bar_nav()"> |
|
17 | 17 | ${self.menu_items(active='admin')} |
|
18 | 18 | </%def> |
|
19 | 19 | |
|
20 | 20 | <%def name="main()"> |
|
21 | 21 | <div class="box"> |
|
22 | 22 | |
|
23 | 23 | <div class="title"> |
|
24 | 24 | ${self.breadcrumbs()} |
|
25 | 25 | <ul class="links"> |
|
26 | 26 | <li> |
|
27 | 27 | <a href="${h.url('new_user')}" class="btn btn-small btn-success">${_(u'Add User')}</a> |
|
28 | 28 | </li> |
|
29 | 29 | </ul> |
|
30 | 30 | </div> |
|
31 | 31 | |
|
32 | 32 | <div id="repos_list_wrap"> |
|
33 | 33 | <table id="user_list_table" class="display"></table> |
|
34 | 34 | </div> |
|
35 | 35 | </div> |
|
36 | 36 | |
|
37 | 37 | <script> |
|
38 | 38 | $(document).ready(function() { |
|
39 | 39 | |
|
40 | 40 | var get_datatable_count = function(){ |
|
41 | 41 | var datatable = $('#user_list_table').dataTable(); |
|
42 | 42 | var api = datatable.api(); |
|
43 | 43 | var total = api.page.info().recordsDisplay; |
|
44 | 44 | var active = datatable.fnGetFilteredData(); |
|
45 | 45 | var _text = _gettext("{0} active out of {1} users").format(active, total); |
|
46 | 46 | $('#user_count').text(_text); |
|
47 | 47 | }; |
|
48 | 48 | |
|
49 | 49 | // custom filter that filters by username OR email |
|
50 | 50 | $.fn.dataTable.ext.search.push( |
|
51 | 51 | function( settings, data, dataIndex ) { |
|
52 | 52 | var query = $('#q_filter').val(); |
|
53 | 53 | var username = data[1]; |
|
54 | 54 | var email = data[2]; |
|
55 | 55 | var first_name = data[3]; |
|
56 | 56 | var last_name = data[4]; |
|
57 | 57 | |
|
58 | 58 | var query_str = username + " " + |
|
59 | 59 | email + " " + |
|
60 | 60 | first_name + " " + |
|
61 | 61 | last_name; |
|
62 | 62 | if((query_str).indexOf(query) !== -1){ |
|
63 | 63 | return true; |
|
64 | 64 | } |
|
65 | 65 | return false; |
|
66 | 66 | } |
|
67 | 67 | ); |
|
68 | 68 | // filtered data plugin |
|
69 | 69 | $.fn.dataTableExt.oApi.fnGetFilteredData = function ( oSettings ) { |
|
70 | 70 | var res = []; |
|
71 | 71 | for ( var i=0, iLen=oSettings.fnRecordsDisplay() ; i<iLen ; i++ ) { |
|
72 | 72 | var record = oSettings.aoData[i]._aData; |
|
73 | 73 | if(record['active_raw']){ |
|
74 | 74 | res.push(record); |
|
75 | 75 | } |
|
76 | 76 | } |
|
77 | 77 | return res.length; |
|
78 | 78 | }; |
|
79 | 79 | |
|
80 | 80 | // user list |
|
81 | 81 | $('#user_list_table').DataTable({ |
|
82 | 82 | data: ${c.data|n}, |
|
83 | 83 | dom: 'rtp', |
|
84 | 84 | pageLength: ${c.visual.admin_grid_items}, |
|
85 | 85 | order: [[ 1, "asc" ]], |
|
86 | 86 | columns: [ |
|
87 | 87 | { data: {"_": "gravatar"}, className: "td-gravatar" }, |
|
88 | 88 | { data: {"_": "username", |
|
89 | 89 | "sort": "username_raw"}, title: "${_('Username')}", className: "td-user" }, |
|
90 | 90 | { data: {"_": "email", |
|
91 | 91 | "sort": "email"}, title: "${_('Email')}", className: "td-email" }, |
|
92 | 92 | { data: {"_": "first_name", |
|
93 | 93 | "sort": "first_name"}, title: "${_('First Name')}", className: "td-user" }, |
|
94 | 94 | { data: {"_": "last_name", |
|
95 | 95 | "sort": "last_name"}, title: "${_('Last Name')}", className: "td-user" }, |
|
96 | 96 | { data: {"_": "last_login", |
|
97 | 97 | "sort": "last_login_raw", |
|
98 | 98 | "type": Number}, title: "${_('Last login')}", className: "td-time" }, |
|
99 | 99 | { data: {"_": "active", |
|
100 | 100 | "sort": "active_raw"}, title: "${_('Active')}", className: "td-active" }, |
|
101 | 101 | { data: {"_": "admin", |
|
102 | 102 | "sort": "admin_raw"}, title: "${_('Admin')}", className: "td-admin" }, |
|
103 | 103 | { data: {"_": "extern_type", |
|
104 | 104 | "sort": "extern_type"}, title: "${_('Authentication type')}", className: "td-type" }, |
|
105 | 105 | { data: {"_": "action", |
|
106 | 106 | "sort": "action"}, title: "${_('Action')}", className: "td-action" } |
|
107 | 107 | ], |
|
108 | 108 | language: { |
|
109 | paginate: DEFAULT_GRID_PAGINATION | |
|
109 | paginate: DEFAULT_GRID_PAGINATION, | |
|
110 | emptyTable: "No users available yet." | |
|
110 | 111 | }, |
|
111 | 112 | "initComplete": function( settings, json ) { |
|
112 | 113 | get_datatable_count(); |
|
113 | 114 | }, |
|
114 | 115 | "createdRow": function ( row, data, index ) { |
|
115 | 116 | if (!data['active_raw']){ |
|
116 | 117 | $(row).addClass('closed') |
|
117 | 118 | } |
|
118 | 119 | } |
|
119 | 120 | }); |
|
120 | 121 | |
|
121 | 122 | // update the counter when doing search |
|
122 | 123 | $('#user_list_table').on( 'search.dt', function (e,settings) { |
|
123 | 124 | get_datatable_count(); |
|
124 | 125 | }); |
|
125 | 126 | |
|
126 | 127 | // filter, filter both grids |
|
127 | 128 | $('#q_filter').on( 'keyup', function () { |
|
128 | 129 | var user_api = $('#user_list_table').dataTable().api(); |
|
129 | 130 | user_api |
|
130 | 131 | .draw(); |
|
131 | 132 | }); |
|
132 | 133 | |
|
133 | 134 | // refilter table if page load via back button |
|
134 | 135 | $("#q_filter").trigger('keyup'); |
|
135 | 136 | |
|
136 | 137 | }); |
|
137 | 138 | |
|
138 | 139 | </script> |
|
139 | 140 | |
|
140 | 141 | </%def> |
@@ -1,101 +1,102 b'' | |||
|
1 | 1 | ## -*- coding: utf-8 -*- |
|
2 | 2 | <%inherit file="/base/base.html"/> |
|
3 | 3 | |
|
4 | 4 | <%def name="title()"> |
|
5 | 5 | ${_('%s Bookmarks') % c.repo_name} |
|
6 | 6 | %if c.rhodecode_name: |
|
7 | 7 | · ${h.branding(c.rhodecode_name)} |
|
8 | 8 | %endif |
|
9 | 9 | </%def> |
|
10 | 10 | |
|
11 | 11 | <%def name="breadcrumbs_links()"> |
|
12 | 12 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
13 | 13 | <span id="obj_count">0</span> ${_('bookmarks')} |
|
14 | 14 | </%def> |
|
15 | 15 | |
|
16 | 16 | <%def name="menu_bar_nav()"> |
|
17 | 17 | ${self.menu_items(active='repositories')} |
|
18 | 18 | </%def> |
|
19 | 19 | |
|
20 | 20 | <%def name="menu_bar_subnav()"> |
|
21 | 21 | ${self.repo_menu(active='summary')} |
|
22 | 22 | </%def> |
|
23 | 23 | |
|
24 | 24 | <%def name="main()"> |
|
25 | 25 | <div class="box"> |
|
26 | 26 | <div class="title"> |
|
27 | 27 | ${self.repo_page_title(c.rhodecode_db_repo)} |
|
28 | 28 | %if c.has_references: |
|
29 | 29 | <ul class="links"> |
|
30 | 30 | <li> |
|
31 | 31 | <input type="submit" id="compare_action" class="btn" disabled="disabled" value="${_('Compare Selected Bookmarks')}"> |
|
32 | 32 | </li> |
|
33 | 33 | </ul> |
|
34 | 34 | %endif |
|
35 | 35 | %if c.has_references: |
|
36 | 36 | ${self.breadcrumbs()} |
|
37 | 37 | %endif |
|
38 | 38 | </div> |
|
39 | 39 | <table id="obj_list_table" class="display"></table> |
|
40 | 40 | </div> |
|
41 | 41 | |
|
42 | 42 | |
|
43 | 43 | <script type="text/javascript"> |
|
44 | 44 | $(document).ready(function() { |
|
45 | 45 | |
|
46 | 46 | var get_datatable_count = function(){ |
|
47 | 47 | var api = $('#obj_list_table').dataTable().api(); |
|
48 | 48 | $('#obj_count').text(api.page.info().recordsDisplay); |
|
49 | 49 | }; |
|
50 | 50 | |
|
51 | 51 | // object list |
|
52 | 52 | $('#obj_list_table').DataTable({ |
|
53 | 53 | data: ${c.data|n}, |
|
54 | 54 | dom: 'rtp', |
|
55 | 55 | pageLength: ${c.visual.dashboard_items}, |
|
56 | 56 | order: [[ 0, "asc" ]], |
|
57 | 57 | columns: [ |
|
58 | 58 | { data: {"_": "name", |
|
59 | 59 | "sort": "name_raw"}, title: "${_('Name')}", className: "td-tags" }, |
|
60 | 60 | { data: {"_": "date", |
|
61 | 61 | "sort": "date_raw"}, title: "${_('Date')}", className: "td-time" }, |
|
62 | 62 | { data: {"_": "author", |
|
63 | 63 | "sort": "author"}, title: "${_('Author')}", className: "td-user" }, |
|
64 | 64 | { data: {"_": "commit", |
|
65 | 65 | "sort": "commit_raw", |
|
66 | 66 | "type": Number}, title: "${_('Commit')}", className: "td-hash" }, |
|
67 | 67 | { data: {"_": "compare", |
|
68 | 68 | "sort": "compare"}, title: "${_('Compare')}", className: "td-compare" } |
|
69 | 69 | ], |
|
70 | 70 | language: { |
|
71 | paginate: DEFAULT_GRID_PAGINATION | |
|
71 | paginate: DEFAULT_GRID_PAGINATION, | |
|
72 | emptyTable: "No bookmarks available yet." | |
|
72 | 73 | }, |
|
73 | 74 | "initComplete": function(settings, json) { |
|
74 | 75 | get_datatable_count(); |
|
75 | 76 | timeagoActivate(); |
|
76 | 77 | compare_radio_buttons("${c.repo_name}", 'book'); |
|
77 | 78 | } |
|
78 | 79 | }); |
|
79 | 80 | |
|
80 | 81 | // update when things change |
|
81 | 82 | $('#obj_list_table').on('draw.dt', function() { |
|
82 | 83 | get_datatable_count(); |
|
83 | 84 | timeagoActivate(); |
|
84 | 85 | }); |
|
85 | 86 | |
|
86 | 87 | // filter, filter both grids |
|
87 | 88 | $('#q_filter').on('keyup', function() { |
|
88 | 89 | var obj_api = $('#obj_list_table').dataTable().api(); |
|
89 | 90 | obj_api |
|
90 | 91 | .columns(0) |
|
91 | 92 | .search(this.value) |
|
92 | 93 | .draw(); |
|
93 | 94 | }); |
|
94 | 95 | |
|
95 | 96 | // refilter table if page load via back button |
|
96 | 97 | $("#q_filter").trigger('keyup'); |
|
97 | 98 | |
|
98 | 99 | }); |
|
99 | 100 | |
|
100 | 101 | </script> |
|
101 | 102 | </%def> |
@@ -1,100 +1,101 b'' | |||
|
1 | 1 | ## -*- coding: utf-8 -*- |
|
2 | 2 | <%inherit file="/base/base.html"/> |
|
3 | 3 | |
|
4 | 4 | <%def name="title()"> |
|
5 | 5 | ${_('%s Branches') % c.repo_name} |
|
6 | 6 | %if c.rhodecode_name: |
|
7 | 7 | · ${h.branding(c.rhodecode_name)} |
|
8 | 8 | %endif |
|
9 | 9 | </%def> |
|
10 | 10 | |
|
11 | 11 | <%def name="breadcrumbs_links()"> |
|
12 | 12 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
13 | 13 | <span id="obj_count">0</span> ${_('branches')} |
|
14 | 14 | </%def> |
|
15 | 15 | |
|
16 | 16 | <%def name="menu_bar_nav()"> |
|
17 | 17 | ${self.menu_items(active='repositories')} |
|
18 | 18 | </%def> |
|
19 | 19 | |
|
20 | 20 | <%def name="menu_bar_subnav()"> |
|
21 | 21 | ${self.repo_menu(active='summary')} |
|
22 | 22 | </%def> |
|
23 | 23 | |
|
24 | 24 | <%def name="main()"> |
|
25 | 25 | <div class="box"> |
|
26 | 26 | <div class="title"> |
|
27 | 27 | ${self.repo_page_title(c.rhodecode_db_repo)} |
|
28 | 28 | %if c.has_references: |
|
29 | 29 | <ul class="links"> |
|
30 | 30 | <li> |
|
31 | 31 | <input type="submit" id="compare_action" class="btn" disabled="disabled" value="${_('Compare Selected Branches')}"/> |
|
32 | 32 | </li> |
|
33 | 33 | </ul> |
|
34 | 34 | %endif |
|
35 | 35 | %if c.has_references: |
|
36 | 36 | ${self.breadcrumbs()} |
|
37 | 37 | %endif |
|
38 | 38 | </div> |
|
39 | 39 | <table id="obj_list_table" class="display"></table> |
|
40 | 40 | </div> |
|
41 | 41 | |
|
42 | 42 | <script type="text/javascript"> |
|
43 | 43 | $(document).ready(function() { |
|
44 | 44 | |
|
45 | 45 | var get_datatable_count = function(){ |
|
46 | 46 | var api = $('#obj_list_table').dataTable().api(); |
|
47 | 47 | $('#obj_count').text(api.page.info().recordsDisplay); |
|
48 | 48 | }; |
|
49 | 49 | |
|
50 | 50 | // object list |
|
51 | 51 | $('#obj_list_table').DataTable({ |
|
52 | 52 | data: ${c.data|n}, |
|
53 | 53 | dom: 'rtp', |
|
54 | 54 | pageLength: ${c.visual.dashboard_items}, |
|
55 | 55 | order: [[ 0, "asc" ]], |
|
56 | 56 | columns: [ |
|
57 | 57 | { data: {"_": "name", |
|
58 | 58 | "sort": "name_raw"}, title: "${_('Name')}", className: "td-tags" }, |
|
59 | 59 | { data: {"_": "date", |
|
60 | 60 | "sort": "date_raw"}, title: "${_('Date')}", className: "td-time" }, |
|
61 | 61 | { data: {"_": "author", |
|
62 | 62 | "sort": "author"}, title: "${_('Author')}", className: "td-user" }, |
|
63 | 63 | { data: {"_": "commit", |
|
64 | 64 | "sort": "commit_raw", |
|
65 | 65 | "type": Number}, title: "${_('Commit')}", className: "td-hash" }, |
|
66 | 66 | { data: {"_": "compare", |
|
67 | 67 | "sort": "compare"}, title: "${_('Compare')}", className: "td-compare" } |
|
68 | 68 | ], |
|
69 | 69 | language: { |
|
70 | paginate: DEFAULT_GRID_PAGINATION | |
|
70 | paginate: DEFAULT_GRID_PAGINATION, | |
|
71 | emptyTable: "No branches available yet." | |
|
71 | 72 | }, |
|
72 | 73 | "initComplete": function( settings, json ) { |
|
73 | 74 | get_datatable_count(); |
|
74 | 75 | timeagoActivate(); |
|
75 | 76 | compare_radio_buttons("${c.repo_name}", 'branch'); |
|
76 | 77 | } |
|
77 | 78 | }); |
|
78 | 79 | |
|
79 | 80 | // update when things change |
|
80 | 81 | $('#obj_list_table').on('draw.dt', function() { |
|
81 | 82 | get_datatable_count(); |
|
82 | 83 | timeagoActivate(); |
|
83 | 84 | }); |
|
84 | 85 | |
|
85 | 86 | // filter, filter both grids |
|
86 | 87 | $('#q_filter').on( 'keyup', function () { |
|
87 | 88 | var obj_api = $('#obj_list_table').dataTable().api(); |
|
88 | 89 | obj_api |
|
89 | 90 | .columns(0) |
|
90 | 91 | .search(this.value) |
|
91 | 92 | .draw(); |
|
92 | 93 | }); |
|
93 | 94 | |
|
94 | 95 | // refilter table if page load via back button |
|
95 | 96 | $("#q_filter").trigger('keyup'); |
|
96 | 97 | |
|
97 | 98 | }); |
|
98 | 99 | |
|
99 | 100 | </script> |
|
100 | 101 | </%def> |
@@ -1,170 +1,172 b'' | |||
|
1 | 1 | <%inherit file="/base/base.html"/> |
|
2 | 2 | |
|
3 | 3 | <%def name="main()"> |
|
4 | 4 | <div class="box"> |
|
5 | 5 | <!-- box / title --> |
|
6 | 6 | <div class="title"> |
|
7 | 7 | <div class="block-left breadcrumbs"> |
|
8 | 8 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
9 | 9 | ${self.breadcrumbs()} |
|
10 | 10 | <span id="match_container" style="display:none">» <span id="match_count">0</span> ${_('matches')}</span> |
|
11 | 11 | </div> |
|
12 | 12 | %if c.rhodecode_user.username != h.DEFAULT_USER: |
|
13 | 13 | <div class="block-right"> |
|
14 | 14 | <% |
|
15 | 15 | is_admin = h.HasPermissionAny('hg.admin')('can create repos index page') |
|
16 | 16 | create_repo = h.HasPermissionAny('hg.create.repository')('can create repository index page') |
|
17 | 17 | create_repo_group = h.HasPermissionAny('hg.repogroup.create.true')('can create repository groups index page') |
|
18 | 18 | create_user_group = h.HasPermissionAny('hg.usergroup.create.true')('can create user groups index page') |
|
19 | 19 | |
|
20 | 20 | gr_name = c.repo_group.group_name if c.repo_group else None |
|
21 | 21 | # create repositories with write permission on group is set to true |
|
22 | 22 | create_on_write = h.HasPermissionAny('hg.create.write_on_repogroup.true')() |
|
23 | 23 | group_admin = h.HasRepoGroupPermissionAny('group.admin')(gr_name, 'group admin index page') |
|
24 | 24 | group_write = h.HasRepoGroupPermissionAny('group.write')(gr_name, 'can write into group index page') |
|
25 | 25 | %> |
|
26 | 26 | |
|
27 | 27 | %if not c.repo_group: |
|
28 | 28 | ## no repository group context here |
|
29 | 29 | %if is_admin or create_repo: |
|
30 | 30 | <a href="${h.url('new_repo')}" class="btn btn-small btn-success btn-primary">${_('Add Repository')}</a> |
|
31 | 31 | %endif |
|
32 | 32 | |
|
33 | 33 | %if is_admin or create_repo_group: |
|
34 | 34 | <a href="${h.url('new_repo_group')}" class="btn btn-small btn-default">${_(u'Add Repository Group')}</a> |
|
35 | 35 | %endif |
|
36 | 36 | %else: |
|
37 | 37 | ##we're inside other repository group other terms apply |
|
38 | 38 | %if is_admin or group_admin or (group_write and create_on_write): |
|
39 | 39 | <a href="${h.url('new_repo',parent_group=c.repo_group.group_id)}" class="btn btn-small btn-success btn-primary">${_('Add Repository')}</a> |
|
40 | 40 | %endif |
|
41 | 41 | %if is_admin or group_admin: |
|
42 | 42 | <a href="${h.url('new_repo_group', parent_group=c.repo_group.group_id)}" class="btn btn-small btn-default">${_(u'Add Repository Group')}</a> |
|
43 | 43 | %endif |
|
44 | 44 | %if is_admin or group_admin: |
|
45 | 45 | <a href="${h.url('edit_repo_group',group_name=c.repo_group.group_name)}" title="${_('You have admin right to this group, and can edit it')}" class="btn btn-small btn-primary">${_('Edit Repository Group')}</a> |
|
46 | 46 | %endif |
|
47 | 47 | %endif |
|
48 | 48 | </div> |
|
49 | 49 | %endif |
|
50 | 50 | </div> |
|
51 | 51 | <!-- end box / title --> |
|
52 | 52 | <div class="table"> |
|
53 | 53 | <div id="groups_list_wrap"> |
|
54 | 54 | <table id="group_list_table" class="display"></table> |
|
55 | 55 | </div> |
|
56 | 56 | </div> |
|
57 | 57 | |
|
58 | 58 | <div class="table"> |
|
59 | 59 | <div id="repos_list_wrap"> |
|
60 | 60 | <table id="repo_list_table" class="display"></table> |
|
61 | 61 | </div> |
|
62 | 62 | </div> |
|
63 | 63 | </div> |
|
64 | 64 | <script> |
|
65 | 65 | $(document).ready(function() { |
|
66 | 66 | |
|
67 | 67 | var get_datatable_count = function() { |
|
68 | 68 | var api = $('#repo_list_table').dataTable().api(); |
|
69 | 69 | var pageInfo = api.page.info(); |
|
70 | 70 | var repos = pageInfo.recordsDisplay; |
|
71 | 71 | var reposTotal = pageInfo.recordsTotal; |
|
72 | 72 | |
|
73 | 73 | api = $('#group_list_table').dataTable().api(); |
|
74 | 74 | pageInfo = api.page.info(); |
|
75 | 75 | var repoGroups = pageInfo.recordsDisplay; |
|
76 | 76 | var repoGroupsTotal = pageInfo.recordsTotal; |
|
77 | 77 | |
|
78 | 78 | if (repoGroups !== repoGroupsTotal) { |
|
79 | 79 | $('#match_count').text(repos+repoGroups); |
|
80 | 80 | } |
|
81 | 81 | if (repos !== reposTotal) { |
|
82 | 82 | $('#match_container').show(); |
|
83 | 83 | } |
|
84 | 84 | if ($('#q_filter').val() === '') { |
|
85 | 85 | $('#match_container').hide(); |
|
86 | 86 | } |
|
87 | 87 | }; |
|
88 | 88 | |
|
89 | 89 | // repo group list |
|
90 | 90 | $('#group_list_table').DataTable({ |
|
91 | 91 | data: ${c.repo_groups_data|n}, |
|
92 | 92 | dom: 'rtp', |
|
93 | 93 | pageLength: ${c.visual.dashboard_items}, |
|
94 | 94 | order: [[ 0, "asc" ]], |
|
95 | 95 | columns: [ |
|
96 | 96 | { data: {"_": "name", |
|
97 | 97 | "sort": "name_raw"}, title: "${_('Name')}", className: "td-componentname" }, |
|
98 | 98 | { data: 'menu', "bSortable": false, className: "quick_repo_menu" }, |
|
99 | 99 | { data: {"_": "desc", |
|
100 | 100 | "sort": "desc"}, title: "${_('Description')}", className: "td-description" }, |
|
101 | 101 | { data: {"_": "owner", |
|
102 | 102 | "sort": "owner"}, title: "${_('Owner')}", className: "td-user" } |
|
103 | 103 | ], |
|
104 | 104 | language: { |
|
105 | paginate: DEFAULT_GRID_PAGINATION | |
|
105 | paginate: DEFAULT_GRID_PAGINATION, | |
|
106 | emptyTable: "No repository groups available yet." | |
|
106 | 107 | }, |
|
107 | 108 | "drawCallback": function( settings, json ) { |
|
108 | 109 | timeagoActivate(); |
|
109 | 110 | quick_repo_menu(); |
|
110 | 111 | } |
|
111 | 112 | }); |
|
112 | 113 | |
|
113 | 114 | // repo list |
|
114 | 115 | $('#repo_list_table').DataTable({ |
|
115 | 116 | data: ${c.repos_data|n}, |
|
116 | 117 | dom: 'rtp', |
|
117 | 118 | order: [[ 0, "asc" ]], |
|
118 | 119 | pageLength: ${c.visual.dashboard_items}, |
|
119 | 120 | columns: [ |
|
120 | 121 | { data: {"_": "name", |
|
121 | 122 | "sort": "name_raw"}, title: "${_('Name')}", className: "truncate-wrap td-componentname" }, |
|
122 | 123 | { data: 'menu', "bSortable": false, className: "quick_repo_menu" }, |
|
123 | 124 | { data: {"_": "desc", |
|
124 | 125 | "sort": "desc"}, title: "${_('Description')}", className: "td-description" }, |
|
125 | 126 | { data: {"_": "last_change", |
|
126 | 127 | "sort": "last_change_raw", |
|
127 | 128 | "type": Number}, title: "${_('Last Change')}", className: "td-time" }, |
|
128 | 129 | { data: {"_": "last_changeset", |
|
129 | 130 | "sort": "last_changeset_raw", |
|
130 | 131 | "type": Number}, title: "${_('Commit')}", className: "td-hash" }, |
|
131 | 132 | { data: {"_": "owner", |
|
132 | 133 | "sort": "owner"}, title: "${_('Owner')}", className: "td-user" }, |
|
133 | 134 | { data: {"_": "rss", |
|
134 | 135 | "sort": "rss"}, title: "rss", className: "td-rss" } |
|
135 | 136 | ], |
|
136 | 137 | language: { |
|
137 | paginate: DEFAULT_GRID_PAGINATION | |
|
138 | paginate: DEFAULT_GRID_PAGINATION, | |
|
139 | emptyTable: "No repositories available yet." | |
|
138 | 140 | }, |
|
139 | 141 | "drawCallback": function( settings, json ) { |
|
140 | 142 | timeagoActivate(); |
|
141 | 143 | quick_repo_menu(); |
|
142 | 144 | } |
|
143 | 145 | }); |
|
144 | 146 | |
|
145 | 147 | // update the counter when doing search |
|
146 | 148 | $('#repo_list_table, #group_list_table').on( 'search.dt', function (e,settings) { |
|
147 | 149 | get_datatable_count(); |
|
148 | 150 | }); |
|
149 | 151 | |
|
150 | 152 | // filter, filter both grids |
|
151 | 153 | $('#q_filter').on( 'keyup', function () { |
|
152 | 154 | var repo_api = $('#repo_list_table').dataTable().api(); |
|
153 | 155 | repo_api |
|
154 | 156 | .columns( 0 ) |
|
155 | 157 | .search( this.value ) |
|
156 | 158 | .draw(); |
|
157 | 159 | |
|
158 | 160 | var repo_group_api = $('#group_list_table').dataTable().api(); |
|
159 | 161 | repo_group_api |
|
160 | 162 | .columns( 0 ) |
|
161 | 163 | .search( this.value ) |
|
162 | 164 | .draw(); |
|
163 | 165 | }); |
|
164 | 166 | |
|
165 | 167 | // refilter table if page load via back button |
|
166 | 168 | $("#q_filter").trigger('keyup'); |
|
167 | 169 | |
|
168 | 170 | }); |
|
169 | 171 | </script> |
|
170 | 172 | </%def> |
@@ -1,131 +1,132 b'' | |||
|
1 | 1 | <%inherit file="/base/base.html"/> |
|
2 | 2 | |
|
3 | 3 | <%def name="title()"> |
|
4 | 4 | ${_('%s Pull Requests') % c.repo_name} |
|
5 | 5 | %if c.rhodecode_name: |
|
6 | 6 | · ${h.branding(c.rhodecode_name)} |
|
7 | 7 | %endif |
|
8 | 8 | </%def> |
|
9 | 9 | |
|
10 | 10 | <%def name="breadcrumbs_links()"> |
|
11 | 11 | |
|
12 | 12 | </%def> |
|
13 | 13 | |
|
14 | 14 | <%def name="menu_bar_nav()"> |
|
15 | 15 | ${self.menu_items(active='repositories')} |
|
16 | 16 | </%def> |
|
17 | 17 | |
|
18 | 18 | |
|
19 | 19 | <%def name="menu_bar_subnav()"> |
|
20 | 20 | ${self.repo_menu(active='showpullrequest')} |
|
21 | 21 | </%def> |
|
22 | 22 | |
|
23 | 23 | |
|
24 | 24 | <%def name="main()"> |
|
25 | 25 | <div class="box"> |
|
26 | 26 | <div class="title"> |
|
27 | 27 | ${self.repo_page_title(c.rhodecode_db_repo)} |
|
28 | 28 | |
|
29 | 29 | <ul class="links"> |
|
30 | 30 | <li> |
|
31 | 31 | %if c.rhodecode_user.username != h.DEFAULT_USER: |
|
32 | 32 | <span> |
|
33 | 33 | <a id="open_new_pull_request" class="btn btn-small btn-success" href="${h.url('pullrequest_home',repo_name=c.repo_name)}"> |
|
34 | 34 | ${_('Open new Pull Request')} |
|
35 | 35 | </a> |
|
36 | 36 | </span> |
|
37 | 37 | %endif |
|
38 | 38 | </li> |
|
39 | 39 | </ul> |
|
40 | 40 | |
|
41 | 41 | ${self.breadcrumbs()} |
|
42 | 42 | </div> |
|
43 | 43 | |
|
44 | 44 | <div class="sidebar-col-wrapper"> |
|
45 | 45 | ##main |
|
46 | 46 | <div class="sidebar"> |
|
47 | 47 | <ul class="nav nav-pills nav-stacked"> |
|
48 | 48 | <li class="${'active' if c.active=='open' else ''}"><a href="${h.url('pullrequest_show_all',repo_name=c.repo_name,source=0)}">${_('Opened')}</a></li> |
|
49 | 49 | <li class="${'active' if c.active=='my' else ''}"><a href="${h.url('pullrequest_show_all',repo_name=c.repo_name,source=0,my=1)}">${_('Opened by me')}</a></li> |
|
50 | 50 | <li class="${'active' if c.active=='awaiting' else ''}"><a href="${h.url('pullrequest_show_all',repo_name=c.repo_name,source=0,awaiting_review=1)}">${_('Awaiting review')}</a></li> |
|
51 | 51 | <li class="${'active' if c.active=='awaiting_my' else ''}"><a href="${h.url('pullrequest_show_all',repo_name=c.repo_name,source=0,awaiting_my_review=1)}">${_('Awaiting my review')}</a></li> |
|
52 | 52 | <li class="${'active' if c.active=='closed' else ''}"><a href="${h.url('pullrequest_show_all',repo_name=c.repo_name,source=0,closed=1)}">${_('Closed')}</a></li> |
|
53 | 53 | <li class="${'active' if c.active=='source' else ''}"><a href="${h.url('pullrequest_show_all',repo_name=c.repo_name,source=1)}">${_('From this repo')}</a></li> |
|
54 | 54 | </ul> |
|
55 | 55 | </div> |
|
56 | 56 | |
|
57 | 57 | <div class="main-content-full-width"> |
|
58 | 58 | <div class="panel panel-default"> |
|
59 | 59 | <div class="panel-heading"> |
|
60 | 60 | <h3 class="panel-title"> |
|
61 | 61 | %if c.source: |
|
62 | 62 | ${_('Pull Requests from %(repo_name)s repository') % {'repo_name': c.repo_name}} |
|
63 | 63 | %elif c.closed: |
|
64 | 64 | ${_('Closed Pull Requests to repository %(repo_name)s') % {'repo_name': c.repo_name}} |
|
65 | 65 | %elif c.my: |
|
66 | 66 | ${_('Pull Requests to %(repo_name)s repository opened by me') % {'repo_name': c.repo_name}} |
|
67 | 67 | %elif c.awaiting_review: |
|
68 | 68 | ${_('Pull Requests to %(repo_name)s repository awaiting review') % {'repo_name': c.repo_name}} |
|
69 | 69 | %elif c.awaiting_my_review: |
|
70 | 70 | ${_('Pull Requests to %(repo_name)s repository awaiting my review') % {'repo_name': c.repo_name}} |
|
71 | 71 | %else: |
|
72 | 72 | ${_('Pull Requests to %(repo_name)s repository') % {'repo_name': c.repo_name}} |
|
73 | 73 | %endif |
|
74 | 74 | </h3> |
|
75 | 75 | </div> |
|
76 | 76 | <div class="panel-body"> |
|
77 | 77 | <table id="pull_request_list_table" class="display"></table> |
|
78 | 78 | </div> |
|
79 | 79 | </div> |
|
80 | 80 | </div> |
|
81 | 81 | </div> |
|
82 | 82 | </div> |
|
83 | 83 | |
|
84 | 84 | <script type="text/javascript"> |
|
85 | 85 | $(document).ready(function() { |
|
86 | 86 | // object list |
|
87 | 87 | $('#pull_request_list_table').DataTable({ |
|
88 | 88 | data: ${c.data|n}, |
|
89 | 89 | processing: true, |
|
90 | 90 | serverSide: true, |
|
91 | 91 | deferLoading: ${c.records_total}, |
|
92 | 92 | ajax: "", |
|
93 | 93 | dom: 'tp', |
|
94 | 94 | pageLength: ${c.visual.dashboard_items}, |
|
95 | 95 | order: [[ 1, "desc" ]], |
|
96 | 96 | columns: [ |
|
97 | 97 | { data: {"_": "status", |
|
98 | 98 | "sort": "status"}, title: "", className: "td-status", orderable: false}, |
|
99 | 99 | { data: {"_": "name", |
|
100 | 100 | "sort": "name_raw"}, title: "${_('Name')}", className: "td-componentname", "type": "num" }, |
|
101 | 101 | { data: {"_": "author", |
|
102 | 102 | "sort": "author_raw"}, title: "${_('Author')}", className: "td-user", orderable: false }, |
|
103 | 103 | { data: {"_": "title", |
|
104 | 104 | "sort": "title"}, title: "${_('Title')}", className: "td-description" }, |
|
105 | 105 | { data: {"_": "comments", |
|
106 | 106 | "sort": "comments_raw"}, title: "", className: "td-comments", orderable: false}, |
|
107 | 107 | { data: {"_": "updated_on", |
|
108 | 108 | "sort": "updated_on_raw"}, title: "${_('Updated on')}", className: "td-time" } |
|
109 | 109 | ], |
|
110 | 110 | language: { |
|
111 | paginate: DEFAULT_GRID_PAGINATION | |
|
111 | paginate: DEFAULT_GRID_PAGINATION, | |
|
112 | emptyTable: "No pull requests available yet." | |
|
112 | 113 | }, |
|
113 | 114 | "drawCallback": function( settings, json ) { |
|
114 | 115 | timeagoActivate(); |
|
115 | 116 | }, |
|
116 | 117 | "createdRow": function ( row, data, index ) { |
|
117 | 118 | if (data['closed']) { |
|
118 | 119 | $(row).addClass('closed'); |
|
119 | 120 | } |
|
120 | 121 | } |
|
121 | 122 | }); |
|
122 | 123 | }); |
|
123 | 124 | $('#pull_request_list_table').on('xhr.dt', function(e, settings, json, xhr){ |
|
124 | 125 | $('#pull_request_list_table').css('opacity', 1); |
|
125 | 126 | }); |
|
126 | 127 | |
|
127 | 128 | $('#pull_request_list_table').on('preXhr.dt', function(e, settings, data){ |
|
128 | 129 | $('#pull_request_list_table').css('opacity', 0.3); |
|
129 | 130 | }); |
|
130 | 131 | </script> |
|
131 | 132 | </%def> |
@@ -1,100 +1,101 b'' | |||
|
1 | 1 | ## -*- coding: utf-8 -*- |
|
2 | 2 | <%inherit file="/base/base.html"/> |
|
3 | 3 | |
|
4 | 4 | <%def name="title()"> |
|
5 | 5 | ${_('%s Tags') % c.repo_name} |
|
6 | 6 | %if c.rhodecode_name: |
|
7 | 7 | · ${h.branding(c.rhodecode_name)} |
|
8 | 8 | %endif |
|
9 | 9 | </%def> |
|
10 | 10 | |
|
11 | 11 | <%def name="breadcrumbs_links()"> |
|
12 | 12 | <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> |
|
13 | 13 | <span id="obj_count">0</span> ${_('tags')} |
|
14 | 14 | </%def> |
|
15 | 15 | |
|
16 | 16 | <%def name="menu_bar_nav()"> |
|
17 | 17 | ${self.menu_items(active='repositories')} |
|
18 | 18 | </%def> |
|
19 | 19 | |
|
20 | 20 | <%def name="menu_bar_subnav()"> |
|
21 | 21 | ${self.repo_menu(active='summary')} |
|
22 | 22 | </%def> |
|
23 | 23 | |
|
24 | 24 | <%def name="main()"> |
|
25 | 25 | <div class="box"> |
|
26 | 26 | <div class="title"> |
|
27 | 27 | ${self.repo_page_title(c.rhodecode_db_repo)} |
|
28 | 28 | %if c.has_references: |
|
29 | 29 | <ul class="links"> |
|
30 | 30 | <li> |
|
31 | 31 | <input type="submit" id="compare_action" class="btn" disabled="disabled" value="${_('Compare Selected Tags')}"> |
|
32 | 32 | </li> |
|
33 | 33 | </ul> |
|
34 | 34 | %endif |
|
35 | 35 | %if c.has_references: |
|
36 | 36 | ${self.breadcrumbs()} |
|
37 | 37 | %endif |
|
38 | 38 | </div> |
|
39 | 39 | <table id="obj_list_table" class="display"></table> |
|
40 | 40 | </div> |
|
41 | 41 | |
|
42 | 42 | |
|
43 | 43 | <script type="text/javascript"> |
|
44 | 44 | $(document).ready(function() { |
|
45 | 45 | |
|
46 | 46 | var get_datatable_count = function(){ |
|
47 | 47 | var api = $('#obj_list_table').dataTable().api(); |
|
48 | 48 | $('#obj_count').text(api.page.info().recordsDisplay); |
|
49 | 49 | }; |
|
50 | 50 | |
|
51 | 51 | // object list |
|
52 | 52 | $('#obj_list_table').DataTable({ |
|
53 | 53 | data: ${c.data|n}, |
|
54 | 54 | dom: 'rtp', |
|
55 | 55 | pageLength: ${c.visual.dashboard_items}, |
|
56 | 56 | order: [[ 0, "asc" ]], |
|
57 | 57 | columns: [ |
|
58 | 58 | { data: {"_": "name", |
|
59 | 59 | "sort": "name_raw"}, title: "${_('Name')}", className: "td-tags" }, |
|
60 | 60 | { data: {"_": "date", |
|
61 | 61 | "sort": "date_raw"}, title: "${_('Date')}", className: "td-time" }, |
|
62 | 62 | { data: {"_": "author", |
|
63 | 63 | "sort": "author"}, title: "${_('Author')}", className: "td-user" }, |
|
64 | 64 | { data: {"_": "commit", |
|
65 | 65 | "sort": "commit_raw", |
|
66 | 66 | "type": Number}, title: "${_('Commit')}", className: "td-hash" }, |
|
67 | 67 | { data: {"_": "compare", |
|
68 | 68 | "sort": "compare"}, title: "${_('Compare')}", className: "td-compare" } |
|
69 | 69 | ], |
|
70 | 70 | language: { |
|
71 | paginate: DEFAULT_GRID_PAGINATION | |
|
71 | paginate: DEFAULT_GRID_PAGINATION, | |
|
72 | emptyTable: "No tags available yet." | |
|
72 | 73 | }, |
|
73 | 74 | "initComplete": function(settings, json) { |
|
74 | 75 | get_datatable_count(); |
|
75 | 76 | timeagoActivate(); |
|
76 | 77 | compare_radio_buttons("${c.repo_name}", 'tag'); |
|
77 | 78 | } |
|
78 | 79 | }); |
|
79 | 80 | |
|
80 | 81 | // update when things change |
|
81 | 82 | $('#obj_list_table').on('draw.dt', function() { |
|
82 | 83 | get_datatable_count(); |
|
83 | 84 | timeagoActivate(); |
|
84 | 85 | }); |
|
85 | 86 | |
|
86 | 87 | // filter, filter both grids |
|
87 | 88 | $('#q_filter').on('keyup', function() { |
|
88 | 89 | var obj_api = $('#obj_list_table').dataTable().api(); |
|
89 | 90 | obj_api |
|
90 | 91 | .columns(0) |
|
91 | 92 | .search(this.value) |
|
92 | 93 | .draw(); |
|
93 | 94 | }); |
|
94 | 95 | |
|
95 | 96 | // refilter table if page load via back button |
|
96 | 97 | $("#q_filter").trigger('keyup'); |
|
97 | 98 | }); |
|
98 | 99 | |
|
99 | 100 | </script> |
|
100 | 101 | </%def> |
General Comments 0
You need to be logged in to leave comments.
Login now