1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-07-31 22:57:47 +00:00

added 'recent changes' to group_info & improved 'tabs'

This commit is contained in:
llj 2013-01-25 19:15:48 +08:00 committed by zhengxie
parent bca4281ffd
commit bc51aaccbe
11 changed files with 162 additions and 63 deletions

View File

@ -69,8 +69,15 @@
{% endblock %}
{% block right_panel %}
<h3>{% trans "Libraries" %}</h3>
<button id="repo-create">{% trans "New Library" %}</button>
<div id="tabs">
<div class="ovhd">
<ul class="fleft" id="tabs-nav">
<li><a href="#grp-repos">{% trans "Libraries" %}</a></li>
<li class="long-item"><a href="#grp-repos-commits">{% trans "Recent Changes" %}</a></li>
</ul>
<button id="repo-create" class="fright">{% trans "New Library" %}</button>
</div>
<div id="grp-repos" class="hide">
{% if repos %}
<table>
<tr>
@ -88,7 +95,7 @@
{% if repo.user_perm == 'rw' %}
<img src="{{MEDIA_URL}}img/sync-folder-20.png" title="{% trans "Read-Write" %}" alt="{% trans "directory icon" %}" />
{% else %}
<img src="{{MEDIA_URL}}img/folder-no-write-20.png" alt="{% trans "directory icon" %}" />
<img src="{{MEDIA_URL}}img/folder-no-write-20.png" title="{% trans "Read-Only" %}" alt="{% trans "directory icon" %}" />
{% endif %}
</td>
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/">{{ repo.props.name }}</a></td>
@ -117,6 +124,57 @@
<p>{% trans "Libraries shared as writable can be downloaded and synced by other group members. Read only libraries can only be downloaded, updates by others will not be uploaded." %}</p>
</div>
{% endif %}
</div>
<div id="grp-repos-commits" class="hide">
{% if recent_commits|length > 0 %}
<table>
<tr>
<th width="5%"></th>
<th width="17%">{% trans "Library" %}</th>
<th width="15%">{% trans "Time" %}</th>
<th width="63%">{% trans "Description" %}</th>
</tr>
{% for cmt in recent_commits %}
<tr>
<td class="icon-container">
{% if cmt.tp == 'A' or cmt.tp == 'D' %}
{% if cmt.tp == 'A' %}
<img src="{{MEDIA_URL}}img/plus-16.png" alt="" />
{% else %}
<img src="{{MEDIA_URL}}img/minus-16.png" alt="" />
{% endif %}
{% else %}
<img src="{{MEDIA_URL}}img/modify-16.png" alt="" />
{% endif %}
</td>
<td><a href="{{ SITE_ROOT }}repo/{{ cmt.repo.props.id }}/">{{ cmt.repo.props.name }}</a></td>
<td>{{cmt.props.ctime|translate_seahub_time}}</td>
<td>
{{cmt.props.desc|translate_commit_desc}}
{% if cmt.repo.encrypted %}
<a class="lsch-encrypted"{% if cmt.repo.password_set %} data-passwordset="true"{% endif %} href="#" data-url="{% url 'repo_history_changes' cmt.repo.id %}?commit_id={{ cmt.id }}" data-repoid="{{cmt.repo.id}}" data-reponame="{{cmt.repo.name}}" data-time="{{ cmt.props.ctime|tsstr_sec }}">{% trans 'Details' %}</a>
{% else %}
<a class="lsch" href="#" data-url="{% url 'repo_history_changes' cmt.repo.id %}?commit_id={{ cmt.id }}" data-time="{{ cmt.props.ctime|tsstr_sec }}">{% trans 'Details' %}</a>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
<form id="repo-decrypt-form" class="simple-input-popup hide">
<h3>{% trans 'Library' %} <span class="op-target"></span> {% trans 'is encrypted' %}</h3>
<input type="hidden" name="repo_id" value="" />
<label>{% trans 'Password' %}</label><br />
<input type="password" name="password" maxlength="15" class="long-input" />
<p class="tip">{% trans 'The password will be kept in the server for only 1 hour.' %}</p>
<p class="error"></p>
<input type="submit" class="submit" value="{% trans 'Submit' %}" />
<button class="simplemodal-close">{% trans 'Cancel' %}</button>
</form>
{% endif %}
</div>
</div>
<div id="group-reply">
<h3>{% trans "Messages" %}</h3>
@ -287,5 +345,21 @@ $('#grp-member-add').click(function() {
{% with post_url=member_add_url %}
{% include 'group/grpmember_add_js.html' %}
{% endwith %}
{% if recent_commits %}
{% include 'snippets/list_commit_detail.html' %}
$('.lsch-encrypted').click(function() {
if ($(this).data('passwordset')) {
listCommitDetails($(this).data('url'), $(this).data('time'));
} else {
var form = $('#repo-decrypt-form');
form.find('input[name="repo_id"]').val($(this).data('repoid'));
form.find('.op-target').html($(this).data('reponame'));
form.data({'url':$(this).data('url'), 'time':$(this).data('time')}).modal({appendTo:'#main'});
}
return false;
});
{% include 'snippets/repo_decrypt_js.html' %}
{% endif %}
</script>
{% endblock %}

View File

@ -17,7 +17,7 @@ from django.views.generic.base import TemplateResponseMixin
from django.views.generic.edit import BaseFormView, FormMixin
from auth.decorators import login_required
from seaserv import ccnet_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, \
from seaserv import ccnet_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, seafserv_rpc, \
get_repo, get_group_repos, check_group_staff, get_commits, is_group_user, \
get_personal_groups_by_user, get_group, get_group_members, \
get_personal_groups, create_org_repo, get_org_group_repos, \
@ -210,10 +210,23 @@ def render_group_info(request, group_id, form):
request.user.username)
else:
repos = get_group_repos(group_id_int, request.user.username)
recent_commits = []
for repo in repos:
repo.user_perm = check_permission(repo.props.id, request.user.username)
recent_commits += get_commits(repo.props.id, 0, 10)
recent_commits.sort(lambda x, y : cmp(y.props.ctime, x.props.ctime))
recent_commits = recent_commits[0:15]
for cmt in recent_commits:
cmt.repo = get_repo(cmt.props.repo_id)
if cmt.repo:
cmt.repo.password_set = seafserv_rpc.is_passwd_set(cmt.props.repo_id, request.user.username)
else:
del cmt
# get type
cmt.tp = cmt.props.desc[0]
"""group messages"""
# Make sure page request is an int. If not, deliver first page.
try:
@ -267,6 +280,7 @@ def render_group_info(request, group_id, form):
"common_members": common_members,
"members": members,
"repos": repos,
"recent_commits": recent_commits,
"group_id": group_id,
"group" : group,
"is_staff": is_staff,

View File

@ -756,34 +756,38 @@ textarea:-moz-placeholder {/* for FF */
width:262px;
margin-bottom:10px;
}
#repos-tabs {
#tabs {
font-size:1em;
padding:0;
border:0;
min-height:150px;
margin-bottom:75px;
}
#repos-tabs .ui-tabs-nav {
#tabs-nav {
padding:0;
}
#repos-tabs .ui-tabs-nav li {
#tabs-nav li {
float:left;
border:0;
background:none;
}
#repos-tabs .ui-tabs-nav li a {
#tabs-nav .long-item {
margin-left:.4em;
}
#tabs-nav li a {
color:#8A948F;
font-weight:normal;
padding:.3em 0;
margin-right:0.6em;
}
#repos-tabs .ui-tabs-nav .ui-state-active a {
#tabs-nav .ui-state-active a {
color:#DD4B39;
border-bottom:2px solid #DD4B39;
}
#repos-tabs .ui-tabs-nav li a:hover {
#tabs-nav li a:hover {
color:#DD4B39;
}
#repos-tabs .ui-tabs-panel {
#tabs .ui-tabs-panel {
padding:0;
}
.event-item {
@ -1241,6 +1245,9 @@ textarea:-moz-placeholder {/* for FF */
}
/* group message and replies */
#grp-repos-commits td {
padding:6px 3px;
}
#group-reply,
.new-reply-msg-list {
width:602px;

BIN
media/img/minus-16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

BIN
media/img/modify-16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 B

BIN
media/img/plus-16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

View File

@ -318,3 +318,6 @@ function trimByChar(str, n) {
}
return new_str;
}
$('#tabs').tabs({cookie:{expires:1}});
$('#tabs-nav a').focus(function() { $(this).blur(); });

View File

@ -55,45 +55,4 @@ $('#events-more').click(function() {
$(this).addClass('hide');
reqEvents($(this).data('start'));
});
$('#repo-decrypt-form').submit(function() {
var form = $(this);
var form_id = form.attr('id');
var input_password = form.find('input[name="password"]');
var repo_id = form.find('input[name="repo_id"]').val();
var password = input_password.val();
var cur_data = form.data();
if (!password) {
apply_form_error(form_id, '{% trans "Password is required." %}');
} else {
apply_form_error(form_id, '');
$.ajax({
url: '{% url repo_set_password %}',
type: 'POST',
dataType: 'json',
cache: 'false',
beforeSend: prepareCSRFToken,
data: {
repo_id: repo_id,
password: password,
username: '{{request.user.username}}'
},
success: function(data) {
$.modal.close();
$('.lsch-encrypted[data-repoid="' + repo_id + '"]').attr('data-passwordset', true);
listCommitDetails(cur_data.url, cur_data.time);
},
error: function(jqXHR, textStatus, errorThrown) {
var err = '';
if (jqXHR.responseText) {
err = $.parseJSON(jqXHR.responseText).error;
} else {
err = '{% trans "Failed. Please check the network." %}';
}
apply_form_error(form_id, err);
input_password.val('');
}
});
}
return false;
});
{% include 'snippets/repo_decrypt_js.html' %}

View File

@ -1,16 +1,16 @@
{% load seahub_tags i18n %}
{% load url from future %}
<h3>{% trans "Libraries" %}</h3>
<div id="repos-tabs">
<div id="tabs">
<div class="ovhd">
<ul class="fleft">
<li><a href="#my-own-repos" onfocus="this.blur()">{% trans "Mine" %}</a></li>
<li><a href="#repos-shared-to-me" onfocus="this.blur()">{% trans "Shared" %}</a></li>
<li><a href="#starred-files" onfocus="this.blur()">{% trans "Starred" %}</a></li>
<ul class="fleft" id="tabs-nav">
<li><a href="#my-own-repos">{% trans "Mine" %}</a></li>
<li><a href="#repos-shared-to-me">{% trans "Shared" %}</a></li>
<li><a href="#starred-files">{% trans "Starred" %}</a></li>
</ul>
<button id="repo-create" class="fright">{% trans "New Library" %}</button>
</div>
<div id="my-own-repos">
<div id="my-own-repos" class="hide">
{% if owned_repos %}
<table>
<tr>
@ -48,7 +48,7 @@
</div>
{% endif %}
</div>
<div id="repos-shared-to-me">
<div id="repos-shared-to-me" class="hide">
{% if in_repos %}
<table>
<tr>
@ -93,7 +93,7 @@
</div>
{% endif %}
</div>
<div id="starred-files">
<div id="starred-files" class="hide">
{% if starred_files %}
<table>
<tr>

View File

@ -1,5 +1,4 @@
{% load seahub_tags avatar_tags i18n %}
$('#repos-tabs').tabs({cookie:{expires:1}});
$(function() {
//repo-share-form share-list autocomplete
var share_list = [], contact_email, group_name, group_name_py;

View File

@ -0,0 +1,43 @@
{% load i18n %}
{% load url from future %}
$('#repo-decrypt-form').submit(function() {
var form = $(this);
var form_id = form.attr('id');
var input_password = form.find('input[name="password"]');
var repo_id = form.find('input[name="repo_id"]').val();
var password = input_password.val();
var cur_data = form.data();
if (!password) {
apply_form_error(form_id, '{% trans "Password is required." %}');
} else {
apply_form_error(form_id, '');
$.ajax({
url: '{% url 'repo_set_password' %}',
type: 'POST',
dataType: 'json',
cache: 'false',
beforeSend: prepareCSRFToken,
data: {
repo_id: repo_id,
password: password,
username: '{{request.user.username}}'
},
success: function(data) {
$.modal.close();
$('.lsch-encrypted[data-repoid="' + repo_id + '"]').attr('data-passwordset', true);
listCommitDetails(cur_data.url, cur_data.time);
},
error: function(jqXHR, textStatus, errorThrown) {
var err = '';
if (jqXHR.responseText) {
err = $.parseJSON(jqXHR.responseText).error;
} else {
err = '{% trans "Failed. Please check the network." %}';
}
apply_form_error(form_id, err);
input_password.val('');
}
});
}
return false;
});