htmlcom 0.3.0 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/htmlcom.rb +152 -14
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6272c236431ec9708a8805b6e28237e9faf86eac4d957941e8ec9ce74fc657ec
         | 
| 4 | 
            +
              data.tar.gz: 6d878d46b83d2cfb3f2b4a91f0de32d360b3ca8a0e843859513ab5b501f1a7d1
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: be0c30b00af02d00386ee6c36191e7955e02a0154002c6835bd5c5d739460124775d01bb24515a1f81e135ea75ad9e591b76dc5941857368e1ccb4914d9e6b2e
         | 
| 7 | 
            +
              data.tar.gz: f7adcb761bacb26fba80d79f6602b7d18b4c591f35aaa9feb0fec76b50669b13a03828fcdb2f9052ffaab56ea013dc1e8e39c46585da6389790df0eb602073fc
         | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | Binary file | 
    
        data/lib/htmlcom.rb
    CHANGED
    
    | @@ -22,6 +22,7 @@ require 'rexle-builder' | |
| 22 22 | 
             
            # InputElement # used by the HTML input element
         | 
| 23 23 | 
             
            # Dropdown # an HTML element
         | 
| 24 24 | 
             
            # Textarea # an HTML element
         | 
| 25 | 
            +
            # FormBuilder
         | 
| 25 26 |  | 
| 26 27 | 
             
            module HtmlCom
         | 
| 27 28 |  | 
| @@ -332,20 +333,36 @@ EOF | |
| 332 333 |  | 
| 333 334 | 
             
              class Element
         | 
| 334 335 |  | 
| 335 | 
            -
                def initialize( | 
| 336 | 
            -
             | 
| 336 | 
            +
                def initialize(obj)
         | 
| 337 | 
            +
             | 
| 338 | 
            +
                  @doc = build(obj)
         | 
| 339 | 
            +
                  puts '@doc.xml : ' + @doc.xml.inspect
         | 
| 340 | 
            +
                  if @id then
         | 
| 341 | 
            +
                    elem = @doc.root.element(@tag + '/' + @htmltag)
         | 
| 342 | 
            +
                    puts 'elem: ' +elem.inspect
         | 
| 343 | 
            +
                    elem.attributes[:name] = @id
         | 
| 344 | 
            +
                    elem.attributes[:id] = @id
         | 
| 345 | 
            +
                  end
         | 
| 346 | 
            +
             | 
| 347 | 
            +
                end
         | 
| 348 | 
            +
             | 
| 349 | 
            +
                def html_element()
         | 
| 350 | 
            +
                  @doc.root.element(@tag + '/' + @htmltag)
         | 
| 337 351 | 
             
                end
         | 
| 338 352 |  | 
| 339 353 | 
             
                def to_doc()
         | 
| 340 354 | 
             
                  @doc
         | 
| 341 355 | 
             
                end
         | 
| 342 356 |  | 
| 343 | 
            -
                def  | 
| 357 | 
            +
                def to_html()
         | 
| 358 | 
            +
                  html_element.xml pretty: true
         | 
| 359 | 
            +
                end
         | 
| 344 360 |  | 
| 345 | 
            -
             | 
| 346 | 
            -
             | 
| 347 | 
            -
             | 
| 348 | 
            -
                   | 
| 361 | 
            +
                private
         | 
| 362 | 
            +
             | 
| 363 | 
            +
                def build(rawobj)
         | 
| 364 | 
            +
                  obj = rawobj.is_a?(Hash) ? RexleBuilder.new(rawobj).to_a : rawobj
         | 
| 365 | 
            +
                  Rexle.new(obj)
         | 
| 349 366 | 
             
                end
         | 
| 350 367 |  | 
| 351 368 | 
             
              end
         | 
| @@ -364,12 +381,6 @@ EOF | |
| 364 381 | 
             
                    super({@tag.to_sym => rawobj})
         | 
| 365 382 | 
             
                  end
         | 
| 366 383 |  | 
| 367 | 
            -
                  if @id then
         | 
| 368 | 
            -
                    elem = @doc.root.element(@tag + '/' + @htmltag)
         | 
| 369 | 
            -
                    elem.attributes[:name] = @id
         | 
| 370 | 
            -
                    elem.attributes[:id] = @id
         | 
| 371 | 
            -
                  end
         | 
| 372 | 
            -
             | 
| 373 384 | 
             
                end
         | 
| 374 385 |  | 
| 375 386 | 
             
              end
         | 
| @@ -388,11 +399,15 @@ EOF | |
| 388 399 | 
             
                    list = options.map {|option| {option: option}}
         | 
| 389 400 | 
             
                    super({_select: list})
         | 
| 390 401 |  | 
| 402 | 
            +
                    values = options.map(&:downcase)
         | 
| 403 | 
            +
                    @doc.root.xpath('dropdown/select/option').each.with_index do |e,i|
         | 
| 404 | 
            +
                      e.attributes[:value] = values[i]
         | 
| 405 | 
            +
                    end
         | 
| 406 | 
            +
             | 
| 391 407 | 
             
                  elsif options.is_a? Hash then
         | 
| 392 408 |  | 
| 393 409 | 
             
                    list = options.values.map {|option| {option: option}}
         | 
| 394 410 | 
             
                    values = options.keys
         | 
| 395 | 
            -
                    puts 'list: ' + list.inspect
         | 
| 396 411 | 
             
                    super({_select: list})
         | 
| 397 412 |  | 
| 398 413 | 
             
                    @doc.root.xpath('dropdown/select/option').each.with_index do |e,i|
         | 
| @@ -418,4 +433,127 @@ EOF | |
| 418 433 |  | 
| 419 434 | 
             
              end
         | 
| 420 435 |  | 
| 436 | 
            +
             | 
| 437 | 
            +
              class Text < InputElement
         | 
| 438 | 
            +
             | 
| 439 | 
            +
                def initialize(value='', text: value, label: nil, id: nil)
         | 
| 440 | 
            +
             | 
| 441 | 
            +
                  @tag = 'text'
         | 
| 442 | 
            +
                  @htmltag = 'input'
         | 
| 443 | 
            +
                  @id = id
         | 
| 444 | 
            +
                  @label = label
         | 
| 445 | 
            +
                  super( [@htmltag, {type: 'text', value: text}])
         | 
| 446 | 
            +
             | 
| 447 | 
            +
                end
         | 
| 448 | 
            +
             | 
| 449 | 
            +
              end
         | 
| 450 | 
            +
             | 
| 451 | 
            +
             | 
| 452 | 
            +
              class Hidden < InputElement
         | 
| 453 | 
            +
             | 
| 454 | 
            +
                def initialize(value='', text: value, id: nil, label: nil)
         | 
| 455 | 
            +
             | 
| 456 | 
            +
                  @tag = 'hidden'
         | 
| 457 | 
            +
                  @htmltag = 'input'
         | 
| 458 | 
            +
                  @id = id
         | 
| 459 | 
            +
                  super( [@htmltag, {type: 'hidden', value: text}])
         | 
| 460 | 
            +
             | 
| 461 | 
            +
                end
         | 
| 462 | 
            +
             | 
| 463 | 
            +
              end
         | 
| 464 | 
            +
             | 
| 465 | 
            +
              class Form < Element
         | 
| 466 | 
            +
             | 
| 467 | 
            +
                def initialize(inputs=nil, id: nil, method: :get, action: '')
         | 
| 468 | 
            +
             | 
| 469 | 
            +
                  @tag = 'form'
         | 
| 470 | 
            +
                  @htmltag = 'form'
         | 
| 471 | 
            +
                  @id = id
         | 
| 472 | 
            +
             | 
| 473 | 
            +
                  super([:root, {}, [@tag,{}, [@htmltag, {}]]])
         | 
| 474 | 
            +
                  form = @doc.root.element(@tag + '/' + @htmltag)
         | 
| 475 | 
            +
                  form.add inputs if inputs
         | 
| 476 | 
            +
                  form.attributes[:method] = method.to_s
         | 
| 477 | 
            +
                  form.attributes[:action] = action
         | 
| 478 | 
            +
             | 
| 479 | 
            +
                end
         | 
| 480 | 
            +
             | 
| 481 | 
            +
                def add_submit()
         | 
| 482 | 
            +
                  submit = Rexle.new(['input', {type: 'submit', value: 'Submit'}])
         | 
| 483 | 
            +
                  html_element().add submit
         | 
| 484 | 
            +
                end
         | 
| 485 | 
            +
             | 
| 486 | 
            +
              end
         | 
| 487 | 
            +
             | 
| 488 | 
            +
             | 
| 489 | 
            +
              # e.g. inputs = {txt: [:textarea], audiotype: [:dropdown, 'gsm'], voice: [:dropdown, 'Stuart']}
         | 
| 490 | 
            +
              #        options = {audiotype: ['gsm', 'wav'], voice: %w(Stuart Kirsty Andrew)}
         | 
| 491 | 
            +
              #
         | 
| 492 | 
            +
              # fb = HtmlCom::FormBuilder.new(inputs: inputs, options: options)
         | 
| 493 | 
            +
              # puts fb.to_html
         | 
| 494 | 
            +
             | 
| 495 | 
            +
              class FormBuilder
         | 
| 496 | 
            +
             | 
| 497 | 
            +
                def initialize(inputs: {}, options: {}, id: 'form1', method: :get, action: '', debug: false)
         | 
| 498 | 
            +
             | 
| 499 | 
            +
                  @debug = debug
         | 
| 500 | 
            +
             | 
| 501 | 
            +
                  h = inputs.map do |key, value|
         | 
| 502 | 
            +
             | 
| 503 | 
            +
                    if debug then
         | 
| 504 | 
            +
                      puts 'id: ' + key.inspect
         | 
| 505 | 
            +
                      puts 'klass: ' + value.first.inspect
         | 
| 506 | 
            +
                    end
         | 
| 507 | 
            +
             | 
| 508 | 
            +
                    [key, value]
         | 
| 509 | 
            +
                  end.to_h
         | 
| 510 | 
            +
             | 
| 511 | 
            +
                  options.each do |key, value|
         | 
| 512 | 
            +
                    h[key] << value
         | 
| 513 | 
            +
                  end
         | 
| 514 | 
            +
             | 
| 515 | 
            +
                  klass = {
         | 
| 516 | 
            +
                    dropdown: HtmlCom::Dropdown,
         | 
| 517 | 
            +
                    textarea: HtmlCom::Textarea,
         | 
| 518 | 
            +
                    text: HtmlCom::Text,
         | 
| 519 | 
            +
                    hidden: HtmlCom::Hidden
         | 
| 520 | 
            +
                  }
         | 
| 521 | 
            +
             | 
| 522 | 
            +
                  @form = HtmlCom::Form.new(id: id, method: method, action: action)
         | 
| 523 | 
            +
             | 
| 524 | 
            +
                  h.each do |key, value|
         | 
| 525 | 
            +
             | 
| 526 | 
            +
                    id = key
         | 
| 527 | 
            +
                    puts 'value: ' + value.inspect
         | 
| 528 | 
            +
                    type, content = value
         | 
| 529 | 
            +
                    action = case type
         | 
| 530 | 
            +
                    when :dropdown
         | 
| 531 | 
            +
                      content = value.last
         | 
| 532 | 
            +
                      'Select'
         | 
| 533 | 
            +
                    else
         | 
| 534 | 
            +
                      'Enter'
         | 
| 535 | 
            +
                    end
         | 
| 536 | 
            +
             | 
| 537 | 
            +
                    obj = klass[type].new content, id: id, label: action + ' ' + id.to_s
         | 
| 538 | 
            +
             | 
| 539 | 
            +
                    obj.to_doc.root.element(type.to_s).elements.each do |e|
         | 
| 540 | 
            +
                      @form.html_element.add e
         | 
| 541 | 
            +
                    end
         | 
| 542 | 
            +
             | 
| 543 | 
            +
                  end
         | 
| 544 | 
            +
             | 
| 545 | 
            +
                  @form.add_submit
         | 
| 546 | 
            +
             | 
| 547 | 
            +
                end
         | 
| 548 | 
            +
             | 
| 549 | 
            +
                def to_doc()
         | 
| 550 | 
            +
                  @form.to_doc
         | 
| 551 | 
            +
                end
         | 
| 552 | 
            +
             | 
| 553 | 
            +
                def to_html()
         | 
| 554 | 
            +
                  @form.to_html
         | 
| 555 | 
            +
                end
         | 
| 556 | 
            +
             | 
| 557 | 
            +
              end
         | 
| 558 | 
            +
             | 
| 421 559 | 
             
            end
         | 
    
        data.tar.gz.sig
    CHANGED
    
    | Binary file | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: htmlcom
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.3. | 
| 4 | 
            +
              version: 0.3.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - James Robertson
         | 
| @@ -36,7 +36,7 @@ cert_chain: | |
| 36 36 | 
             
              JNdZs/7/k4vQlgqYQ3HnoA6GgIanmCgNkediqllxv/epLyIkW2DSJGcYXM8QjSEk
         | 
| 37 37 | 
             
              +4RQ8UHDCOWHpFPlT5Pgc0wPc7KyXosRYHg=
         | 
| 38 38 | 
             
              -----END CERTIFICATE-----
         | 
| 39 | 
            -
            date: 2022-07- | 
| 39 | 
            +
            date: 2022-07-18 00:00:00.000000000 Z
         | 
| 40 40 | 
             
            dependencies:
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: jsmenubuilder
         | 
    
        metadata.gz.sig
    CHANGED
    
    | Binary file |