Sha256: 4fcae23827e60ad47c65d0a608ab984e2b519947ed492b864beb4068aa2d5bd3

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

require_relative 'todo_input'

class EditTodoInput < TodoInput
  option :presenter
  option :todo
  
  markup {
    input(class: self.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
    }
  }
  
  class << self
    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
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
glimmer-dsl-web-0.3.2 lib/glimmer-dsl-web/samples/regular/todo_mvc/views/edit_todo_input.rb