This space is an archive space for documentation related to old versions of Fluid Infusion (i.e. versions before 1.3). For documentation related to the latest Infusion, see Infusion Documentation.

Pager Tutorial - v0.5

This documentation refers to version 0.5 of the Pager code. For documentation related to trunk, please see Pager Tutorial

This page will walk you through an example of adding the Fluid Pager component to an HTML file.

This tutorial assumes that:

  • you are already familiar with HTML, Javascript and CSS
  • you are familiar with what the Pager is and does
  • now you just want to know how to add it to your file.

For more general information about the Pager, see Pager. For technical API documentation, see Pager API - v0.5.

Tutorial: How to Use the Pager

Scenario

You've created a database to keep track of your vast collection of CDs, and you're working on a web interface for it. You'd like to break up long listings of search results into shorter, more managable chunks. This tutorial will show you how to use the Fluid Pager for this.

There are four basic steps to adding the Pager to your application:

  • Step 0: Download and install the Fluid Infusion library
  • Step 1: Prepare your markup
  • Step 2: Write the script
  • Step 3: Add the script to your HTML
  • Step 4: Apply styles

The rest of this tutorial will explain each of these steps in detail.

On This Page
Still need help?

Join the fluid-talk mailing list and ask your questions there.


Step 0: Download and install the Fluid Infusion library

  1. Download a copy of the Fluid Infusion component library from:
  2. Unpack the zip file you just downloaded, and place the resulting folder somewhere convenient for your development purposes.
    The folder will have the release number in it's name (e.g. fluid-0.4/). The rest of this tutorial will use fluid-0.4 in its examples, but if you downloaded a different version, you'll have to adjust.

Step 1: Prepare your markup

Unlike many other Fluid Components, the current version of the Pager is entirely mark-up driven. This means that the Pager component itself doesn't create or provide any markup - you have to provide it yourself.

The Pager requires certain minimum markup from you:

  1. The entire pager must be contained within a container element.
  2. Within that container, there are one or two 'pager bar' elements, each containing:
    • any number of page links
    • optionally, a 'next' element and a 'previous' element

So, with some styles, you might want something that looks like this:

Note that the image on the left is just an example. You could just as easily want a simple markup and styles that look like this:

The point is that your markup has the required elements.

Let's assume that you're starting with HTML file that produces something like the image above (but simplified, so that this tutorial doesn't get too verbose):

<ul>
    <li><a href="#">&lt; previous</a></li>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">next &gt;</a></li>
</ul>
<table>
    <tr>
        <th>Album</th>
        <th>Tracks</th>
        <th>Country</th>
        <th>Year</th>
    </tr>
    <tr>
        <td>Actress: Birth Of The New York Dolls</td>
        <td>11</td>
        <td>Italy</td>
        <td>2000</td>
    </tr>
    <tr>
        <td>After The Storm</td>
        <td>8</td>
        <td>England</td>
        <td>1985</td>
    </tr>
    <tr>
        <td>Back In The U.S.A.</td>
        <td>19</td>
        <td>Italy</td>
        <td>1991</td>
    </tr>
</table>
<ul>
    <li><a href="#">&lt; previous</a></li>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">next &gt;</a></li>
</ul>

The Pager component needs to know about the 'container' of your markup. We'll wrap a <div> around the whole thing, and give it a unique ID:

<div id="my-pager">
  <ul id="pager-top" class="pager-top">
    <li class="previous"><a href="#">&lt; previous</a></li>
    <li value="1" class="page-link"><a href="#">1</a></li>
    <li value="2" class="page-link"><a href="#">2</a></li>
  ...
</div>

We also need to identify the various parts to the Pager. We'll do this by attaching CSS class names that the Pager will recognize.

The Pager recognizes several classes:

  • pager-top for the container of the link bar above the content
  • pager-bottom for the container of the link bar below the content
  • page-link for any link inside a link bar
  • next for the 'next' link
  • previous for the 'previous' link

We'll consider the <ul> elements to be the containers for the top and bottom link bars, and the <li> elements themselves to be the links:

<div id="my-pager">
  <ul class="pager-top">
    <li class="previous"><a href="#">&lt; previous</a></li>
    <li class="page-link"><a href="#">1</a></li>
    <li class="page-link"><a href="#">2</a></li>
    <li class="page-link"><a href="#">3</a></li>
    <li class="next"><a href="#">next &gt;</a></li>
  </ul>
  ...
  <ul class="pager-bottom">
    <li class="previous"><a href="#">&lt; previous</a></li>
    <li class="page-link"><a href="#">1</a></li>
    <li class="page-link"><a href="#">2</a></li>
    <li class="page-link"><a href="#">3</a></li>
    <li class="next"><a href="#">next &gt;</a></li>
  </ul>
</div>

You may have noticed that we haven't touched the <table> elements between the top and bottom link bars. That's because the Pager honestly couldn't care what you've got in there. The Pager is only concerned with the link bars, and what happens when you click on those links. And in fact, the Pager doesn't really care what you do when the links are clicked - it simply tells you which link was activated and hands control over to you to act accordingly. More on that soon, but for now, we need to be able to know which link was activated. We'll do this by adding a 'value' to each numbered <li> element:

<div id="my-pager">
  <ul id="pager-top" class="pager-top">
    <li class="previous"><a href="#">&lt; previous</a></li>
    <li value="1" class="page-link"><a href="#">1</a></li>
    <li value="2" class="page-link"><a href="#">2</a></li>
    <li value="3" class="page-link"><a href="#">3</a></li>
    <li class="next"><a href="#">next &gt;</a></li>
  </ul>
  ...
  <ul id="pager-bottom" class="pager-bottom">
    <li class="previous"><a href="#">&lt; previous</a></li>
    <li value="1" class="page-link"><a href="#">1</a></li>
    <li value="2" class="page-link"><a href="#">2</a></li>
    <li value="3" class="page-link"><a href="#">3</a></li>
    <li class="next"><a href="#">next &gt;</a></li>
  </ul>
</div>

That's all - these are the only changes you need to make to your HTML.


Step 2: Write the script

You'll need to create a file, say search-results.js, to contain your initialization script - the script you write to apply the Pager to your search results mark-up.

In this file, write a function that initializes the Pager:

var demo = demo || {};

(function ($, fluid) {
    demo.initPager = function () {
        new fluid.Pager("my-pager");
    };

})(jquery, fluid);

This function creates the Pager component, with your <div> as the container.

At the bottom of your HTML file, you will call this initialization function in a <script> tag:

<script type="text/javascript">
    demo.initPager();
</script>

BUT: doing this alone is not sufficient. As mentioned above, the Pager is mark-up driven. As far as your script is concerned, this means that the Pager itself doesn't know what to do when a page link is clicked. All the Pager can do is call a function that you provide. You have to write that function.

The pageWillChange Callback

Since the Pager doesn't actually know anything about your data, you have to take care up displaying the different pages of data yourself. The pageWillChange function is used for this purpose.

The pageWillChange function is a function that you write and provide to the Pager, using the options parameter, as follow:

var myPageWillChangeFn = function() {
    ...
};
var options = {
    pageWillChangeCallback: myPageWillChangeFn
};
demo.initPager = function () {
    new fluid.Pager("my-pager", options);
};

When a page link is activated, the Pager will call your function. It's up to you to write a function that will replace the content of the Pager with the correct page of data. How you do that is entirely up to your application, and the nature of your data.

In the scenario of this tutorial, you're creating a web front-end for your CD library, and using the Pager to chunk up search results. In this case, you would have to write a function that accepts the page number and in response, updates the page display with the relevant list of CDs from your search results.


Step 3: Add the script to your HTML

You'll need to add your initialization script, along with the Fluid library, to you HTML file. In the header of the file, link to the Javascript files with <script> tags:

<script type="text/javascript" src="fluid-0.4/fluid-components/js/Fluid-all.js"></script>
<script type="text/javascript" src="search-results.js"></script>

NOTE that the Fluid-all.js file is minified - all of the whitespace has been removed, so it isn't really human-readable. If you're using the source distribution and you want to be able to debug the code, you'll want to include each of the required files individually. This would look like this:

<script type="text/javascript" src="fluid-0.4/fluid-components/js/jquery/jquery-1.2.6.js"></script>
<script type="text/javascript" src="fluid-0.4/fluid-components/js/jquery/jquery.keyboard-a11y.js"></script>
<script type="text/javascript" src="fluid-0.4/fluid-components/js/jquery/jARIA.js"></script>
<script type="text/javascript" src="fluid-0.4/fluid-components/js/fluid/Fluid.js"></script>
<script type="text/javascript" src="fluid-0.4/fluid-components/js/fluid/Pager.js"></script>
<script type="text/javascript" src="search-results.js"></script>

But all of these individual files are not necessary to make it work - the Fluid-all.js file has everything you need.


Step 4: Apply styles

Unless you've added styles to your mark-up, you will see in a browser that it doesn't actually look like the example shown up in Step 1, but rather like the image on the right.

In addition to the general lack of prettiness, there's no styling to indicate what the current page is, for one. Also, when you're on the first or last link, the 'previous' or 'next' link (usually) should be disabled. (See the Pagination Design Pattern for more info on this.)

The Pager automatically adds CSS classes to elements in your mark-up at these 'interesting moments.' This provides you the opportunity to create styles for how you want the UI to change at these time.

There are two main classes that you will want to create styles for:

Style: "current-page"
What: the page link that was just activated, and is currently being displayed
Why: so that users tell which page they're looking at

Sample style:

.current-page {
    color: #000000;
    border: 0;
    text-decoration: none;
    cursor: default;
}

Style: "disabled"
What: the 'previous' and 'next' links when on the first and last page respectively
Why: so that users aren't tempted to try to go past the end of the list

Sample style:

.disabled {
    color: #777777;
    border: 0;
    text-decoration: none;
    cursor: default;
}

If we add a stylesheet with these styles, then when looking at the first page of search results, the page links will look like this: