vapir-firefox 1.7.0 → 1.7.1.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -54,7 +54,7 @@ module Vapir
54
54
  elements=[]
55
55
  result=document_object.evaluate(xpath, containing_object, nil, jssh_socket.Components.interfaces.nsIDOMXPathResult.ORDERED_NODE_ITERATOR_TYPE, nil)
56
56
  while element=result.iterateNext
57
- elements << element.store_rand_object_key(@browser_jssh_objects)
57
+ elements << element
58
58
  end
59
59
  elements
60
60
  end
@@ -79,384 +79,5 @@ module Vapir
79
79
  base_element_class.factory(element_object, extra_for_contained)
80
80
  end
81
81
  end
82
-
83
- =begin
84
- #
85
- # Description:
86
- # Used to access a frame element. Usually an <frame> or <iframe> HTML tag.
87
- #
88
- # Input:
89
- # - how - The attribute used to identify the framet.
90
- # - what - The value of that attribute.
91
- # If only one parameter is supplied, "how" is by default taken as name and the
92
- # parameter supplied becomes the value of the name attribute.
93
- #
94
- # Typical usage:
95
- #
96
- # ff.frame(:index, 1)
97
- # ff.frame(:name , 'main_frame')
98
- # ff.frame('main_frame') # in this case, just a name is supplied.
99
- #
100
- # Output:
101
- # Frame object or nil if the specified frame does not exist.
102
- #
103
- def frame(how, what = nil)
104
- element_by_howwhat(Firefox::Frame, how, what)
105
- end
106
-
107
- #
108
- # Description:
109
- # Used to access a form element. Usually an <form> HTML tag.
110
- #
111
- # Input:
112
- # - how - The attribute used to identify the form.
113
- # - what - The value of that attribute.
114
- # If only one parameter is supplied, "how" is by default taken as name and the
115
- # parameter supplied becomes the value of the name attribute.
116
- #
117
- # Typical usage:
118
- #
119
- # ff.form(:index, 1)
120
- # ff.form(:name , 'main_form')
121
- # ff.form('main_form') # in this case, just a name is supplied.
122
- #
123
- # Output:
124
- # Form object.
125
- #
126
- def form(how, what=nil)
127
- element_by_howwhat(Firefox::Form, how, what)
128
- end
129
-
130
- #
131
- # Description:
132
- # Used to access a table. Usually an <table> HTML tag.
133
- #
134
- # Input:
135
- # - how - The attribute used to identify the table.
136
- # - what - The value of that attribute.
137
- #
138
- # Typical usage:
139
- #
140
- # ff.table(:index, 1) #index starts from 1.
141
- # ff.table(:id, 'main_table')
142
- #
143
- # Output:
144
- # Table object.
145
- #
146
- def table(how, what=nil)
147
- element_by_howwhat(Firefox::Table, how, what)
148
- end
149
-
150
- #
151
- # Description:
152
- # Used to access a table cell. Usually an <td> HTML tag.
153
- #
154
- # Input:
155
- # - how - The attribute used to identify the cell.
156
- # - what - The value of that attribute.
157
- #
158
- # Typical Usage:
159
- # ff.table_cell(:id, 'tb_cell')
160
- # ff.table_cell(:index, 1)
161
- #
162
- # Output:
163
- # TableCell Object
164
- #
165
- def table_cell(how, what=nil)
166
- element_by_howwhat(Firefox::TableCell, how, what)
167
- end
168
-
169
- #
170
- # Description:
171
- # Used to access a table row. Usually an <tr> HTML tag.
172
- #
173
- # Input:
174
- # - how - The attribute used to identify the row.
175
- # - what - The value of that attribute.
176
- #
177
- # Typical Usage:
178
- # ff.row(:id, 'tb_row')
179
- # ff.row(:index, 1)
180
- #
181
- # Output:
182
- # TableRow object
183
- #
184
- def table_row(how, what=nil)
185
- element_by_howwhat(Firefox::TableRow, how, what)
186
- end
187
-
188
- #
189
- # Description:
190
- # Used to access a button element. Usually an <input type = "button"> HTML tag.
191
- #
192
- # Input:
193
- # - how - The attribute used to identify the row.
194
- # - what - The value of that attribute.
195
- #
196
- # Typical Usage:
197
- # ff.button(:id, 'b_1') # access the button with an ID of b_1
198
- # ff.button(:name, 'verify_data') # access the button with a name of verify_data
199
- #
200
- # if only a single parameter is supplied, then :value is used as 'how' and parameter supplied is used as what.
201
- #
202
- # ff.button('Click Me') # access the button with a value of Click Me
203
- #
204
- # Output:
205
- # Button element.
206
- #
207
- def button(how, what=nil)
208
- element_by_howwhat(Firefox::Button, how, what)
209
- end
210
-
211
- #
212
- # Description:
213
- # Used for accessing a file field. Usually an <input type = file> HTML tag.
214
- #
215
- # Input:
216
- # - how - Attribute used to identify the file field element
217
- # - what - Value of that attribute.
218
- #
219
- # Typical Usage:
220
- # ff.file_field(:id, 'up_1') # access the file upload fff.d with an ID of up_1
221
- # ff.file_field(:name, 'upload') # access the file upload fff.d with a name of upload
222
- #
223
- # Output:
224
- # FileField object
225
- #
226
- def file_field(how, what = nil)
227
- element_by_howwhat(Firefox::FileField, how, what)
228
- end
229
-
230
- #
231
- # Description:
232
- # Used for accessing a text field. Usually an <input type = text> HTML tag. or a text area - a <textarea> tag
233
- #
234
- # Input:
235
- # - how - Attribute used to identify the text field element.
236
- # - what - Value of that attribute.
237
- #
238
- # Typical Usage:
239
- #
240
- # ff.text_field(:id, 'user_name') # access the text field with an ID of user_name
241
- # ff.text_field(:name, 'address') # access the text field with a name of address
242
- #
243
- # Output:
244
- # TextField object.
245
- #
246
- def text_field(how, what = nil)
247
- element_by_howwhat(Firefox::TextField, how, what)
248
- end
249
-
250
- #
251
- # Description:
252
- # Used to access hidden field element. Usually an <input type = hidden> HTML tag
253
- #
254
- # Input:
255
- # - how - Attribute used to identify the hidden element.
256
- # - what - Value of that attribute.
257
- #
258
- # Typical Usage:
259
- #
260
- # ff.hidden(:id, 'user_name') # access the hidden element with an ID of user_name
261
- # ff.hidden(:name, 'address') # access the hidden element with a name of address
262
- #
263
- # Output:
264
- # Hidden object.
265
- #
266
- def hidden(how, what=nil)
267
- element_by_howwhat(Firefox::Hidden, how, what)
268
- end
269
-
270
- #
271
- # Description:
272
- # Used to access select list element. Usually an <select> HTML tag.
273
- #
274
- # Input:
275
- # - how - Attribute used to identify the select element.
276
- # - what - Value of that attribute.
277
- #
278
- # Typical Usage:
279
- #
280
- # ff.select_list(:id, 'user_name') # access the select list with an ID of user_name
281
- # ff.select_list(:name, 'address') # access the select list with a name of address
282
- #
283
- # Output:
284
- # Select List object.
285
- #
286
- def select_list(how, what=nil)
287
- element_by_howwhat(Firefox::SelectList, how, what)
288
- end
289
- def option(how, what=nil)
290
- element_by_howwhat(Firefox::Option, how, what)
291
- end
292
- =end
293
- #
294
- # Description:
295
- # Used to access checkbox element. Usually an <input type = checkbox> HTML tag.
296
- #
297
- # Input:
298
- # - how - Attribute used to identify the check box element.
299
- # - what - Value of that attribute.
300
- #
301
- # Typical Usage:
302
- #
303
- # ff.checkbox(:id, 'user_name') # access the checkbox element with an ID of user_name
304
- # ff.checkbox(:name, 'address') # access the checkbox element with a name of address
305
- # In many instances, checkboxes on an html page have the same name, but are identified by different values. An example is shown next.
306
- #
307
- # <input type = checkbox name = email_frequency value = 'daily' > Daily Email
308
- # <input type = checkbox name = email_frequency value = 'Weekly'> Weekly Email
309
- # <input type = checkbox name = email_frequency value = 'monthly'>Monthly Email
310
- #
311
- # Vapir can access these using the following:
312
- #
313
- # ff.checkbox(:id, 'day_to_send' , 'monday' ) # access the check box with an id of day_to_send and a value of monday
314
- # ff.checkbox(:name ,'email_frequency', 'weekly') # access the check box with a name of email_frequency and a value of 'weekly'
315
- #
316
- # Output:
317
- # Checkbox object.
318
- #
319
- # def checkbox(how, what=nil, value=nil)
320
- # element_by_howwhat(Firefox::CheckBox, how, what, {:other_attributes => value ? {:value => value} : nil})
321
- # end
322
-
323
- #
324
- # Description:
325
- # Used to access radio button element. Usually an <input type = radio> HTML tag.
326
- #
327
- # Input:
328
- # - how - Attribute used to identify the radio button element.
329
- # - what - Value of that attribute.
330
- #
331
- # Typical Usage:
332
- #
333
- # ff.radio(:id, 'user_name') # access the radio button element with an ID of user_name
334
- # ff.radio(:name, 'address') # access the radio button element with a name of address
335
- # In many instances, radio buttons on an html page have the same name, but are identified by different values. An example is shown next.
336
- #
337
- # <input type = radio name = email_frequency value = 'daily' > Daily Email
338
- # <input type = radio name = email_frequency value = 'Weekly'> Weekly Email
339
- # <input type = radio name = email_frequency value = 'monthly'>Monthly Email
340
- #
341
- # Vapir can access these using the following:
342
- #
343
- # ff.radio(:id, 'day_to_send' , 'monday' ) # access the radio button with an id of day_to_send and a value of monday
344
- # ff.radio(:name ,'email_frequency', 'weekly') # access the radio button with a name of email_frequency and a value of 'weekly'
345
- #
346
- # Output:
347
- # Radio button object.
348
- #
349
- # def radio(how, what=nil, value=nil)
350
- # element_by_howwhat(Firefox::Radio, how, what, {:other_attributes => value ? {:value => value} : nil})
351
- # end
352
-
353
- #
354
- # Description:
355
- # Used to access link element. Usually an <a> HTML tag.
356
- #
357
- # Input:
358
- # - how - Attribute used to identify the link element.
359
- # - what - Value of that attribute.
360
- #
361
- # Typical Usage:
362
- #
363
- # ff.link(:id, 'user_name') # access the link element with an ID of user_name
364
- # ff.link(:name, 'address') # access the link element with a name of address
365
- #
366
- # Output:
367
- # Link object.
368
- #
369
- # def link(how, what=nil)
370
- # element_by_howwhat(Firefox::Link, how, what)
371
- # end
372
-
373
- #
374
- # Description:
375
- # Used to access image element. Usually an <img> HTML tag.
376
- #
377
- # Input:
378
- # - how - Attribute used to identify the image element.
379
- # - what - Value of that attribute.
380
- #
381
- # Typical Usage:
382
- #
383
- # ff.image(:id, 'user_name') # access the image element with an ID of user_name
384
- # ff.image(:name, 'address') # access the image element with a name of address
385
- #
386
- # Output:
387
- # Image object.
388
- #
389
- # def image(how, what = nil)
390
- # element_by_howwhat(Firefox::Image, how, what)
391
- # end
392
-
393
-
394
- #
395
- # Description:
396
- # Used to access a definition list element - a <dl> HTML tag.
397
- #
398
- # Input:
399
- # - how - Attribute used to identify the definition list element.
400
- # - what - Value of that attribute.
401
- #
402
- # Typical Usage:
403
- #
404
- # ff.dl(:id, 'user_name') # access the dl element with an ID of user_name
405
- # ff.dl(:title, 'address') # access the dl element with a title of address
406
- #
407
- # Returns:
408
- # Dl object.
409
- #
410
- # def dl(how, what = nil)
411
- # element_by_howwhat(Firefox::Dl, how, what)
412
- # end
413
-
414
- #
415
- # Description:
416
- # Used to access a definition term element - a <dt> HTML tag.
417
- #
418
- # Input:
419
- # - how - Attribute used to identify the image element.
420
- # - what - Value of that attribute.
421
- #
422
- # Typical Usage:
423
- #
424
- # ff.dt(:id, 'user_name') # access the dt element with an ID of user_name
425
- # ff.dt(:title, 'address') # access the dt element with a title of address
426
- #
427
- # Returns:
428
- # Dt object.
429
- #
430
- # def dt(how, what = nil)
431
- # element_by_howwhat(Firefox::Dt, how, what)
432
- # end
433
-
434
- #
435
- # Description:
436
- # Used to access a definition description element - a <dd> HTML tag.
437
- #
438
- # Input:
439
- # - how - Attribute used to identify the image element.
440
- # - what - Value of that attribute.
441
- #
442
- # Typical Usage:
443
- #
444
- # ff.dd(:id, 'user_name') # access the dd element with an ID of user_name
445
- # ff.dd(:title, 'address') # access the dd element with a title of address
446
- #
447
- # Returns:
448
- # Dd object.
449
- #
450
- # def dd(how, what = nil)
451
- # element_by_howwhat(Firefox::Dd, how, what)
452
- # end
453
-
454
- # Description:
455
- # Searching for Page Elements. Not for external consumption.
456
- #
457
- # def ole_inner_elements
458
- # return document.body.all
459
- # end
460
- # private :ole_inner_elements
461
82
  end
462
83
  end # module
@@ -23,30 +23,15 @@ module Vapir
23
23
  attr_reader :jssh_socket
24
24
 
25
25
  def outer_html
26
- # in case doing appendChild of self on the temp_parent_element causes it to be removed from our parentNode, we first copy the list of parentNode's childNodes (our siblings)
27
- # todo/fix: can use cloneNode instead of all this?
28
- if parentNode=element_object.parentNode
29
- parentNode=parentNode.store_rand_temp
30
- orig_siblings=jssh_socket.object('[]').store_rand_prefix('firewatir_elements')
31
- parentNode.childNodes.to_array.each do |node|
32
- orig_siblings.push node
33
- end
34
- end
26
+ orig_siblings_length = (parentNode = element_object.parentNode) && parentNode.childNodes.length
35
27
 
36
28
  temp_parent_element=document_object.createElement('div')
37
- temp_parent_element.appendChild(element_object)
29
+ temp_parent_element.appendChild(element_object.cloneNode(true))
38
30
  self_outer_html=temp_parent_element.innerHTML
39
31
 
40
- # reinsert self in parentNode's childNodes if we have disappeared due to the appendChild on different parent
41
- if parentNode && parentNode.childNodes.length != orig_siblings.length
42
- while parentNode.childNodes.length > 0
43
- parentNode.removeChild(parentNode.childNodes[0])
44
- end
45
- while orig_siblings.length > 0
46
- parentNode.appendChild orig_siblings.shift
47
- end
48
- end
49
-
32
+ new_siblings_length = (parentNode = element_object.parentNode) && parentNode.childNodes.length
33
+ #debug code:
34
+ raise "the parent somehow changed - had #{orig_siblings_length} children; now has #{new_siblings_length}" unless orig_siblings_length==new_siblings_length
50
35
  return self_outer_html
51
36
  end
52
37
  alias outerHTML outer_html
@@ -55,8 +40,6 @@ module Vapir
55
40
  # this is generally the same as the dom object, but different for Browser and Frame.
56
41
  alias containing_object element_object
57
42
 
58
- # alias ole_object element_object
59
-
60
43
  private
61
44
  def base_element_class
62
45
  Firefox::Element
@@ -264,14 +247,5 @@ module Vapir
264
247
  })").call(@element_object, container.document_object) # use the container's document so that frames look at their parent document, not their own document
265
248
  end
266
249
 
267
- # def invoke(js_method)
268
- # element_object.invoke(js_method)
269
- # end
270
-
271
- # def assign(property, value)
272
- # locate
273
- # element_object.attr(property).assign(value)
274
- # end
275
-
276
250
  end # Element
277
251
  end # Vapir
@@ -45,14 +45,14 @@ class Object
45
45
  end
46
46
 
47
47
 
48
- class JsshError < StandardError
49
- attr_accessor :source, :lineNumber, :stack, :fileName
50
- end
48
+ class JsshError < StandardError;end
51
49
  # this exception covers all connection errors either on startup or during usage
52
50
  class JsshConnectionError < JsshError;end
53
51
  # This exception is thrown if we are unable to connect to JSSh.
54
52
  class JsshUnableToStart < JsshConnectionError;end
55
- class JsshJavascriptError < JsshError;end
53
+ class JsshJavascriptError < JsshError
54
+ attr_accessor :source, :js_err, :lineNumber, :stack, :fileName
55
+ end
56
56
  class JsshSyntaxError < JsshJavascriptError;end
57
57
  class JsshUndefinedValueError < JsshJavascriptError;end
58
58
 
@@ -134,6 +134,16 @@ class JsshSocket
134
134
  end
135
135
 
136
136
  private
137
+ # sets the error state if an exception is encountered while running the given block. the
138
+ # exception is not rescued.
139
+ def ensuring_extra_handled
140
+ begin
141
+ yield
142
+ rescue Exception
143
+ @expecting_extra_maybe = true
144
+ raise
145
+ end
146
+ end
137
147
  # reads from the socket and returns what seems to be the value that should be returned, by stripping prompts
138
148
  # from the beginning and end where appropriate.
139
149
  #
@@ -164,8 +174,8 @@ class JsshSocket
164
174
  already_read_length=false
165
175
  expected_size=nil
166
176
  # logger.add(-1) { "RECV_SOCKET is starting. timeout=#{timeout}" }
167
- while size_to_read > 0 && Kernel.select([@socket] , nil , nil, timeout)
168
- data = @socket.recv(size_to_read)
177
+ while size_to_read > 0 && ensuring_extra_handled { Kernel.select([@socket] , nil , nil, timeout) }
178
+ data = ensuring_extra_handled { @socket.recv(size_to_read) }
169
179
  received_data << data
170
180
  value_string << data
171
181
  if @expecting_prompt && utf8_length_safe(value_string) > PROMPT.length
@@ -290,6 +300,7 @@ class JsshSocket
290
300
  end
291
301
  err=errclass.new("#{message}\nEvaluating:\n#{source}\n\nOther stuff:\n#{stuff.inspect}")
292
302
  err.source=source
303
+ err.js_err=stuff
293
304
  ["lineNumber", "stack", "fileName"].each do |attr|
294
305
  if stuff.key?(attr)
295
306
  err.send(:"#{attr}=", stuff[attr])
@@ -504,6 +515,9 @@ class JsshSocket
504
515
  def object(ref)
505
516
  JsshObject.new(ref, self, :debug_name => ref)
506
517
  end
518
+ def object_in_temp(ref)
519
+ object(ref).store_rand_temp
520
+ end
507
521
 
508
522
  def temp_object
509
523
  @temp_object ||= object('JsshTemp')
@@ -623,19 +637,14 @@ class JsshObject
623
637
  else
624
638
  case self.type
625
639
  when 'undefined'
626
- if function_result
640
+ if !options[:error_on_undefined]
627
641
  nil
628
- elsif !options[:error_on_undefined]
629
- self
630
642
  else
631
643
  raise JsshUndefinedValueError, "undefined expression #{ref}"
632
644
  end
633
645
  when 'boolean','number','string','null'
634
646
  val
635
- when 'function','object'
636
- self
637
- else
638
- # here we perhaps could (but won't for now) raise JsshError, "Unknown type: #{type}"
647
+ else # 'function','object', or anything else
639
648
  self
640
649
  end
641
650
  end
@@ -785,7 +794,7 @@ class JsshObject
785
794
  binary_operator('%', operand)
786
795
  end
787
796
  def ==(operand)
788
- binary_operator('==', operand)
797
+ operand.is_a?(JsshObject) && binary_operator('==', operand)
789
798
  end
790
799
  def >(operand)
791
800
  binary_operator('>', operand)
@@ -999,9 +1008,31 @@ class JsshObject
999
1008
  end
1000
1009
 
1001
1010
  class JsshDOMNode < JsshObject
1011
+ def inspect_stuff
1012
+ [:nodeName, :nodeType, :nodeValue, :tagName, :textContent, :id, :name, :value, :type, :className, :hidden].map do |attrn|
1013
+ attr=attr(attrn)
1014
+ if ['undefined','null'].include?(attr.type)
1015
+ nil
1016
+ else
1017
+ [attrn, attr.val_or_object(:error_on_undefined => false)]
1018
+ end
1019
+ end.compact
1020
+ end
1002
1021
  def inspect
1003
- # "\#<#{self.class.name} #{[:nodeName, :nodeType, :tagName, :textContent, :id, :name, :value, :type].map{|attrn| attr=attr(attrn);attrn.to_s+'='+(attr.type=='undefined' ? 'undefined' : attr.val_or_object(:error_on_undefined => false).inspect)}.join(', ')}>"
1004
- "\#<#{self.class.name} #{[:nodeName, :nodeType, :nodeValue, :tagName, :textContent, :id, :name, :value, :type, :className, :hidden].map{|attrn|attr=attr(attrn);(['undefined','null'].include?(attr.type) ? nil : attrn.to_s+'='+attr.val_or_object(:error_on_undefined => false).inspect)}.select{|a|a}.join(', ')}>"
1022
+ "\#<#{self.class.name} #{inspect_stuff.map{|(k,v)| "#{k}=#{v.inspect}"}.join(', ')}>"
1023
+ end
1024
+ def pretty_print(pp)
1025
+ pp.object_address_group(self) do
1026
+ pp.seplist(inspect_stuff, lambda { pp.text ',' }) do |attr_val|
1027
+ pp.breakable ' '
1028
+ pp.group(0) do
1029
+ pp.text attr_val.first.to_s
1030
+ pp.text ': '
1031
+ #pp.breakable
1032
+ pp.text attr_val.last.inspect
1033
+ end
1034
+ end
1035
+ end
1005
1036
  end
1006
1037
  def dump(options={})
1007
1038
  options={:recurse => nil, :level => 0}.merge(options)
@@ -125,7 +125,7 @@ module Vapir
125
125
  containing_modal_dialog.modal_window
126
126
  end
127
127
  def locate!(options={})
128
- exists? || raise(Vapir::Exception::NoMatchingWindowFoundException, "The modal dialog seems to have stopped existing.")
128
+ exists? || raise(Vapir::Exception::WindowGoneException, "The modal dialog seems to have stopped existing.")
129
129
  end
130
130
 
131
131
  def exists?
@@ -1,20 +1,10 @@
1
1
  require 'vapir-firefox/container'
2
+ require 'vapir-common/page_container'
2
3
 
3
4
  module Vapir
4
5
  module Firefox::PageContainer
5
- def containing_object
6
- document_object
7
- end
6
+ include Vapir::PageContainer
8
7
  include Firefox::Container
9
- def url
10
- document_object.location.href
11
- end
12
- def title
13
- document_object.title
14
- end
15
- def document_element
16
- document_object.documentElement
17
- end
18
8
  #def content_window_object
19
9
  # document_object.parentWindow
20
10
  #end
@@ -22,10 +12,6 @@ module Vapir
22
12
  document_element.textContent
23
13
  end
24
14
 
25
- def page_container
26
- self
27
- end
28
-
29
15
  # returns nil or raises an error if the given javascript errors.
30
16
  #
31
17
  # todo/fix: this should return the last evaluated value, like ie's?
@@ -42,50 +28,19 @@ module Vapir
42
28
  end
43
29
 
44
30
  # Returns the html of the document
45
- def html
46
- jssh_socket.value_json("(function(document){
47
- var temp_el=document.createElement('div');
48
- var orig_childs=[];
49
- while(document.childNodes.length > 0)
50
- { orig_childs.push(document.childNodes[0]);
51
- document.removeChild(document.childNodes[0]);
52
- /* we remove each childNode here because doing appendChild on temp_el removes it
53
- * from document anyway (at least when appendChild works), so we just remove all
54
- * childNodes so that adding them back in the right order is simpler (using orig_childs)
55
- */
56
- }
57
- for(var i in orig_childs)
31
+ def outer_html
32
+ jssh_socket.object("(function(document)
33
+ { var temp_el=document.createElement('div');
34
+ for(var i in document.childNodes)
58
35
  { try
59
- { temp_el.appendChild(orig_childs[i]);
36
+ { temp_el.appendChild(document.childNodes[i].cloneNode(true));
60
37
  }
61
38
  catch(e)
62
39
  {}
63
40
  }
64
- retval=temp_el.innerHTML;
65
- while(orig_childs.length > 0)
66
- { document.appendChild(orig_childs.shift());
67
- }
68
- return retval;
69
- })(#{document_object.ref})")
70
- =begin
71
- temp_el=document_object.createElement('div') # make a temporary element
72
- orig_childs=jssh_socket.object('[]').store_rand_object_key(@browser_jssh_objects)
73
- while document_object.childNodes.length > 0
74
- orig_childs.push(document_object.childNodes[0])
75
- document_object.removeChild(document_object.childNodes[0])
76
- end
77
- orig_childs.to_array.each do |child|
78
- begin
79
- temp_el.appendChild(child)
80
- rescue JsshError
81
- end
82
- end
83
- result=temp_el.innerHTML
84
- while orig_childs.length > 0
85
- document_object.appendChild(orig_childs.shift())
86
- end
87
- return result
88
- =end
41
+ return temp_el.innerHTML;
42
+ })").call(document_object)
89
43
  end
44
+ alias html outer_html
90
45
  end
91
46
  end
@@ -1,5 +1,5 @@
1
1
  module Vapir
2
2
  class Firefox
3
- VERSION = '1.7.0'
3
+ VERSION = '1.7.1.rc1'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vapir-firefox
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ prerelease: true
5
5
  segments:
6
6
  - 1
7
7
  - 7
8
- - 0
9
- version: 1.7.0
8
+ - 1
9
+ - rc1
10
+ version: 1.7.1.rc1
10
11
  platform: ruby
11
12
  authors:
12
13
  - Ethan
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-06-02 00:00:00 -04:00
18
+ date: 2010-08-06 00:00:00 -04:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -27,8 +28,9 @@ dependencies:
27
28
  segments:
28
29
  - 1
29
30
  - 7
30
- - 0
31
- version: 1.7.0
31
+ - 1
32
+ - rc1
33
+ version: 1.7.1.rc1
32
34
  type: :runtime
33
35
  version_requirements: *id001
34
36
  - !ruby/object:Gem::Dependency
@@ -119,11 +121,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
121
  version: "0"
120
122
  required_rubygems_version: !ruby/object:Gem::Requirement
121
123
  requirements:
122
- - - ">="
124
+ - - ">"
123
125
  - !ruby/object:Gem::Version
124
126
  segments:
125
- - 0
126
- version: "0"
127
+ - 1
128
+ - 3
129
+ - 1
130
+ version: 1.3.1
127
131
  requirements:
128
132
  - Firefox browser with JSSH extension installed
129
133
  rubyforge_project: