##// END OF EJS Templates
html: don't hardcode uppercase texts...
Mads Kiilerich -
r3201:663f4f26 beta
parent child Browse files
Show More
@@ -1,142 +1,142 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Repositories administration')} - ${c.rhodecode_name}
5 ${_('Repositories administration')} - ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
9 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; <span id="repo_count">0</span> ${_('repositories')}
9 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; <span id="repo_count">0</span> ${_('repositories')}
10 </%def>
10 </%def>
11 <%def name="page_nav()">
11 <%def name="page_nav()">
12 ${self.menu('admin')}
12 ${self.menu('admin')}
13 </%def>
13 </%def>
14 <%def name="main()">
14 <%def name="main()">
15 <div class="box">
15 <div class="box">
16
16
17 <div class="title">
17 <div class="title">
18 ${self.breadcrumbs()}
18 ${self.breadcrumbs()}
19 <ul class="links">
19 <ul class="links">
20 <li>
20 <li>
21 <span>${h.link_to(_(u'ADD REPOSITORY'),h.url('new_repo'))}</span>
21 <span>${h.link_to(_(u'Add repository'),h.url('new_repo'))}</span>
22 </li>
22 </li>
23 </ul>
23 </ul>
24 </div>
24 </div>
25 <div class="table yui-skin-sam" id="repos_list_wrap"></div>
25 <div class="table yui-skin-sam" id="repos_list_wrap"></div>
26 <div id="user-paginator" style="padding: 0px 0px 0px 20px"></div>
26 <div id="user-paginator" style="padding: 0px 0px 0px 20px"></div>
27
27
28
28
29 </div>
29 </div>
30 <script>
30 <script>
31 var url = "${h.url('formatted_users', format='json')}";
31 var url = "${h.url('formatted_users', format='json')}";
32 var data = ${c.data|n};
32 var data = ${c.data|n};
33 var myDataSource = new YAHOO.util.DataSource(data);
33 var myDataSource = new YAHOO.util.DataSource(data);
34 myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
34 myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
35
35
36 myDataSource.responseSchema = {
36 myDataSource.responseSchema = {
37 resultsList: "records",
37 resultsList: "records",
38 fields: [
38 fields: [
39 {key:"menu"},
39 {key:"menu"},
40 {key:"raw_name"},
40 {key:"raw_name"},
41 {key:"name"},
41 {key:"name"},
42 {key:"desc"},
42 {key:"desc"},
43 {key:"last_changeset"},
43 {key:"last_changeset"},
44 {key:"owner"},
44 {key:"owner"},
45 {key:"action"},
45 {key:"action"},
46 ]
46 ]
47 };
47 };
48 myDataSource.doBeforeCallback = function(req,raw,res,cb) {
48 myDataSource.doBeforeCallback = function(req,raw,res,cb) {
49 // This is the filter function
49 // This is the filter function
50 var data = res.results || [],
50 var data = res.results || [],
51 filtered = [],
51 filtered = [],
52 i,l;
52 i,l;
53
53
54 if (req) {
54 if (req) {
55 req = req.toLowerCase();
55 req = req.toLowerCase();
56 for (i = 0; i<data.length; i++) {
56 for (i = 0; i<data.length; i++) {
57 var pos = data[i].raw_name.toLowerCase().indexOf(req)
57 var pos = data[i].raw_name.toLowerCase().indexOf(req)
58 if (pos != -1) {
58 if (pos != -1) {
59 filtered.push(data[i]);
59 filtered.push(data[i]);
60 }
60 }
61 }
61 }
62 res.results = filtered;
62 res.results = filtered;
63 }
63 }
64 YUD.get('repo_count').innerHTML = res.results.length;
64 YUD.get('repo_count').innerHTML = res.results.length;
65 return res;
65 return res;
66 }
66 }
67
67
68 // main table sorting
68 // main table sorting
69 var myColumnDefs = [
69 var myColumnDefs = [
70 {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
70 {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
71 {key:"name",label:"${_('Name')}",sortable:true,
71 {key:"name",label:"${_('Name')}",sortable:true,
72 sortOptions: { sortFunction: nameSort }},
72 sortOptions: { sortFunction: nameSort }},
73 {key:"desc",label:"${_('Description')}",sortable:true},
73 {key:"desc",label:"${_('Description')}",sortable:true},
74 {key:"last_changeset",label:"${_('Tip')}",sortable:true,
74 {key:"last_changeset",label:"${_('Tip')}",sortable:true,
75 sortOptions: { sortFunction: revisionSort }},
75 sortOptions: { sortFunction: revisionSort }},
76 {key:"owner",label:"${_('Owner')}",sortable:true},
76 {key:"owner",label:"${_('Owner')}",sortable:true},
77 {key:"action",label:"${_('Action')}",sortable:false},
77 {key:"action",label:"${_('Action')}",sortable:false},
78 ];
78 ];
79
79
80 var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{
80 var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{
81 sortedBy:{key:"name",dir:"asc"},
81 sortedBy:{key:"name",dir:"asc"},
82 paginator: new YAHOO.widget.Paginator({
82 paginator: new YAHOO.widget.Paginator({
83 rowsPerPage: 25,
83 rowsPerPage: 25,
84 alwaysVisible: false,
84 alwaysVisible: false,
85 template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
85 template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
86 pageLinks: 5,
86 pageLinks: 5,
87 containerClass: 'pagination-wh',
87 containerClass: 'pagination-wh',
88 currentPageClass: 'pager_curpage',
88 currentPageClass: 'pager_curpage',
89 pageLinkClass: 'pager_link',
89 pageLinkClass: 'pager_link',
90 nextPageLinkLabel: '&gt;',
90 nextPageLinkLabel: '&gt;',
91 previousPageLinkLabel: '&lt;',
91 previousPageLinkLabel: '&lt;',
92 firstPageLinkLabel: '&lt;&lt;',
92 firstPageLinkLabel: '&lt;&lt;',
93 lastPageLinkLabel: '&gt;&gt;',
93 lastPageLinkLabel: '&gt;&gt;',
94 containers:['user-paginator']
94 containers:['user-paginator']
95 }),
95 }),
96
96
97 MSG_SORTASC:"${_('Click to sort ascending')}",
97 MSG_SORTASC:"${_('Click to sort ascending')}",
98 MSG_SORTDESC:"${_('Click to sort descending')}",
98 MSG_SORTDESC:"${_('Click to sort descending')}",
99 MSG_EMPTY:"${_('No records found.')}",
99 MSG_EMPTY:"${_('No records found.')}",
100 MSG_ERROR:"${_('Data error.')}",
100 MSG_ERROR:"${_('Data error.')}",
101 MSG_LOADING:"${_('Loading...')}",
101 MSG_LOADING:"${_('Loading...')}",
102 }
102 }
103 );
103 );
104 myDataTable.subscribe('postRenderEvent',function(oArgs) {
104 myDataTable.subscribe('postRenderEvent',function(oArgs) {
105 tooltip_activate();
105 tooltip_activate();
106 quick_repo_menu();
106 quick_repo_menu();
107 });
107 });
108
108
109 var filterTimeout = null;
109 var filterTimeout = null;
110
110
111 updateFilter = function () {
111 updateFilter = function () {
112 // Reset timeout
112 // Reset timeout
113 filterTimeout = null;
113 filterTimeout = null;
114
114
115 // Reset sort
115 // Reset sort
116 var state = myDataTable.getState();
116 var state = myDataTable.getState();
117 state.sortedBy = {key:'name', dir:YAHOO.widget.DataTable.CLASS_ASC};
117 state.sortedBy = {key:'name', dir:YAHOO.widget.DataTable.CLASS_ASC};
118
118
119 // Get filtered data
119 // Get filtered data
120 myDataSource.sendRequest(YUD.get('q_filter').value,{
120 myDataSource.sendRequest(YUD.get('q_filter').value,{
121 success : myDataTable.onDataReturnInitializeTable,
121 success : myDataTable.onDataReturnInitializeTable,
122 failure : myDataTable.onDataReturnInitializeTable,
122 failure : myDataTable.onDataReturnInitializeTable,
123 scope : myDataTable,
123 scope : myDataTable,
124 argument: state
124 argument: state
125 });
125 });
126
126
127 };
127 };
128 YUE.on('q_filter','click',function(){
128 YUE.on('q_filter','click',function(){
129 if(!YUD.hasClass('q_filter', 'loaded')){
129 if(!YUD.hasClass('q_filter', 'loaded')){
130 YUD.get('q_filter').value = '';
130 YUD.get('q_filter').value = '';
131 //TODO: load here full list later to do search within groups
131 //TODO: load here full list later to do search within groups
132 YUD.addClass('q_filter', 'loaded');
132 YUD.addClass('q_filter', 'loaded');
133 }
133 }
134 });
134 });
135
135
136 YUE.on('q_filter','keyup',function (e) {
136 YUE.on('q_filter','keyup',function (e) {
137 clearTimeout(filterTimeout);
137 clearTimeout(filterTimeout);
138 filterTimeout = setTimeout(updateFilter,600);
138 filterTimeout = setTimeout(updateFilter,600);
139 });
139 });
140 </script>
140 </script>
141
141
142 </%def>
142 </%def>
@@ -1,86 +1,86 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Edit repos group')} ${c.repos_group.name} - ${c.rhodecode_name}
5 ${_('Edit repos group')} ${c.repos_group.name} - ${c.rhodecode_name}
6 </%def>
6 </%def>
7 <%def name="breadcrumbs_links()">
7 <%def name="breadcrumbs_links()">
8 ${h.link_to(_('Admin'),h.url('admin_home'))}
8 ${h.link_to(_('Admin'),h.url('admin_home'))}
9 &raquo;
9 &raquo;
10 ${h.link_to(_('Repos groups'),h.url('repos_groups'))}
10 ${h.link_to(_('Repos groups'),h.url('repos_groups'))}
11 &raquo;
11 &raquo;
12 ${_('edit repos group')} "${c.repos_group.name}"
12 ${_('edit repos group')} "${c.repos_group.name}"
13 </%def>
13 </%def>
14
14
15 <%def name="page_nav()">
15 <%def name="page_nav()">
16 ${self.menu('admin')}
16 ${self.menu('admin')}
17 </%def>
17 </%def>
18
18
19 <%def name="main()">
19 <%def name="main()">
20 <div class="box">
20 <div class="box">
21 <!-- box / title -->
21 <!-- box / title -->
22 <div class="title">
22 <div class="title">
23 ${self.breadcrumbs()}
23 ${self.breadcrumbs()}
24 <ul class="links">
24 <ul class="links">
25 <li>
25 <li>
26 <span>${h.link_to(_(u'ADD NEW CHILD GROUP'),h.url('new_repos_group', parent_group=c.repos_group.group_id))}</span>
26 <span>${h.link_to(_(u'Add new child group'),h.url('new_repos_group', parent_group=c.repos_group.group_id))}</span>
27 </li>
27 </li>
28 </ul>
28 </ul>
29 </div>
29 </div>
30 <!-- end box / title -->
30 <!-- end box / title -->
31 ${h.form(url('repos_group',id=c.repos_group.group_id),method='put')}
31 ${h.form(url('repos_group',id=c.repos_group.group_id),method='put')}
32 <div class="form">
32 <div class="form">
33 <!-- fields -->
33 <!-- fields -->
34 <div class="fields">
34 <div class="fields">
35 <div class="field">
35 <div class="field">
36 <div class="label">
36 <div class="label">
37 <label for="group_name">${_('Group name')}:</label>
37 <label for="group_name">${_('Group name')}:</label>
38 </div>
38 </div>
39 <div class="input">
39 <div class="input">
40 ${h.text('group_name',class_='medium')}
40 ${h.text('group_name',class_='medium')}
41 </div>
41 </div>
42 </div>
42 </div>
43
43
44 <div class="field">
44 <div class="field">
45 <div class="label label-textarea">
45 <div class="label label-textarea">
46 <label for="group_description">${_('Description')}:</label>
46 <label for="group_description">${_('Description')}:</label>
47 </div>
47 </div>
48 <div class="textarea text-area editor">
48 <div class="textarea text-area editor">
49 ${h.textarea('group_description',cols=23,rows=5,class_="medium")}
49 ${h.textarea('group_description',cols=23,rows=5,class_="medium")}
50 </div>
50 </div>
51 </div>
51 </div>
52
52
53 <div class="field">
53 <div class="field">
54 <div class="label">
54 <div class="label">
55 <label for="group_parent_id">${_('Group parent')}:</label>
55 <label for="group_parent_id">${_('Group parent')}:</label>
56 </div>
56 </div>
57 <div class="input">
57 <div class="input">
58 ${h.select('group_parent_id','',c.repo_groups,class_="medium")}
58 ${h.select('group_parent_id','',c.repo_groups,class_="medium")}
59 </div>
59 </div>
60 </div>
60 </div>
61 <div class="field">
61 <div class="field">
62 <div class="label">
62 <div class="label">
63 <label for="input">${_('Permissions')}:</label>
63 <label for="input">${_('Permissions')}:</label>
64 </div>
64 </div>
65 <div class="input">
65 <div class="input">
66 <%include file="repos_group_edit_perms.html"/>
66 <%include file="repos_group_edit_perms.html"/>
67 </div>
67 </div>
68 </div>
68 </div>
69 <div class="field">
69 <div class="field">
70 <div class="label label-checkbox">
70 <div class="label label-checkbox">
71 <label for="enable_locking">${_('Enable locking')}:</label>
71 <label for="enable_locking">${_('Enable locking')}:</label>
72 </div>
72 </div>
73 <div class="checkboxes">
73 <div class="checkboxes">
74 ${h.checkbox('enable_locking',value="True")}
74 ${h.checkbox('enable_locking',value="True")}
75 <span class="help-block">${_('Enable lock-by-pulling on group. This option will be applied to all other groups and repositories inside')}</span>
75 <span class="help-block">${_('Enable lock-by-pulling on group. This option will be applied to all other groups and repositories inside')}</span>
76 </div>
76 </div>
77 </div>
77 </div>
78 <div class="buttons">
78 <div class="buttons">
79 ${h.submit('save',_('Save'),class_="ui-btn large")}
79 ${h.submit('save',_('Save'),class_="ui-btn large")}
80 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
80 ${h.reset('reset',_('Reset'),class_="ui-btn large")}
81 </div>
81 </div>
82 </div>
82 </div>
83 </div>
83 </div>
84 ${h.end_form()}
84 ${h.end_form()}
85 </div>
85 </div>
86 </%def>
86 </%def>
@@ -1,74 +1,74 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Repositories groups administration')} - ${c.rhodecode_name}
5 ${_('Repositories groups administration')} - ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8
8
9 <%def name="breadcrumbs_links()">
9 <%def name="breadcrumbs_links()">
10 ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Repositories')}
10 ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Repositories')}
11 </%def>
11 </%def>
12 <%def name="page_nav()">
12 <%def name="page_nav()">
13 ${self.menu('admin')}
13 ${self.menu('admin')}
14 </%def>
14 </%def>
15 <%def name="main()">
15 <%def name="main()">
16 <div class="box">
16 <div class="box">
17 <!-- box / title -->
17 <!-- box / title -->
18 <div class="title">
18 <div class="title">
19 ${self.breadcrumbs()}
19 ${self.breadcrumbs()}
20 <ul class="links">
20 <ul class="links">
21 <li>
21 <li>
22 <span>${h.link_to(_(u'ADD NEW GROUP'),h.url('new_repos_group'))}</span>
22 <span>${h.link_to(_(u'Add new group'),h.url('new_repos_group'))}</span>
23 </li>
23 </li>
24 </ul>
24 </ul>
25 </div>
25 </div>
26 <!-- end box / title -->
26 <!-- end box / title -->
27 <div class="table">
27 <div class="table">
28 % if c.groups:
28 % if c.groups:
29 <table class="table_disp">
29 <table class="table_disp">
30
30
31 <thead>
31 <thead>
32 <tr>
32 <tr>
33 <th class="left"><a href="#">${_('Group name')}</a></th>
33 <th class="left"><a href="#">${_('Group name')}</a></th>
34 <th class="left"><a href="#">${_('Description')}</a></th>
34 <th class="left"><a href="#">${_('Description')}</a></th>
35 <th class="left"><a href="#">${_('Number of toplevel repositories')}</a></th>
35 <th class="left"><a href="#">${_('Number of toplevel repositories')}</a></th>
36 <th class="left" colspan="2">${_('action')}</th>
36 <th class="left" colspan="2">${_('action')}</th>
37 </tr>
37 </tr>
38 </thead>
38 </thead>
39
39
40 ## REPO GROUPS
40 ## REPO GROUPS
41
41
42 % for gr in c.groups:
42 % for gr in c.groups:
43 <% gr_cn = gr.repositories.count() %>
43 <% gr_cn = gr.repositories.count() %>
44 <tr>
44 <tr>
45 <td>
45 <td>
46 <div style="white-space: nowrap">
46 <div style="white-space: nowrap">
47 <img class="icon" alt="${_('Repositories group')}" src="${h.url('/images/icons/database_link.png')}"/>
47 <img class="icon" alt="${_('Repositories group')}" src="${h.url('/images/icons/database_link.png')}"/>
48 ${h.link_to(h.literal(' &raquo; '.join(map(h.safe_unicode,[g.name for g in gr.parents+[gr]]))), url('repos_group_home',group_name=gr.group_name))}
48 ${h.link_to(h.literal(' &raquo; '.join(map(h.safe_unicode,[g.name for g in gr.parents+[gr]]))), url('repos_group_home',group_name=gr.group_name))}
49 </div>
49 </div>
50 </td>
50 </td>
51 <td>${gr.group_description}</td>
51 <td>${gr.group_description}</td>
52 <td><b>${gr_cn}</b></td>
52 <td><b>${gr_cn}</b></td>
53 <td>
53 <td>
54 <a href="${h.url('edit_repos_group',id=gr.group_id)}" title="${_('edit')}">
54 <a href="${h.url('edit_repos_group',id=gr.group_id)}" title="${_('edit')}">
55 ${h.submit('edit_%s' % gr.group_name,_('edit'),class_="edit_icon action_button")}
55 ${h.submit('edit_%s' % gr.group_name,_('edit'),class_="edit_icon action_button")}
56 </a>
56 </a>
57 </td>
57 </td>
58 <td>
58 <td>
59 ${h.form(url('repos_group', id=gr.group_id),method='delete')}
59 ${h.form(url('repos_group', id=gr.group_id),method='delete')}
60 ${h.submit('remove_%s' % gr.name,_('delete'),class_="delete_icon action_button",onclick="return confirm('"+ungettext('Confirm to delete this group: %s with %s repository','Confirm to delete this group: %s with %s repositories',gr_cn) % (gr.name,gr_cn)+"');")}
60 ${h.submit('remove_%s' % gr.name,_('delete'),class_="delete_icon action_button",onclick="return confirm('"+ungettext('Confirm to delete this group: %s with %s repository','Confirm to delete this group: %s with %s repositories',gr_cn) % (gr.name,gr_cn)+"');")}
61 ${h.end_form()}
61 ${h.end_form()}
62 </td>
62 </td>
63 </tr>
63 </tr>
64 % endfor
64 % endfor
65
65
66 </table>
66 </table>
67 % else:
67 % else:
68 ${_('There are no repositories groups yet')}
68 ${_('There are no repositories groups yet')}
69 % endif
69 % endif
70
70
71 </div>
71 </div>
72 </div>
72 </div>
73
73
74 </%def>
74 </%def>
@@ -1,147 +1,147 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Users administration')} - ${c.rhodecode_name}
5 ${_('Users administration')} - ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
9 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; <span id="user_count">0</span> ${_('users')}
9 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; <span id="user_count">0</span> ${_('users')}
10 </%def>
10 </%def>
11
11
12 <%def name="page_nav()">
12 <%def name="page_nav()">
13 ${self.menu('admin')}
13 ${self.menu('admin')}
14 </%def>
14 </%def>
15
15
16 <%def name="main()">
16 <%def name="main()">
17 <div class="box">
17 <div class="box">
18 <!-- box / title -->
18 <!-- box / title -->
19 <div class="title">
19 <div class="title">
20 ${self.breadcrumbs()}
20 ${self.breadcrumbs()}
21 <ul class="links">
21 <ul class="links">
22 <li>
22 <li>
23 <span>${h.link_to(_(u'ADD NEW USER'),h.url('new_user'))}</span>
23 <span>${h.link_to(_(u'Add new user'),h.url('new_user'))}</span>
24 </li>
24 </li>
25 </ul>
25 </ul>
26 </div>
26 </div>
27 <!-- end box / title -->
27 <!-- end box / title -->
28 <div class="table yui-skin-sam" id="users_list_wrap"></div>
28 <div class="table yui-skin-sam" id="users_list_wrap"></div>
29 <div id="user-paginator" style="padding: 0px 0px 0px 20px"></div>
29 <div id="user-paginator" style="padding: 0px 0px 0px 20px"></div>
30 </div>
30 </div>
31
31
32 <script>
32 <script>
33 var url = "${h.url('formatted_users', format='json')}";
33 var url = "${h.url('formatted_users', format='json')}";
34 var data = ${c.data|n};
34 var data = ${c.data|n};
35 var myDataSource = new YAHOO.util.DataSource(data);
35 var myDataSource = new YAHOO.util.DataSource(data);
36 myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
36 myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
37
37
38 myDataSource.responseSchema = {
38 myDataSource.responseSchema = {
39 resultsList: "records",
39 resultsList: "records",
40 fields: [
40 fields: [
41 {key: "gravatar"},
41 {key: "gravatar"},
42 {key: "raw_username"},
42 {key: "raw_username"},
43 {key: "username"},
43 {key: "username"},
44 {key: "firstname"},
44 {key: "firstname"},
45 {key: "lastname"},
45 {key: "lastname"},
46 {key: "last_login"},
46 {key: "last_login"},
47 {key: "last_login_raw"},
47 {key: "last_login_raw"},
48 {key: "active"},
48 {key: "active"},
49 {key: "admin"},
49 {key: "admin"},
50 {key: "ldap"},
50 {key: "ldap"},
51 {key: "action"},
51 {key: "action"},
52 ]
52 ]
53 };
53 };
54 myDataSource.doBeforeCallback = function(req,raw,res,cb) {
54 myDataSource.doBeforeCallback = function(req,raw,res,cb) {
55 // This is the filter function
55 // This is the filter function
56 var data = res.results || [],
56 var data = res.results || [],
57 filtered = [],
57 filtered = [],
58 i,l;
58 i,l;
59
59
60 if (req) {
60 if (req) {
61 req = req.toLowerCase();
61 req = req.toLowerCase();
62 for (i = 0; i<data.length; i++) {
62 for (i = 0; i<data.length; i++) {
63 var pos = data[i].raw_username.toLowerCase().indexOf(req)
63 var pos = data[i].raw_username.toLowerCase().indexOf(req)
64 if (pos != -1) {
64 if (pos != -1) {
65 filtered.push(data[i]);
65 filtered.push(data[i]);
66 }
66 }
67 }
67 }
68 res.results = filtered;
68 res.results = filtered;
69 }
69 }
70 YUD.get('user_count').innerHTML = res.results.length;
70 YUD.get('user_count').innerHTML = res.results.length;
71 return res;
71 return res;
72 }
72 }
73
73
74 // main table sorting
74 // main table sorting
75 var myColumnDefs = [
75 var myColumnDefs = [
76 {key:"gravatar",label:"",sortable:false,},
76 {key:"gravatar",label:"",sortable:false,},
77 {key:"username",label:"${_('username')}",sortable:true,
77 {key:"username",label:"${_('username')}",sortable:true,
78 sortOptions: { sortFunction: linkSort }
78 sortOptions: { sortFunction: linkSort }
79 },
79 },
80 {key:"firstname",label:"${_('firstname')}",sortable:true,},
80 {key:"firstname",label:"${_('firstname')}",sortable:true,},
81 {key:"lastname",label:"${_('lastname')}",sortable:true,},
81 {key:"lastname",label:"${_('lastname')}",sortable:true,},
82 {key:"last_login",label:"${_('last login')}",sortable:true,
82 {key:"last_login",label:"${_('last login')}",sortable:true,
83 sortOptions: { sortFunction: lastLoginSort }},
83 sortOptions: { sortFunction: lastLoginSort }},
84 {key:"active",label:"${_('active')}",sortable:true,},
84 {key:"active",label:"${_('active')}",sortable:true,},
85 {key:"admin",label:"${_('admin')}",sortable:true,},
85 {key:"admin",label:"${_('admin')}",sortable:true,},
86 {key:"ldap",label:"${_('ldap')}",sortable:true,},
86 {key:"ldap",label:"${_('ldap')}",sortable:true,},
87 {key:"action",label:"${_('action')}",sortable:false},
87 {key:"action",label:"${_('action')}",sortable:false},
88 ];
88 ];
89
89
90 var myDataTable = new YAHOO.widget.DataTable("users_list_wrap", myColumnDefs, myDataSource,{
90 var myDataTable = new YAHOO.widget.DataTable("users_list_wrap", myColumnDefs, myDataSource,{
91 sortedBy:{key:"username",dir:"asc"},
91 sortedBy:{key:"username",dir:"asc"},
92 paginator: new YAHOO.widget.Paginator({
92 paginator: new YAHOO.widget.Paginator({
93 rowsPerPage: 15,
93 rowsPerPage: 15,
94 alwaysVisible: false,
94 alwaysVisible: false,
95 template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
95 template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
96 pageLinks: 5,
96 pageLinks: 5,
97 containerClass: 'pagination-wh',
97 containerClass: 'pagination-wh',
98 currentPageClass: 'pager_curpage',
98 currentPageClass: 'pager_curpage',
99 pageLinkClass: 'pager_link',
99 pageLinkClass: 'pager_link',
100 nextPageLinkLabel: '&gt;',
100 nextPageLinkLabel: '&gt;',
101 previousPageLinkLabel: '&lt;',
101 previousPageLinkLabel: '&lt;',
102 firstPageLinkLabel: '&lt;&lt;',
102 firstPageLinkLabel: '&lt;&lt;',
103 lastPageLinkLabel: '&gt;&gt;',
103 lastPageLinkLabel: '&gt;&gt;',
104 containers:['user-paginator']
104 containers:['user-paginator']
105 }),
105 }),
106
106
107 MSG_SORTASC:"${_('Click to sort ascending')}",
107 MSG_SORTASC:"${_('Click to sort ascending')}",
108 MSG_SORTDESC:"${_('Click to sort descending')}",
108 MSG_SORTDESC:"${_('Click to sort descending')}",
109 MSG_EMPTY:"${_('No records found.')}",
109 MSG_EMPTY:"${_('No records found.')}",
110 MSG_ERROR:"${_('Data error.')}",
110 MSG_ERROR:"${_('Data error.')}",
111 MSG_LOADING:"${_('Loading...')}",
111 MSG_LOADING:"${_('Loading...')}",
112 }
112 }
113 );
113 );
114 myDataTable.subscribe('postRenderEvent',function(oArgs) {
114 myDataTable.subscribe('postRenderEvent',function(oArgs) {
115
115
116 });
116 });
117
117
118 var filterTimeout = null;
118 var filterTimeout = null;
119
119
120 updateFilter = function () {
120 updateFilter = function () {
121 // Reset timeout
121 // Reset timeout
122 filterTimeout = null;
122 filterTimeout = null;
123
123
124 // Reset sort
124 // Reset sort
125 var state = myDataTable.getState();
125 var state = myDataTable.getState();
126 state.sortedBy = {key:'username', dir:YAHOO.widget.DataTable.CLASS_ASC};
126 state.sortedBy = {key:'username', dir:YAHOO.widget.DataTable.CLASS_ASC};
127
127
128 // Get filtered data
128 // Get filtered data
129 myDataSource.sendRequest(YUD.get('q_filter').value,{
129 myDataSource.sendRequest(YUD.get('q_filter').value,{
130 success : myDataTable.onDataReturnInitializeTable,
130 success : myDataTable.onDataReturnInitializeTable,
131 failure : myDataTable.onDataReturnInitializeTable,
131 failure : myDataTable.onDataReturnInitializeTable,
132 scope : myDataTable,
132 scope : myDataTable,
133 argument: state
133 argument: state
134 });
134 });
135
135
136 };
136 };
137 YUE.on('q_filter','click',function(){
137 YUE.on('q_filter','click',function(){
138 YUD.get('q_filter').value = '';
138 YUD.get('q_filter').value = '';
139 });
139 });
140
140
141 YUE.on('q_filter','keyup',function (e) {
141 YUE.on('q_filter','keyup',function (e) {
142 clearTimeout(filterTimeout);
142 clearTimeout(filterTimeout);
143 filterTimeout = setTimeout(updateFilter,600);
143 filterTimeout = setTimeout(updateFilter,600);
144 });
144 });
145 </script>
145 </script>
146
146
147 </%def>
147 </%def>
@@ -1,53 +1,53 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3
3
4 <%def name="title()">
4 <%def name="title()">
5 ${_('Users groups administration')} - ${c.rhodecode_name}
5 ${_('Users groups administration')} - ${c.rhodecode_name}
6 </%def>
6 </%def>
7
7
8 <%def name="breadcrumbs_links()">
8 <%def name="breadcrumbs_links()">
9 ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Users groups')}
9 ${h.link_to(_('Admin'),h.url('admin_home'))} &raquo; ${_('Users groups')}
10 </%def>
10 </%def>
11
11
12 <%def name="page_nav()">
12 <%def name="page_nav()">
13 ${self.menu('admin')}
13 ${self.menu('admin')}
14 </%def>
14 </%def>
15
15
16 <%def name="main()">
16 <%def name="main()">
17 <div class="box">
17 <div class="box">
18 <!-- box / title -->
18 <!-- box / title -->
19 <div class="title">
19 <div class="title">
20 ${self.breadcrumbs()}
20 ${self.breadcrumbs()}
21 <ul class="links">
21 <ul class="links">
22 <li>
22 <li>
23 <span>${h.link_to(_(u'ADD NEW USER GROUP'),h.url('new_users_group'))}</span>
23 <span>${h.link_to(_(u'Add new user group'),h.url('new_users_group'))}</span>
24 </li>
24 </li>
25
25
26 </ul>
26 </ul>
27 </div>
27 </div>
28 <!-- end box / title -->
28 <!-- end box / title -->
29 <div class="table">
29 <div class="table">
30 <table class="table_disp">
30 <table class="table_disp">
31 <tr class="header">
31 <tr class="header">
32 <th class="left">${_('group name')}</th>
32 <th class="left">${_('group name')}</th>
33 <th class="left">${_('members')}</th>
33 <th class="left">${_('members')}</th>
34 <th class="left">${_('active')}</th>
34 <th class="left">${_('active')}</th>
35 <th class="left">${_('action')}</th>
35 <th class="left">${_('action')}</th>
36 </tr>
36 </tr>
37 %for cnt,u_group in enumerate(c.users_groups_list):
37 %for cnt,u_group in enumerate(c.users_groups_list):
38 <tr class="parity${cnt%2}">
38 <tr class="parity${cnt%2}">
39 <td>${h.link_to(u_group.users_group_name,h.url('edit_users_group', id=u_group.users_group_id))}</td>
39 <td>${h.link_to(u_group.users_group_name,h.url('edit_users_group', id=u_group.users_group_id))}</td>
40 <td><span class="tooltip" title="${h.tooltip(', '.join(map(h.safe_unicode,[x.user.username for x in u_group.members[:50]])))}">${len(u_group.members)}</span></td>
40 <td><span class="tooltip" title="${h.tooltip(', '.join(map(h.safe_unicode,[x.user.username for x in u_group.members[:50]])))}">${len(u_group.members)}</span></td>
41 <td>${h.bool2icon(u_group.users_group_active)}</td>
41 <td>${h.bool2icon(u_group.users_group_active)}</td>
42 <td>
42 <td>
43 ${h.form(url('users_group', id=u_group.users_group_id),method='delete')}
43 ${h.form(url('users_group', id=u_group.users_group_id),method='delete')}
44 ${h.submit('remove_',_('delete'),id="remove_group_%s" % u_group.users_group_id,
44 ${h.submit('remove_',_('delete'),id="remove_group_%s" % u_group.users_group_id,
45 class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this users group: %s') % u_group.users_group_name+"');")}
45 class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this users group: %s') % u_group.users_group_name+"');")}
46 ${h.end_form()}
46 ${h.end_form()}
47 </td>
47 </td>
48 </tr>
48 </tr>
49 %endfor
49 %endfor
50 </table>
50 </table>
51 </div>
51 </div>
52 </div>
52 </div>
53 </%def>
53 </%def>
@@ -1,337 +1,337 b''
1 <%page args="parent" />
1 <%page args="parent" />
2 <div class="box">
2 <div class="box">
3 <!-- box / title -->
3 <!-- box / title -->
4 <div class="title">
4 <div class="title">
5 <h5>
5 <h5>
6 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${parent.breadcrumbs()} <span id="repo_count">0</span> ${_('repositories')}
6 <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${parent.breadcrumbs()} <span id="repo_count">0</span> ${_('repositories')}
7 </h5>
7 </h5>
8 %if c.rhodecode_user.username != 'default':
8 %if c.rhodecode_user.username != 'default':
9 %if h.HasPermissionAny('hg.admin','hg.create.repository')():
9 %if h.HasPermissionAny('hg.admin','hg.create.repository')():
10 <ul class="links">
10 <ul class="links">
11 <li>
11 <li>
12 %if c.group:
12 %if c.group:
13 <span>${h.link_to(_('ADD REPOSITORY'),h.url('admin_settings_create_repository',parent_group=c.group.group_id))}</span>
13 <span>${h.link_to(_('Add repository'),h.url('admin_settings_create_repository',parent_group=c.group.group_id))}</span>
14 %else:
14 %else:
15 <span>${h.link_to(_('ADD REPOSITORY'),h.url('admin_settings_create_repository'))}</span>
15 <span>${h.link_to(_('Add repository'),h.url('admin_settings_create_repository'))}</span>
16 %endif
16 %endif
17 </li>
17 </li>
18 </ul>
18 </ul>
19 %endif
19 %endif
20 %endif
20 %endif
21 </div>
21 </div>
22 <!-- end box / title -->
22 <!-- end box / title -->
23 <div class="table">
23 <div class="table">
24 % if c.groups:
24 % if c.groups:
25 <div id='groups_list_wrap' class="yui-skin-sam">
25 <div id='groups_list_wrap' class="yui-skin-sam">
26 <table id="groups_list">
26 <table id="groups_list">
27 <thead>
27 <thead>
28 <tr>
28 <tr>
29 <th class="left"><a href="#">${_('Group name')}</a></th>
29 <th class="left"><a href="#">${_('Group name')}</a></th>
30 <th class="left"><a href="#">${_('Description')}</a></th>
30 <th class="left"><a href="#">${_('Description')}</a></th>
31 ##<th class="left"><a href="#">${_('Number of repositories')}</a></th>
31 ##<th class="left"><a href="#">${_('Number of repositories')}</a></th>
32 </tr>
32 </tr>
33 </thead>
33 </thead>
34
34
35 ## REPO GROUPS
35 ## REPO GROUPS
36 % for gr in c.groups:
36 % for gr in c.groups:
37 <tr>
37 <tr>
38 <td>
38 <td>
39 <div style="white-space: nowrap">
39 <div style="white-space: nowrap">
40 <img class="icon" alt="${_('Repositories group')}" src="${h.url('/images/icons/database_link.png')}"/>
40 <img class="icon" alt="${_('Repositories group')}" src="${h.url('/images/icons/database_link.png')}"/>
41 ${h.link_to(gr.name,url('repos_group_home',group_name=gr.group_name))}
41 ${h.link_to(gr.name,url('repos_group_home',group_name=gr.group_name))}
42 </div>
42 </div>
43 </td>
43 </td>
44 %if c.visual.stylify_metatags:
44 %if c.visual.stylify_metatags:
45 <td>${h.urlify_text(h.desc_stylize(gr.group_description))}</td>
45 <td>${h.urlify_text(h.desc_stylize(gr.group_description))}</td>
46 %else:
46 %else:
47 <td>${gr.group_description}</td>
47 <td>${gr.group_description}</td>
48 %endif
48 %endif
49 ## this is commented out since for multi nested repos can be HEAVY!
49 ## this is commented out since for multi nested repos can be HEAVY!
50 ## in number of executed queries during traversing uncomment at will
50 ## in number of executed queries during traversing uncomment at will
51 ##<td><b>${gr.repositories_recursive_count}</b></td>
51 ##<td><b>${gr.repositories_recursive_count}</b></td>
52 </tr>
52 </tr>
53 % endfor
53 % endfor
54 </table>
54 </table>
55 </div>
55 </div>
56 <div id="group-user-paginator" style="padding: 0px 0px 0px 0px"></div>
56 <div id="group-user-paginator" style="padding: 0px 0px 0px 0px"></div>
57 <div style="height: 20px"></div>
57 <div style="height: 20px"></div>
58 % endif
58 % endif
59 <div id="welcome" style="display:none;text-align:center">
59 <div id="welcome" style="display:none;text-align:center">
60 <h1><a href="${h.url('home')}">${c.rhodecode_name} ${c.rhodecode_version}</a></h1>
60 <h1><a href="${h.url('home')}">${c.rhodecode_name} ${c.rhodecode_version}</a></h1>
61 </div>
61 </div>
62 <%cnt=0%>
62 <%cnt=0%>
63 <%namespace name="dt" file="/data_table/_dt_elements.html"/>
63 <%namespace name="dt" file="/data_table/_dt_elements.html"/>
64 % if c.visual.lightweight_dashboard is False:
64 % if c.visual.lightweight_dashboard is False:
65 ## old full detailed version
65 ## old full detailed version
66 <div id='repos_list_wrap' class="yui-skin-sam">
66 <div id='repos_list_wrap' class="yui-skin-sam">
67 <table id="repos_list">
67 <table id="repos_list">
68 <thead>
68 <thead>
69 <tr>
69 <tr>
70 <th class="left"></th>
70 <th class="left"></th>
71 <th class="left">${_('Name')}</th>
71 <th class="left">${_('Name')}</th>
72 <th class="left">${_('Description')}</th>
72 <th class="left">${_('Description')}</th>
73 <th class="left">${_('Last change')}</th>
73 <th class="left">${_('Last change')}</th>
74 <th class="left">${_('Tip')}</th>
74 <th class="left">${_('Tip')}</th>
75 <th class="left">${_('Owner')}</th>
75 <th class="left">${_('Owner')}</th>
76 <th class="left">${_('RSS')}</th>
76 <th class="left">${_('RSS')}</th>
77 <th class="left">${_('Atom')}</th>
77 <th class="left">${_('Atom')}</th>
78 </tr>
78 </tr>
79 </thead>
79 </thead>
80 <tbody>
80 <tbody>
81 %for cnt,repo in enumerate(c.repos_list):
81 %for cnt,repo in enumerate(c.repos_list):
82 <tr class="parity${(cnt+1)%2}">
82 <tr class="parity${(cnt+1)%2}">
83 ##QUICK MENU
83 ##QUICK MENU
84 <td class="quick_repo_menu">
84 <td class="quick_repo_menu">
85 ${dt.quick_menu(repo['name'])}
85 ${dt.quick_menu(repo['name'])}
86 </td>
86 </td>
87 ##REPO NAME AND ICONS
87 ##REPO NAME AND ICONS
88 <td class="reponame">
88 <td class="reponame">
89 ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],h.AttributeDict(repo['dbrepo_fork']),pageargs.get('short_repo_names'))}
89 ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],h.AttributeDict(repo['dbrepo_fork']),pageargs.get('short_repo_names'))}
90 </td>
90 </td>
91 ##DESCRIPTION
91 ##DESCRIPTION
92 <td><span class="tooltip" title="${h.tooltip(repo['description'])}">
92 <td><span class="tooltip" title="${h.tooltip(repo['description'])}">
93 %if c.visual.stylify_metatags:
93 %if c.visual.stylify_metatags:
94 ${h.urlify_text(h.desc_stylize(h.truncate(repo['description'],60)))}</span>
94 ${h.urlify_text(h.desc_stylize(h.truncate(repo['description'],60)))}</span>
95 %else:
95 %else:
96 ${h.truncate(repo['description'],60)}</span>
96 ${h.truncate(repo['description'],60)}</span>
97 %endif
97 %endif
98 </td>
98 </td>
99 ##LAST CHANGE DATE
99 ##LAST CHANGE DATE
100 <td>
100 <td>
101 ${dt.last_change(repo['last_change'])}
101 ${dt.last_change(repo['last_change'])}
102 </td>
102 </td>
103 ##LAST REVISION
103 ##LAST REVISION
104 <td>
104 <td>
105 ${dt.revision(repo['name'],repo['rev'],repo['tip'],repo['author'],repo['last_msg'])}
105 ${dt.revision(repo['name'],repo['rev'],repo['tip'],repo['author'],repo['last_msg'])}
106 </td>
106 </td>
107 ##
107 ##
108 <td title="${repo['contact']}">${h.person(repo['contact'])}</td>
108 <td title="${repo['contact']}">${h.person(repo['contact'])}</td>
109 <td>
109 <td>
110 ${dt.rss(repo['name'])}
110 ${dt.rss(repo['name'])}
111 </td>
111 </td>
112 <td>
112 <td>
113 ${dt.atom(repo['name'])}
113 ${dt.atom(repo['name'])}
114 </td>
114 </td>
115 </tr>
115 </tr>
116 %endfor
116 %endfor
117 </tbody>
117 </tbody>
118 </table>
118 </table>
119 </div>
119 </div>
120 % else:
120 % else:
121 ## lightweight version
121 ## lightweight version
122 <div class="yui-skin-sam" id="repos_list_wrap"></div>
122 <div class="yui-skin-sam" id="repos_list_wrap"></div>
123 <div id="user-paginator" style="padding: 0px 0px 0px 0px"></div>
123 <div id="user-paginator" style="padding: 0px 0px 0px 0px"></div>
124 % endif
124 % endif
125 </div>
125 </div>
126 </div>
126 </div>
127 % if c.visual.lightweight_dashboard is False:
127 % if c.visual.lightweight_dashboard is False:
128 <script>
128 <script>
129 YUD.get('repo_count').innerHTML = ${cnt+1 if cnt else 0};
129 YUD.get('repo_count').innerHTML = ${cnt+1 if cnt else 0};
130
130
131 // groups table sorting
131 // groups table sorting
132 var myColumnDefs = [
132 var myColumnDefs = [
133 {key:"name",label:"${_('Group name')}",sortable:true,
133 {key:"name",label:"${_('Group name')}",sortable:true,
134 sortOptions: { sortFunction: groupNameSort }},
134 sortOptions: { sortFunction: groupNameSort }},
135 {key:"desc",label:"${_('Description')}",sortable:true},
135 {key:"desc",label:"${_('Description')}",sortable:true},
136 ];
136 ];
137
137
138 var myDataSource = new YAHOO.util.DataSource(YUD.get("groups_list"));
138 var myDataSource = new YAHOO.util.DataSource(YUD.get("groups_list"));
139
139
140 myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
140 myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
141 myDataSource.responseSchema = {
141 myDataSource.responseSchema = {
142 fields: [
142 fields: [
143 {key:"name"},
143 {key:"name"},
144 {key:"desc"},
144 {key:"desc"},
145 ]
145 ]
146 };
146 };
147
147
148 var myDataTable = new YAHOO.widget.DataTable("groups_list_wrap", myColumnDefs, myDataSource,{
148 var myDataTable = new YAHOO.widget.DataTable("groups_list_wrap", myColumnDefs, myDataSource,{
149 sortedBy:{key:"name",dir:"asc"},
149 sortedBy:{key:"name",dir:"asc"},
150 paginator: new YAHOO.widget.Paginator({
150 paginator: new YAHOO.widget.Paginator({
151 rowsPerPage: 50,
151 rowsPerPage: 50,
152 alwaysVisible: false,
152 alwaysVisible: false,
153 template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
153 template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
154 pageLinks: 5,
154 pageLinks: 5,
155 containerClass: 'pagination-wh',
155 containerClass: 'pagination-wh',
156 currentPageClass: 'pager_curpage',
156 currentPageClass: 'pager_curpage',
157 pageLinkClass: 'pager_link',
157 pageLinkClass: 'pager_link',
158 nextPageLinkLabel: '&gt;',
158 nextPageLinkLabel: '&gt;',
159 previousPageLinkLabel: '&lt;',
159 previousPageLinkLabel: '&lt;',
160 firstPageLinkLabel: '&lt;&lt;',
160 firstPageLinkLabel: '&lt;&lt;',
161 lastPageLinkLabel: '&gt;&gt;',
161 lastPageLinkLabel: '&gt;&gt;',
162 containers:['group-user-paginator']
162 containers:['group-user-paginator']
163 }),
163 }),
164 MSG_SORTASC:"${_('Click to sort ascending')}",
164 MSG_SORTASC:"${_('Click to sort ascending')}",
165 MSG_SORTDESC:"${_('Click to sort descending')}"
165 MSG_SORTDESC:"${_('Click to sort descending')}"
166 });
166 });
167
167
168 // main table sorting
168 // main table sorting
169 var myColumnDefs = [
169 var myColumnDefs = [
170 {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
170 {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
171 {key:"name",label:"${_('Name')}",sortable:true,
171 {key:"name",label:"${_('Name')}",sortable:true,
172 sortOptions: { sortFunction: nameSort }},
172 sortOptions: { sortFunction: nameSort }},
173 {key:"desc",label:"${_('Description')}",sortable:true},
173 {key:"desc",label:"${_('Description')}",sortable:true},
174 {key:"last_change",label:"${_('Last Change')}",sortable:true,
174 {key:"last_change",label:"${_('Last Change')}",sortable:true,
175 sortOptions: { sortFunction: ageSort }},
175 sortOptions: { sortFunction: ageSort }},
176 {key:"tip",label:"${_('Tip')}",sortable:true,
176 {key:"tip",label:"${_('Tip')}",sortable:true,
177 sortOptions: { sortFunction: revisionSort }},
177 sortOptions: { sortFunction: revisionSort }},
178 {key:"owner",label:"${_('Owner')}",sortable:true},
178 {key:"owner",label:"${_('Owner')}",sortable:true},
179 {key:"rss",label:"",sortable:false},
179 {key:"rss",label:"",sortable:false},
180 {key:"atom",label:"",sortable:false},
180 {key:"atom",label:"",sortable:false},
181 ];
181 ];
182
182
183 var myDataSource = new YAHOO.util.DataSource(YUD.get("repos_list"));
183 var myDataSource = new YAHOO.util.DataSource(YUD.get("repos_list"));
184
184
185 myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
185 myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
186
186
187 myDataSource.responseSchema = {
187 myDataSource.responseSchema = {
188 fields: [
188 fields: [
189 {key:"menu"},
189 {key:"menu"},
190 //{key:"raw_name"},
190 //{key:"raw_name"},
191 {key:"name"},
191 {key:"name"},
192 {key:"desc"},
192 {key:"desc"},
193 {key:"last_change"},
193 {key:"last_change"},
194 {key:"tip"},
194 {key:"tip"},
195 {key:"owner"},
195 {key:"owner"},
196 {key:"rss"},
196 {key:"rss"},
197 {key:"atom"},
197 {key:"atom"},
198 ]
198 ]
199 };
199 };
200
200
201 var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,
201 var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,
202 {
202 {
203 sortedBy:{key:"name",dir:"asc"},
203 sortedBy:{key:"name",dir:"asc"},
204 MSG_SORTASC:"${_('Click to sort ascending')}",
204 MSG_SORTASC:"${_('Click to sort ascending')}",
205 MSG_SORTDESC:"${_('Click to sort descending')}",
205 MSG_SORTDESC:"${_('Click to sort descending')}",
206 MSG_EMPTY:"${_('No records found.')}",
206 MSG_EMPTY:"${_('No records found.')}",
207 MSG_ERROR:"${_('Data error.')}",
207 MSG_ERROR:"${_('Data error.')}",
208 MSG_LOADING:"${_('Loading...')}",
208 MSG_LOADING:"${_('Loading...')}",
209 }
209 }
210 );
210 );
211 myDataTable.subscribe('postRenderEvent',function(oArgs) {
211 myDataTable.subscribe('postRenderEvent',function(oArgs) {
212 tooltip_activate();
212 tooltip_activate();
213 quick_repo_menu();
213 quick_repo_menu();
214 var func = function(node){
214 var func = function(node){
215 return node.parentNode.parentNode.parentNode.parentNode;
215 return node.parentNode.parentNode.parentNode.parentNode;
216 }
216 }
217 q_filter('q_filter',YUQ('div.table tr td a.repo_name'),func);
217 q_filter('q_filter',YUQ('div.table tr td a.repo_name'),func);
218 });
218 });
219
219
220 </script>
220 </script>
221 % else:
221 % else:
222 <script>
222 <script>
223 var data = ${c.data|n};
223 var data = ${c.data|n};
224 var myDataSource = new YAHOO.util.DataSource(data);
224 var myDataSource = new YAHOO.util.DataSource(data);
225 myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
225 myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
226
226
227 myDataSource.responseSchema = {
227 myDataSource.responseSchema = {
228 resultsList: "records",
228 resultsList: "records",
229 fields: [
229 fields: [
230 {key:"menu"},
230 {key:"menu"},
231 {key:"raw_name"},
231 {key:"raw_name"},
232 {key:"name"},
232 {key:"name"},
233 {key:"desc"},
233 {key:"desc"},
234 {key:"last_change"},
234 {key:"last_change"},
235 {key:"last_changeset"},
235 {key:"last_changeset"},
236 {key:"owner"},
236 {key:"owner"},
237 {key:"rss"},
237 {key:"rss"},
238 {key:"atom"},
238 {key:"atom"},
239 ]
239 ]
240 };
240 };
241 myDataSource.doBeforeCallback = function(req,raw,res,cb) {
241 myDataSource.doBeforeCallback = function(req,raw,res,cb) {
242 // This is the filter function
242 // This is the filter function
243 var data = res.results || [],
243 var data = res.results || [],
244 filtered = [],
244 filtered = [],
245 i,l;
245 i,l;
246
246
247 if (req) {
247 if (req) {
248 req = req.toLowerCase();
248 req = req.toLowerCase();
249 for (i = 0; i<data.length; i++) {
249 for (i = 0; i<data.length; i++) {
250 var pos = data[i].raw_name.toLowerCase().indexOf(req)
250 var pos = data[i].raw_name.toLowerCase().indexOf(req)
251 if (pos != -1) {
251 if (pos != -1) {
252 filtered.push(data[i]);
252 filtered.push(data[i]);
253 }
253 }
254 }
254 }
255 res.results = filtered;
255 res.results = filtered;
256 }
256 }
257 YUD.get('repo_count').innerHTML = res.results.length;
257 YUD.get('repo_count').innerHTML = res.results.length;
258 return res;
258 return res;
259 }
259 }
260
260
261 // main table sorting
261 // main table sorting
262 var myColumnDefs = [
262 var myColumnDefs = [
263 {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
263 {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
264 {key:"name",label:"${_('Name')}",sortable:true,
264 {key:"name",label:"${_('Name')}",sortable:true,
265 sortOptions: { sortFunction: nameSort }},
265 sortOptions: { sortFunction: nameSort }},
266 {key:"desc",label:"${_('Description')}",sortable:true},
266 {key:"desc",label:"${_('Description')}",sortable:true},
267 {key:"last_change",label:"${_('Last Change')}",sortable:true,
267 {key:"last_change",label:"${_('Last Change')}",sortable:true,
268 sortOptions: { sortFunction: ageSort }},
268 sortOptions: { sortFunction: ageSort }},
269 {key:"last_changeset",label:"${_('Tip')}",sortable:true,
269 {key:"last_changeset",label:"${_('Tip')}",sortable:true,
270 sortOptions: { sortFunction: revisionSort }},
270 sortOptions: { sortFunction: revisionSort }},
271 {key:"owner",label:"${_('Owner')}",sortable:true},
271 {key:"owner",label:"${_('Owner')}",sortable:true},
272 {key:"rss",label:"",sortable:false},
272 {key:"rss",label:"",sortable:false},
273 {key:"atom",label:"",sortable:false},
273 {key:"atom",label:"",sortable:false},
274 ];
274 ];
275
275
276 var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{
276 var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{
277 sortedBy:{key:"name",dir:"asc"},
277 sortedBy:{key:"name",dir:"asc"},
278 paginator: new YAHOO.widget.Paginator({
278 paginator: new YAHOO.widget.Paginator({
279 rowsPerPage: ${c.visual.lightweight_dashboard_items},
279 rowsPerPage: ${c.visual.lightweight_dashboard_items},
280 alwaysVisible: false,
280 alwaysVisible: false,
281 template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
281 template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
282 pageLinks: 5,
282 pageLinks: 5,
283 containerClass: 'pagination-wh',
283 containerClass: 'pagination-wh',
284 currentPageClass: 'pager_curpage',
284 currentPageClass: 'pager_curpage',
285 pageLinkClass: 'pager_link',
285 pageLinkClass: 'pager_link',
286 nextPageLinkLabel: '&gt;',
286 nextPageLinkLabel: '&gt;',
287 previousPageLinkLabel: '&lt;',
287 previousPageLinkLabel: '&lt;',
288 firstPageLinkLabel: '&lt;&lt;',
288 firstPageLinkLabel: '&lt;&lt;',
289 lastPageLinkLabel: '&gt;&gt;',
289 lastPageLinkLabel: '&gt;&gt;',
290 containers:['user-paginator']
290 containers:['user-paginator']
291 }),
291 }),
292
292
293 MSG_SORTASC:"${_('Click to sort ascending')}",
293 MSG_SORTASC:"${_('Click to sort ascending')}",
294 MSG_SORTDESC:"${_('Click to sort descending')}",
294 MSG_SORTDESC:"${_('Click to sort descending')}",
295 MSG_EMPTY:"${_('No records found.')}",
295 MSG_EMPTY:"${_('No records found.')}",
296 MSG_ERROR:"${_('Data error.')}",
296 MSG_ERROR:"${_('Data error.')}",
297 MSG_LOADING:"${_('Loading...')}",
297 MSG_LOADING:"${_('Loading...')}",
298 }
298 }
299 );
299 );
300 myDataTable.subscribe('postRenderEvent',function(oArgs) {
300 myDataTable.subscribe('postRenderEvent',function(oArgs) {
301 tooltip_activate();
301 tooltip_activate();
302 quick_repo_menu();
302 quick_repo_menu();
303 });
303 });
304
304
305 var filterTimeout = null;
305 var filterTimeout = null;
306
306
307 updateFilter = function () {
307 updateFilter = function () {
308 // Reset timeout
308 // Reset timeout
309 filterTimeout = null;
309 filterTimeout = null;
310
310
311 // Reset sort
311 // Reset sort
312 var state = myDataTable.getState();
312 var state = myDataTable.getState();
313 state.sortedBy = {key:'name', dir:YAHOO.widget.DataTable.CLASS_ASC};
313 state.sortedBy = {key:'name', dir:YAHOO.widget.DataTable.CLASS_ASC};
314
314
315 // Get filtered data
315 // Get filtered data
316 myDataSource.sendRequest(YUD.get('q_filter').value,{
316 myDataSource.sendRequest(YUD.get('q_filter').value,{
317 success : myDataTable.onDataReturnInitializeTable,
317 success : myDataTable.onDataReturnInitializeTable,
318 failure : myDataTable.onDataReturnInitializeTable,
318 failure : myDataTable.onDataReturnInitializeTable,
319 scope : myDataTable,
319 scope : myDataTable,
320 argument: state
320 argument: state
321 });
321 });
322
322
323 };
323 };
324 YUE.on('q_filter','click',function(){
324 YUE.on('q_filter','click',function(){
325 if(!YUD.hasClass('q_filter', 'loaded')){
325 if(!YUD.hasClass('q_filter', 'loaded')){
326 YUD.get('q_filter').value = '';
326 YUD.get('q_filter').value = '';
327 //TODO: load here full list later to do search within groups
327 //TODO: load here full list later to do search within groups
328 YUD.addClass('q_filter', 'loaded');
328 YUD.addClass('q_filter', 'loaded');
329 }
329 }
330 });
330 });
331
331
332 YUE.on('q_filter','keyup',function (e) {
332 YUE.on('q_filter','keyup',function (e) {
333 clearTimeout(filterTimeout);
333 clearTimeout(filterTimeout);
334 filterTimeout = setTimeout(updateFilter,600);
334 filterTimeout = setTimeout(updateFilter,600);
335 });
335 });
336 </script>
336 </script>
337 % endif
337 % endif
General Comments 0
You need to be logged in to leave comments. Login now