summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMeitar Moscovitz <meitarm@gmail.com>2009-02-09 00:02:51 +1100
committerMeitar Moscovitz <meitarm@gmail.com>2009-02-09 00:02:51 +1100
commit6e2f04583728714ff937eb1fa3ab34e99bcdb6a6 (patch)
treea046bd542843009e870b68bc213735b6d2b1591b
parente85f0ae4c820a93aeae75a5f0df6d4a292d497a0 (diff)
Add machine-readable pagination using HTML4.01 `<link rel="next">`, etc.
These extra `<link>` elements only appear on pages where pagination makes sense. They trigger functionality in some user agents, such as Opera's Navigation Bar for more easily navigating forward and backwards across a paged set of notices, messages, or group lists, etc.
-rw-r--r--actions/all.php22
-rw-r--r--actions/favorited.php20
-rw-r--r--actions/groupmembers.php24
-rw-r--r--actions/groups.php20
-rw-r--r--actions/inbox.php22
-rw-r--r--actions/outbox.php22
-rw-r--r--actions/public.php20
-rw-r--r--actions/replies.php22
-rw-r--r--actions/showfavorites.php22
-rw-r--r--actions/showgroup.php22
-rw-r--r--actions/showstream.php22
-rw-r--r--actions/tag.php22
-rw-r--r--lib/action.php14
13 files changed, 273 insertions, 1 deletions
diff --git a/actions/all.php b/actions/all.php
index d75d1b946..76b1bbcdf 100644
--- a/actions/all.php
+++ b/actions/all.php
@@ -78,6 +78,28 @@ class AllAction extends Action
'title' => sprintf(_('Feed for friends of %s'), $this->user->nickname)));
}
+ /**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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()
{
$nav = new PersonalGroupNav($this);
diff --git a/actions/favorited.php b/actions/favorited.php
index fd5ff413c..367fb6dd6 100644
--- a/actions/favorited.php
+++ b/actions/favorited.php
@@ -195,4 +195,24 @@ class FavoritedAction extends Action
$this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
$this->page, 'favorited');
}
+
+ /**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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')));
+ }
}
diff --git a/actions/groupmembers.php b/actions/groupmembers.php
index 00f43a9f5..2b2bdba93 100644
--- a/actions/groupmembers.php
+++ b/actions/groupmembers.php
@@ -137,4 +137,26 @@ class GroupmembersAction extends Action
$this->page, 'groupmembers',
array('nickname' => $this->group->nickname));
}
-} \ No newline at end of file
+
+ /**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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')));
+ }
+}
diff --git a/actions/groups.php b/actions/groups.php
index 39dc2232b..b0bf7cfc2 100644
--- a/actions/groups.php
+++ b/actions/groups.php
@@ -129,4 +129,24 @@ class GroupsAction extends Action
$gbm = new GroupsByMembersSection($this);
$gbm->show();
}
+
+ /**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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')));
+ }
}
diff --git a/actions/inbox.php b/actions/inbox.php
index b553ab26c..d12f3f20a 100644
--- a/actions/inbox.php
+++ b/actions/inbox.php
@@ -64,6 +64,28 @@ class InboxAction extends MailboxAction
}
/**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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')));
+ }
+
+ /**
* Retrieve the messages for this user and this page
*
* Does a query for the right messages
diff --git a/actions/outbox.php b/actions/outbox.php
index c8d7f2812..043b74edc 100644
--- a/actions/outbox.php
+++ b/actions/outbox.php
@@ -63,6 +63,28 @@ class OutboxAction extends MailboxAction
}
/**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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')));
+ }
+
+ /**
* retrieve the messages for this user and this page
*
* Does a query for the right messages
diff --git a/actions/public.php b/actions/public.php
index cc6537f74..25889eee5 100644
--- a/actions/public.php
+++ b/actions/public.php
@@ -128,6 +128,26 @@ class PublicAction extends Action
}
/**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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')));
+ }
+
+ /**
* Extra head elements
*
* We include a <meta> element linking to the publicxrds page, for OpenID
diff --git a/actions/replies.php b/actions/replies.php
index 7eff74a66..5ae99e165 100644
--- a/actions/replies.php
+++ b/actions/replies.php
@@ -142,6 +142,28 @@ class RepliesAction extends Action
}
/**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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')));
+ }
+
+ /**
* show the personal group nav
*
* @return void
diff --git a/actions/showfavorites.php b/actions/showfavorites.php
index 31479e1a7..f0297172a 100644
--- a/actions/showfavorites.php
+++ b/actions/showfavorites.php
@@ -154,6 +154,28 @@ class ShowfavoritesAction extends Action
}
/**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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
*
* @return void
diff --git a/actions/showgroup.php b/actions/showgroup.php
index 7bc68fbc6..7599a8de6 100644
--- a/actions/showgroup.php
+++ b/actions/showgroup.php
@@ -327,6 +327,28 @@ class ShowgroupAction extends Action
}
/**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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')));
+ }
+
+ /**
* Fill in the sidebar.
*
* @return void
diff --git a/actions/showstream.php b/actions/showstream.php
index 28bb8453f..11615ebb0 100644
--- a/actions/showstream.php
+++ b/actions/showstream.php
@@ -195,6 +195,28 @@ class ShowstreamAction extends Action
$this->user->nickname)));
}
+ /**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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()
{
// FOAF
diff --git a/actions/tag.php b/actions/tag.php
index 4401f892a..f71f6d342 100644
--- a/actions/tag.php
+++ b/actions/tag.php
@@ -69,6 +69,28 @@ class TagAction extends Action
'title' => sprintf(_('Feed for tag %s'), $this->tag)));
}
+ /**
+ * Output document relationship links
+ *
+ * @return void
+ */
+ function showRelationshipLinks()
+ {
+ // Machine-readable pagination
+ if ($this->page > 1) {
+ $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()
{
return sprintf(_('Messages tagged "%s", most recent first'), $this->tag);
diff --git a/lib/action.php b/lib/action.php
index c4172ada1..ab51d0252 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -111,6 +111,7 @@ class Action extends HTMLOutputter // lawsuit
$this->showTitle();
$this->showStylesheets();
$this->showScripts();
+ $this->showRelationshipLinks();
$this->showOpenSearch();
$this->showFeeds();
$this->showDescription();
@@ -194,6 +195,19 @@ class Action extends HTMLOutputter // lawsuit
}
/**
+ * Show document relationship links
+ *
+ * SHOULD overload
+ *
+ * @return nothing
+ */
+ function showRelationshipLinks()
+ {
+ // output <link> elements with appropriate HTML4.01 link types:
+ // http://www.w3.org/TR/html401/types.html#type-links
+ }
+
+ /**
* Show OpenSearch headers
*
* @return nothing