X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fnoticelist.php;h=3ef6691afa1f1ee06f33fef9e6b3f1f302b0ba00;hb=2d063650effb22c90936a4588f44946c69e1d9a1;hp=71db067d08e0e7cf842180f23aa7f885b5ca92d2;hpb=2d456a15e5652a0c0e2c0f9f50221eed2d16e109;p=quix0rs-gnu-social.git diff --git a/lib/noticelist.php b/lib/noticelist.php index 71db067d08..3ef6691afa 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -22,6 +22,7 @@ * @category UI * @package Laconica * @author Evan Prodromou + * @author Sarven Capadisli * @copyright 2008 Control Yourself, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://laconi.ca/ @@ -31,6 +32,9 @@ if (!defined('LACONICA')) { exit(1); } +require_once INSTALLDIR.'/lib/favorform.php'; +require_once INSTALLDIR.'/lib/disfavorform.php'; + /** * widget for displaying a list of notices * @@ -50,7 +54,7 @@ if (!defined('LACONICA')) { * @see ProfileNoticeList */ -class NoticeList +class NoticeList extends Widget { /** the current stream of notices being displayed. */ @@ -62,8 +66,9 @@ class NoticeList * @param Notice $notice stream of notices from DB_DataObject */ - function __construct($notice) + function __construct($notice, $out=null) { + parent::__construct($out); $this->notice = $notice; } @@ -78,7 +83,9 @@ class NoticeList function show() { - common_element_start('ul', array('id' => 'notices')); + $this->out->elementStart('div', array('id' =>'notices_primary')); + $this->out->element('h2', null, _('Notices')); + $this->out->elementStart('ul', array('class' => 'notices')); $cnt = 0; @@ -93,7 +100,8 @@ class NoticeList $item->show(); } - common_element_end('ul'); + $this->out->elementEnd('ul'); + $this->out->elementEnd('div'); return $cnt; } @@ -111,7 +119,7 @@ class NoticeList function newListItem($notice) { - return new NoticeListItem($notice); + return new NoticeListItem($notice, $this->out); } } @@ -133,7 +141,7 @@ class NoticeList * @see ProfileNoticeListItem */ -class NoticeListItem +class NoticeListItem extends Widget { /** The notice this item will show. */ @@ -151,8 +159,9 @@ class NoticeListItem * @param Notice $notice The notice we'll display */ - function __construct($notice) + function __construct($notice, $out=null) { + parent::__construct($out); $this->notice = $notice; $this->profile = $notice->getProfile(); } @@ -169,17 +178,39 @@ class NoticeListItem function show() { $this->showStart(); - $this->showFaveForm(); + $this->showNotice(); + $this->showNoticeInfo(); + $this->showNoticeOptions(); + $this->showEnd(); + } + + function showNotice() + { + $this->out->elementStart('div', 'entry-title'); $this->showAuthor(); $this->showContent(); - $this->startTimeSection(); + $this->out->elementEnd('div'); + } + + function showNoticeInfo() + { + $this->out->elementStart('div', 'entry-content'); $this->showNoticeLink(); $this->showNoticeSource(); $this->showReplyTo(); - $this->showReplyLink(); - $this->showDeleteLink(); - $this->endTimeSection(); - $this->showEnd(); + $this->out->elementEnd('div'); + } + + function showNoticeOptions() + { + $user = common_current_user(); + if ($user) { + $this->out->elementStart('div', 'notice-options'); + $this->showFaveForm(); + $this->showReplyLink(); + $this->showDeleteLink(); + $this->out->elementEnd('div'); + } } /** @@ -191,8 +222,9 @@ class NoticeListItem function showStart() { // XXX: RDFa - common_element_start('li', array('class' => 'notice_single hentry', - 'id' => 'notice-' . $this->notice->id)); + // TODO: add notice_type class e.g., notice_video, notice_image + $this->out->elementStart('li', array('class' => 'hentry notice', + 'id' => 'notice-' . $this->notice->id)); } /** @@ -206,9 +238,11 @@ class NoticeListItem $user = common_current_user(); if ($user) { if ($user->hasFave($this->notice)) { - common_disfavor_form($this->notice); + $disfavor = new DisfavorForm($this->out, $this->notice); + $disfavor->show(); } else { - common_favor_form($this->notice); + $favor = new FavorForm($this->out, $this->notice); + $favor->show(); } } } @@ -223,10 +257,13 @@ class NoticeListItem function showAuthor() { - common_element_start('span', 'vcard author'); + $this->out->elementStart('span', 'vcard author'); + $this->out->elementStart('a', array('href' => $this->profile->profileurl, + 'class' => 'url')); $this->showAvatar(); $this->showNickname(); - common_element_end('span'); + $this->out->elementEnd('a'); + $this->out->elementEnd('span'); } /** @@ -240,19 +277,23 @@ class NoticeListItem function showAvatar() { - $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE); - common_element_start('a', array('href' => $this->profile->profileurl)); - common_element('img', array('src' => ($avatar) ? - common_avatar_display_url($avatar) : - common_default_avatar(AVATAR_STREAM_SIZE), - 'class' => 'avatar stream photo', - 'width' => AVATAR_STREAM_SIZE, - 'height' => AVATAR_STREAM_SIZE, - 'alt' => - ($this->profile->fullname) ? - $this->profile->fullname : - $this->profile->nickname)); - common_element_end('a'); + if ('shownotice' === $this->out->trimmed('action')) { + $avatar_size = AVATAR_PROFILE_SIZE; + } else { + $avatar_size = AVATAR_STREAM_SIZE; + } + $avatar = $this->profile->getAvatar($avatar_size); + + $this->out->element('img', array('src' => ($avatar) ? + common_avatar_display_url($avatar) : + common_default_avatar($avatar_size), + 'class' => 'avatar photo', + 'width' => $avatar_size, + 'height' => $avatar_size, + 'alt' => + ($this->profile->fullname) ? + $this->profile->fullname : + $this->profile->nickname)); } /** @@ -265,9 +306,8 @@ class NoticeListItem function showNickname() { - common_element('a', array('href' => $this->profile->profileurl, - 'class' => 'nickname fn url'), - $this->profile->nickname); + $this->out->element('span', array('class' => 'nickname fn'), + $this->profile->nickname); } /** @@ -283,31 +323,16 @@ class NoticeListItem function showContent() { // FIXME: URL, image, video, audio - common_element_start('p', array('class' => 'content entry-title')); + $this->out->elementStart('p', array('class' => 'entry-content')); if ($this->notice->rendered) { - common_raw($this->notice->rendered); + $this->out->raw($this->notice->rendered); } else { // XXX: may be some uncooked notices in the DB, // we cook them right now. This should probably disappear in future // versions (>> 0.4.x) - common_raw(common_render_content($this->notice->content, $this->notice)); + $this->out->raw(common_render_content($this->notice->content, $this->notice)); } - common_element_end('p'); - } - - /** - * show the "time" section of a notice - * - * This is the greyed-out section that appears beneath the content, including - * links to delete or reply to the notice. Probably should be called something - * else. - * - * @return void - */ - - function startTimeSection() - { - common_element_start('p', 'time'); + $this->out->elementEnd('p'); } /** @@ -328,14 +353,18 @@ class NoticeListItem preg_match('/^http/', $this->notice->uri)) { $noticeurl = $this->notice->uri; } - common_element_start('a', array('class' => 'permalink', - 'rel' => 'bookmark', - 'href' => $noticeurl)); + $this->out->elementStart('dl', 'timestamp'); + $this->out->element('dt', null, _('Published')); + $this->out->elementStart('dd', null); + $this->out->elementStart('a', array('rel' => 'bookmark', + 'href' => $noticeurl)); $dt = common_date_iso8601($this->notice->created); - common_element('abbr', array('class' => 'published', - 'title' => $dt), - common_date_string($this->notice->created)); - common_element_end('a'); + $this->out->element('abbr', array('class' => 'published', + 'title' => $dt), + common_date_string($this->notice->created)); + $this->out->elementEnd('a'); + $this->out->elementEnd('dd'); + $this->out->elementEnd('dl'); } /** @@ -350,26 +379,31 @@ class NoticeListItem function showNoticeSource() { if ($this->notice->source) { - common_element('span', null, _(' from ')); + $this->out->elementStart('dl', 'device'); + $this->out->element('dt', null, _('From')); $source_name = _($this->notice->source); switch ($this->notice->source) { - case 'web': - case 'xmpp': - case 'mail': - case 'omb': - case 'api': - common_element('span', 'noticesource', $source_name); + case 'web': + case 'xmpp': + case 'mail': + case 'omb': + case 'api': + $this->out->element('dd', null, $source_name); break; - default: + default: $ns = Notice_source::staticGet($this->notice->source); if ($ns) { - common_element('a', array('href' => $ns->url), - $ns->name); + $this->out->elementStart('dd', null); + $this->out->element('a', array('href' => $ns->url, + 'rel' => 'external'), + $ns->name); + $this->out->elementEnd('dd'); } else { - common_element('span', 'noticesource', $source_name); + $this->out->element('dd', null, $source_name); } break; } + $this->out->elementEnd('dl'); } } @@ -387,11 +421,14 @@ class NoticeListItem if ($this->notice->reply_to) { $replyurl = common_local_url('shownotice', array('notice' => $this->notice->reply_to)); - common_text(' ('); - common_element('a', array('class' => 'inreplyto', - 'href' => $replyurl), - _('in reply to...')); - common_text(')'); + $this->out->elementStart('dl', 'response'); + $this->out->element('dt', null, _('To')); + $this->out->elementStart('dd'); + $this->out->element('a', array('href' => $replyurl, + 'rel' => 'in-reply-to'), + _('in reply to')); + $this->out->elementEnd('dd'); + $this->out->elementEnd('dl'); } } @@ -406,19 +443,21 @@ class NoticeListItem function showReplyLink() { - $reply_url = common_local_url('newnotice', - array('replyto' => $this->profile->nickname)); - - $reply_js = - 'return doreply("'.$this->profile->nickname.'",'.$this->notice->id.');'; - - common_element_start('a', - array('href' => $reply_url, - 'onclick' => $reply_js, - 'title' => _('reply'), - 'class' => 'replybutton')); - common_raw(' →'); - common_element_end('a'); + if (common_logged_in()) { + $reply_url = common_local_url('newnotice', + array('replyto' => $this->profile->nickname)); + + $this->out->elementStart('dl', 'notice_reply'); + $this->out->element('dt', null, _('Reply to this notice')); + $this->out->elementStart('dd'); + $this->out->elementStart('a', array('href' => $reply_url, + 'title' => _('Reply to this notice'))); + $this->out->text(_('Reply')); + $this->out->element('span', 'notice_id', $this->notice->id); + $this->out->elementEnd('a'); + $this->out->elementEnd('dd'); + $this->out->elementEnd('dl'); + } } /** @@ -433,25 +472,16 @@ class NoticeListItem if ($user && $this->notice->profile_id == $user->id) { $deleteurl = common_local_url('deletenotice', array('notice' => $this->notice->id)); - common_element_start('a', array('class' => 'deletenotice', - 'href' => $deleteurl, - 'title' => _('delete'))); - common_raw(' ×'); - common_element_end('a'); + $this->out->elementStart('dl', 'notice_delete'); + $this->out->element('dt', null, _('Delete this notice')); + $this->out->elementStart('dd'); + $this->out->element('a', array('href' => $deleteurl, + 'title' => _('Delete this notice')), _('Delete')); + $this->out->elementEnd('dd'); + $this->out->elementEnd('dl'); } } - /** - * end the time section - * - * @return void - */ - - function endTimeSection() - { - common_element_end('p'); - } - /** * finish the notice * @@ -462,6 +492,6 @@ class NoticeListItem function showEnd() { - common_element_end('li'); + $this->out->elementEnd('li'); } }