opal-browser 0.1.0.beta1 → 0.2.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +60 -0
- data/.yardopts +1 -1
- data/Gemfile +7 -2
- data/LICENSE +19 -0
- data/README.md +74 -10
- data/config.ru +2 -1
- data/index.html.erb +22 -0
- data/opal-browser.gemspec +9 -11
- data/opal/browser.rb +1 -1
- data/opal/browser/animation_frame.rb +66 -9
- data/opal/browser/canvas.rb +72 -18
- data/opal/browser/canvas/data.rb +1 -1
- data/opal/browser/console.rb +3 -37
- data/opal/browser/cookies.rb +80 -24
- data/opal/browser/css/declaration.rb +0 -5
- data/opal/browser/{timeout.rb → delay.rb} +13 -13
- data/opal/browser/dom.rb +0 -2
- data/opal/browser/dom/attribute.rb +6 -0
- data/opal/browser/dom/builder.rb +4 -8
- data/opal/browser/dom/character_data.rb +43 -7
- data/opal/browser/dom/document.rb +13 -11
- data/opal/browser/dom/element.rb +127 -29
- data/opal/browser/dom/element/image.rb +23 -0
- data/opal/browser/dom/element/offset.rb +27 -10
- data/opal/browser/dom/element/scroll.rb +32 -12
- data/opal/browser/dom/element/size.rb +29 -0
- data/opal/browser/dom/event.rb +88 -75
- data/opal/browser/dom/event/animation.rb +16 -4
- data/opal/browser/dom/event/audio_processing.rb +6 -4
- data/opal/browser/dom/event/base.rb +229 -64
- data/opal/browser/dom/event/before_unload.rb +6 -4
- data/opal/browser/dom/event/clipboard.rb +6 -4
- data/opal/browser/dom/event/close.rb +16 -4
- data/opal/browser/dom/event/composition.rb +16 -4
- data/opal/browser/dom/event/custom.rb +43 -8
- data/opal/browser/dom/event/device_light.rb +6 -4
- data/opal/browser/dom/event/device_motion.rb +17 -4
- data/opal/browser/dom/event/device_orientation.rb +16 -4
- data/opal/browser/dom/event/device_proximity.rb +6 -4
- data/opal/browser/dom/event/drag.rb +34 -28
- data/opal/browser/dom/event/focus.rb +21 -5
- data/opal/browser/dom/event/gamepad.rb +33 -20
- data/opal/browser/dom/event/hash_change.rb +6 -4
- data/opal/browser/dom/event/keyboard.rb +45 -23
- data/opal/browser/dom/event/message.rb +28 -8
- data/opal/browser/dom/event/mouse.rb +26 -25
- data/opal/browser/dom/event/page_transition.rb +6 -4
- data/opal/browser/dom/event/pop_state.rb +16 -4
- data/opal/browser/dom/event/progress.rb +16 -4
- data/opal/browser/dom/event/sensor.rb +6 -4
- data/opal/browser/dom/event/storage.rb +6 -4
- data/opal/browser/dom/event/touch.rb +10 -19
- data/opal/browser/dom/event/ui.rb +19 -3
- data/opal/browser/dom/event/wheel.rb +2 -2
- data/opal/browser/dom/mutation_observer.rb +65 -5
- data/opal/browser/dom/node.rb +164 -59
- data/opal/browser/dom/node_set.rb +4 -0
- data/opal/browser/dom/text.rb +16 -1
- data/opal/browser/event_source.rb +5 -2
- data/opal/browser/history.rb +51 -15
- data/opal/browser/http.rb +22 -7
- data/opal/browser/http/headers.rb +5 -0
- data/opal/browser/http/request.rb +40 -10
- data/opal/browser/immediate.rb +123 -9
- data/opal/browser/interval.rb +8 -13
- data/opal/browser/location.rb +13 -3
- data/opal/browser/navigator.rb +9 -6
- data/opal/browser/screen.rb +31 -5
- data/opal/browser/socket.rb +8 -4
- data/opal/browser/storage.rb +118 -33
- data/opal/browser/support.rb +232 -0
- data/opal/browser/utils.rb +24 -6
- data/opal/browser/version.rb +1 -1
- data/opal/browser/window.rb +1 -2
- data/opal/browser/window/scroll.rb +21 -11
- data/opal/browser/window/size.rb +16 -6
- data/opal/browser/window/view.rb +23 -5
- data/spec/dom/builder_spec.rb +19 -19
- data/spec/dom/document_spec.rb +6 -6
- data/spec/dom/element_spec.rb +5 -5
- data/spec/dom/event_spec.rb +20 -20
- data/spec/dom/mutation_observer_spec.rb +5 -5
- data/spec/dom/node_spec.rb +39 -27
- data/spec/dom_spec.rb +10 -8
- data/spec/event_source_spec.rb +12 -12
- data/spec/history_spec.rb +24 -15
- data/spec/http_spec.rb +18 -17
- data/spec/immediate_spec.rb +9 -7
- data/spec/runner.rb +114 -0
- data/spec/socket_spec.rb +8 -8
- data/spec/spec_helper.rb +1 -0
- data/spec/storage_spec.rb +6 -6
- data/spec/wgxpath.install.js +49 -0
- data/spec/window_spec.rb +2 -2
- metadata +21 -54
- data/opal/browser/compatibility.rb +0 -59
- data/opal/browser/compatibility/animation_frame.rb +0 -93
- data/opal/browser/compatibility/dom/document/window.rb +0 -15
- data/opal/browser/compatibility/dom/element/css.rb +0 -15
- data/opal/browser/compatibility/dom/element/matches.rb +0 -31
- data/opal/browser/compatibility/dom/element/offset.rb +0 -20
- data/opal/browser/compatibility/dom/element/scroll.rb +0 -25
- data/opal/browser/compatibility/dom/element/style.rb +0 -15
- data/opal/browser/compatibility/dom/mutation_observer.rb +0 -47
- data/opal/browser/compatibility/http/request.rb +0 -15
- data/opal/browser/compatibility/immediate.rb +0 -107
- data/opal/browser/compatibility/window/scroll.rb +0 -27
- data/opal/browser/compatibility/window/size.rb +0 -13
- data/opal/browser/compatibility/window/view.rb +0 -13
- data/opal/browser/dom/compatibility.rb +0 -8
- data/opal/browser/http/compatibility.rb +0 -1
- data/opal/browser/window/compatibility.rb +0 -3
data/spec/history_spec.rb
CHANGED
@@ -4,32 +4,32 @@ require 'browser/history'
|
|
4
4
|
describe Browser::History do
|
5
5
|
describe '#current' do
|
6
6
|
it 'should return the current location' do
|
7
|
-
$window.history.current.
|
7
|
+
expect($window.history.current).to eq('/')
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '#push' do
|
12
12
|
it 'should change location' do
|
13
|
-
$window.history.current.
|
13
|
+
expect($window.history.current).to eq('/')
|
14
14
|
$window.history.push('/lol')
|
15
|
-
$window.history.current.
|
15
|
+
expect($window.history.current).to eq('/lol')
|
16
16
|
$window.history.push('/')
|
17
|
-
$window.history.current.
|
17
|
+
expect($window.history.current).to eq('/')
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
describe '#back' do
|
22
22
|
async 'should go back once' do
|
23
|
-
$window.history.current.
|
23
|
+
expect($window.history.current).to eq('/')
|
24
24
|
$window.history.push('/wut')
|
25
|
-
$window.history.current.
|
25
|
+
expect($window.history.current).to eq('/wut')
|
26
26
|
|
27
27
|
$window.on 'pop:state' do |e|
|
28
|
-
run_async {
|
29
|
-
$window.history.current.should == '/'
|
30
|
-
}
|
31
|
-
|
32
28
|
e.off
|
29
|
+
|
30
|
+
async {
|
31
|
+
expect($window.history.current).to eq('/')
|
32
|
+
}
|
33
33
|
end
|
34
34
|
|
35
35
|
$window.history.back
|
@@ -37,12 +37,21 @@ describe Browser::History do
|
|
37
37
|
end
|
38
38
|
|
39
39
|
describe '#state' do
|
40
|
-
|
40
|
+
async 'gets the right state' do
|
41
41
|
$window.history.push('/wut', 42)
|
42
|
-
$window.history.state.should
|
42
|
+
$window.history.state.should eq(42)
|
43
43
|
$window.history.push('/omg', 23)
|
44
|
-
$window.history.state.should
|
44
|
+
$window.history.state.should eq(23)
|
45
|
+
|
46
|
+
$window.on 'pop:state' do |e|
|
47
|
+
e.off
|
48
|
+
|
49
|
+
async {
|
50
|
+
expect(true).to eq(true)
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
45
54
|
$window.history.back(2)
|
46
55
|
end
|
47
|
-
end
|
48
|
-
end
|
56
|
+
end if Browser.supports? 'History.state'
|
57
|
+
end if Browser::History.supported?
|
data/spec/http_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'spec_helper'
|
1
2
|
require 'browser/http'
|
2
3
|
|
3
4
|
describe Browser::HTTP do
|
@@ -8,11 +9,11 @@ describe Browser::HTTP do
|
|
8
9
|
describe '.get' do
|
9
10
|
async 'fetches a path' do
|
10
11
|
Browser::HTTP.get(path).then {|res|
|
11
|
-
|
12
|
-
res.text.
|
12
|
+
async {
|
13
|
+
expect(res.text).to eq('lol')
|
13
14
|
}
|
14
15
|
}.rescue {
|
15
|
-
|
16
|
+
async {
|
16
17
|
fail
|
17
18
|
}
|
18
19
|
}
|
@@ -21,18 +22,18 @@ describe Browser::HTTP do
|
|
21
22
|
|
22
23
|
describe '.get!' do
|
23
24
|
it 'fetches a path' do
|
24
|
-
Browser::HTTP.get!(path).text.
|
25
|
+
expect(Browser::HTTP.get!(path).text).to eq('lol')
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
29
|
describe '.post' do
|
29
30
|
async 'sends parameters properly' do
|
30
31
|
Browser::HTTP.post(path, lol: 'wut').then {|res|
|
31
|
-
|
32
|
-
res.text.
|
32
|
+
async {
|
33
|
+
expect(res.text).to eq('ok')
|
33
34
|
}
|
34
35
|
}.rescue {
|
35
|
-
|
36
|
+
async {
|
36
37
|
fail
|
37
38
|
}
|
38
39
|
}
|
@@ -41,18 +42,18 @@ describe Browser::HTTP do
|
|
41
42
|
|
42
43
|
describe '.post!' do
|
43
44
|
it 'sends parameters properly' do
|
44
|
-
Browser::HTTP.post!(path, lol: 'wut').text.
|
45
|
+
expect(Browser::HTTP.post!(path, lol: 'wut').text).to eq('ok')
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
48
49
|
describe '.put' do
|
49
50
|
async 'sends parameters properly' do
|
50
51
|
Browser::HTTP.put(path, lol: 'wut').then {|res|
|
51
|
-
|
52
|
-
res.text.
|
52
|
+
async {
|
53
|
+
expect(res.text).to eq('ok')
|
53
54
|
}
|
54
55
|
}.rescue {
|
55
|
-
|
56
|
+
async {
|
56
57
|
fail
|
57
58
|
}
|
58
59
|
}
|
@@ -61,18 +62,18 @@ describe Browser::HTTP do
|
|
61
62
|
|
62
63
|
describe '.put!' do
|
63
64
|
it 'sends parameters properly' do
|
64
|
-
Browser::HTTP.put!(path, lol: 'wut').text.
|
65
|
+
expect(Browser::HTTP.put!(path, lol: 'wut').text).to eq('ok')
|
65
66
|
end
|
66
67
|
end
|
67
68
|
|
68
69
|
describe '.delete' do
|
69
70
|
async 'fetches a path' do
|
70
71
|
Browser::HTTP.delete(path).then {|res|
|
71
|
-
|
72
|
-
res.text.
|
72
|
+
async {
|
73
|
+
expect(res.text).to eq('lol')
|
73
74
|
}
|
74
75
|
}.rescue {
|
75
|
-
|
76
|
+
async {
|
76
77
|
fail
|
77
78
|
}
|
78
79
|
}
|
@@ -81,7 +82,7 @@ describe Browser::HTTP do
|
|
81
82
|
|
82
83
|
describe '.delete!' do
|
83
84
|
it 'fetches a path' do
|
84
|
-
Browser::HTTP.delete!(path).text.
|
85
|
+
expect(Browser::HTTP.delete!(path).text).to eq('lol')
|
85
86
|
end
|
86
87
|
end
|
87
|
-
end
|
88
|
+
end if Browser::HTTP.supported?
|
data/spec/immediate_spec.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'browser/immediate'
|
3
3
|
|
4
|
-
describe
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
describe Proc do
|
5
|
+
describe '#defer' do
|
6
|
+
async 'defers the parameters' do
|
7
|
+
proc {|a|
|
8
|
+
async {
|
9
|
+
expect(a).to eq(42)
|
10
|
+
}
|
11
|
+
}.defer(42)
|
12
|
+
end
|
11
13
|
end
|
12
14
|
end
|
data/spec/runner.rb
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
require 'selenium/webdriver'
|
3
|
+
require 'rest_client'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
# setup tunnel
|
7
|
+
begin
|
8
|
+
File.open('tunnel.jar', 'w') {|f|
|
9
|
+
f.write RestClient.get('http://www.browserstack.com/BrowserStackTunnel.jar').to_str
|
10
|
+
}
|
11
|
+
|
12
|
+
tunnel = IO.popen 'java -jar tunnel.jar $BS_AUTHKEY localhost,9292,0 -tunnelIdentifier $TRAVIS_JOB_ID'
|
13
|
+
|
14
|
+
loop do
|
15
|
+
break if tunnel.gets.start_with? 'You can now access'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# configure based on environment variables
|
20
|
+
hub = "http://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub.browserstack.com/wd/hub"
|
21
|
+
plan = "https://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@www.browserstack.com/automate/plan.json"
|
22
|
+
cap = Selenium::WebDriver::Remote::Capabilities.new
|
23
|
+
|
24
|
+
cap['platform'] = ENV['SELENIUM_PLATFORM'] || 'ANY'
|
25
|
+
cap['browser'] = ENV['SELENIUM_BROWSER'] || 'chrome'
|
26
|
+
cap['browser_version'] = ENV['SELENIUM_VERSION'] if ENV['SELENIUM_VERSION']
|
27
|
+
|
28
|
+
cap['browserstack.tunnelIdentifier'] = ENV['TRAVIS_JOB_ID']
|
29
|
+
cap['browserstack.tunnel'] = 'true'
|
30
|
+
cap['browserstack.debug'] = 'false'
|
31
|
+
|
32
|
+
print 'Loading...'
|
33
|
+
|
34
|
+
# wait until there's a spot in the parallel jobs
|
35
|
+
begin
|
36
|
+
loop do
|
37
|
+
state = JSON.parse(RestClient.get(plan).to_str)
|
38
|
+
|
39
|
+
if state["parallel_sessions_running"] < state["parallel_sessions_max_allowed"]
|
40
|
+
break
|
41
|
+
end
|
42
|
+
|
43
|
+
print '.'
|
44
|
+
sleep 30
|
45
|
+
end
|
46
|
+
|
47
|
+
browser = Selenium::WebDriver.for(:remote, url: hub, desired_capabilities: cap)
|
48
|
+
browser.navigate.to('http://localhost:9292')
|
49
|
+
rescue Selenium::WebDriver::Error::UnknownError
|
50
|
+
retry
|
51
|
+
end
|
52
|
+
|
53
|
+
# if we don't quit the browser it will stall
|
54
|
+
at_exit {
|
55
|
+
browser.quit
|
56
|
+
}
|
57
|
+
|
58
|
+
# the title is a good way to know if anything went wrong while fetching the
|
59
|
+
# page
|
60
|
+
Selenium::WebDriver::Wait.new(timeout: 30, interval: 5).until {
|
61
|
+
not browser.title.strip.empty?
|
62
|
+
}
|
63
|
+
|
64
|
+
unless browser.title =~ /Opal Browser/
|
65
|
+
puts "\rThe page failed loading."
|
66
|
+
exit 1
|
67
|
+
end
|
68
|
+
|
69
|
+
# wait until the specs are running or there has been an error in the loading of
|
70
|
+
# the specs
|
71
|
+
begin
|
72
|
+
Selenium::WebDriver::Wait.new(timeout: 30, interval: 5).until {
|
73
|
+
(browser['rspec-error'] rescue false) ||
|
74
|
+
(browser[class: 'rspec-report'] rescue false)
|
75
|
+
}
|
76
|
+
|
77
|
+
if element = browser['rspec-error'] rescue nil
|
78
|
+
puts "\r#{element.text}"
|
79
|
+
exit 1
|
80
|
+
end
|
81
|
+
rescue Selenium::WebDriver::Error::TimeOutError; end
|
82
|
+
|
83
|
+
print "\rRunning specs..."
|
84
|
+
|
85
|
+
# wait until the specs have finished, thus changing the content of #totals
|
86
|
+
Selenium::WebDriver::Wait.new(timeout: 1200, interval: 30).until {
|
87
|
+
print '.'
|
88
|
+
|
89
|
+
not browser['totals'].text.strip.empty?
|
90
|
+
}
|
91
|
+
|
92
|
+
totals = browser['totals'].text
|
93
|
+
duration = browser[css: '#duration strong'].text
|
94
|
+
|
95
|
+
print "\r#{totals} in #{duration}"
|
96
|
+
|
97
|
+
# take a screenshot and upload it to imgur
|
98
|
+
begin
|
99
|
+
browser.save_screenshot('screenshot.png')
|
100
|
+
response = RestClient.post('https://api.imgur.com/3/upload',
|
101
|
+
{ image: File.open('screenshot.png') },
|
102
|
+
{ 'Authorization' => 'Client-ID 1979876fe2a097e' })
|
103
|
+
|
104
|
+
print " ("
|
105
|
+
print JSON.parse(response.to_str)['data']['link']
|
106
|
+
puts ")"
|
107
|
+
rescue Exception
|
108
|
+
puts
|
109
|
+
end
|
110
|
+
|
111
|
+
# no failures, happy times
|
112
|
+
unless totals =~ / 0 failures/
|
113
|
+
exit 1
|
114
|
+
end
|
data/spec/socket_spec.rb
CHANGED
@@ -8,8 +8,8 @@ describe Browser::Socket do
|
|
8
8
|
async 'creates a socket' do
|
9
9
|
Browser::Socket.new ws do |s|
|
10
10
|
s.on :open do |e|
|
11
|
-
|
12
|
-
e.target.
|
11
|
+
async {
|
12
|
+
expect(e.target).to be_a(Browser::Socket)
|
13
13
|
}
|
14
14
|
end
|
15
15
|
end
|
@@ -18,8 +18,8 @@ describe Browser::Socket do
|
|
18
18
|
async 'receives messages' do
|
19
19
|
Browser::Socket.new ws do |s|
|
20
20
|
s.on :message do |e|
|
21
|
-
|
22
|
-
e.data.
|
21
|
+
async {
|
22
|
+
expect(e.data).to eq('lol')
|
23
23
|
}
|
24
24
|
end
|
25
25
|
end
|
@@ -28,15 +28,15 @@ describe Browser::Socket do
|
|
28
28
|
async 'sends messages' do
|
29
29
|
Browser::Socket.new ws do |s|
|
30
30
|
s.on :message do |e|
|
31
|
+
e.off
|
32
|
+
|
31
33
|
s.print 'omg'
|
32
34
|
|
33
35
|
s.on :message do |e|
|
34
|
-
|
35
|
-
e.data.
|
36
|
+
async {
|
37
|
+
expect(e.data).to eq('omg')
|
36
38
|
}
|
37
39
|
end
|
38
|
-
|
39
|
-
e.off
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/storage_spec.rb
CHANGED
@@ -4,23 +4,23 @@ require 'browser/storage'
|
|
4
4
|
describe Browser::Window do
|
5
5
|
describe '#storage' do
|
6
6
|
it 'creates a new storage' do
|
7
|
-
$window.storage.
|
7
|
+
expect($window.storage).to be_a(Browser::Storage)
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'creates a storage with the proper name' do
|
11
|
-
$window.storage.name.
|
12
|
-
$window.storage(:spec).name.
|
11
|
+
expect($window.storage.name).to eq(:default)
|
12
|
+
expect($window.storage(:spec).name).to eq(:spec)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
describe '#session_storage' do
|
17
17
|
it 'creates a new session storage' do
|
18
|
-
$window.session_storage.
|
18
|
+
expect($window.session_storage).to be_a(Browser::SessionStorage)
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'creates a session storage with the proper name' do
|
22
|
-
$window.session_storage.name.
|
23
|
-
$window.session_storage(:spec).name.
|
22
|
+
expect($window.session_storage.name).to eq(:default)
|
23
|
+
expect($window.session_storage(:spec).name).to eq(:spec)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
(function(){function h(a){return function(){return this[a]}}function k(a){return function(){return a}}var l=this;
|
2
|
+
function aa(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
|
3
|
+
else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function m(a){return"string"==typeof a}function ba(a,b,c){return a.call.apply(a.bind,arguments)}function ca(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}
|
4
|
+
function n(a,b,c){n=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ba:ca;return n.apply(null,arguments)}function da(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var b=c.slice();b.push.apply(b,arguments);return a.apply(this,b)}}function r(a){var b=s;function c(){}c.prototype=b.prototype;a.t=b.prototype;a.prototype=new c}
|
5
|
+
Function.prototype.bind=Function.prototype.bind||function(a,b){if(1<arguments.length){var c=Array.prototype.slice.call(arguments,1);c.unshift(this,a);return n.apply(null,c)}return n(this,a)};function t(a,b,c){this.a=a;this.b=b||1;this.d=c||1};var u,ea,fa,ga;function ha(){return l.navigator?l.navigator.userAgent:null}ga=fa=ea=u=!1;var w;if(w=ha()){var ia=l.navigator;u=0==w.lastIndexOf("Opera",0);ea=!u&&(-1!=w.indexOf("MSIE")||-1!=w.indexOf("Trident"));fa=!u&&-1!=w.indexOf("WebKit");ga=!u&&!fa&&!ea&&"Gecko"==ia.product}var y=ea,ja=ga,ka=fa;function la(){var a=l.document;return a?a.documentMode:void 0}var ma;
|
6
|
+
n:{var na="",oa;if(u&&l.opera)var pa=l.opera.version,na="function"==typeof pa?pa():pa;else if(ja?oa=/rv\:([^\);]+)(\)|;)/:y?oa=/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/:ka&&(oa=/WebKit\/(\S+)/),oa)var qa=oa.exec(ha()),na=qa?qa[1]:"";if(y){var ra=la();if(ra>parseFloat(na)){ma=String(ra);break n}}ma=na}var sa=ma,ta={};
|
7
|
+
function ua(a){if(!ta[a]){for(var b=0,c=String(sa).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),d=String(a).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),e=Math.max(c.length,d.length),f=0;0==b&&f<e;f++){var g=c[f]||"",p=d[f]||"",q=RegExp("(\\d*)(\\D*)","g"),x=RegExp("(\\d*)(\\D*)","g");do{var v=q.exec(g)||["","",""],J=x.exec(p)||["","",""];if(0==v[0].length&&0==J[0].length)break;b=((0==v[1].length?0:parseInt(v[1],10))<(0==J[1].length?0:parseInt(J[1],10))?-1:(0==v[1].length?0:parseInt(v[1],10))>
|
8
|
+
(0==J[1].length?0:parseInt(J[1],10))?1:0)||((0==v[2].length)<(0==J[2].length)?-1:(0==v[2].length)>(0==J[2].length)?1:0)||(v[2]<J[2]?-1:v[2]>J[2]?1:0)}while(0==b)}ta[a]=0<=b}}var va=l.document,wa=va&&y?la()||("CSS1Compat"==va.compatMode?parseInt(sa,10):5):void 0;var z=y&&!(y&&9<=wa),xa=y&&!(y&&8<=wa);function A(a,b,c,d){this.a=a;this.nodeName=c;this.nodeValue=d;this.nodeType=2;this.parentNode=this.ownerElement=b}function ya(a,b){var c=xa&&"href"==b.nodeName?a.getAttribute(b.nodeName,2):b.nodeValue;return new A(b,a,b.nodeName,c)};function za(a){this.b=a;this.a=0}function Aa(a){a=a.match(Ba);for(var b=0;b<a.length;b++)Ca.test(a[b])&&a.splice(b,1);return new za(a)}var Ba=RegExp("\\$?(?:(?![0-9-])[\\w-]+:)?(?![0-9-])[\\w-]+|\\/\\/|\\.\\.|::|\\d+(?:\\.\\d*)?|\\.\\d+|\"[^\"]*\"|'[^']*'|[!<>]=|\\s+|.","g"),Ca=/^\s/;function B(a,b){return a.b[a.a+(b||0)]}function C(a){return a.b[a.a++]};var D=Array.prototype,Da=D.indexOf?function(a,b,c){return D.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(m(a))return m(b)&&1==b.length?a.indexOf(b,c):-1;for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},E=D.forEach?function(a,b,c){D.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=m(a)?a.split(""):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)},Ea=D.filter?function(a,b,c){return D.filter.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=[],f=0,g=m(a)?
|
9
|
+
a.split(""):a,p=0;p<d;p++)if(p in g){var q=g[p];b.call(c,q,p,a)&&(e[f++]=q)}return e},F=D.reduce?function(a,b,c,d){d&&(b=n(b,d));return D.reduce.call(a,b,c)}:function(a,b,c,d){var e=c;E(a,function(c,g){e=b.call(d,e,c,g,a)});return e},Fa=D.some?function(a,b,c){return D.some.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=m(a)?a.split(""):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return!0;return!1};
|
10
|
+
function Ga(a,b){var c;n:{c=a.length;for(var d=m(a)?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a)){c=e;break n}c=-1}return 0>c?null:m(a)?a.charAt(c):a[c]}function Ha(a){return D.concat.apply(D,arguments)}function Ia(a,b,c){return 2>=arguments.length?D.slice.call(a,b):D.slice.call(a,b,c)};!ja&&!y||y&&y&&9<=wa||ja&&ua("1.9.1");y&&ua("9");function Ja(a,b){if(a.contains&&1==b.nodeType)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||Boolean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a}
|
11
|
+
function Ka(a,b){if(a==b)return 0;if(a.compareDocumentPosition)return a.compareDocumentPosition(b)&2?1:-1;if(y&&!(y&&9<=wa)){if(9==a.nodeType)return-1;if(9==b.nodeType)return 1}if("sourceIndex"in a||a.parentNode&&"sourceIndex"in a.parentNode){var c=1==a.nodeType,d=1==b.nodeType;if(c&&d)return a.sourceIndex-b.sourceIndex;var e=a.parentNode,f=b.parentNode;return e==f?La(a,b):!c&&Ja(e,b)?-1*Ma(a,b):!d&&Ja(f,a)?Ma(b,a):(c?a.sourceIndex:e.sourceIndex)-(d?b.sourceIndex:f.sourceIndex)}d=9==a.nodeType?a:
|
12
|
+
a.ownerDocument||a.document;c=d.createRange();c.selectNode(a);c.collapse(!0);d=d.createRange();d.selectNode(b);d.collapse(!0);return c.compareBoundaryPoints(l.Range.START_TO_END,d)}function Ma(a,b){var c=a.parentNode;if(c==b)return-1;for(var d=b;d.parentNode!=c;)d=d.parentNode;return La(d,a)}function La(a,b){for(var c=b;c=c.previousSibling;)if(c==a)return-1;return 1};function G(a){var b=null,c=a.nodeType;1==c&&(b=a.textContent,b=void 0==b||null==b?a.innerText:b,b=void 0==b||null==b?"":b);if("string"!=typeof b)if(z&&"title"==a.nodeName.toLowerCase()&&1==c)b=a.text;else if(9==c||1==c){a=9==c?a.documentElement:a.firstChild;for(var c=0,d=[],b="";a;){do 1!=a.nodeType&&(b+=a.nodeValue),z&&"title"==a.nodeName.toLowerCase()&&(b+=a.text),d[c++]=a;while(a=a.firstChild);for(;c&&!(a=d[--c].nextSibling););}}else b=a.nodeValue;return""+b}
|
13
|
+
function H(a,b,c){if(null===b)return!0;try{if(!a.getAttribute)return!1}catch(d){return!1}xa&&"class"==b&&(b="className");return null==c?!!a.getAttribute(b):a.getAttribute(b,2)==c}function Na(a,b,c,d,e){return(z?Oa:Pa).call(null,a,b,m(c)?c:null,m(d)?d:null,e||new I)}
|
14
|
+
function Oa(a,b,c,d,e){if(a instanceof K||8==a.b||c&&null===a.b){var f=b.all;if(!f)return e;a=Qa(a);if("*"!=a&&(f=b.getElementsByTagName(a),!f))return e;if(c){for(var g=[],p=0;b=f[p++];)H(b,c,d)&&g.push(b);f=g}for(p=0;b=f[p++];)"*"==a&&"!"==b.tagName||L(e,b);return e}Ra(a,b,c,d,e);return e}
|
15
|
+
function Pa(a,b,c,d,e){b.getElementsByName&&d&&"name"==c&&!y?(b=b.getElementsByName(d),E(b,function(b){a.a(b)&&L(e,b)})):b.getElementsByClassName&&d&&"class"==c?(b=b.getElementsByClassName(d),E(b,function(b){b.className==d&&a.a(b)&&L(e,b)})):a instanceof M?Ra(a,b,c,d,e):b.getElementsByTagName&&(b=b.getElementsByTagName(a.d()),E(b,function(a){H(a,c,d)&&L(e,a)}));return e}
|
16
|
+
function Sa(a,b,c,d,e){var f;if((a instanceof K||8==a.b||c&&null===a.b)&&(f=b.childNodes)){var g=Qa(a);if("*"!=g&&(f=Ea(f,function(a){return a.tagName&&a.tagName.toLowerCase()==g}),!f))return e;c&&(f=Ea(f,function(a){return H(a,c,d)}));E(f,function(a){"*"==g&&("!"==a.tagName||"*"==g&&1!=a.nodeType)||L(e,a)});return e}return Ta(a,b,c,d,e)}function Ta(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)H(b,c,d)&&a.a(b)&&L(e,b);return e}
|
17
|
+
function Ra(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)H(b,c,d)&&a.a(b)&&L(e,b),Ra(a,b,c,d,e)}function Qa(a){if(a instanceof M){if(8==a.b)return"!";if(null===a.b)return"*"}return a.d()};function I(){this.b=this.a=null;this.i=0}function Ua(a){this.b=a;this.a=this.d=null}function Va(a,b){if(!a.a)return b;if(!b.a)return a;for(var c=a.a,d=b.a,e=null,f=null,g=0;c&&d;)c.b==d.b||c.b instanceof A&&d.b instanceof A&&c.b.a==d.b.a?(f=c,c=c.a,d=d.a):0<Ka(c.b,d.b)?(f=d,d=d.a):(f=c,c=c.a),(f.d=e)?e.a=f:a.a=f,e=f,g++;for(f=c||d;f;)f.d=e,e=e.a=f,g++,f=f.a;a.b=e;a.i=g;return a}function Wa(a,b){var c=new Ua(b);c.a=a.a;a.b?a.a.d=c:a.a=a.b=c;a.a=c;a.i++}
|
18
|
+
function L(a,b){var c=new Ua(b);c.d=a.b;a.a?a.b.a=c:a.a=a.b=c;a.b=c;a.i++}function Xa(a){return(a=a.a)?a.b:null}function Ya(a){return(a=Xa(a))?G(a):""}function N(a,b){return new Za(a,!!b)}function Za(a,b){this.d=a;this.b=(this.c=b)?a.b:a.a;this.a=null}function O(a){var b=a.b;if(null==b)return null;var c=a.a=b;a.b=a.c?b.d:b.a;return c.b};function $a(a){switch(a.nodeType){case 1:return da(ab,a);case 9:return $a(a.documentElement);case 2:return a.ownerElement?$a(a.ownerElement):bb;case 11:case 10:case 6:case 12:return bb;default:return a.parentNode?$a(a.parentNode):bb}}function bb(){return null}function ab(a,b){if(a.prefix==b)return a.namespaceURI||"http://www.w3.org/1999/xhtml";var c=a.getAttributeNode("xmlns:"+b);return c&&c.specified?c.value||null:a.parentNode&&9!=a.parentNode.nodeType?ab(a.parentNode,b):null};function s(a){this.g=a;this.b=this.f=!1;this.d=null}function P(a){return"\n "+a.toString().split("\n").join("\n ")}function cb(a,b){a.f=b}function db(a,b){a.b=b}function Q(a,b){var c=a.a(b);return c instanceof I?+Ya(c):+c}function R(a,b){var c=a.a(b);return c instanceof I?Ya(c):""+c}function S(a,b){var c=a.a(b);return c instanceof I?!!c.i:!!c};function eb(a,b,c){s.call(this,a.g);this.c=a;this.e=b;this.j=c;this.f=b.f||c.f;this.b=b.b||c.b;this.c==fb&&(c.b||c.f||4==c.g||0==c.g||!b.d?b.b||b.f||4==b.g||0==b.g||!c.d||(this.d={name:c.d.name,l:b}):this.d={name:b.d.name,l:c})}r(eb);
|
19
|
+
function T(a,b,c,d,e){b=b.a(d);c=c.a(d);var f;if(b instanceof I&&c instanceof I){e=N(b);for(d=O(e);d;d=O(e))for(b=N(c),f=O(b);f;f=O(b))if(a(G(d),G(f)))return!0;return!1}if(b instanceof I||c instanceof I){b instanceof I?e=b:(e=c,c=b);e=N(e);b=typeof c;for(d=O(e);d;d=O(e)){switch(b){case "number":d=+G(d);break;case "boolean":d=!!G(d);break;case "string":d=G(d);break;default:throw Error("Illegal primitive type for comparison.");}if(a(d,c))return!0}return!1}return e?"boolean"==typeof b||"boolean"==typeof c?
|
20
|
+
a(!!b,!!c):"number"==typeof b||"number"==typeof c?a(+b,+c):a(b,c):a(+b,+c)}eb.prototype.a=function(a){return this.c.k(this.e,this.j,a)};eb.prototype.toString=function(){var a="Binary Expression: "+this.c,a=a+P(this.e);return a+=P(this.j)};function gb(a,b,c,d){this.a=a;this.p=b;this.g=c;this.k=d}gb.prototype.toString=h("a");var hb={};function U(a,b,c,d){if(hb.hasOwnProperty(a))throw Error("Binary operator already created: "+a);a=new gb(a,b,c,d);return hb[a.toString()]=a}
|
21
|
+
U("div",6,1,function(a,b,c){return Q(a,c)/Q(b,c)});U("mod",6,1,function(a,b,c){return Q(a,c)%Q(b,c)});U("*",6,1,function(a,b,c){return Q(a,c)*Q(b,c)});U("+",5,1,function(a,b,c){return Q(a,c)+Q(b,c)});U("-",5,1,function(a,b,c){return Q(a,c)-Q(b,c)});U("<",4,2,function(a,b,c){return T(function(a,b){return a<b},a,b,c)});U(">",4,2,function(a,b,c){return T(function(a,b){return a>b},a,b,c)});U("<=",4,2,function(a,b,c){return T(function(a,b){return a<=b},a,b,c)});
|
22
|
+
U(">=",4,2,function(a,b,c){return T(function(a,b){return a>=b},a,b,c)});var fb=U("=",3,2,function(a,b,c){return T(function(a,b){return a==b},a,b,c,!0)});U("!=",3,2,function(a,b,c){return T(function(a,b){return a!=b},a,b,c,!0)});U("and",2,2,function(a,b,c){return S(a,c)&&S(b,c)});U("or",1,2,function(a,b,c){return S(a,c)||S(b,c)});function ib(a,b){if(b.a.length&&4!=a.g)throw Error("Primary expression must evaluate to nodeset if filter has predicate(s).");s.call(this,a.g);this.c=a;this.e=b;this.f=a.f;this.b=a.b}r(ib);ib.prototype.a=function(a){a=this.c.a(a);return jb(this.e,a)};ib.prototype.toString=function(){var a;a="Filter:"+P(this.c);return a+=P(this.e)};function kb(a,b){if(b.length<a.o)throw Error("Function "+a.h+" expects at least"+a.o+" arguments, "+b.length+" given");if(null!==a.n&&b.length>a.n)throw Error("Function "+a.h+" expects at most "+a.n+" arguments, "+b.length+" given");a.s&&E(b,function(b,d){if(4!=b.g)throw Error("Argument "+d+" to function "+a.h+" is not of type Nodeset: "+b);});s.call(this,a.g);this.e=a;this.c=b;cb(this,a.f||Fa(b,function(a){return a.f}));db(this,a.r&&!b.length||a.q&&!!b.length||Fa(b,function(a){return a.b}))}r(kb);
|
23
|
+
kb.prototype.a=function(a){return this.e.k.apply(null,Ha(a,this.c))};kb.prototype.toString=function(){var a="Function: "+this.e;if(this.c.length)var b=F(this.c,function(a,b){return a+P(b)},"Arguments:"),a=a+P(b);return a};function lb(a,b,c,d,e,f,g,p,q){this.h=a;this.g=b;this.f=c;this.r=d;this.q=e;this.k=f;this.o=g;this.n=void 0!==p?p:g;this.s=!!q}lb.prototype.toString=h("h");var mb={};
|
24
|
+
function V(a,b,c,d,e,f,g,p){if(mb.hasOwnProperty(a))throw Error("Function already created: "+a+".");mb[a]=new lb(a,b,c,d,!1,e,f,g,p)}V("boolean",2,!1,!1,function(a,b){return S(b,a)},1);V("ceiling",1,!1,!1,function(a,b){return Math.ceil(Q(b,a))},1);V("concat",3,!1,!1,function(a,b){var c=Ia(arguments,1);return F(c,function(b,c){return b+R(c,a)},"")},2,null);V("contains",2,!1,!1,function(a,b,c){b=R(b,a);a=R(c,a);return-1!=b.indexOf(a)},2);V("count",1,!1,!1,function(a,b){return b.a(a).i},1,1,!0);
|
25
|
+
V("false",2,!1,!1,k(!1),0);V("floor",1,!1,!1,function(a,b){return Math.floor(Q(b,a))},1);V("id",4,!1,!1,function(a,b){function c(a){if(z){var b=e.all[a];if(b){if(b.nodeType&&a==b.id)return b;if(b.length)return Ga(b,function(b){return a==b.id})}return null}return e.getElementById(a)}var d=a.a,e=9==d.nodeType?d:d.ownerDocument,d=R(b,a).split(/\s+/),f=[];E(d,function(a){a=c(a);!a||0<=Da(f,a)||f.push(a)});f.sort(Ka);var g=new I;E(f,function(a){L(g,a)});return g},1);V("lang",2,!1,!1,k(!1),1);
|
26
|
+
V("last",1,!0,!1,function(a){if(1!=arguments.length)throw Error("Function last expects ()");return a.d},0);V("local-name",3,!1,!0,function(a,b){var c=b?Xa(b.a(a)):a.a;return c?c.nodeName.toLowerCase():""},0,1,!0);V("name",3,!1,!0,function(a,b){var c=b?Xa(b.a(a)):a.a;return c?c.nodeName.toLowerCase():""},0,1,!0);V("namespace-uri",3,!0,!1,k(""),0,1,!0);V("normalize-space",3,!1,!0,function(a,b){return(b?R(b,a):G(a.a)).replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"")},0,1);
|
27
|
+
V("not",2,!1,!1,function(a,b){return!S(b,a)},1);V("number",1,!1,!0,function(a,b){return b?Q(b,a):+G(a.a)},0,1);V("position",1,!0,!1,function(a){return a.b},0);V("round",1,!1,!1,function(a,b){return Math.round(Q(b,a))},1);V("starts-with",2,!1,!1,function(a,b,c){b=R(b,a);a=R(c,a);return 0==b.lastIndexOf(a,0)},2);V("string",3,!1,!0,function(a,b){return b?R(b,a):G(a.a)},0,1);V("string-length",1,!1,!0,function(a,b){return(b?R(b,a):G(a.a)).length},0,1);
|
28
|
+
V("substring",3,!1,!1,function(a,b,c,d){c=Q(c,a);if(isNaN(c)||Infinity==c||-Infinity==c)return"";d=d?Q(d,a):Infinity;if(isNaN(d)||-Infinity===d)return"";c=Math.round(c)-1;var e=Math.max(c,0);a=R(b,a);if(Infinity==d)return a.substring(e);b=Math.round(d);return a.substring(e,c+b)},2,3);V("substring-after",3,!1,!1,function(a,b,c){b=R(b,a);a=R(c,a);c=b.indexOf(a);return-1==c?"":b.substring(c+a.length)},2);
|
29
|
+
V("substring-before",3,!1,!1,function(a,b,c){b=R(b,a);a=R(c,a);a=b.indexOf(a);return-1==a?"":b.substring(0,a)},2);V("sum",1,!1,!1,function(a,b){for(var c=N(b.a(a)),d=0,e=O(c);e;e=O(c))d+=+G(e);return d},1,1,!0);V("translate",3,!1,!1,function(a,b,c,d){b=R(b,a);c=R(c,a);var e=R(d,a);a=[];for(d=0;d<c.length;d++){var f=c.charAt(d);f in a||(a[f]=e.charAt(d))}c="";for(d=0;d<b.length;d++)f=b.charAt(d),c+=f in a?a[f]:f;return c},3);V("true",2,!1,!1,k(!0),0);function M(a,b){this.e=a;this.c=void 0!==b?b:null;this.b=null;switch(a){case "comment":this.b=8;break;case "text":this.b=3;break;case "processing-instruction":this.b=7;break;case "node":break;default:throw Error("Unexpected argument");}}function nb(a){return"comment"==a||"text"==a||"processing-instruction"==a||"node"==a}M.prototype.a=function(a){return null===this.b||this.b==a.nodeType};M.prototype.d=h("e");M.prototype.toString=function(){var a="Kind Test: "+this.e;null===this.c||(a+=P(this.c));return a};function ob(a){s.call(this,3);this.c=a.substring(1,a.length-1)}r(ob);ob.prototype.a=h("c");ob.prototype.toString=function(){return"Literal: "+this.c};function K(a,b){this.h=a.toLowerCase();this.c=b?b.toLowerCase():"http://www.w3.org/1999/xhtml"}K.prototype.a=function(a){var b=a.nodeType;return 1!=b&&2!=b?!1:"*"!=this.h&&this.h!=a.nodeName.toLowerCase()?!1:this.c==(a.namespaceURI?a.namespaceURI.toLowerCase():"http://www.w3.org/1999/xhtml")};K.prototype.d=h("h");K.prototype.toString=function(){return"Name Test: "+("http://www.w3.org/1999/xhtml"==this.c?"":this.c+":")+this.h};function pb(a){s.call(this,1);this.c=a}r(pb);pb.prototype.a=h("c");pb.prototype.toString=function(){return"Number: "+this.c};function qb(a,b){s.call(this,a.g);this.e=a;this.c=b;this.f=a.f;this.b=a.b;if(1==this.c.length){var c=this.c[0];c.m||c.c!=rb||(c=c.j,"*"!=c.d()&&(this.d={name:c.d(),l:null}))}}r(qb);function sb(){s.call(this,4)}r(sb);sb.prototype.a=function(a){var b=new I;a=a.a;9==a.nodeType?L(b,a):L(b,a.ownerDocument);return b};sb.prototype.toString=k("Root Helper Expression");function tb(){s.call(this,4)}r(tb);tb.prototype.a=function(a){var b=new I;L(b,a.a);return b};tb.prototype.toString=k("Context Helper Expression");
|
30
|
+
qb.prototype.a=function(a){var b=this.e.a(a);if(!(b instanceof I))throw Error("Filter expression must evaluate to nodeset.");a=this.c;for(var c=0,d=a.length;c<d&&b.i;c++){var e=a[c],f=N(b,e.c.a),g;if(e.f||e.c!=ub)if(e.f||e.c!=vb)for(g=O(f),b=e.a(new t(g));null!=(g=O(f));)g=e.a(new t(g)),b=Va(b,g);else g=O(f),b=e.a(new t(g));else{for(g=O(f);(b=O(f))&&(!g.contains||g.contains(b))&&b.compareDocumentPosition(g)&8;g=b);b=e.a(new t(g))}}return b};
|
31
|
+
qb.prototype.toString=function(){var a;a="Path Expression:"+P(this.e);if(this.c.length){var b=F(this.c,function(a,b){return a+P(b)},"Steps:");a+=P(b)}return a};function wb(a,b){this.a=a;this.b=!!b}
|
32
|
+
function jb(a,b,c){for(c=c||0;c<a.a.length;c++)for(var d=a.a[c],e=N(b),f=b.i,g,p=0;g=O(e);p++){var q=a.b?f-p:p+1;g=d.a(new t(g,q,f));if("number"==typeof g)q=q==g;else if("string"==typeof g||"boolean"==typeof g)q=!!g;else if(g instanceof I)q=0<g.i;else throw Error("Predicate.evaluate returned an unexpected type.");if(!q){q=e;g=q.d;var x=q.a;if(!x)throw Error("Next must be called at least once before remove.");var v=x.d,x=x.a;v?v.a=x:g.a=x;x?x.d=v:g.b=v;g.i--;q.a=null}}return b}
|
33
|
+
wb.prototype.toString=function(){return F(this.a,function(a,b){return a+P(b)},"Predicates:")};function W(a,b,c,d){s.call(this,4);this.c=a;this.j=b;this.e=c||new wb([]);this.m=!!d;b=0<this.e.a.length?this.e.a[0].d:null;a.b&&b&&(a=b.name,a=z?a.toLowerCase():a,this.d={name:a,l:b.l});n:{a=this.e;for(b=0;b<a.a.length;b++)if(c=a.a[b],c.f||1==c.g||0==c.g){a=!0;break n}a=!1}this.f=a}r(W);
|
34
|
+
W.prototype.a=function(a){var b=a.a,c=null,c=this.d,d=null,e=null,f=0;c&&(d=c.name,e=c.l?R(c.l,a):null,f=1);if(this.m)if(this.f||this.c!=xb)if(a=N((new W(yb,new M("node"))).a(a)),b=O(a))for(c=this.k(b,d,e,f);null!=(b=O(a));)c=Va(c,this.k(b,d,e,f));else c=new I;else c=Na(this.j,b,d,e),c=jb(this.e,c,f);else c=this.k(a.a,d,e,f);return c};W.prototype.k=function(a,b,c,d){a=this.c.d(this.j,a,b,c);return a=jb(this.e,a,d)};
|
35
|
+
W.prototype.toString=function(){var a;a="Step:"+P("Operator: "+(this.m?"//":"/"));this.c.h&&(a+=P("Axis: "+this.c));a+=P(this.j);if(this.e.a.length){var b=F(this.e.a,function(a,b){return a+P(b)},"Predicates:");a+=P(b)}return a};function zb(a,b,c,d){this.h=a;this.d=b;this.a=c;this.b=d}zb.prototype.toString=h("h");var Ab={};function X(a,b,c,d){if(Ab.hasOwnProperty(a))throw Error("Axis already created: "+a);b=new zb(a,b,c,!!d);return Ab[a]=b}
|
36
|
+
X("ancestor",function(a,b){for(var c=new I,d=b;d=d.parentNode;)a.a(d)&&Wa(c,d);return c},!0);X("ancestor-or-self",function(a,b){var c=new I,d=b;do a.a(d)&&Wa(c,d);while(d=d.parentNode);return c},!0);
|
37
|
+
var rb=X("attribute",function(a,b){var c=new I,d=a.d();if("style"==d&&b.style&&z)return L(c,new A(b.style,b,"style",b.style.cssText)),c;var e=b.attributes;if(e)if(a instanceof M&&null===a.b||"*"==d)for(var d=0,f;f=e[d];d++)z?f.nodeValue&&L(c,ya(b,f)):L(c,f);else(f=e.getNamedItem(d))&&(z?f.nodeValue&&L(c,ya(b,f)):L(c,f));return c},!1),xb=X("child",function(a,b,c,d,e){return(z?Sa:Ta).call(null,a,b,m(c)?c:null,m(d)?d:null,e||new I)},!1,!0);X("descendant",Na,!1,!0);
|
38
|
+
var yb=X("descendant-or-self",function(a,b,c,d){var e=new I;H(b,c,d)&&a.a(b)&&L(e,b);return Na(a,b,c,d,e)},!1,!0),ub=X("following",function(a,b,c,d){var e=new I;do for(var f=b;f=f.nextSibling;)H(f,c,d)&&a.a(f)&&L(e,f),e=Na(a,f,c,d,e);while(b=b.parentNode);return e},!1,!0);X("following-sibling",function(a,b){for(var c=new I,d=b;d=d.nextSibling;)a.a(d)&&L(c,d);return c},!1);X("namespace",function(){return new I},!1);
|
39
|
+
var Bb=X("parent",function(a,b){var c=new I;if(9==b.nodeType)return c;if(2==b.nodeType)return L(c,b.ownerElement),c;var d=b.parentNode;a.a(d)&&L(c,d);return c},!1),vb=X("preceding",function(a,b,c,d){var e=new I,f=[];do f.unshift(b);while(b=b.parentNode);for(var g=1,p=f.length;g<p;g++){var q=[];for(b=f[g];b=b.previousSibling;)q.unshift(b);for(var x=0,v=q.length;x<v;x++)b=q[x],H(b,c,d)&&a.a(b)&&L(e,b),e=Na(a,b,c,d,e)}return e},!0,!0);
|
40
|
+
X("preceding-sibling",function(a,b){for(var c=new I,d=b;d=d.previousSibling;)a.a(d)&&Wa(c,d);return c},!0);var Cb=X("self",function(a,b){var c=new I;a.a(b)&&L(c,b);return c},!1);function Db(a){s.call(this,1);this.c=a;this.f=a.f;this.b=a.b}r(Db);Db.prototype.a=function(a){return-Q(this.c,a)};Db.prototype.toString=function(){return"Unary Expression: -"+P(this.c)};function Eb(a){s.call(this,4);this.c=a;cb(this,Fa(this.c,function(a){return a.f}));db(this,Fa(this.c,function(a){return a.b}))}r(Eb);Eb.prototype.a=function(a){var b=new I;E(this.c,function(c){c=c.a(a);if(!(c instanceof I))throw Error("Path expression must evaluate to NodeSet.");b=Va(b,c)});return b};Eb.prototype.toString=function(){return F(this.c,function(a,b){return a+P(b)},"Union Expression:")};function Fb(a,b){this.a=a;this.b=b}function Gb(a){for(var b,c=[];;){Y(a,"Missing right hand side of binary expression.");b=Hb(a);var d=C(a.a);if(!d)break;var e=(d=hb[d]||null)&&d.p;if(!e){a.a.a--;break}for(;c.length&&e<=c[c.length-1].p;)b=new eb(c.pop(),c.pop(),b);c.push(b,d)}for(;c.length;)b=new eb(c.pop(),c.pop(),b);return b}function Y(a,b){if(a.a.b.length<=a.a.a)throw Error(b);}function Ib(a,b){var c=C(a.a);if(c!=b)throw Error("Bad token, expected: "+b+" got: "+c);}
|
41
|
+
function Jb(a){a=C(a.a);if(")"!=a)throw Error("Bad token: "+a);}function Kb(a){a=C(a.a);if(2>a.length)throw Error("Unclosed literal string");return new ob(a)}function Lb(a){var b=C(a.a),c=b.indexOf(":");if(-1==c)return new K(b);var d=b.substring(0,c);a=a.b(d);if(!a)throw Error("Namespace prefix not declared: "+d);b=b.substr(c+1);return new K(b,a)}
|
42
|
+
function Mb(a){var b,c=[],d;if("/"==B(a.a)||"//"==B(a.a)){b=C(a.a);d=B(a.a);if("/"==b&&(a.a.b.length<=a.a.a||"."!=d&&".."!=d&&"@"!=d&&"*"!=d&&!/(?![0-9])[\w]/.test(d)))return new sb;d=new sb;Y(a,"Missing next location step.");b=Nb(a,b);c.push(b)}else{n:{b=B(a.a);d=b.charAt(0);switch(d){case "$":throw Error("Variable reference not allowed in HTML XPath");case "(":C(a.a);b=Gb(a);Y(a,'unclosed "("');Ib(a,")");break;case '"':case "'":b=Kb(a);break;default:if(isNaN(+b))if(!nb(b)&&/(?![0-9])[\w]/.test(d)&&
|
43
|
+
"("==B(a.a,1)){b=C(a.a);b=mb[b]||null;C(a.a);for(d=[];")"!=B(a.a);){Y(a,"Missing function argument list.");d.push(Gb(a));if(","!=B(a.a))break;C(a.a)}Y(a,"Unclosed function argument list.");Jb(a);b=new kb(b,d)}else{b=null;break n}else b=new pb(+C(a.a))}"["==B(a.a)&&(d=new wb(Ob(a)),b=new ib(b,d))}if(b)if("/"==B(a.a)||"//"==B(a.a))d=b;else return b;else b=Nb(a,"/"),d=new tb,c.push(b)}for(;"/"==B(a.a)||"//"==B(a.a);)b=C(a.a),Y(a,"Missing next location step."),b=Nb(a,b),c.push(b);return new qb(d,c)}
|
44
|
+
function Nb(a,b){var c,d,e;if("/"!=b&&"//"!=b)throw Error('Step op should be "/" or "//"');if("."==B(a.a))return d=new W(Cb,new M("node")),C(a.a),d;if(".."==B(a.a))return d=new W(Bb,new M("node")),C(a.a),d;var f;if("@"==B(a.a))f=rb,C(a.a),Y(a,"Missing attribute name");else if("::"==B(a.a,1)){if(!/(?![0-9])[\w]/.test(B(a.a).charAt(0)))throw Error("Bad token: "+C(a.a));c=C(a.a);f=Ab[c]||null;if(!f)throw Error("No axis with name: "+c);C(a.a);Y(a,"Missing node name")}else f=xb;c=B(a.a);if(/(?![0-9])[\w]/.test(c.charAt(0)))if("("==
|
45
|
+
B(a.a,1)){if(!nb(c))throw Error("Invalid node type: "+c);c=C(a.a);if(!nb(c))throw Error("Invalid type name: "+c);Ib(a,"(");Y(a,"Bad nodetype");e=B(a.a).charAt(0);var g=null;if('"'==e||"'"==e)g=Kb(a);Y(a,"Bad nodetype");Jb(a);c=new M(c,g)}else c=Lb(a);else if("*"==c)c=Lb(a);else throw Error("Bad token: "+C(a.a));e=new wb(Ob(a),f.a);return d||new W(f,c,e,"//"==b)}
|
46
|
+
function Ob(a){for(var b=[];"["==B(a.a);){C(a.a);Y(a,"Missing predicate expression.");var c=Gb(a);b.push(c);Y(a,"Unclosed predicate expression.");Ib(a,"]")}return b}function Hb(a){if("-"==B(a.a))return C(a.a),new Db(Hb(a));var b=Mb(a);if("|"!=B(a.a))a=b;else{for(b=[b];"|"==C(a.a);)Y(a,"Missing next union location path."),b.push(Mb(a));a.a.a--;a=new Eb(b)}return a};function Pb(a,b){if(!a.length)throw Error("Empty XPath expression.");var c=Aa(a);if(c.b.length<=c.a)throw Error("Invalid XPath expression.");b?"function"==aa(b)||(b=n(b.lookupNamespaceURI,b)):b=k(null);var d=Gb(new Fb(c,b));if(!(c.b.length<=c.a))throw Error("Bad token: "+C(c));this.evaluate=function(a,b){var c=d.a(new t(a));return new Z(c,b)}}
|
47
|
+
function Z(a,b){if(0==b)if(a instanceof I)b=4;else if("string"==typeof a)b=2;else if("number"==typeof a)b=1;else if("boolean"==typeof a)b=3;else throw Error("Unexpected evaluation result.");if(2!=b&&1!=b&&3!=b&&!(a instanceof I))throw Error("value could not be converted to the specified type");this.resultType=b;var c;switch(b){case 2:this.stringValue=a instanceof I?Ya(a):""+a;break;case 1:this.numberValue=a instanceof I?+Ya(a):+a;break;case 3:this.booleanValue=a instanceof I?0<a.i:!!a;break;case 4:case 5:case 6:case 7:var d=
|
48
|
+
N(a);c=[];for(var e=O(d);e;e=O(d))c.push(e instanceof A?e.a:e);this.snapshotLength=a.i;this.invalidIteratorState=!1;break;case 8:case 9:d=Xa(a);this.singleNodeValue=d instanceof A?d.a:d;break;default:throw Error("Unknown XPathResult type.");}var f=0;this.iterateNext=function(){if(4!=b&&5!=b)throw Error("iterateNext called with wrong result type");return f>=c.length?null:c[f++]};this.snapshotItem=function(a){if(6!=b&&7!=b)throw Error("snapshotItem called with wrong result type");return a>=c.length||
|
49
|
+
0>a?null:c[a]}}Z.ANY_TYPE=0;Z.NUMBER_TYPE=1;Z.STRING_TYPE=2;Z.BOOLEAN_TYPE=3;Z.UNORDERED_NODE_ITERATOR_TYPE=4;Z.ORDERED_NODE_ITERATOR_TYPE=5;Z.UNORDERED_NODE_SNAPSHOT_TYPE=6;Z.ORDERED_NODE_SNAPSHOT_TYPE=7;Z.ANY_UNORDERED_NODE_TYPE=8;Z.FIRST_ORDERED_NODE_TYPE=9;function Qb(a){this.lookupNamespaceURI=$a(a)};function Rb(a){a=a||l;var b=a.document;b.evaluate||(a.XPathResult=Z,b.evaluate=function(a,b,e,f){return(new Pb(a,e)).evaluate(b,f)},b.createExpression=function(a,b){return new Pb(a,b)},b.createNSResolver=function(a){return new Qb(a)})}var Sb=["wgxpath","install"],$=l;Sb[0]in $||!$.execScript||$.execScript("var "+Sb[0]);for(var Tb;Sb.length&&(Tb=Sb.shift());)Sb.length||void 0===Rb?$=$[Tb]?$[Tb]:$[Tb]={}:$[Tb]=Rb;})()
|
data/spec/window_spec.rb
CHANGED
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe Browser::Window do
|
4
4
|
describe '#document' do
|
5
5
|
it 'should return `document`' do
|
6
|
-
$window.document.
|
7
|
-
$window.document.class.
|
6
|
+
expect($window.document).to eq(`document`)
|
7
|
+
expect($window.document.class).to eq(Browser::DOM::Document)
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opal-browser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- meh.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.6.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.6.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: paggio
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,34 +38,6 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: opal-rspec
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rake
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
41
|
description:
|
70
42
|
email: meh@schizofreni.co
|
71
43
|
executables: []
|
@@ -73,11 +45,14 @@ extensions: []
|
|
73
45
|
extra_rdoc_files: []
|
74
46
|
files:
|
75
47
|
- ".gitignore"
|
48
|
+
- ".travis.yml"
|
76
49
|
- ".yardopts"
|
77
50
|
- Gemfile
|
51
|
+
- LICENSE
|
78
52
|
- README.md
|
79
53
|
- Rakefile
|
80
54
|
- config.ru
|
55
|
+
- index.html.erb
|
81
56
|
- lib/opal/browser.rb
|
82
57
|
- opal-browser.gemspec
|
83
58
|
- opal/browser.rb
|
@@ -87,20 +62,6 @@ files:
|
|
87
62
|
- opal/browser/canvas/gradient.rb
|
88
63
|
- opal/browser/canvas/style.rb
|
89
64
|
- opal/browser/canvas/text.rb
|
90
|
-
- opal/browser/compatibility.rb
|
91
|
-
- opal/browser/compatibility/animation_frame.rb
|
92
|
-
- opal/browser/compatibility/dom/document/window.rb
|
93
|
-
- opal/browser/compatibility/dom/element/css.rb
|
94
|
-
- opal/browser/compatibility/dom/element/matches.rb
|
95
|
-
- opal/browser/compatibility/dom/element/offset.rb
|
96
|
-
- opal/browser/compatibility/dom/element/scroll.rb
|
97
|
-
- opal/browser/compatibility/dom/element/style.rb
|
98
|
-
- opal/browser/compatibility/dom/mutation_observer.rb
|
99
|
-
- opal/browser/compatibility/http/request.rb
|
100
|
-
- opal/browser/compatibility/immediate.rb
|
101
|
-
- opal/browser/compatibility/window/scroll.rb
|
102
|
-
- opal/browser/compatibility/window/size.rb
|
103
|
-
- opal/browser/compatibility/window/view.rb
|
104
65
|
- opal/browser/console.rb
|
105
66
|
- opal/browser/cookies.rb
|
106
67
|
- opal/browser/css.rb
|
@@ -109,20 +70,22 @@ files:
|
|
109
70
|
- opal/browser/css/rule/style.rb
|
110
71
|
- opal/browser/css/style_sheet.rb
|
111
72
|
- opal/browser/css/unit.rb
|
73
|
+
- opal/browser/delay.rb
|
112
74
|
- opal/browser/dom.rb
|
113
75
|
- opal/browser/dom/attribute.rb
|
114
76
|
- opal/browser/dom/builder.rb
|
115
77
|
- opal/browser/dom/cdata.rb
|
116
78
|
- opal/browser/dom/character_data.rb
|
117
79
|
- opal/browser/dom/comment.rb
|
118
|
-
- opal/browser/dom/compatibility.rb
|
119
80
|
- opal/browser/dom/document.rb
|
120
81
|
- opal/browser/dom/document_fragment.rb
|
121
82
|
- opal/browser/dom/element.rb
|
83
|
+
- opal/browser/dom/element/image.rb
|
122
84
|
- opal/browser/dom/element/input.rb
|
123
85
|
- opal/browser/dom/element/offset.rb
|
124
86
|
- opal/browser/dom/element/position.rb
|
125
87
|
- opal/browser/dom/element/scroll.rb
|
88
|
+
- opal/browser/dom/element/size.rb
|
126
89
|
- opal/browser/dom/event.rb
|
127
90
|
- opal/browser/dom/event/animation.rb
|
128
91
|
- opal/browser/dom/event/audio_processing.rb
|
@@ -160,7 +123,6 @@ files:
|
|
160
123
|
- opal/browser/history.rb
|
161
124
|
- opal/browser/http.rb
|
162
125
|
- opal/browser/http/binary.rb
|
163
|
-
- opal/browser/http/compatibility.rb
|
164
126
|
- opal/browser/http/headers.rb
|
165
127
|
- opal/browser/http/parameters.rb
|
166
128
|
- opal/browser/http/request.rb
|
@@ -172,11 +134,10 @@ files:
|
|
172
134
|
- opal/browser/screen.rb
|
173
135
|
- opal/browser/socket.rb
|
174
136
|
- opal/browser/storage.rb
|
175
|
-
- opal/browser/
|
137
|
+
- opal/browser/support.rb
|
176
138
|
- opal/browser/utils.rb
|
177
139
|
- opal/browser/version.rb
|
178
140
|
- opal/browser/window.rb
|
179
|
-
- opal/browser/window/compatibility.rb
|
180
141
|
- opal/browser/window/scroll.rb
|
181
142
|
- opal/browser/window/size.rb
|
182
143
|
- opal/browser/window/view.rb
|
@@ -192,13 +153,16 @@ files:
|
|
192
153
|
- spec/http_spec.rb
|
193
154
|
- spec/immediate_spec.rb
|
194
155
|
- spec/json2.js
|
156
|
+
- spec/runner.rb
|
195
157
|
- spec/sizzle.js
|
196
158
|
- spec/socket_spec.rb
|
197
159
|
- spec/spec_helper.rb
|
198
160
|
- spec/storage_spec.rb
|
161
|
+
- spec/wgxpath.install.js
|
199
162
|
- spec/window_spec.rb
|
200
163
|
homepage: http://github.com/opal/opal-browser
|
201
|
-
licenses:
|
164
|
+
licenses:
|
165
|
+
- MIT
|
202
166
|
metadata: {}
|
203
167
|
post_install_message:
|
204
168
|
rdoc_options: []
|
@@ -216,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
216
180
|
version: 1.3.1
|
217
181
|
requirements: []
|
218
182
|
rubyforge_project:
|
219
|
-
rubygems_version: 2.
|
183
|
+
rubygems_version: 2.2.0
|
220
184
|
signing_key:
|
221
185
|
specification_version: 4
|
222
186
|
summary: Browser support for Opal.
|
@@ -233,8 +197,11 @@ test_files:
|
|
233
197
|
- spec/http_spec.rb
|
234
198
|
- spec/immediate_spec.rb
|
235
199
|
- spec/json2.js
|
200
|
+
- spec/runner.rb
|
236
201
|
- spec/sizzle.js
|
237
202
|
- spec/socket_spec.rb
|
238
203
|
- spec/spec_helper.rb
|
239
204
|
- spec/storage_spec.rb
|
205
|
+
- spec/wgxpath.install.js
|
240
206
|
- spec/window_spec.rb
|
207
|
+
has_rdoc:
|