forked from GNUsocial/gnu-social
Merge branch '1.0.x' into directory
This commit is contained in:
commit
09c90edbb5
@ -195,7 +195,7 @@ class ShowgroupAction extends GroupDesignAction
|
|||||||
$notice = $this->group->getNotices(($this->page-1)*NOTICES_PER_PAGE,
|
$notice = $this->group->getNotices(($this->page-1)*NOTICES_PER_PAGE,
|
||||||
NOTICES_PER_PAGE + 1);
|
NOTICES_PER_PAGE + 1);
|
||||||
|
|
||||||
$nl = new NoticeList($notice, $this);
|
$nl = new ThreadedNoticeList($notice, $this);
|
||||||
$cnt = $nl->show();
|
$cnt = $nl->show();
|
||||||
|
|
||||||
$this->pagination($this->page > 1,
|
$this->pagination($this->page > 1,
|
||||||
|
@ -186,6 +186,10 @@ class Profile extends Memcached_DataObject
|
|||||||
$notice = $this->getNotices(0, 1);
|
$notice = $this->getNotices(0, 1);
|
||||||
|
|
||||||
if ($notice->fetch()) {
|
if ($notice->fetch()) {
|
||||||
|
if ($notice instanceof ArrayWrapper) {
|
||||||
|
// hack for things trying to work with single notices
|
||||||
|
return $notice->_items[0];
|
||||||
|
}
|
||||||
return $notice;
|
return $notice;
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
|
20
js/util.js
20
js/util.js
@ -575,16 +575,16 @@ var SN = { // StatusNet
|
|||||||
|
|
||||||
// Find the threaded replies view we'll be adding to...
|
// Find the threaded replies view we'll be adding to...
|
||||||
var list = notice.closest('.notices');
|
var list = notice.closest('.notices');
|
||||||
if (list.hasClass('threaded-notices')) {
|
if (list.hasClass('threaded-replies')) {
|
||||||
// We're replying to a reply; use reply form on the end of this list.
|
// We're replying to a reply; use reply form on the end of this list.
|
||||||
// We'll add our form at the end of this; grab the root notice.
|
// We'll add our form at the end of this; grab the root notice.
|
||||||
parentNotice = list.closest('.notice');
|
parentNotice = list.closest('.notice');
|
||||||
} else {
|
} else {
|
||||||
// We're replying to a parent notice; pull its threaded list
|
// We're replying to a parent notice; pull its threaded list
|
||||||
// and we'll add on the end of it. Will add if needed.
|
// and we'll add on the end of it. Will add if needed.
|
||||||
list = $('ul.threaded-notices', notice);
|
list = $('ul.threaded-replies', notice);
|
||||||
if (list.length == 0) {
|
if (list.length == 0) {
|
||||||
list = $('<ul class="notices threaded-notices xoxo"></ul>');
|
list = $('<ul class="notices threaded-replies xoxo"></ul>');
|
||||||
notice.append(list);
|
notice.append(list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -654,8 +654,14 @@ var SN = { // StatusNet
|
|||||||
var orig_li = $('li', data)[0];
|
var orig_li = $('li', data)[0];
|
||||||
if (orig_li) {
|
if (orig_li) {
|
||||||
var li = document._importNode(orig_li, true);
|
var li = document._importNode(orig_li, true);
|
||||||
replyItem.replaceWith(li);
|
var id = $(li).attr('id');
|
||||||
SN.U.NoticeInlineReplyPlaceholder(parentNotice);
|
if ($("#"+id).length == 0) {
|
||||||
|
replyItem.replaceWith(li);
|
||||||
|
SN.U.NoticeInlineReplyPlaceholder(parentNotice);
|
||||||
|
} else {
|
||||||
|
// Realtime came through before us...
|
||||||
|
replyItem.remove();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -726,7 +732,7 @@ var SN = { // StatusNet
|
|||||||
},
|
},
|
||||||
|
|
||||||
NoticeInlineReplyPlaceholder: function(notice) {
|
NoticeInlineReplyPlaceholder: function(notice) {
|
||||||
var list = notice.find('ul.threaded-notices');
|
var list = notice.find('ul.threaded-replies');
|
||||||
var placeholder = $('<li class="notice-reply-placeholder">' +
|
var placeholder = $('<li class="notice-reply-placeholder">' +
|
||||||
'<input class="placeholder">' +
|
'<input class="placeholder">' +
|
||||||
'</li>');
|
'</li>');
|
||||||
@ -744,7 +750,7 @@ var SN = { // StatusNet
|
|||||||
* Uses 'live' rather than 'bind', so applies to future as well as present items.
|
* Uses 'live' rather than 'bind', so applies to future as well as present items.
|
||||||
*/
|
*/
|
||||||
NoticeInlineReplySetup: function() {
|
NoticeInlineReplySetup: function() {
|
||||||
$('.threaded-notices').each(function() {
|
$('.threaded-replies').each(function() {
|
||||||
var list = $(this);
|
var list = $(this);
|
||||||
var notice = list.closest('.notice');
|
var notice = list.closest('.notice');
|
||||||
SN.U.NoticeInlineReplyPlaceholder(notice);
|
SN.U.NoticeInlineReplyPlaceholder(notice);
|
||||||
|
2
js/util.min.js
vendored
2
js/util.min.js
vendored
File diff suppressed because one or more lines are too long
@ -287,6 +287,18 @@ class FavCommand extends Command
|
|||||||
function handle($channel)
|
function handle($channel)
|
||||||
{
|
{
|
||||||
$notice = $this->getNotice($this->other);
|
$notice = $this->getNotice($this->other);
|
||||||
|
|
||||||
|
$fave = new Fave();
|
||||||
|
$fave->user_id = $this->user->id;
|
||||||
|
$fave->notice_id = $notice->id;
|
||||||
|
$fave->find();
|
||||||
|
|
||||||
|
if ($fave->fetch()) {
|
||||||
|
// TRANS: Error message text shown when a favorite could not be set because it has already been favorited.
|
||||||
|
$channel->error($this->user, _('Could not create favorite: already favorited.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$fave = Fave::addNew($this->user->getProfile(), $notice);
|
$fave = Fave::addNew($this->user->getProfile(), $notice);
|
||||||
|
|
||||||
if (!$fave) {
|
if (!$fave) {
|
||||||
@ -300,7 +312,7 @@ class FavCommand extends Command
|
|||||||
|
|
||||||
$other = User::staticGet('id', $notice->profile_id);
|
$other = User::staticGet('id', $notice->profile_id);
|
||||||
|
|
||||||
if ($other && $other->id != $user->id) {
|
if ($other && $other->id != $this->user->id) {
|
||||||
if ($other->email && $other->emailnotifyfav) {
|
if ($other->email && $other->emailnotifyfav) {
|
||||||
mail_notify_fave($other, $this->user, $notice);
|
mail_notify_fave($other, $this->user, $notice);
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ class ThreadedNoticeList extends NoticeList
|
|||||||
{
|
{
|
||||||
$this->out->elementStart('div', array('id' =>'notices_primary'));
|
$this->out->elementStart('div', array('id' =>'notices_primary'));
|
||||||
$this->out->element('h2', null, _('Notices'));
|
$this->out->element('h2', null, _('Notices'));
|
||||||
$this->out->elementStart('ol', array('class' => 'notices xoxo'));
|
$this->out->elementStart('ol', array('class' => 'notices threaded-notices xoxo'));
|
||||||
|
|
||||||
$cnt = 0;
|
$cnt = 0;
|
||||||
$conversations = array();
|
$conversations = array();
|
||||||
@ -182,7 +182,7 @@ class ThreadedNoticeListItem extends NoticeListItem
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($notices) {
|
if ($notices) {
|
||||||
$this->out->elementStart('ul', 'notices threaded-notices xoxo');
|
$this->out->elementStart('ul', 'notices threaded-replies xoxo');
|
||||||
if ($moreCutoff) {
|
if ($moreCutoff) {
|
||||||
$item = new ThreadedNoticeListMoreItem($moreCutoff, $this->out);
|
$item = new ThreadedNoticeListMoreItem($moreCutoff, $this->out);
|
||||||
$item->show();
|
$item->show();
|
||||||
|
9
plugins/Realtime/Makefile
Normal file
9
plugins/Realtime/Makefile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
.fake: all clean
|
||||||
|
|
||||||
|
all: realtimeupdate.min.js
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f realtimeupdate.min.js
|
||||||
|
|
||||||
|
realtimeupdate.min.js: realtimeupdate.js
|
||||||
|
yui-compressor realtimeupdate.js > realtimeupdate.min.js
|
@ -166,9 +166,44 @@ RealtimeUpdate = {
|
|||||||
var noticeItem = RealtimeUpdate.makeNoticeItem(data);
|
var noticeItem = RealtimeUpdate.makeNoticeItem(data);
|
||||||
var noticeItemID = $(noticeItem).attr('id');
|
var noticeItemID = $(noticeItem).attr('id');
|
||||||
|
|
||||||
$("#notices_primary .notices").prepend(noticeItem);
|
var list = $("#notices_primary .notices:first")
|
||||||
$("#notices_primary .notice:first").css({display:"none"});
|
var prepend = true;
|
||||||
$("#notices_primary .notice:first").fadeIn(1000);
|
|
||||||
|
var threaded = list.hasClass('threaded-notices');
|
||||||
|
if (threaded && data.in_reply_to_status_id) {
|
||||||
|
// aho!
|
||||||
|
var parent = $('#notice-' + data.in_reply_to_status_id);
|
||||||
|
if (parent.length == 0) {
|
||||||
|
// @todo fetch the original, insert it, and finish the rest
|
||||||
|
} else {
|
||||||
|
// Check the parent notice to make sure it's not a reply itself.
|
||||||
|
// If so, use it's parent as the parent.
|
||||||
|
var parentList = parent.closest('.notices');
|
||||||
|
if (parentList.hasClass('threaded-replies')) {
|
||||||
|
parent = parentList.closest('.notice');
|
||||||
|
}
|
||||||
|
list = parent.find('.threaded-replies');
|
||||||
|
if (list.length == 0) {
|
||||||
|
list = $('<ul class="notices threaded-replies xoxo"></ul>');
|
||||||
|
parent.append(list);
|
||||||
|
}
|
||||||
|
prepend = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var newNotice = $(noticeItem);
|
||||||
|
if (prepend) {
|
||||||
|
list.prepend(newNotice);
|
||||||
|
} else {
|
||||||
|
var placeholder = list.find('li.notice-reply-placeholder')
|
||||||
|
if (placeholder.length > 0) {
|
||||||
|
newNotice.insertBefore(placeholder)
|
||||||
|
} else {
|
||||||
|
newNotice.appendTo(list);
|
||||||
|
SN.U.NoticeInlineReplyPlaceholder(parent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newNotice.css({display:"none"}).fadeIn(1000);
|
||||||
|
|
||||||
SN.U.NoticeReplyTo($('#'+noticeItemID));
|
SN.U.NoticeReplyTo($('#'+noticeItemID));
|
||||||
SN.U.NoticeWithAttachment($('#'+noticeItemID));
|
SN.U.NoticeWithAttachment($('#'+noticeItemID));
|
||||||
|
2
plugins/Realtime/realtimeupdate.min.js
vendored
2
plugins/Realtime/realtimeupdate.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1106,38 +1106,38 @@ border-top-style:solid;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Threaded notices sublist */
|
/* Threaded notices sublist */
|
||||||
#content .notices .threaded-notices {
|
#content .notices .threaded-replies {
|
||||||
margin-left: 10%;
|
margin-left: 10%;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
|
|
||||||
background: #e4e8f1;
|
background: #e4e8f1;
|
||||||
}
|
}
|
||||||
#content .threaded-notices .notice .author .photo {
|
#content .threaded-replies .notice .author .photo {
|
||||||
left: 8px;
|
left: 8px;
|
||||||
width: 32px;
|
width: 32px;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
}
|
}
|
||||||
.threaded-notices .notice-reply {
|
.threaded-replies .notice-reply {
|
||||||
margin: 8px;
|
margin: 8px;
|
||||||
}
|
}
|
||||||
.threaded-notices .notice-reply textarea,
|
.threaded-replies .notice-reply textarea,
|
||||||
.threaded-notices .notice-reply-placeholder input.placeholder {
|
.threaded-replies .notice-reply-placeholder input.placeholder {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
width: 95%;
|
width: 95%;
|
||||||
}
|
}
|
||||||
.threaded-notices .notice-reply-placeholder input.placeholder {
|
.threaded-replies .notice-reply-placeholder input.placeholder {
|
||||||
color: gray;
|
color: gray;
|
||||||
margin-left: 8px; /* ?? */
|
margin-left: 8px; /* ?? */
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
.threaded-notices .notice-reply .controls {
|
.threaded-replies .notice-reply .controls {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
.threaded-notices .notice-reply-comments {
|
.threaded-replies .notice-reply-comments {
|
||||||
margin: 8px;
|
margin: 8px;
|
||||||
}
|
}
|
||||||
.threaded-notices .response,
|
.threaded-replies .response,
|
||||||
.threaded-notices .source {
|
.threaded-replies .source {
|
||||||
/* Hide these for ajax/realtime sourced notices */
|
/* Hide these for ajax/realtime sourced notices */
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user