aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Kuzminski <marcin@python-works.com>2012-03-13 06:36:53 +0200
committerMarcin Kuzminski <marcin@python-works.com>2012-03-13 06:36:53 +0200
commit5c81f3f2463f85031d3d166995a92390298aba56 (patch)
tree7a8670e213d489020fb91ae40a2e892ca51bd6b5
parentfd4a9428c092b26fb65fc58f7b4f9e0912ac169a (diff)
implemented #377 Users view own permissions
- my account page uses YUI DT by default now --HG-- branch : beta
-rw-r--r--docs/changelog.rst1
-rw-r--r--rhodecode/public/css/style.css41
-rw-r--r--rhodecode/public/js/rhodecode.js12
-rw-r--r--rhodecode/templates/admin/users/user_edit_my_account.html176
-rw-r--r--rhodecode/templates/journal/journal.html2
5 files changed, 196 insertions, 36 deletions
diff --git a/docs/changelog.rst b/docs/changelog.rst
index b886c8e8..9859a9c6 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -19,6 +19,7 @@ news
- 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
+++++
diff --git a/rhodecode/public/css/style.css b/rhodecode/public/css/style.css
index 3958cf2c..7507331a 100644
--- a/rhodecode/public/css/style.css
+++ b/rhodecode/public/css/style.css
@@ -4155,6 +4155,47 @@ form.comment-inline-form {
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
diff --git a/rhodecode/public/js/rhodecode.js b/rhodecode/public/js/rhodecode.js
index eb045480..47e85ae8 100644
--- a/rhodecode/public/js/rhodecode.js
+++ b/rhodecode/public/js/rhodecode.js
@@ -700,6 +700,18 @@ var nameSort = function(a, b, desc, field) {
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));
diff --git a/rhodecode/templates/admin/users/user_edit_my_account.html b/rhodecode/templates/admin/users/user_edit_my_account.html
index d5f399d8..f3a74260 100644
--- a/rhodecode/templates/admin/users/user_edit_my_account.html
+++ b/rhodecode/templates/admin/users/user_edit_my_account.html
@@ -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>
diff --git a/rhodecode/templates/journal/journal.html b/rhodecode/templates/journal/journal.html
index 05472449..af979d35 100644
--- a/rhodecode/templates/journal/journal.html
+++ b/rhodecode/templates/journal/journal.html
@@ -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>