I love real live examples, do you have one ? :)

On 3/3/06, Robin Haswell <[EMAIL PROTECTED]> wrote:
> Oops, should provide an example:
>
> <div id="accordion">
>         <div>
>                 <h3>Heading></h3>
>                 <div>
>                         <p>Content geoes here</p>
>                         <p>Etc..</p>
>                 </div>
>         </div>
>         <div>
>                 <h3>Another heading</h3>
>                 <div>
>                         <p>Yet more tatsy content</p>
>                         <p>Rinse, repeat</p>
>                 </div>
>         </div>
> </div>
> <script>
> new Effect.Accordion("accordion");
> </script>
>
> -Rob
>
> Robin Haswell wrote:
> > Hello boys and girls
> >
> > In the ever-loving spirit of OSS, here's another feature for s.a.u.
> >
> > In particular it's called Effect.Accordion, and is a scriptaculified
> > version of openrico's Accordion.
> >
> > Work in progress, I'll submit further modifications as the come in, but
> > this is 90% of what needs to be done. I anticipate some bugs when I
> > start using it more.
> >
> > Tested on FF1.5 and IE6/7.
> >
> > Comments are welcome, and in fact solicited. I'd appreciate all bugfixes
> > sent either to this list or myself.
> >
> > Yours,
> >
> > -Rob
> >
> > PS. This isn't a patch, it's just JS. However this server won't allow
> > attachments with a .js extension, which is, well, ridiculous.
> >
> >
> > ------------------------------------------------------------------------
> >
> > Effect.Accordion = Class.create();
> > Effect.Accordion.prototype = {
> >       initialize: function(element, options) {
> >               this.container = $(element);
> >               this.options = Object.extend({
> >                       paneltag: "div", // The tag of the panel containers
> >                       headingtag: "h3", // The tag of the headings
> >                       bodytag: "div", // The body
> >                       initdisplay: 0 // Index of the panel to show first
> >               }, options || {});
> >               this.options.paneltag = this.options.paneltag.toUpperCase();
> >               this.options.headingtag = 
> > this.options.headingtag.toUpperCase();
> >               this.options.bodytag = this.options.bodytag.toUpperCase();
> >               // We should probably sort out some event listeners
> >               this.panels = Array();
> >               panels = this.container.childNodes;
> >               pl = panels.length;
> >               n = 0;
> >               for (i = 0; i < pl; i++) {
> >                       if (panels[i].nodeName != this.options.paneltag)
> >                               continue;
> >                       this.panels[n] = panels[i];
> >                       n++;
> >               }
> >               pl = this.panels.length;
> >               this.clickHandler = 
> > this.onClickHeading.bindAsEventListener(this);
> >               for (i = 0; i < pl; i++) {
> >                       heading = this.getPanelHeading(this.panels[i]);
> >                       if (this.options.initdisplay != i) {
> >                               body = this.getPanelBody(this.panels[i]);
> >                               Element.hide(body);
> >                       } else {
> >                               this.curvisible = i;
> >                       }
> >                       Event.observe(heading, "click", this.clickHandler);
> >               }
> >       },
> >       onClickHeading: function(ev) {
> >               el = Event.element(ev);
> >               panel = el.parentNode;
> >               if (panel == this.panels[this.curvisible])
> >                       return;
> >               newborn = this.getPanelBody(panel);
> >               victim = this.getPanelBody(this.panels[this.curvisible]);
> >               this.curvisible = this.getPanelNumber(panel);
> >               new Effect.Parallel (
> >               [
> >                       Effect.BlindUp(victim),
> >                       Effect.BlindDown(newborn)
> >               ], {
> >                       duration: 0.1
> >               });
> >       },
> >       getPanelHeading: function(el) {
> >               return el.getElementsByTagName(this.options.headingtag)[0];
> >       },
> >       getPanelBody: function(el) {
> >               n = 0;
> >               if (this.options.bodytag == this.options.headingtag)
> >                       n = 1;
> >               return el.getElementsByTagName(this.options.bodytag)[n];
> >       },
> >       /*
> >       getPanelBody: function(el) { // FIXME: Longer version to compensate 
> > for the body tag appearing in the heading tag. This sliently halts 
> > execution however. Fix if you need it.
> >               n = 0;
> >               if (this.options.bodytag == this.options.headingtag)
> >                       n = 1;
> >               children = el.childNodes;
> >               cl = children.length;
> >               for (i = 0; i < cl; i++) {
> >                       if (children[i].nodeName == this.options.bodytag) {
> >                               if (n == 0)
> >                                       return children[i];
> >                               else
> >                                       n = n-1;
> >                       }
> >               }
> >       }
> >       */
> >       getPanelNumber: function(el) {
> >               pl = this.panels.length;
> >               for (i = 0; i < pl; i++) {
> >                       if (this.panels[i] == el)
> >                               return i;
> >               }
> >               return "Not found";
> >       }
> > };
> >
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Rails-spinoffs mailing list
> > Rails-spinoffs@lists.rubyonrails.org
> > http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs
> _______________________________________________
> Rails-spinoffs mailing list
> Rails-spinoffs@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs
>
_______________________________________________
Rails-spinoffs mailing list
Rails-spinoffs@lists.rubyonrails.org
http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs

Reply via email to