Mercurial > kallithea
changeset 2127:b745d5d2563c beta
implemented #377 Users view own permissions
- my account page uses YUI DT by default now
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 13 Mar 2012 06:36:53 +0200 |
parents | de72388c713d |
children | e29c688e6885 |
files | docs/changelog.rst rhodecode/public/css/style.css rhodecode/public/js/rhodecode.js rhodecode/templates/admin/users/user_edit_my_account.html rhodecode/templates/journal/journal.html |
diffstat | 5 files changed, 196 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/docs/changelog.rst Tue Mar 13 04:24:45 2012 +0200 +++ b/docs/changelog.rst Tue Mar 13 06:36:53 2012 +0200 @@ -19,6 +19,7 @@ - added help text into repo add/edit forms - created rcextensions module with additional mappings (ref #322) and post push/pull/create repo hooks callbacks +- implemented #377 Users view for his own permissions on account page fixes +++++
--- a/rhodecode/public/css/style.css Tue Mar 13 04:24:45 2012 +0200 +++ b/rhodecode/public/css/style.css Tue Mar 13 06:36:53 2012 +0200 @@ -4155,6 +4155,47 @@ padding:5px 0px 5px 38px; } +/**** + PERMS +*****/ +#perms .perms_section_head { + padding:10px 10px 10px 0px; + font-size:16px; + font-weight: bold; +} + +#perms .perm_tag{ + padding: 1px 3px 1px 3px; + font-size: 10px; + font-weight: bold; + text-transform: uppercase; + white-space: nowrap; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +#perms .perm_tag.admin{ + background-color: #B94A48; + color: #ffffff; +} + +#perms .perm_tag.write{ + background-color: #B94A48; + color: #ffffff; +} + +#perms .perm_tag.read{ + background-color: #468847; + color: #ffffff; +} + +#perms .perm_tag.none{ + background-color: #bfbfbf; + color: #ffffff; +} + + /***************************************************************************** DIFFS CSS
--- a/rhodecode/public/js/rhodecode.js Tue Mar 13 04:24:45 2012 +0200 +++ b/rhodecode/public/js/rhodecode.js Tue Mar 13 06:36:53 2012 +0200 @@ -700,6 +700,18 @@ return compState; }; +var permNameSort = function(a, b, desc, field) { + var a_ = fromHTML(a.getData(field)); + var b_ = fromHTML(b.getData(field)); + // extract name from table + a_ = a_.innerHTML; + b_ = b_.innerHTML; + + var comp = YAHOO.util.Sort.compare; + var compState = comp(a_, b_, desc); + return compState; +}; + var groupNameSort = function(a, b, desc, field) { var a_ = fromHTML(a.getData(field)); var b_ = fromHTML(b.getData(field));
--- a/rhodecode/templates/admin/users/user_edit_my_account.html Tue Mar 13 04:24:45 2012 +0200 +++ b/rhodecode/templates/admin/users/user_edit_my_account.html Tue Mar 13 06:36:53 2012 +0200 @@ -113,52 +113,45 @@ <div class="title"> <h5> <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> - ${_('My repositories')} + <a id="show_my" class="link-white" href="#my">${_('My repos')}</a> / <a id="show_perms" class="link-white" href="#perms">${_('My permissions')}</a> </h5> %if h.HasPermissionAny('hg.admin','hg.create.repository')(): <ul class="links"> <li> - <span>${h.link_to(_('ADD REPOSITORY'),h.url('admin_settings_create_repository'))}</span> + <span>${h.link_to(_('ADD'),h.url('admin_settings_create_repository'))}</span> </li> </ul> %endif </div> <!-- end box / title --> - <div class="table"> - <table> + <div id="my" class="table"> + <div id='repos_list_wrap' class="yui-skin-sam"> + <table id="repos_list"> <thead> <tr> + <th></th> <th class="left">${_('Name')}</th> - <th class="left">${_('revision')}</th> - <th colspan="2" class="left">${_('action')}</th> + <th class="left">${_('Revision')}</th> + <th class="left">${_('Action')}</th> + <th class="left">${_('Action')}</th> </thead> <tbody> + <%namespace name="dt" file="/_data_table/_dt_elements.html"/> %if c.user_repos: - %for repo in c.user_repos: + %for repo in c.user_repos: <tr> - <td> - %if h.is_hg(repo['dbrepo']['repo_type']): - <img class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/> - %elif h.is_git(repo['dbrepo']['repo_type']): - <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/> - %else: - - %endif - %if repo['dbrepo']['private']: - <img class="icon" alt="${_('private')}" src="${h.url('/images/icons/lock.png')}"/> - %else: - <img class="icon" alt="${_('public')}" src="${h.url('/images/icons/lock_open.png')}"/> - %endif - - ${h.link_to(repo['name'], h.url('summary_home',repo_name=repo['name']),class_="repo_name")} - %if repo['dbrepo_fork']: - <a href="${h.url('summary_home',repo_name=repo['dbrepo_fork']['repo_name'])}"> - <img class="icon" alt="${_('public')}" - title="${_('Fork of')} ${repo['dbrepo_fork']['repo_name']}" - src="${h.url('/images/icons/arrow_divide.png')}"/></a> - %endif - </td> - <td><span class="tooltip" title="${repo['last_change']}">${("r%s:%s") % (repo['rev'],h.short_id(repo['tip']))}</span></td> + ##QUICK MENU + <td class="quick_repo_menu"> + ${dt.quick_menu(repo['name'])} + </td> + ##REPO NAME AND ICONS + <td class="reponame"> + ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],repo['dbrepo_fork'].get('repo_name'))} + </td> + ##LAST REVISION + <td> + ${dt.revision(repo['name'],repo['rev'],repo['tip'],repo['author'],repo['last_msg'])} + </td> <td><a href="${h.url('repo_settings_home',repo_name=repo['name'])}" title="${_('edit')}"><img class="icon" alt="${_('private')}" src="${h.url('/images/icons/application_form_edit.png')}"/></a></td> <td> ${h.form(url('repo_settings_delete', repo_name=repo['name']),method='delete')} @@ -177,14 +170,127 @@ %endif </tbody> </table> + </div> + </div> + <div id="perms" class="table" style="display:none"> + %for section in sorted(c.rhodecode_user.permissions.keys()): + <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div> + + <div id='tbl_list_wrap_${section}' class="yui-skin-sam"> + <table id="tbl_list_${section}"> + <thead> + <tr> + <th class="left">${_('Name')}</th> + <th class="left">${_('Permission')}</th> + </thead> + <tbody> + %for k in c.rhodecode_user.permissions[section]: + <tr> + <td>${k}</td> + <td> + %if section == 'global': + ${', '.join(c.rhodecode_user.permissions[section])} + %else: + <span class="perm_tag ${c.rhodecode_user.permissions[section].get(k).split('.')[-1] }">${c.rhodecode_user.permissions[section].get(k)}</span> + %endif + </td> + </tr> + %endfor + </tbody> + </table> + </div> + %endfor </div> </div> <script type="text/javascript"> -var nodes = YUQ('div.table tr td a.repo_name'); -var target = 'q_filter'; -var func = function(node){ - return node.parentNode.parentNode; +var filter_activate = function(){ + var nodes = YUQ('#my tr td a.repo_name'); + var func = function(node){ + return node.parentNode.parentNode.parentNode.parentNode; + } + q_filter('q_filter',YUQ('#my tr td a.repo_name'),func); } -q_filter(target,nodes,func); + +YUE.on('show_my','click',function(e){ + YUD.setStyle('perms','display','none'); + YUD.setStyle('my','display',''); + YUD.get('q_filter').removeAttribute('disabled'); + filter_activate(); + YUE.preventDefault(e); +}) +YUE.on('show_perms','click',function(e){ + YUD.setStyle('my','display','none'); + YUD.setStyle('perms','display',''); + YUD.setAttribute('q_filter','disabled','disabled'); + YUE.preventDefault(e); +}) + + +// main table sorting +var myColumnDefs = [ + {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"}, + {key:"name",label:"${_('Name')}",sortable:true, + sortOptions: { sortFunction: nameSort }}, + {key:"tip",label:"${_('Tip')}",sortable:true, + sortOptions: { sortFunction: revisionSort }}, + {key:"action1",label:"",sortable:false}, + {key:"action2",label:"",sortable:false}, +]; + +var myDataSource = new YAHOO.util.DataSource(YUD.get("repos_list")); +myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE; +myDataSource.responseSchema = { + fields: [ + {key:"menu"}, + {key:"name"}, + {key:"tip"}, + {key:"action1"}, + {key:"action2"}, + ] +}; +var trans_defs = { + sortedBy:{key:"name",dir:"asc"}, + MSG_SORTASC:"${_('Click to sort ascending')}", + MSG_SORTDESC:"${_('Click to sort descending')}", + MSG_EMPTY:"${_('No records found.')}", + MSG_ERROR:"${_('Data error.')}", + MSG_LOADING:"${_('Loading...')}", +} +var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,trans_defs); +myDataTable.subscribe('postRenderEvent',function(oArgs) { + tooltip_activate(); + quick_repo_menu(); + filter_activate(); +}); + +var permsColumnDefs = [ + {key:"name",label:"${_('Name')}",sortable:true, sortOptions: { sortFunction: permNameSort }}, + {key:"perm",label:"${_('Permission')}",sortable:false,}, +]; + +// perms repos table +var myDataSource2 = new YAHOO.util.DataSource(YUD.get("tbl_list_repositories")); +myDataSource2.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE; +myDataSource2.responseSchema = { + fields: [ + {key:"name"}, + {key:"perm"}, + ] +}; + +new YAHOO.widget.DataTable("tbl_list_wrap_repositories", permsColumnDefs, myDataSource2, trans_defs); + +//perms groups table +var myDataSource3 = new YAHOO.util.DataSource(YUD.get("tbl_list_repositories_groups")); +myDataSource3.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE; +myDataSource3.responseSchema = { + fields: [ + {key:"name"}, + {key:"perm"}, + ] +}; + +new YAHOO.widget.DataTable("tbl_list_wrap_repositories_groups", permsColumnDefs, myDataSource3, trans_defs); + </script> </%def>
--- a/rhodecode/templates/journal/journal.html Tue Mar 13 04:24:45 2012 +0200 +++ b/rhodecode/templates/journal/journal.html Tue Mar 13 06:36:53 2012 +0200 @@ -48,7 +48,7 @@ <tr> <th></th> <th class="left">${_('Name')}</th> - <th class="left">${_('Tip')}</th> + <th class="left">${_('Revision')}</th> <th class="left">${_('Action')}</th> <th class="left">${_('Action')}</th> </thead>