1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-18 00:00:00 +00:00

Merge branch 'lj_grpmsg' into groupmsg-rebase

Conflicts:
	group/models.py
	group/templates/group/group_info.html
	group/views.py
	media/css/seahub.css
This commit is contained in:
xiez
2012-06-26 19:35:07 +08:00
2 changed files with 152 additions and 158 deletions

View File

@@ -67,60 +67,54 @@
{% endif %}
<div id="group-reply">
<h3>留言板 (全部{{ msg_cnt }}条)</h3>
<form action="" method="post">
<textarea name="message" id="message">{{ form.data.message }}</textarea><br />
<input type="submit" value="留言" class="submit" />
{% for error in form.message.errors %}
<span class="error">{{ error|escape }}</span>
{% endfor %}
</form>
<h3>留言板<span class="msg-num">(全部{{ msg_cnt }}条)</span></h3>
<form action="" method="post">
<textarea name="message" id="message">{{ form.data.message }}</textarea><br />
{% for error in form.message.errors %}
<p class="error">{{ error|escape }}</p>
{% endfor %}
<input type="submit" value="提交" class="submit" />
</form>
{% if group_msgs %}
<ul class="replies">
{% for msg in group_msgs %}
{% avatar msg.from_email 48 %}
<li id="li{{ msg.id }}">
<span class="from">
{{ msg.from_email }}
</span>
<span class="ts">
{{ msg.timestamp|date:"Y-m-d H:i" }}
</span>
<div class="msg-op">
<span class="msg">{{ msg.message }}</span>
<span>
<a class="op reply" href="#" data="{{ msg.id }}" >回复({{ msg.reply_cnt }}</a>
<a class="op replyclose" href="#" data="{{ msg.id }}" style="display:none; " >收起回复</a>
</span>
</div>
<div class="reply-list"></div>
<form class="hide reply-form" method="post" action="">
<input type="hidden" name="msg_id" value="{{ msg.id }}"/>
<input type="text" name="message" />
<input type="submit" value="回复" />
</form>
</li>
{% endfor %}
</ul>
<ul class="msg-list">
{% for msg in group_msgs %}
<li id="li{{ msg.id }}" class="msg w100 ovhd">
<div class="pic fleft">
<a href="{{ SITE_ROOT }}profile/{{ msg.from_email }}/">{% avatar msg.from_email 48 %}</a>
</div>
<div class="txt fright">
<div class="msg-hd">
<span class="time">{{ msg.timestamp|date:"Y-m-d H:i" }}</span>
<a href="{{ SITE_ROOT }}profile/{{ msg.from_email }}/">{{ msg.from_email|email2nickname }}</a>
</div>
<div class="msg-bd">
<p>{{ msg.message }}</p>
<a class="reply op" href="#" data="{{ msg.id }}" >回复({{ msg.reply_cnt }}</a>
<a class="replyclose op hide" href="#" data="{{ msg.id }}">收起回复</a>
<ul class="reply-list hide"></ul>
<form class="reply-form hide" method="post" action="">
<input type="hidden" name="msg_id" value="{{ msg.id }}" />
<input type="text" name="message" class="text-input" />
<input type="submit" class="submit" value="回复" />
<p class="error hide">输入不能为空且应少于150个字符。</p>
</form>
</div>
</div>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
<div id="paginator">
{% if current_page != 1 %}
<a href="{{ SITE_ROOT }}group/{{ group.id}}/?page={{ prev_page }}&per_page={{ per_page }}">上一页</a>
{% endif %}
{% if page_next %}
<a href="{{ SITE_ROOT }}group/{{ group.id }}/?page={{ next_page }}&per_page={{ per_page }}">下一页</a>
{% endif %}
<div id="paginator">
{% if current_page != 1 %}
<a href="{{ SITE_ROOT }}group/{{ group.id}}/?page={{ prev_page }}&per_page={{ per_page }}">上一页</a>
{% endif %}
{% if page_next %}
<a href="{{ SITE_ROOT }}group/{{ group.id }}/?page={{ next_page }}&per_page={{ per_page }}">下一页</a>
{% endif %}
</div>
</div>
</div>
<div id="user-profile" class="user-profile ovhd hide"></div>
@@ -185,7 +179,7 @@
window.open($(this).attr('data'));
});
//show profile when mouse over
//show profile when mouse over
var Hide_profile = '';
$('.group-member').hover(
function() {
@@ -234,55 +228,37 @@ $('#user-profile').hover(
}
);
$('.reply').each(function() {
$(this).click(function() {
var msg_id = $(this).attr('data');
$.ajax({
url: "{{ SITE_ROOT }}group/reply/"+msg_id+"/",
dataType: 'json',
cache: false,
contentType: 'application/json; charset=utf-8',
success: function(data) {
var str_con = '';
var show = function(data_) {
for (var i = 0, len = data_.length; i < len; i++) {
var msg = data_[i]['fields']['message'];
str_con += '<p>';
str_con += msg;
str_con += '</p>';
}
};
show(data);
var s = '#li' + msg_id + ' > .reply-list';
var s1 = '#li' + msg_id + ' > form';
$(s).html(str_con);
$(s).show();
$(s1).removeClass('hide');
$('.reply').click(function() {
var msg_id = $(this).attr('data');
var msg_bd = $(this).parent();
$.ajax({
url: '{{ SITE_ROOT }}group/reply/' + msg_id + '/',
dataType: 'json',
cache: false,
contentType: 'application/json; charset=utf-8',
success: function(data) {
if (data.length > 0) {
var str = '';
for (var i = 0, len = data.length; i < len; i++) {
str += '<li>' + data[i]['fields']['message'] + ' -- ' + '<a href="{{ SITE_ROOT }}profile/' + data[i]['fields']['from_email'] + '/">' + data[i]['fields']['from_email'] + '</a></li>';
}
msg_bd.children('.reply-list').html(str).removeClass('hide');
}
});
$(this).hide();
var s3 = '#li' + msg_id + ' a~a';
$(s3).show();
return false;
}
});
msg_bd.children('.reply-form').removeClass('hide');
$(this).addClass('hide');
msg_bd.children('.replyclose').removeClass('hide');
return false;
});
$('.replyclose').each(function() {
$(this).click(function() {
var msg_id = $(this).attr('data');
var s1 = '#li' + msg_id + ' a';
var s2 = '#li' + msg_id + ' > .reply-list';
var s3 = '#li' + msg_id + ' > form';
var s4 = '#li' + msg_id + ' a~a';
$(s2).hide();
$(s3).addClass('hide');
$(s1).show();
$(s4).hide();
return false;
});
$('.replyclose').click(function() {
var msg_bd = $(this).parent();
msg_bd.children('.reply-list').addClass('hide');
msg_bd.children('.reply-form').addClass('hide');
$(this).addClass('hide');
msg_bd.children('.reply').removeClass('hide');
return false;
});
$('.reply-form').each(function(){
@@ -293,59 +269,51 @@ $('#user-profile').hover(
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
}
return cookieValue;
}
return cookieValue;
}
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
}
}
});
var $form = $( this ),
m_id = $form.find( 'input[name="msg_id"]' ).val(),
m = $form.find( 'input[name="message"]' ).val();
$.ajax({
type: "POST",
url: "{{ SITE_ROOT }}group/reply/"+m_id+"/",
dataType: 'json',
cache: false,
contentType: 'application/json; charset=utf-8',
data: "message="+m,
success: function(data) {
var str_con = '';
var show = function(data_) {
for (var i = 0, len = data_.length; i < len; i++) {
var msg = data_[i]['fields']['message'];
str_con += '<p>';
str_con += msg;
str_con += '</p>';
var form = $(this),
m_id = form.children('input[name="msg_id"]').val(),
m = $.trim(form.children('input[name="message"]').val()),
msg_bd = form.parent();
if (m && m.length <= 150) {
$.ajax({
type: "POST",
url: "{{ SITE_ROOT }}group/reply/"+m_id+"/",
dataType: 'json',
cache: false,
contentType: 'application/json; charset=utf-8',
data: "message="+m,
success: function(data) {
var str = '';
for (var i = 0, len = data.length; i < len; i++) {
str += '<li>' + data[i]['fields']['message'] + ' -- ' + '<a href="{{ SITE_ROOT }}profile/' + data[i]['fields']['from_email'] + '/">' + data[i]['fields']['from_email'] + '</a></li>';
}
};
show(data);
var s = '#li' + m_id + ' > .reply-list';
var s1 = '#li' + m_id + ' > form';
$(s1).removeClass('hide');
$(s).html(str_con);
var s2 = '#li' + m_id + ' .reply';
var t = '回复(' + data.length+ '';
$(s2).text(t);
$form.find('input[name="message"]').val("");
}
});
msg_bd.children('.reply-list').html(str).attr('class', 'reply-list');
form.children('input[name="message"]').val('');
form.children('.error').attr('Class' , 'error hide');
msg_bd.children('.reply').html('回复(' + data.length+ '');
}
});
} else {
form.children('.error').removeClass('hide');
}
return false;
});
});

View File

@@ -448,29 +448,55 @@ h2.repo-history {
}
/* group message and replies */
#group-reply textarea{
width: 680px;
height: 100px;
#group-reply {
margin-top:50px;
}
#group-reply ul {
margin-top: 20px;
.msg-num {
font-size:12px;
color:#333;
}
#group-reply li {
border-bottom: 1px dashed #999;
overflow: hidden;
min-height: 55px;
#message {
width: 600px;
height: 80px;
margin-top: 4px;
}
#group-reply .reply-list {
padding-bottom: 6px;
#group-reply .submit {
margin-top:3px;
}
#group-reply .from {
color: #880088;
.msg-list {
width:602px;
margin-top: 10px;
}
#group-reply .ts {
.msg {
word-wrap: break-word;
padding: 10px 0 5px;
min-height: 48px;
_min-height: 48px;
}
.msg .txt {
width:540px;
}
.msg-hd {
padding:2px 3px;
background:#fafafa;
margin-bottom:2px;
}
.msg-hd .time {
color: #808080;
font-size: 10px;
}
#group-reply .msg-op .msg {
display: inline-block;
.msg-bd .op:hover {
text-decoration:none;
}
.reply-list {
color:#444;
width:90%;
padding:2px 0 2px 0;
}
.reply-list a {
color:#666;
font-weight:normal;
font-size:12px;
}
.reply-form .text-input {
width:82%;
}