Beginning to refactor document relationship links to reduce common code.

My attempts here are to mimic the `pagination()` method shared by
actions. I'm tentatively adding the `$count` property to actions so that
we can query the number of notices ''being displayed'' per page prior to
calling the actual `pagination()` method itself, since document
relationship `<link>` elements need to be output inside of `showHead()`,
before `showContent()`, which is where `pagination()` is, gets called.
This commit is contained in:
Meitar Moscovitz 2009-02-10 19:42:01 +11:00
parent 3585012380
commit b240a17194
13 changed files with 71 additions and 150 deletions

View File

@ -85,19 +85,8 @@ class AllAction extends Action
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'all', array('nickname' => $this->user->nickname));
$this->element('link', array('rel' => 'next',
'href' => common_local_url('all',
array('nickname' => $this->user->nickname,
'page' => $this->page - 1)),
'title' => _('Next Notices')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('all',
array('nickname' => $this->user->nickname,
'page' => $this->page + 1)),
'title' => _('Previous Notices')));
} }
function showLocalNav() function showLocalNav()

View File

@ -203,16 +203,7 @@ class FavoritedAction extends Action
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'favorited');
$this->element('link', array('rel' => 'next',
'href' => common_local_url('favorited',
array('page' => $this->page - 1)),
'title' => _('Next Notices')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('favorited',
array('page' => $this->page + 1)),
'title' => _('Previous Notices')));
} }
} }

View File

@ -145,18 +145,7 @@ class GroupmembersAction extends Action
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'groupmembers', array('nickname' => $this->group->nickname));
$this->element('link', array('rel' => 'next',
'href' => common_local_url('groupmembers',
array('nickname' => $this->group->nickname,
'page' => $this->page - 1)),
'title' => _('Next Group Members')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('groupmembers',
array('nickname' => $this->group->nickname,
'page' => $this->page + 1)),
'title' => _('Previous Group Members')));
} }
} }

View File

@ -137,16 +137,7 @@ class GroupsAction extends Action
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'groups', array('nickname' => $this->group->nickname));
$this->element('link', array('rel' => 'next',
'href' => common_local_url('groups',
array('page' => $this->page - 1)),
'title' => _('Next Groups')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('groups',
array('page' => $this->page + 1)),
'title' => _('Previous Groups')));
} }
} }

View File

@ -70,19 +70,8 @@ class InboxAction extends MailboxAction
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'inbox', array('nickname' => $this->user->nickname));
$this->element('link', array('rel' => 'next',
'href' => common_local_url('inbox',
array('nickname' => $this->user->nickname,
'page' => $this->page - 1)),
'title' => _('Next Messages')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('inbox',
array('nickname' => $this->user->nickname,
'page' => $this->page + 1)),
'title' => _('Previous Messages')));
} }
/** /**

View File

@ -69,19 +69,8 @@ class OutboxAction extends MailboxAction
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'outbox', array('nickname' => $this->user->nickname));
$this->element('link', array('rel' => 'next',
'href' => common_local_url('outbox',
array('nickname' => $this->user->nickname,
'page' => $this->page - 1)),
'title' => _('Next Messages')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('outbox',
array('nickname' => $this->user->nickname,
'page' => $this->page + 1)),
'title' => _('Previous Messages')));
} }
/** /**

View File

@ -56,6 +56,18 @@ class PublicAction extends Action
var $page = null; var $page = null;
/**
* Number of notices being shown on this page.
*/
// Does this need to be here? Should it be?
// If it does, this property needs to be
// added to other actions as well, like $page.
// I'm trying to find a way to capture the
// output of the $cnt variable from this
// action's showContent() method but need
// to do so earlier, I think...?
var $count = null;
function isReadOnly() function isReadOnly()
{ {
return true; return true;
@ -134,17 +146,8 @@ class PublicAction extends Action
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'public');
$this->element('link', array('rel' => 'next',
'href' => common_local_url('public',
array('page' => $this->page - 1)),
'title' => _('Next Notices')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('public',
array('page' => $this->page + 1)),
'title' => _('Previous Notices')));
} }
/** /**

View File

@ -148,19 +148,8 @@ class RepliesAction extends Action
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'replies', array('nickname' => $this->user->nickname));
$this->element('link', array('rel' => 'next',
'href' => common_local_url('replies',
array('nickname' => $this->user->nickname,
'page' => $this->page - 1)),
'title' => _('Next Notices')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('replies',
array('nickname' => $this->user->nickname,
'page' => $this->page + 1)),
'title' => _('Previous Notices')));
} }
/** /**

View File

@ -160,21 +160,11 @@ class ShowfavoritesAction extends Action
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'showfavorites', array('nickname' => $this->user->nickname));
$this->element('link', array('rel' => 'next',
'href' => common_local_url('showfavorites',
array('nickname' => $this->user->nickname,
'page' => $this->page - 1)),
'title' => _('Next Favorite Notices')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('showfavorites',
array('nickname' => $this->user->nickname,
'page' => $this->page + 1)),
'title' => _('Previous Favorite Notices')));
} }
/** /**
* show the personal group nav * show the personal group nav
* *

View File

@ -333,19 +333,8 @@ class ShowgroupAction extends Action
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'showgroup', array('nickname' => $this->group->nickname));
$this->element('link', array('rel' => 'next',
'href' => common_local_url('showgroup',
array('nickname' => $this->group->nickname,
'page' => $this->page - 1)),
'title' => _('Next Notices')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('showgroup',
array('nickname' => $this->group->nickname,
'page' => $this->page + 1)),
'title' => _('Previous Notices')));
} }
/** /**

View File

@ -202,19 +202,8 @@ class ShowstreamAction extends Action
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'showstream', array('nickname' => $this->user->nickname));
$this->element('link', array('rel' => 'next',
'href' => common_local_url('showstream',
array('nickname' => $this->user->nickname,
'page' => $this->page - 1)),
'title' => _('Next Notices')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('showstream',
array('nickname' => $this->user->nickname,
'page' => $this->page + 1)),
'title' => _('Previous Notices')));
} }
function extraHead() function extraHead()

View File

@ -76,19 +76,8 @@ class TagAction extends Action
*/ */
function showRelationshipLinks() function showRelationshipLinks()
{ {
// Machine-readable pagination $this->sequenceRelationships($this->page > 1, $this->count > NOTICES_PER_PAGE, // FIXME
if ($this->page > 1) { $this->page, 'tag', array('tag' => $this->tag));
$this->element('link', array('rel' => 'next',
'href' => common_local_url('tag',
array('tag' => $this->tag,
'page' => $this->page - 1)),
'title' => _('Next Notices')));
}
$this->element('link', array('rel' => 'prev',
'href' => common_local_url('tag',
array('tag' => $this->tag,
'page' => $this->page + 1)),
'title' => _('Previous Notices')));
} }
function showPageNotice() function showPageNotice()

View File

@ -938,4 +938,38 @@ class Action extends HTMLOutputter // lawsuit
$this->elementEnd('div'); $this->elementEnd('div');
} }
} }
/**
* Generate document metadata for sequential navigation
*
* @param boolean $have_before is there something before?
* @param boolean $have_after is there something after?
* @param integer $page current page
* @param string $action current action
* @param array $args rest of query arguments
*
* @return nothing
*/
function sequenceRelationships($have_next, $have_previous, $page, $action, $args=null)
{
// Outputs machine-readable pagination in <link> elements.
// Pattern taken from $this->pagination() method.
// "next" is equivalent to "after"
if ($have_next) {
$pargs = array('page' => $page-1);
$newargs = $args ? array_merge($args, $pargs) : $pargs;
$this->element('link', array('rel' => 'next',
'href' => common_local_url($action, $newargs),
'title' => _('Next')));
}
// "previous" is equivalent to "before"
if ($have_previous=true) { // FIXME
$pargs = array('page' => $page+1);
$newargs = $args ? array_merge($args, $pargs) : $pargs;
$this->element('link', array('rel' => 'prev',
'href' => common_local_url($action, $newargs),
'title' => _('Previous')));
}
}
} }