Image Pager module: Dynamically switch among images with prev/next links

Image Pager, a new Drupal module I just contributed, provides a block that displays a selected subset of a page's images. The images are shown one at a time; the user can dynamically switch among them using previous/next links. Each image's alt and title text is shown as a caption. This article's original location demonstrates Image Pager with photos from my 2006 summer vacation.

Image Pager is designed to work with existing node types and themes without requiring changes to either. When the Image Pager block is displayed, it uses jQuery to scan the web page, identify the images to be shown in the Pager, hide them so they are not shown in their original location on the page, and redisplay them within the Pager.

Removing unwanted colons from form field titles

I just created the first poll on my web site and was annoyed by having a colon appear after the question mark in the block title, like this:

Notice the annoying colon right after the question mark.

IE inherited margin bug: form elements and hasLayout

Internet Explorer on Windows has a wide variety of rendering bugs. Many of these bugs can be worked around by giving affected elements the IE-specific "hasLayout" property and an extensive analysis of how and when this works is available. This article describes the opposite situation: an IE rendering bug that is triggered by elements having layout for which the workaround is to remove the hasLayout property.

The bug is that certain form input elements whose containing box has layout inherit the sum of the margins of all of their containing boxes. Unlike the the well known IE doubled float-margin bug, this one does not involve floats. There is a workaround but, so far, no magic-bullet CSS-only solution.

Procrastinate with Scheduled Actions

The Scheduled Actions module allows you to tell Drupal to perform some action (publish a node, send an email) at a later time. With it, you can obey that ancient dictum, "Never do today what can be put off until tomorrow."

To use Scheduled Actions, you must first install the Actions module and the Scheduled Actions module. Enable both modules, then visit administer >> actions to initialize the Actions module. Go to administer >> access control and grant the schedule actions permission to the appropriate roles. Finally, you must have cron enabled for your site.

External links in new windows without using 'target'

The default Drupal 5.0 theme (and previous default Drupal themes) uses XHTML Strict. There are reasons this is probably a bad idea but, in the spirit of eating my own dogfood, I'm going with it for now.

One gotcha I discovered right away is that the <a> tag does not allow the "target" attribute in XHTML Strict (nor does it in HTML Strict). However, the behavior of <a target="_blank"'> can be replicated in XHTML Strict with semantic markup and scripting.

The Seven C's Border Technique

Continuously Changing Curved Clear Corners Containing Content

Screenshot of client designA client presented me with an existing visual design for their new web site. They had the layered image in Photoshop from their graphic artists and wanted me to convert it to working HTML/CSS. Among other elements, the design featured boxed regions with transparent large-radius curved corners on a gradient background.

Improved Persistent Login Cookie Best Practice

Charles Miller's article, "Persistent Login Cookie Best Practice,"[1] describes a relatively secure approach to implementing the familiar "Remember Me" option for web sites. In this article, I propose an improvement that retains all the benefits of that approach but also makes it possible to detect when a persistent login cookie has been stolen and used by an attacker.

Getting started.

You know the old saying about how the cobbler's children are barefoot? Well...

I've been so busy building web sites for clients that I have not had time to put up my own. There are a number of things I want to write about so I decided to just get going with a basic site and embellish it later on as time permits. So, here it is.