Cheers, good stuff.

Yeah I had a bit of a debate over the cursor thing. I thought it would be easy enough for other people to do it so I left it.

Glad you like it. I'll probably submit a finished version on monday. I'm going to just add an option for "Fixed height" and let people set it if they want it. I think the accordion looks smoother if it doesn't bounce all over the place.

-Rob

Danger Stevens wrote:
I just had to see this in action so I put up an example of Robin's excellent work here:
http://turnstudio.com/accordian.html

It's butt-ugly but it at least shows the different elements in action. also, I made the h3 use a link cursor - that's not actually part of the accordian code.

   - Danger


On 3/3/06, *Robin Haswell* < [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Sorry, it would be unprofessional of me to give my example (as I wrote
    this for work), but it's intended to be identical to:

    http://openrico.org/rico/demos.page?demo=ricoAccordion.html

    ..eventually. The only work left to be done is work out whether we
    wanna
    expand the container (#accordion) to the maximum size of the content, or
    use overflow:auto on the bodies.

    -Rob

    Nicolas Terray wrote:
     > I love real live examples, do you have one ? :)
     >
     > On 3/3/06, Robin Haswell <[EMAIL PROTECTED]
    <mailto:[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
    <mailto:Rails-spinoffs@lists.rubyonrails.org>
     >>> http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs
    <http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs>
     >> _______________________________________________
     >> Rails-spinoffs mailing list
     >> Rails-spinoffs@lists.rubyonrails.org
    <mailto:Rails-spinoffs@lists.rubyonrails.org>
     >> http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs
     >>
     > _______________________________________________
     > Rails-spinoffs mailing list
     > Rails-spinoffs@lists.rubyonrails.org
    <mailto:Rails-spinoffs@lists.rubyonrails.org>
     > http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs
    <http://lists.rubyonrails.org/mailman/listinfo/rails-spinoffs>
    _______________________________________________
    Rails-spinoffs mailing list
    Rails-spinoffs@lists.rubyonrails.org
    <mailto: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