Forum: Ruby Widget-like API for DOM objects?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Daniel B. (Guest)
on 2006-01-13 17:42
(Received via mailing list)
Hi all,

Is there something out there that would let me create DOM objects in a
more
Rubyesque manner?  For example, say I want to create a 'select' object
in a web
page.  I'd like an API something along these lines:

select = Select.new
select.options = ["joe", "bob", "moe"] # or {1=>"joe", 2=>"bob",
3=>"moe"}
select.selected_index = 2
select.title = "Three guys"
select.access_key = "A"

p select.html # Show html that would be generated using above options

You get the picture.  Is there anything like this out on the RAA?
Nothing
immediately jumped out at me.

Regards,

Dan
Hannes W. (Guest)
on 2006-01-13 18:19
(Received via mailing list)
Dan

I can give you this: http://scm.ywesee.com/?p=htmlgrid

However, this was one of my very first ruby-projects and basically needs
a complete rewrite.. Some of the reasons:
- Geared towards Table-Layout, hence the 'grid'
- tight coupling to http://scm.ywesee.com/?p=sbsm which is a
state-based session-manager
- meta-programming by configuration-constants
- naming conventions changed in mid-project
- nonexistant documentation

That said, if you want to try it out and help me get the priorities for
a next version straight, you're more than welcome to do so and I hereby
pledge my support - which you'll probably need ;)

Cheers
Hannes
Daniel B. (Guest)
on 2006-01-13 18:40
(Received via mailing list)
Hannes W. wrote:
> List-Unsubscribe: <mailto:removed_email_address@domain.invalid?body=unsubscribe>
> - meta-programming by configuration-constants
> - naming conventions changed in mid-project
> - nonexistant documentation
>
> That said, if you want to try it out and help me get the priorities for
> a next version straight, you're more than welcome to do so and I hereby
> pledge my support - which you'll probably need ;)

I tried to look at the link you provided but I get a 403 forbidden. :(

Dan
Hannes W. (Guest)
on 2006-01-13 18:46
(Received via mailing list)
On 1/13/06, Daniel B. <removed_email_address@domain.invalid> wrote:
> I tried to look at the link you provided but I get a 403 forbidden. :(

sorry 'bout that, must have been a copy-paste thingummy... Try again:
http://scm.ywesee.com/?p=htmlgrid

Hannes
Hannes W. (Guest)
on 2006-01-13 18:58
(Received via mailing list)
On 1/13/06, Hannes W. <removed_email_address@domain.invalid> wrote:
> On 1/13/06, Daniel B. <removed_email_address@domain.invalid> wrote:
> > I tried to look at the link you provided but I get a 403 forbidden. :(

I must learn to think before posting... I've made a tarball, just in
case you don't want to install git to download the code:
http://download.ywesee.com/htmlgrid/htmlgrid-daily.tar.bz2
http://download.ywesee.com/sbsm/sbsm-daily.tar.bz2

Apologies for all the noise...
Hannes
Paul D. (Guest)
on 2006-01-13 21:52
(Received via mailing list)
* Daniel B. (removed_email_address@domain.invalid) wrote:
> select.access_key = "A"
>
> p select.html # Show html that would be generated using above options
>
> You get the picture.  Is there anything like this out on the RAA?  Nothing
> immediately jumped out at me.

REXML has a DOM-like API, and it comes pre-installed with Ruby:

  # load REXML
  require 'rexml/document'

  #
  # Create an HTML select element.
  #
  class HTMLSelect
    attr_accessor :options, :attrs, :index

    def initialize(options = [], select_attrs = {}, selected_index =
nil)
      @options, @attrs, @index = options, select_attrs, selected_index
    end

    def to_s
      # create return select element and append requested attributes
      ret = REXML::Element.new('select')
      @attrs.each { |key, val| ret.attributes[key] = val }

      # iterate over, create, and append each option
      @options.each_with_index do |opt, i|
        # create and append element
        opt_elem = ret << REXML::Element.new('option')

        # add option text, and option attributes
        opt_elem << REXML::Text.new(opt)
        opt_elem.attributes['value'] = i.to_s
        opt_elem.attributes['selected'] = 'Y' if i == @index
      end

      # convert select element to string and return
      ret.to_s
    end
  end

  # define attributes, option items, and initial selected index
  select_attrs = {
      'name'        => 'which_guy',
      'title'       => 'Three Guys',
      'access_key'  => 'A',
  }
  selected_index, options = 2, %w{joe bob moe}

  # build select box and print out result
  puts HTMLSelect.new(options, select_attrs, selected_index).to_s

Hope this helps...
Daniel B. (Guest)
on 2006-01-13 21:55
(Received via mailing list)
Paul D. wrote:
>>select.selected_index = 2
>
>       @options, @attrs, @index = options, select_attrs, selected_index
>         opt_elem = ret << REXML::Element.new('option')
>   end
>   puts HTMLSelect.new(options, select_attrs, selected_index).to_s
>
> Hope this helps...
>

Ah, thanks Paul.  I'd like something prebuilt, but it looks like REXML
would
serve as a great way to build things behind the scenes.

Regards,

Dan
This topic is locked and can not be replied to.