From 636ad44f0b32a5ec3472eb7f164244b6f2b9185e Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Sun, 26 Oct 2014 22:07:16 +0100 Subject: [PATCH] BookmarkListItem removed in favor of event-driven rendering --- lib/activityhandlerplugin.php | 20 +++ lib/noticelistitem.php | 2 +- plugins/Bookmark/BookmarkPlugin.php | 96 +++++++++++++-- plugins/Bookmark/lib/bookmarklistitem.php | 144 ---------------------- 4 files changed, 104 insertions(+), 158 deletions(-) delete mode 100644 plugins/Bookmark/lib/bookmarklistitem.php diff --git a/lib/activityhandlerplugin.php b/lib/activityhandlerplugin.php index 68907af0fb..59e3d45f17 100644 --- a/lib/activityhandlerplugin.php +++ b/lib/activityhandlerplugin.php @@ -600,6 +600,26 @@ abstract class ActivityHandlerPlugin extends Plugin $nli->showNoticeOptions(); } + public function onStartShowNoticeItemNotice(NoticeListItem $nli) + { + if (!$this->isMyNotice($nli->notice)) { + return true; + } + + $this->showNoticeItemNotice($nli); + + Event::handle('EndShowNoticeItemNotice', array($nli)); + return false; + } + + protected function showNoticeItemNotice(NoticeListItem $nli) + { + $nli->showNoticeTitle(); + $nli->showAuthor(); + $nli->showAddressees(); + $nli->showContent(); + } + public function onStartShowNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null) { if (!$this->isMyNotice($stored)) { diff --git a/lib/noticelistitem.php b/lib/noticelistitem.php index 5ba4a5d683..c1f4132c19 100644 --- a/lib/noticelistitem.php +++ b/lib/noticelistitem.php @@ -118,7 +118,7 @@ class NoticeListItem extends Widget $this->showAuthor(); $this->showAddressees(); $this->showContent(); - Event::handle('EndShowNoticeItemNotice', array($this-)); + Event::handle('EndShowNoticeItemNotice', array($this)); } } diff --git a/plugins/Bookmark/BookmarkPlugin.php b/plugins/Bookmark/BookmarkPlugin.php index fdd3c359b8..738f4bc38b 100644 --- a/plugins/Bookmark/BookmarkPlugin.php +++ b/plugins/Bookmark/BookmarkPlugin.php @@ -440,19 +440,6 @@ class BookmarkPlugin extends MicroAppPlugin return $object; } - /** - * Given a notice list item, returns an adapter specific - * to this plugin. - * - * @param NoticeListItem $nli item to adapt - * - * @return NoticeListItemAdapter adapter or null - */ - function adaptNoticeListItem($nli) - { - return new BookmarkListItem($nli); - } - function entryForm($out) { return new InitialBookmarkForm($out); @@ -505,4 +492,87 @@ class BookmarkPlugin extends MicroAppPlugin return true; } + + protected function showNoticeItemNotice(NoticeListItem $nli) + { + $nli->out->elementStart('div', 'entry-title'); + $nli->showAuthor(); + $nli->showContent(); + $nli->out->elementEnd('div'); + } + + protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null) + { + $nb = Bookmark::getByNotice($stored); + + if (empty($nb)) { + common_log(LOG_ERR, "No bookmark for notice {$stored->id}"); + parent::showContent(); + return; + } else if (empty($nb->url)) { + common_log(LOG_ERR, "No url for bookmark {$nb->id} for notice {$stored->id}"); + parent::showContent(); + return; + } + + $profile = $stored->getProfile(); + + // Whether to nofollow + $attrs = array('href' => $nb->url, 'class' => 'bookmark-title'); + + $nf = common_config('nofollow', 'external'); + + if ($nf == 'never' || ($nf == 'sometimes' and $out instanceof ShowstreamAction)) { + $attrs['rel'] = 'external'; + } else { + $attrs['rel'] = 'nofollow external'; + } + + $out->elementStart('h3'); + $out->element('a', $attrs, $nb->title); + $out->elementEnd('h3'); + + // Replies look like "for:" tags + $replies = $stored->getReplies(); + $tags = $stored->getTags(); + + if (!empty($replies) || !empty($tags)) { + + $out->elementStart('ul', array('class' => 'bookmark-tags')); + + foreach ($replies as $reply) { + $other = Profile::getKV('id', $reply); + if (!empty($other)) { + $out->elementStart('li'); + $out->element('a', array('rel' => 'tag', + 'href' => $other->profileurl, + 'title' => $other->getBestName()), + sprintf('for:%s', $other->nickname)); + $out->elementEnd('li'); + $out->text(' '); + } + } + + foreach ($tags as $tag) { + $tag = trim($tag); + if (!empty($tag)) { + $out->elementStart('li'); + $out->element('a', + array('rel' => 'tag', + 'href' => Notice_tag::url($tag)), + $tag); + $out->elementEnd('li'); + $out->text(' '); + } + } + + $out->elementEnd('ul'); + } + + if (!empty($nb->description)) { + $out->element('p', + array('class' => 'bookmark-description'), + $nb->description); + } + } } diff --git a/plugins/Bookmark/lib/bookmarklistitem.php b/plugins/Bookmark/lib/bookmarklistitem.php deleted file mode 100644 index 118800ad99..0000000000 --- a/plugins/Bookmark/lib/bookmarklistitem.php +++ /dev/null @@ -1,144 +0,0 @@ -. - * - * @category Bookmark - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ - -if (!defined('STATUSNET')) { - // This check helps protect against security problems; - // your code file can't be executed directly from the web. - exit(1); -} - -/** - * An adapter to show bookmarks in a nicer way - * - * @category Bookmark - * @package StatusNet - * @author Evan Prodromou - * @copyright 2011 StatusNet, Inc. - * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 - * @link http://status.net/ - */ - -class BookmarkListItem extends NoticeListItemAdapter -{ - function showNotice() - { - $this->nli->out->elementStart('div', 'entry-title'); - $this->nli->showAuthor(); - $this->showContent(); - $this->nli->out->elementEnd('div'); - } - - function showContent() - { - $notice = $this->nli->notice; - $out = $this->nli->out; - - $nb = Bookmark::getByNotice($notice); - - if (empty($nb)) { - common_log(LOG_ERR, "No bookmark for notice {$notice->id}"); - parent::showContent(); - return; - } else if (empty($nb->url)) { - common_log(LOG_ERR, "No url for bookmark {$nb->id} for notice {$notice->id}"); - parent::showContent(); - return; - } - - $profile = $notice->getProfile(); - - $out->elementStart('div', array('class' => 'e-content')); - - // Whether to nofollow - - $attrs = array('href' => $nb->url, - 'class' => 'bookmark-title'); - - $nf = common_config('nofollow', 'external'); - - if ($nf == 'never' || ($nf == 'sometimes' and $out instanceof ShowstreamAction)) { - $attrs['rel'] = 'external'; - } else { - $attrs['rel'] = 'nofollow external'; - } - - $out->elementStart('h3'); - $out->element('a', - $attrs, - $nb->title); - $out->elementEnd('h3'); - - // Replies look like "for:" tags - - $replies = $notice->getReplies(); - $tags = $notice->getTags(); - - if (!empty($replies) || !empty($tags)) { - - $out->elementStart('ul', array('class' => 'bookmark-tags')); - - foreach ($replies as $reply) { - $other = Profile::getKV('id', $reply); - if (!empty($other)) { - $out->elementStart('li'); - $out->element('a', array('rel' => 'tag', - 'href' => $other->profileurl, - 'title' => $other->getBestName()), - sprintf('for:%s', $other->nickname)); - $out->elementEnd('li'); - $out->text(' '); - } - } - - foreach ($tags as $tag) { - $tag = trim($tag); - if (!empty($tag)) { - $out->elementStart('li'); - $out->element('a', - array('rel' => 'tag', - 'href' => Notice_tag::url($tag)), - $tag); - $out->elementEnd('li'); - $out->text(' '); - } - } - - $out->elementEnd('ul'); - } - - if (!empty($nb->description)) { - $out->element('p', - array('class' => 'bookmark-description'), - $nb->description); - } - - $out->elementEnd('div'); - } -}