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