In a Haml template, lines beginning with expand into the corresponding HTML opening tag, with no closing tag needed since Haml uses indentation to determine structure. Ruby-like hashes following a tag become HTML attributes. Lines -- beginning with a dash are executed as Ruby code with the result discarded, and lines = beginning with an equals sign are executed as Ruby code with the result interpolated into the HTML output.
Creating a new movie requires two interactions with Rotten Potatoes, because before the user can submit information about the movie he must be presented with a form in which to enter that information. The empty form is therefore the resource named by the route in line 3 of Figure fig:restful_routes, and the submission of the filled-in form is the resource named by the route in line 2. Similarly, updating an existing movie requires one resource consisting of an editable form showing the existing movie info (line 4) and a second resource consisting of the submission of the edited form (line 6).
There are four basic mechanisms by which a selector in a CSS file can match an HTML element: by tag name, by class, by ID, and by hierarchy. If multiple selectors match a given element, the rules for which properties to apply are complex, so most designers try to avoid such ambiguities by keeping their CSS simple. A useful way to see the ``bones'' of a page is to select CSS-Disable Styles-All Styles from the Firefox Web Developer toolbar. This will display the page with all CSS formatting turned off, showing the extent to which CSS can be used to separate visual appearance from logical structure.
CSS uses selector notations such as divname to indicate a div element whose id is name and div.name to indicate a div element with class name. Only one element in an HTML document can have a given id, whereas many elements (even of different tag types) can share the same class. All three aspects of an element---its tag type, its id (if it has one), and its class attributes (if it has any)---can be used to identify an element as a candidate for visual formatting.
SaaS frameworks simplify working with cookies, which are used to establish that two independent requests actually originated from the same user's browser, and can therefore be thought of as part of a session. On the first visit to a site, the server includes a long string (up to 4 KBytes) with the Set-Cookie: HTTP response header. It is the browser's responsibility to include this string with the Cookie: HTTP request header on subsequent requests to that site. The cookie string, which is usually not encrypted but is protected by a "fingerprint" or message authentication code, contains enough information for the server to associate the request with the same user session.