From: Paul Duncan Date: 2006-01-14T04:49:50+09:00 Subject: Re: Widget-like API for DOM objects? --zn4k3Q+N5puqXur4 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable * Daniel Berger (Daniel.Berger@qwest.com) wrote: > Hi all, >=20 > Is there something out there that would let me create DOM objects in a mo= re=20 > Rubyesque manner? For example, say I want to create a 'select' object in= a=20 > web page. I'd like an API something along these lines: >=20 > select =3D Select.new > select.options =3D ["joe", "bob", "moe"] # or {1=3D>"joe", 2=3D>"bob", 3= =3D>"moe"} > select.selected_index =3D 2 > select.title =3D "Three guys" > select.access_key =3D "A" >=20 > p select.html # Show html that would be generated using above options >=20 > You get the picture. Is there anything like this out on the RAA? Nothin= g=20 > immediately jumped out at me. REXML has a DOM-like API, and it comes pre-installed with Ruby: # load REXML=20 require 'rexml/document' # # Create an HTML select element. #=20 class HTMLSelect attr_accessor :options, :attrs, :index def initialize(options =3D [], select_attrs =3D {}, selected_index =3D = nil) @options, @attrs, @index =3D options, select_attrs, selected_index end def to_s # create return select element and append requested attributes ret =3D REXML::Element.new('select') @attrs.each { |key, val| ret.attributes[key] =3D val } =20 # iterate over, create, and append each option @options.each_with_index do |opt, i| # create and append element opt_elem =3D ret << REXML::Element.new('option') # add option text, and option attributes opt_elem << REXML::Text.new(opt) opt_elem.attributes['value'] =3D i.to_s opt_elem.attributes['selected'] =3D 'Y' if i =3D=3D @index end # convert select element to string and return ret.to_s end end # define attributes, option items, and initial selected index select_attrs =3D { 'name' =3D> 'which_guy', 'title' =3D> 'Three Guys', 'access_key' =3D> 'A', } selected_index, options =3D 2, %w{joe bob moe} =20 # build select box and print out result puts HTMLSelect.new(options, select_attrs, selected_index).to_s Hope this helps... --=20 Paul Duncan pabs in #ruby-lang (OPN IRC) http://www.pablotron.org/ OpenPGP Key ID: 0x82C29562 --zn4k3Q+N5puqXur4 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFDyARRzdlT34LClWIRAlb8AKDauzyZODM7m7DTz/lJbbeneKRirwCdHOTR wm+STZ2qSe+aSgh9/pmohmI= =CY2J -----END PGP SIGNATURE----- --zn4k3Q+N5puqXur4--