<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: list code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 27 Jul 2008 03:02:27 GMT</pubDate>
    <description>DZone Snippets: list code</description>
    <item>
      <title>ZebraStripes</title>
      <link>http://snippets.dzone.com/posts/show/2380</link>
      <description>&lt;code&gt;&lt;br /&gt;/*&lt;br /&gt; * This script requires:&lt;br /&gt; *   1. Prototype version 1.5 or greater&lt;br /&gt; *     - Homepage: http://prototype.conio.net/&lt;br /&gt; *     - Download: http://script.aculo.us/downloads&lt;br /&gt; *   2. DomReady addon for Prototype&lt;br /&gt; *     - Homepage: http://www.vivabit.com/bollocks/2006/06/21/a-dom-ready-extension-for-prototype&lt;br /&gt; *     - Download: http://www.vivabit.com/code/domready/domready.js&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * I needed something capable of not just unobtrusively running when a page&lt;br /&gt; * was loaded but also easily being called at my whim as a part of an Ajax&lt;br /&gt; * transaction.&lt;br /&gt; */&lt;br /&gt;var ZebraStripes = {&lt;br /&gt;    /*&lt;br /&gt;     * Call this function when you want something striped.  It will figure out&lt;br /&gt;     * how to stripe the element.&lt;br /&gt;     */&lt;br /&gt;    stripe: function(el) {&lt;br /&gt;        el = $(el);&lt;br /&gt;        switch (el.tagName) {&lt;br /&gt;            case "TABLE":&lt;br /&gt;                this._stripeTable(el);&lt;br /&gt;                break;&lt;br /&gt;            case "OL":&lt;br /&gt;            case "UL":&lt;br /&gt;                this._stripeNormalList(el);&lt;br /&gt;                break;&lt;br /&gt;            case "DL":&lt;br /&gt;                this._stripeDefinitionList(el);&lt;br /&gt;                break;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    /***************************************************************************&lt;br /&gt;     * Everything below here is psuedo-private&lt;br /&gt;     **************************************************************************/&lt;br /&gt;    /*&lt;br /&gt;     * This class name will be applied to the odd numbered elements&lt;br /&gt;     */&lt;br /&gt;    _altClassName: "alt",&lt;br /&gt;    /*&lt;br /&gt;     * This property persists the data that tells the object whether&lt;br /&gt;     * to stripe (_isEven == false) or unstripe (_isEven == true) an element&lt;br /&gt;     */&lt;br /&gt;    _isEven: true,&lt;br /&gt;    /*&lt;br /&gt;     * Cycles the _isEven property of this object between true and false&lt;br /&gt;     */&lt;br /&gt;    _cycle: function() {&lt;br /&gt;        this._isEven = ! this._isEven;&lt;br /&gt;    },&lt;br /&gt;    /*&lt;br /&gt;     * As a part of the Ajax-friendliness, it is important that we remove the&lt;br /&gt;     * alt class from elements as well as add it.&lt;br /&gt;     */&lt;br /&gt;    _stripeElement: function(el) {&lt;br /&gt;        el = $(el);&lt;br /&gt;        if (this._isEven) {&lt;br /&gt;            el.removeClassName(this._altClassName);&lt;br /&gt;        } else {&lt;br /&gt;            el.addClassName(this._altClassName);&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    /*&lt;br /&gt;     * This works to stripe the child nodes of TABLE, TBODY, OL and UL elements.&lt;br /&gt;     */&lt;br /&gt;    _stripeElements: function(els) {&lt;br /&gt;        els = $(els);&lt;br /&gt;        if (els.length == 0) {&lt;br /&gt;            return&lt;br /&gt;        }&lt;br /&gt;        var parent = els[0].parentNode;&lt;br /&gt;        this._isEven = true;&lt;br /&gt;        for (var i = 0; i &lt; els.length; i++ ) {&lt;br /&gt;            if ((parent == els[i].parentNode) &amp;&amp; (els[i].visible)) {&lt;br /&gt;                this._stripeElement(els[i]);&lt;br /&gt;                this._cycle();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    /*&lt;br /&gt;     * TBODY is not necessary, but I recommend it.  I debated about striping&lt;br /&gt;     * THEAD and TFOOT, but chose not to.  Might be added later.&lt;br /&gt;     */&lt;br /&gt;    _stripeTable: function(table) {&lt;br /&gt;        table = $(table);&lt;br /&gt;        if (table.getElementsByTagName("tbody")) {&lt;br /&gt;            var tableBodies = table.getElementsByTagName("tbody");&lt;br /&gt;            for (var i = 0; i &lt; tableBodies.length; i++) {&lt;br /&gt;                this._stripeElements(tableBodies[i].getElementsByTagName("tr"));&lt;br /&gt;            }&lt;br /&gt;        } else {&lt;br /&gt;            this._stripeElements(table.getElementsByTagName("tr"));&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    /*&lt;br /&gt;     * This stripes OL and UL since they both have LI and only LI child nodes.&lt;br /&gt;     */&lt;br /&gt;    _stripeNormalList: function(list) {&lt;br /&gt;        list = $(list);&lt;br /&gt;        this._stripeElements(list.getElementsByTagName("li"));&lt;br /&gt;    },&lt;br /&gt;    /*&lt;br /&gt;     * I have seen other function out there that can stripe DL, but they all&lt;br /&gt;     * assumed that each DT would have only one DD following it.  That is not&lt;br /&gt;     * always the case, and not the case in the project that spawned this&lt;br /&gt;     * javascript.&lt;br /&gt;     */&lt;br /&gt;    _stripeDefinitionList: function(list) {&lt;br /&gt;        list = $(list);&lt;br /&gt;        Element.cleanWhitespace(list);&lt;br /&gt;        var children = list.childNodes;&lt;br /&gt;        var previousDt;&lt;br /&gt;        for (var i = 0; i &lt; children.length; i++) {&lt;br /&gt;            switch (children[i].tagName) {&lt;br /&gt;                case "DT":&lt;br /&gt;                    if (children[i].visible) {&lt;br /&gt;                        this._stripeElement(children[i]);&lt;br /&gt;                        this._cycle();&lt;br /&gt;                    }&lt;br /&gt;                    previousDt = children[i];&lt;br /&gt;                    break;&lt;br /&gt;                case "DD":&lt;br /&gt;                    if (previousDt.visible) {&lt;br /&gt;                        this._stripeElement(children[i]);&lt;br /&gt;                    }&lt;br /&gt;                    break;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * This function will go ahead and stripe all the elligible elements on the&lt;br /&gt; * page when the page first loads.&lt;br /&gt; */&lt;br /&gt;function initZebraStripes() {&lt;br /&gt;    var toStripe = $$("dl.striped")&lt;br /&gt;        .concat($$("ol.striped"))&lt;br /&gt;        .concat($$("table.striped"))&lt;br /&gt;        .concat($$("ul.striped"));&lt;br /&gt;&lt;br /&gt;    toStripe.each(&lt;br /&gt;        function(el) {&lt;br /&gt;            ZebraStripes.stripe(el);&lt;br /&gt;        }&lt;br /&gt;    );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Event.onDOMReady(initZebraStripes);&lt;br /&gt;// Or you could substitute a different loader:&lt;br /&gt;//Event.observe(window, 'load', initZebraStripes)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 08 Aug 2006 17:32:12 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2380</guid>
      <author>sporkyy (Todd Sayre)</author>
    </item>
  </channel>
</rss>
