bowser 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CODE_OF_CONDUCT.md +5 -6
- data/lib/bowser/version.rb +1 -1
- data/opal/bowser/document.rb +35 -0
- data/opal/bowser/element.rb +50 -0
- data/opal/bowser/event.rb +44 -0
- data/opal/bowser/event_target.rb +31 -0
- data/opal/bowser/websocket.rb +91 -0
- data/opal/bowser/window.rb +67 -0
- data/opal/bowser.rb +6 -192
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93503b9b0209c9a0aaa12b41dce65d10e8ed6475
|
4
|
+
data.tar.gz: 4984145e885720e02f90f903324152d8f4a93be3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4f9a824d4e83f91bc273c647561e7512ea3ee6fa5b21e95d1cbd5159514c74aee0eaa0321c95f9f54eb4f9cdaa1a188f805ad66625ef8eaa5c239e337a1f5dc
|
7
|
+
data.tar.gz: 1c93d1293d78e3a71f55d522d5a8d2cc0ee3673a949d70d37a6b6e72ee044ecb5fd65cbc3ece4ed1aba70dcf0f4fc3331405b17056b5c603be91eba704948e27
|
data/CODE_OF_CONDUCT.md
CHANGED
@@ -35,12 +35,11 @@ This Code of Conduct applies both within project spaces and in public spaces
|
|
35
35
|
when an individual is representing the project or its community.
|
36
36
|
|
37
37
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
38
|
-
reported by contacting a project maintainer at
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
incident.
|
43
|
-
|
38
|
+
reported by contacting a project maintainer at
|
39
|
+
[jgaskins@gmail.com](mailto:jgaskins@gmail.com?subject=Bowser+Code+of+Conduct).
|
40
|
+
All complaints will be reviewed and investigated and will result in a response
|
41
|
+
that is deemed necessary and appropriate to the circumstances. Maintainers are
|
42
|
+
obligated to maintain confidentiality with regard to the reporter of an incident.
|
44
43
|
|
45
44
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
46
45
|
version 1.3.0, available at
|
data/lib/bowser/version.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'bowser/event_target'
|
2
|
+
require 'bowser/element'
|
3
|
+
|
4
|
+
module Bowser
|
5
|
+
module Document
|
6
|
+
extend EventTarget
|
7
|
+
|
8
|
+
@native = `document`
|
9
|
+
|
10
|
+
module_function
|
11
|
+
|
12
|
+
def body
|
13
|
+
@body ||= Element.new(`#@native.body`)
|
14
|
+
end
|
15
|
+
|
16
|
+
def [] css
|
17
|
+
native = `#@native.querySelector(css)`
|
18
|
+
if `#{native} === undefined`
|
19
|
+
nil
|
20
|
+
else
|
21
|
+
Element.new(native)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_element type
|
26
|
+
Element.new(`document.createElement(type)`)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module_function
|
31
|
+
|
32
|
+
def document
|
33
|
+
Document
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'bowser/event_target'
|
2
|
+
|
3
|
+
module Bowser
|
4
|
+
class Element
|
5
|
+
include EventTarget
|
6
|
+
|
7
|
+
def initialize native
|
8
|
+
@native = native
|
9
|
+
end
|
10
|
+
|
11
|
+
def inner_dom= node
|
12
|
+
clear
|
13
|
+
append node
|
14
|
+
end
|
15
|
+
|
16
|
+
def inner_html
|
17
|
+
`#@native.innerHTML`
|
18
|
+
end
|
19
|
+
|
20
|
+
def clear
|
21
|
+
%x{
|
22
|
+
var native = #@native;
|
23
|
+
|
24
|
+
if(native.nodeName === 'INPUT' || native.nodeName === 'TEXTAREA') {
|
25
|
+
native.value = null;
|
26
|
+
} else {
|
27
|
+
var children = native.children;
|
28
|
+
for(var i = 0; i < children.length; i++) {
|
29
|
+
children[i].remove();
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
self
|
34
|
+
end
|
35
|
+
|
36
|
+
def append node
|
37
|
+
`#@native.appendChild(node)`
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
41
|
+
# Form input methods
|
42
|
+
def checked?
|
43
|
+
`!!#@native.checked`
|
44
|
+
end
|
45
|
+
|
46
|
+
def value
|
47
|
+
`#@native.value`
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Bowser
|
2
|
+
class Event
|
3
|
+
def initialize native
|
4
|
+
@native = native
|
5
|
+
end
|
6
|
+
|
7
|
+
def prevent
|
8
|
+
`#@native.preventDefault()`
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
def prevented?
|
13
|
+
`#@native.defaultPrevented`
|
14
|
+
end
|
15
|
+
|
16
|
+
def meta?
|
17
|
+
`#@native.metaKey`
|
18
|
+
end
|
19
|
+
|
20
|
+
def shift?
|
21
|
+
`#@native.shiftKey`
|
22
|
+
end
|
23
|
+
|
24
|
+
def ctrl?
|
25
|
+
`#@native.ctrlKey`
|
26
|
+
end
|
27
|
+
|
28
|
+
def alt?
|
29
|
+
`#@native.altKey`
|
30
|
+
end
|
31
|
+
|
32
|
+
def button
|
33
|
+
`#@native.button`
|
34
|
+
end
|
35
|
+
|
36
|
+
def target
|
37
|
+
Element.new(`#@native.currentTarget`)
|
38
|
+
end
|
39
|
+
|
40
|
+
def code
|
41
|
+
`#@native.keyCode`
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'bowser/event'
|
2
|
+
|
3
|
+
module Bowser
|
4
|
+
module EventTarget
|
5
|
+
def on event_name, &block
|
6
|
+
wrapper = proc { |event| block.call Event.new(event) }
|
7
|
+
|
8
|
+
if `#@native.addEventListener !== undefined`
|
9
|
+
`#@native.addEventListener(event_name, wrapper)`
|
10
|
+
elsif `#@native.addListener !== undefined`
|
11
|
+
`#@native.addListener(event_name, wrapper)`
|
12
|
+
else
|
13
|
+
warn "[Bowser] Not entirely sure how to add an event listener to #{self}"
|
14
|
+
end
|
15
|
+
|
16
|
+
wrapper
|
17
|
+
end
|
18
|
+
|
19
|
+
def off event_name, &block
|
20
|
+
if `#@native.removeEventListener !== undefined`
|
21
|
+
`#@native.removeEventListener(event_name, block)`
|
22
|
+
elsif `#@native.removeListener !== undefined`
|
23
|
+
`#@native.removeListener(event_name, block)`
|
24
|
+
else
|
25
|
+
warn "[Bowser] Not entirely sure how to remove an event listener from #{self}"
|
26
|
+
end
|
27
|
+
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
module Bowser
|
2
|
+
class WebSocket
|
3
|
+
EVENT_NAMES = %w(
|
4
|
+
open
|
5
|
+
error
|
6
|
+
message
|
7
|
+
close
|
8
|
+
)
|
9
|
+
|
10
|
+
def initialize url
|
11
|
+
@url = url
|
12
|
+
@native = `new WebSocket(url)`
|
13
|
+
@handlers = Hash.new { |h, k| h[k] = [] }
|
14
|
+
add_handlers
|
15
|
+
end
|
16
|
+
|
17
|
+
def on event_name, &block
|
18
|
+
if EVENT_NAMES.include? event_name
|
19
|
+
@handlers[event_name] << block
|
20
|
+
else
|
21
|
+
warn "[Bowser::WebSocket] #{event_name} is not one of the allowed WebSocket events: #{EVENT_NAMES.to_a}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def send_message msg
|
26
|
+
`#@native.send(#{JSON.dump(msg)})`
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def add_handlers
|
33
|
+
EVENT_NAMES.each do |event_name|
|
34
|
+
%x{
|
35
|
+
#@native["on" + #{event_name}] = function(event) {
|
36
|
+
var ruby_event;
|
37
|
+
|
38
|
+
if(event.constructor === CloseEvent) {
|
39
|
+
ruby_event = #{CloseEvent.new(`event`)};
|
40
|
+
} else if(event.constructor === MessageEvent) {
|
41
|
+
ruby_event = #{MessageEvent.new(`event`)};
|
42
|
+
} else {
|
43
|
+
ruby_event = #{Event.new(`event`)};
|
44
|
+
}
|
45
|
+
|
46
|
+
#{
|
47
|
+
@handlers[event_name].each do |handler|
|
48
|
+
handler.call `ruby_event`
|
49
|
+
end
|
50
|
+
}
|
51
|
+
};
|
52
|
+
}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class CloseEvent
|
57
|
+
attr_reader :code, :reason
|
58
|
+
|
59
|
+
def initialize native
|
60
|
+
@native = native
|
61
|
+
@code = `#@native.code`
|
62
|
+
@reason = `#@native.reason`
|
63
|
+
@clean = `#@native.wasClean`
|
64
|
+
end
|
65
|
+
|
66
|
+
def clean?
|
67
|
+
!!@clean
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class MessageEvent
|
72
|
+
def initialize native
|
73
|
+
@native = native
|
74
|
+
end
|
75
|
+
|
76
|
+
def data
|
77
|
+
@data ||= get_data
|
78
|
+
end
|
79
|
+
|
80
|
+
def get_data(data=`#@native.data`)
|
81
|
+
JSON.parse(data)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
module_function
|
87
|
+
|
88
|
+
def websocket *args
|
89
|
+
WebSocket.new(*args)
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'bowser/event_target'
|
2
|
+
|
3
|
+
module Bowser
|
4
|
+
module Window
|
5
|
+
extend EventTarget
|
6
|
+
|
7
|
+
@native = `window`
|
8
|
+
|
9
|
+
module_function
|
10
|
+
|
11
|
+
if `#@native.requestAnimationFrame !== undefined`
|
12
|
+
def animation_frame &block
|
13
|
+
`requestAnimationFrame(block)`
|
14
|
+
self
|
15
|
+
end
|
16
|
+
else
|
17
|
+
def animation_frame &block
|
18
|
+
delay(0.16, &block)
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def delay duration, &block
|
24
|
+
`setTimeout(block, duration * 1000)`
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
def interval duration, &block
|
29
|
+
`setInterval(block, duration * 1000)`
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def location
|
34
|
+
Location
|
35
|
+
end
|
36
|
+
|
37
|
+
def scroll x, y
|
38
|
+
`window.scrollTo(x, y)`
|
39
|
+
end
|
40
|
+
|
41
|
+
module Location
|
42
|
+
module_function
|
43
|
+
|
44
|
+
def path
|
45
|
+
`window.location.pathname`
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
module History
|
50
|
+
module_function
|
51
|
+
|
52
|
+
def push path
|
53
|
+
`window.history.pushState({}, '', path)`
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def history
|
58
|
+
History
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
module_function
|
63
|
+
|
64
|
+
def window
|
65
|
+
Window
|
66
|
+
end
|
67
|
+
end
|
data/opal/bowser.rb
CHANGED
@@ -1,194 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
wrapper = proc { |event| block.call Event.new(event) }
|
7
|
-
|
8
|
-
if `#@native.addEventListener !== undefined`
|
9
|
-
`#@native.addEventListener(event_name, wrapper)`
|
10
|
-
elsif `#@native.addListener !== undefined`
|
11
|
-
`#@native.addListener(event_name, wrapper)`
|
12
|
-
else
|
13
|
-
warn "[Bowser] Not entirely sure how to add an event listener to #{self}"
|
14
|
-
end
|
15
|
-
|
16
|
-
wrapper
|
17
|
-
end
|
18
|
-
|
19
|
-
def off event_name, &block
|
20
|
-
if `#@native.removeEventListener !== undefined`
|
21
|
-
`#@native.removeEventListener(event_name, block)`
|
22
|
-
elsif `#@native.removeListener !== undefined`
|
23
|
-
`#@native.removeListener(event_name, block)`
|
24
|
-
else
|
25
|
-
warn "[Bowser] Not entirely sure how to remove an event listener from #{self}"
|
26
|
-
end
|
27
|
-
|
28
|
-
nil
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
module Window
|
33
|
-
extend EventTarget
|
34
|
-
|
35
|
-
@native = `window`
|
36
|
-
|
37
|
-
module_function
|
38
|
-
|
39
|
-
if `#@native.requestAnimationFrame !== undefined`
|
40
|
-
def animation_frame &block
|
41
|
-
`requestAnimationFrame(block)`
|
42
|
-
self
|
43
|
-
end
|
44
|
-
else
|
45
|
-
def animation_frame &block
|
46
|
-
delay(0.16, &block)
|
47
|
-
self
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def delay duration, &block
|
52
|
-
`setTimeout(block, duration * 1000)`
|
53
|
-
self
|
54
|
-
end
|
55
|
-
|
56
|
-
def interval duration, &block
|
57
|
-
`setInterval(block, duration * 1000)`
|
58
|
-
self
|
59
|
-
end
|
60
|
-
|
61
|
-
def location
|
62
|
-
Location
|
63
|
-
end
|
64
|
-
|
65
|
-
module Location
|
66
|
-
module_function
|
67
|
-
|
68
|
-
def path
|
69
|
-
`window.location.pathname`
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
def window
|
74
|
-
Window
|
75
|
-
end
|
76
|
-
|
77
|
-
module Document
|
78
|
-
extend EventTarget
|
79
|
-
|
80
|
-
@native = `document`
|
81
|
-
|
82
|
-
module_function
|
83
|
-
|
84
|
-
def body
|
85
|
-
@body ||= Element.new(`#@native.body`)
|
86
|
-
end
|
87
|
-
|
88
|
-
def [] css
|
89
|
-
native = `#@native.querySelector(css)`
|
90
|
-
if `#{native} === undefined`
|
91
|
-
nil
|
92
|
-
else
|
93
|
-
Element.new(native)
|
94
|
-
end
|
95
|
-
end
|
1
|
+
require 'bowser/element'
|
2
|
+
require 'bowser/event'
|
3
|
+
require 'bowser/event_target'
|
4
|
+
require 'bowser/window'
|
5
|
+
require 'bowser/document'
|
96
6
|
|
97
|
-
|
98
|
-
Element.new(`document.createElement(type)`)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
def document
|
102
|
-
Document
|
103
|
-
end
|
104
|
-
|
105
|
-
class Element
|
106
|
-
include EventTarget
|
107
|
-
|
108
|
-
def initialize native
|
109
|
-
@native = native
|
110
|
-
end
|
111
|
-
|
112
|
-
def inner_dom= node
|
113
|
-
clear
|
114
|
-
append node
|
115
|
-
end
|
116
|
-
|
117
|
-
def inner_html
|
118
|
-
`#@native.innerHTML`
|
119
|
-
end
|
120
|
-
|
121
|
-
def clear
|
122
|
-
%x{
|
123
|
-
var native = #@native;
|
124
|
-
|
125
|
-
if(native.nodeName === 'INPUT' || native.nodeName === 'TEXTAREA') {
|
126
|
-
native.value = null;
|
127
|
-
} else {
|
128
|
-
var children = native.children;
|
129
|
-
for(var i = 0; i < children.length; i++) {
|
130
|
-
children[i].remove();
|
131
|
-
}
|
132
|
-
}
|
133
|
-
}
|
134
|
-
self
|
135
|
-
end
|
136
|
-
|
137
|
-
def append node
|
138
|
-
`#@native.appendChild(node)`
|
139
|
-
self
|
140
|
-
end
|
141
|
-
|
142
|
-
# Form input methods
|
143
|
-
def checked?
|
144
|
-
`!!#@native.checked`
|
145
|
-
end
|
146
|
-
|
147
|
-
def value
|
148
|
-
`#@native.value`
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
class Event
|
153
|
-
def initialize native
|
154
|
-
@native = native
|
155
|
-
end
|
156
|
-
|
157
|
-
def prevent
|
158
|
-
`#@native.preventDefault()`
|
159
|
-
self
|
160
|
-
end
|
161
|
-
|
162
|
-
def prevented?
|
163
|
-
`#@native.defaultPrevented`
|
164
|
-
end
|
165
|
-
|
166
|
-
def meta?
|
167
|
-
`#@native.metaKey`
|
168
|
-
end
|
169
|
-
|
170
|
-
def shift?
|
171
|
-
`#@native.shiftKey`
|
172
|
-
end
|
173
|
-
|
174
|
-
def ctrl?
|
175
|
-
`#@native.ctrlKey`
|
176
|
-
end
|
177
|
-
|
178
|
-
def alt?
|
179
|
-
`#@native.altKey`
|
180
|
-
end
|
181
|
-
|
182
|
-
def button
|
183
|
-
`#@native.button`
|
184
|
-
end
|
185
|
-
|
186
|
-
def target
|
187
|
-
Element.new(`#@native.currentTarget`)
|
188
|
-
end
|
189
|
-
|
190
|
-
def code
|
191
|
-
`#@native.keyCode`
|
192
|
-
end
|
193
|
-
end
|
7
|
+
module Bowser
|
194
8
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bowser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Gaskins
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|
@@ -87,10 +87,16 @@ files:
|
|
87
87
|
- lib/bowser.rb
|
88
88
|
- lib/bowser/version.rb
|
89
89
|
- opal/bowser.rb
|
90
|
+
- opal/bowser/document.rb
|
91
|
+
- opal/bowser/element.rb
|
92
|
+
- opal/bowser/event.rb
|
93
|
+
- opal/bowser/event_target.rb
|
90
94
|
- opal/bowser/http.rb
|
91
95
|
- opal/bowser/http/event.rb
|
92
96
|
- opal/bowser/http/request.rb
|
93
97
|
- opal/bowser/http/response.rb
|
98
|
+
- opal/bowser/websocket.rb
|
99
|
+
- opal/bowser/window.rb
|
94
100
|
homepage: https://github.com/clearwater-rb/bowser
|
95
101
|
licenses:
|
96
102
|
- MIT
|
@@ -111,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
117
|
version: '0'
|
112
118
|
requirements: []
|
113
119
|
rubyforge_project:
|
114
|
-
rubygems_version: 2.
|
120
|
+
rubygems_version: 2.5.1
|
115
121
|
signing_key:
|
116
122
|
specification_version: 4
|
117
123
|
summary: Minimalist browser support for Opal apps
|