Sha256: 3ed1c4850878a679b005ee5c88fe873ad3768580cb1c2afe20c4d609c1b71fa9

Contents?: true

Size: 1.16 KB

Versions: 4

Compression:

Stored size: 1.16 KB

Contents

require_relative 'todo_input'

class EditTodoInput < TodoInput
  option :presenter
  option :todo
  
  markup {
    input(class: todo_input_class) { |edit_input|
      style <= [ todo, :editing,
                 on_read: ->(editing) { editing ? '' : 'display: none;' },
                 after_read: ->(_) { edit_input.focus if todo.editing? }
               ]
    
      value <=> [todo, :task]
      
      onkeyup do |event|
        if event.key == 'Enter' || event.keyCode == "\r"
          todo.save_editing
          presenter.destroy(todo) if todo.task.strip.empty?
        elsif event.key == 'Escape' || event.keyCode == 27
          todo.cancel_editing
        end
      end
      
      onblur do |event|
        todo.save_editing
      end
      
      style {
        todo_input_styles
      }
    }
  }
  
  def todo_input_class
    'edit-todo'
  end
  
  def todo_input_styles
    super
    
    rule("*:has(> .#{todo_input_class})") {
      position 'relative'
    }
    
    rule(".#{todo_input_class}") {
      position 'absolute'
      display 'block'
      width 'calc(100% - 43px)'
      padding '12px 16px'
      margin '0 0 0 43px'
      top '0'
    }
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
glimmer-dsl-web-0.3.1 lib/glimmer-dsl-web/samples/regular/todo_mvc/views/edit_todo_input.rb
glimmer-dsl-web-0.3.0 lib/glimmer-dsl-web/samples/regular/todo_mvc/views/edit_todo_input.rb
glimmer-dsl-web-0.2.8 lib/glimmer-dsl-web/samples/regular/todo_mvc/views/edit_todo_input.rb
glimmer-dsl-web-0.2.7 lib/glimmer-dsl-web/samples/regular/todo_mvc/views/edit_todo_input.rb