class Lebowski::SCUI::Views::ContentEditableViewSupport::Range

Attributes

end_element[R]
end_offset[R]
start_element[R]
start_offset[R]

Public Class Methods

new(app, *params) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 104
def initialize(app, *params) 
  if not app.kind_of? Application
    raise ArgumentInvalidTypeError.new "app", app, "class < Application"
  end
  
  @start_element = nil
  @end_element = nil
  @start_offset = 0
  @end_offset = 0
  @start_before = false
  @start_after = false
  @end_before = false
  @end_after = false
  
  if params[0].kind_of? Hash
    hash = params[0]
    @start_element = hash[:start_element]
    @end_element = hash[:end_element]
    @start_offset = hash[:start_offset].nil? ? 0 : hash[:start_offset]
    @end_offset = hash[:end_offset].nil? ? 0 : hash[:end_offset]
  elsif params.length == 4
    @start_element = params[0]
    @start_offset = params[1]
    @end_element = params[2]
    @end_offset = params[3]
  elsif params.length != 0
    raise ArgumentError.new "invalid number of arguments supplied"
  end
        
  assert_element_is_valid(@start_element, "start element")
  assert_element_is_valid(@end_element, "end element")
  assert_offset_is_valid(@start_offset, "start offset")
  assert_offset_is_valid(@end_offset, "end offset")
  
  @app = app
end

Public Instance Methods

collapse(to_start=true) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 220
def collapse(to_start=true)
  if not has_boundaries_defined?
    raise StandardError.new "unable to collapse range. boundaries must be defined"
  end
  
  hash = create_range_hash_object
  if to_start == true
    hash[:collapseToStart] = true
  else
    hash[:collapseToEnd] = true
  end
  
  @app.exec_driver_in_context do |driver|
    driver.select_range hash
    driver.mouse_up('css=body')
  end
end
delete_content() click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 238
def delete_content()
  if not has_boundaries_defined?
    raise StandardError.new "unable to delete content. boundaries must be defined"
  end

  @app.exec_driver_in_context do |driver|
    driver.range_delete_content create_range_hash_object
    driver.mouse_up('css=body')
  end
end
has_boundaries_defined?() click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 205
def has_boundaries_defined?()
  start_defined = has_start_defined? and has_end_defined?
end
has_end_defined?() click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 201
def has_end_defined?()
  return ((not @end_element.nil?) or @end_before == true or @end_after == true)
end
has_start_defined?() click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 197
def has_start_defined?()
  return ((not @start_element.nil?) or @start_before == true or @start_after == true) 
end
insert_content(content) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 249
def insert_content(content)
  if not content.kind_of? String
    raise ArgumentError.new "unable to insert content. content must be a string"
  end
  
  if not has_boundaries_defined?
    raise StandardError.new "unable to insert content. boundaries must be defined"
  end
  
  hash = create_range_hash_object
  hash[:content] = content

  @app.exec_driver_in_context do |driver|
    driver.range_insert_content hash
    driver.mouse_up('css=body')
  end
end
select() click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 209
def select()
  if @start_element.nil? or @end_element.nil?
    raise StandardError.new "unable to select range. start and end elements must be defined"
  end
  
  @app.exec_driver_in_context do |driver|
    driver.select_range create_range_hash_object
    driver.mouse_up('css=body')
  end
end
set_end(elem, offset=0) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 151
def set_end(elem, offset=0)
  assert_element_is_valid(elem, "elem")
  assert_offset_is_valid(offset, "offset")

  @end_element = elem
  @end_offset = offset
  @end_before = false
  @end_after = false
end
set_end_after(elem) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 188
def set_end_after(elem)
  assert_element_is_valid(elem, "elem")
  
  @end_element = elem
  @end_offset = 0
  @end_before = false
  @end_after = true
end
set_end_before(elem) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 179
def set_end_before(elem)
  assert_element_is_valid(elem, "elem")
  
  @end_element = elem
  @end_offset = 0
  @end_before = true
  @end_after = false
end
set_start(elem, offset=0) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 141
def set_start(elem, offset=0)
  assert_element_is_valid(elem, "elem")
  assert_offset_is_valid(offset, "offset")
  
  @start_element = elem
  @start_offset = offset
  @start_before = false
  @start_after = false
end
set_start_after(elem) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 170
def set_start_after(elem)
  assert_element_is_valid(elem, "elem")
  
  @start_element = elem
  @start_offset = 0
  @start_before = false
  @start_after = true
end
set_start_before(elem) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 161
def set_start_before(elem)
  assert_element_is_valid(elem, "elem")
  
  @start_element = elem
  @start_offset = 0
  @start_before = true
  @start_after = false
end

Private Instance Methods

assert_element_is_valid(element, name) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 269
def assert_element_is_valid(element, name)
  if not (element.nil? or element.kind_of? DOMElement)
    raise ArgumentError.new "a valid #{name} must supplied"
  end
end
assert_offset_is_valid(offset, name) click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 275
def assert_offset_is_valid(offset, name)
  if not ((offset.kind_of? Integer and offset >= 0) or offset.kind_of? String)
    raise ArgumentError.new "#{name} must be an integer greater than or equal to 0"
  end
end
create_range_hash_object() click to toggle source
# File lib/lebowski/scui/views/content_editable.rb, line 281
def create_range_hash_object()
  return {
    :startElementSelector => @start_element.selector,
    :startElementIndex => @start_element.index,
    :startOffset => @start_offset,
    :startBefore => @start_before,
    :startAfter => @start_after,
    :endElementSelector => @end_element.selector,
    :endElementIndex => @end_element.index,
    :endOffset => @end_offset,
    :endBefore => @end_before,
    :endAfter => @end_after
  }
end