Y.Router
extension that provides the content fetching and handling needed to
implement the standard pjax (HTMP5 pushState + Ajax) functionality.
This makes it easy to fetch server rendered content for URLs using Ajax. By helping the router to fulfill the "request" for the content you can avoid full page loads.
The PjaxContent
class isn't useful on its own, but can be mixed into a
Router
-based class along with the PjaxBase
class to add Pjax functionality
to that Router. For a pre-made standalone Pjax router, see the Pjax
class.
var MyRouter = Y.Base.create('myRouter', Y.Router, [
Y.PjaxBase,
Y.PjaxContent
], {
// ...
});
_onPjaxIOComplete
id
ioResponse
details
Handles IO complete events.
This parses the content from the Y.io()
response and puts it on the
route's response object.
_onPjaxIOEnd
id
details
Handles IO end events.
getContent
responseText
Extracts and returns the relevant HTML content from an Ajax response. The
content is extracted using the contentSelector
attribute as a CSS
selector. If contentSelector
is null
, the entire response will be
returned.
The return value is an object containing two properties:
node
: A Y.Node
instance for a document fragment containing the
extracted HTML content.
title
: The title of the HTML page, if any, extracted using the
titleSelector
attribute (which defaults to looking for a <title>
element). If titleSelector
is not set or if a title could not be
found, this property will be undefined
.
responseText
String
Raw Ajax response text.
Content object with the properties described above.
loadContent
req
res
next
Pjax route middleware to load content from a server. This makes an Ajax request for the requested URL, parses the returned content and puts it on the route's response object.
This is route middleware and not intended to be the final callback for a route. This will add the following information to the route's request and response objects:
req.ioURL
: The full URL that was used to make the Y.io()
XHR. This
may contain "pjax=1"
if the addPjaxParam
option is set.
res.content
: An object containing node
and title
properties for
the content extracted from the server's response. See getContent()
for
more details.
res.ioResponse
: The full Y.io()
response object. This is useful if
you need access to the XHR's response status
or HTTP headers.
router.route('/foo/', 'loadContent', function (req, res, next) {
Y.one('container').setHTML(res.content.node);
Y.config.doc.title = res.content.title;
});
addPjaxParam
If true
, a "pjax=1" query parameter will be appended to all URLs
requested via Pjax.
Browsers ignore HTTP request headers when caching content, so if the same URL is used to request a partial Pjax page and a full page, the browser will cache them under the same key and may later load the cached partial page when the user actually requests a full page (or vice versa).
To prevent this, we can add a bogus query parameter to the URL so that Pjax URLs will always be cached separately from non-Pjax URLs.
Default: true
addPjaxParamChange
Fires when the value for the configuration attribute addPjaxParam
is
changed. You can listen for the event using the on
method if you
wish to be notified before the attribute's value has changed, or
using the after
method if you wish to be notified after the
attribute's value has changed.
e
EventFacade
contentSelector
CSS selector used to extract a specific portion of the content of a page loaded via Pjax.
For example, if you wanted to load the page example.html
but only use
the content within an element with the id "pjax-content", you'd set
contentSelector
to "#pjax-content".
If not set, the entire page will be used.
Default: null
contentSelectorChange
Fires when the value for the configuration attribute contentSelector
is
changed. You can listen for the event using the on
method if you
wish to be notified before the attribute's value has changed, or
using the after
method if you wish to be notified after the
attribute's value has changed.
e
EventFacade
timeout
Time in milliseconds after which an Ajax request should time out.
Default: 30000
timeoutChange
Fires when the value for the configuration attribute timeout
is
changed. You can listen for the event using the on
method if you
wish to be notified before the attribute's value has changed, or
using the after
method if you wish to be notified after the
attribute's value has changed.
e
EventFacade
titleSelector
CSS selector used to extract a page title from the content of a page loaded via Pjax.
By default this is set to extract the title from the <title>
element,
but you could customize it to extract the title from an <h1>
, or from
any other element, if that's more appropriate for the content you're
loading.
Default: "title"
titleSelectorChange
Fires when the value for the configuration attribute titleSelector
is
changed. You can listen for the event using the on
method if you
wish to be notified before the attribute's value has changed, or
using the after
method if you wish to be notified after the
attribute's value has changed.
e
EventFacade