## -*- coding: utf-8 -*- <%inherit file="/base/base.html"/> <%def name="title()"> ${_('Users administration')} · ${c.rhodecode_name} </%def> <%def name="breadcrumbs_links()"> <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" placeholder="${_('quick filter...')}" value=""/> ${h.link_to(_('Admin'),h.url('admin_home'))} » <span id="user_count">0</span> ${_('users')} </%def> <%def name="page_nav()"> ${self.menu('admin')} </%def> <%def name="main()"> <div class="box"> <!-- box / title --> <div class="title"> ${self.breadcrumbs()} <ul class="links"> <li> <span>${h.link_to(_(u'Add new user'),h.url('new_user'))}</span> </li> </ul> </div> <!-- end box / title --> <div class="table yui-skin-sam" id="users_list_wrap"></div> <div id="user-paginator" style="padding: 0px 0px 0px 20px"></div> </div> <script> var url = "${h.url('formatted_users', format='json')}"; var data = ${c.data|n}; var myDataSource = new YAHOO.util.DataSource(data); myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON; myDataSource.responseSchema = { resultsList: "records", fields: [ {key: "gravatar"}, {key: "raw_username"}, {key: "username"}, {key: "firstname"}, {key: "lastname"}, {key: "last_login"}, {key: "last_login_raw"}, {key: "active"}, {key: "admin"}, {key: "ldap"}, {key: "action"}, ] }; myDataSource.doBeforeCallback = function(req,raw,res,cb) { // This is the filter function var data = res.results || [], filtered = [], i,l; if (req) { req = req.toLowerCase(); for (i = 0; i<data.length; i++) { var pos = data[i].raw_username.toLowerCase().indexOf(req) if (pos != -1) { filtered.push(data[i]); } } res.results = filtered; } YUD.get('user_count').innerHTML = res.results.length; return res; } // main table sorting var myColumnDefs = [ {key:"gravatar",label:"",sortable:false,}, {key:"username",label:"${_('Username')}",sortable:true, sortOptions: { sortFunction: usernamelinkSort } }, {key:"firstname",label:"${_('Firstname')}",sortable:true,}, {key:"lastname",label:"${_('Lastname')}",sortable:true,}, {key:"last_login",label:"${_('Last login')}",sortable:true, sortOptions: { sortFunction: lastLoginSort }}, {key:"active",label:"${_('Active')}",sortable:true,}, {key:"admin",label:"${_('Admin')}",sortable:true,}, {key:"ldap",label:"${_('LDAP')}",sortable:true,}, {key:"action",label:"${_('Action')}",sortable:false}, ]; var myDataTable = new YAHOO.widget.DataTable("users_list_wrap", myColumnDefs, myDataSource,{ sortedBy:{key:"username",dir:"asc"}, paginator: new YAHOO.widget.Paginator({ rowsPerPage: 15, alwaysVisible: false, template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}", pageLinks: 5, containerClass: 'pagination-wh', currentPageClass: 'pager_curpage', pageLinkClass: 'pager_link', nextPageLinkLabel: '>', previousPageLinkLabel: '<', firstPageLinkLabel: '<<', lastPageLinkLabel: '>>', containers:['user-paginator'] }), MSG_SORTASC:"${_('Click to sort ascending')}", MSG_SORTDESC:"${_('Click to sort descending')}", MSG_EMPTY:"${_('No records found.')}", MSG_ERROR:"${_('Data error.')}", MSG_LOADING:"${_('Loading...')}", } ); myDataTable.subscribe('postRenderEvent',function(oArgs) { }); var filterTimeout = null; updateFilter = function () { // Reset timeout filterTimeout = null; // Reset sort var state = myDataTable.getState(); state.sortedBy = {key:'username', dir:YAHOO.widget.DataTable.CLASS_ASC}; // Get filtered data myDataSource.sendRequest(YUD.get('q_filter').value,{ success : myDataTable.onDataReturnInitializeTable, failure : myDataTable.onDataReturnInitializeTable, scope : myDataTable, argument: state }); }; YUE.on('q_filter','keyup',function (e) { clearTimeout(filterTimeout); filterTimeout = setTimeout(updateFilter,600); }); </script> </%def>