bowser 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 959f43cc08e1a519036ff190c7758c8985c92b75
4
- data.tar.gz: 65aed9101ecc212d109526e44c5633cae06af2d7
3
+ metadata.gz: 93503b9b0209c9a0aaa12b41dce65d10e8ed6475
4
+ data.tar.gz: 4984145e885720e02f90f903324152d8f4a93be3
5
5
  SHA512:
6
- metadata.gz: 2be6103c2c7702df5b9930a69b9965960639bf7a4633d625523c122afcef328ec9fba8d52261c69d3d4c7ceb62251ff181365bb28a45216fb7b1a9e7bb38b917
7
- data.tar.gz: ea3e17f6ee915df58f39e19d2d108080bc3649f79814bce31b815c4cb2bdf48a8fba1dc9cdd86d067b3daa10f8e0465038b80c5bb30a9da80ff8bb7a7d31f994
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 [INSERT EMAIL ADDRESS]. All
39
- complaints will be reviewed and investigated and will result in a response that
40
- is deemed necessary and appropriate to the circumstances. Maintainers are
41
- obligated to maintain confidentiality with regard to the reporter of an
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
@@ -1,3 +1,3 @@
1
1
  module Bowser
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -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
- module Bowser
2
- module_function
3
-
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
-
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
- def create_element type
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.0
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-23 00:00:00.000000000 Z
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.4.5.1
120
+ rubygems_version: 2.5.1
115
121
  signing_key:
116
122
  specification_version: 4
117
123
  summary: Minimalist browser support for Opal apps