bowser 0.1.6 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ac48b6c960c686e0e71ad73fb054d97bb489e952
4
- data.tar.gz: 4e9c12c81572ccce1211749da99ef252751ff7b9
3
+ metadata.gz: 4e07cbed8dbba587239bd6773b8b773d91195bda
4
+ data.tar.gz: a2cb7057cc1c44b61fe984a0a62f894be35e4cd3
5
5
  SHA512:
6
- metadata.gz: d761d6abc3d00bfd153a030d076cf214e3cc2dba5550e6a1dd824b641b5bc6f3e6be7636b2eaf055af7a5d2cda5bd39ed0e95957c2f50db959586fd5d3e77e50
7
- data.tar.gz: efa04ac75ec95bc480b2aebebd064d24f7445b2eb037359e7c37d9c6bdf12ac44e1294d6ae075027a2dad03f8c70b62aff02a69d11d59f553a94e1ec4d26790a
6
+ metadata.gz: cbfbe22f47b55da1d77c8c29613c950143c8604c7eca48c264536f221a3c577109c3a7b17b7e58453d6d27985f606d52065d41604f526cd0c339969def96ac22
7
+ data.tar.gz: 5b5d6a3ef2917d336c47febfea38b0b1c1e14a25a24457d6ef304c42193cb59f032a9273733bfcf13e8069bf313094a21e069673fdbbc379f1fabb3da0d5dfa8
@@ -1,4 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.3
4
- before_install: gem install bundler -v 1.10.6
3
+ - 2.2.5
4
+ - 2.3.1
5
+ - jruby-9.0.5.0
6
+ - jruby-9.1.1.0
7
+ before_install: gem install bundler
@@ -0,0 +1,48 @@
1
+ ## Version 0.2.0
2
+
3
+ - Allow specifying methods for HTTP requests, including file uploads
4
+ - Add `Element#to_n` and `Event#to_n` to unwrap the native objects
5
+ - Make HTTP events just use `Bowser::Event` instead of their own type
6
+ - Proxy all native element/event properties
7
+ - This provides the following types of translations from Ruby method names to JS property names:
8
+ - `element.text_content` in Ruby becomes `element.textContent` in JS
9
+ - Predicates like `element.content_editable?` checks for `contentEditable` and `isContentEditable` properties, preferring the version without `is` if both exist.
10
+ - If the property is a function, it gets called.
11
+ - No wrapping of results is done for proxied properties. You get the raw JS value back.
12
+ - Add `Element#children` to wrap child nodes in `Bowser::Element` objects
13
+ - Add `Bowser.window.location.hash`
14
+ - Add `Bowser.window.has_push_state?`
15
+ - Use `load` event for `Bowser::HTTP::Request` instead of `success`. It was causing problems and `load` is the canonical event to use.
16
+
17
+ ## Version 0.1.5
18
+
19
+ - Fix `animation_frame` polyfill delay
20
+ - Add the abillity to upload files directly from file input elements
21
+ - Allowing this instead of reading the files in first is a HUGE memory savings for large files. It uses the browser's internal streaming capabilities so we don't need to load the full file into memory.
22
+ - Memoize file read data
23
+
24
+ ## Version 0.1.4
25
+
26
+ - Relax Opal version restriction to 0.8-0.11
27
+ - Add `Bowser::HTTP::Response#text` to get the raw response body instead of assuming JSON
28
+ - Fix JSON dependency loading instead of assuming it's there
29
+
30
+ ## Version 0.1.3
31
+
32
+ - Add `Event#stop_propagation`
33
+ - Add first-class support for `file` input fields
34
+
35
+ ## Version 0.1.2
36
+
37
+ - Add `Bowser::Window::Location#href`
38
+ - Fix missing element check for `Document#[]`
39
+
40
+ ## Version 0.1.1
41
+
42
+ - Add `Window#scroll`
43
+ - Add `Window::History#push`
44
+ - Add WebSocket support
45
+
46
+ ## Version 0.1.0
47
+
48
+ - Initial release
@@ -1,3 +1,3 @@
1
1
  module Bowser
2
- VERSION = "0.1.6"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -18,24 +18,49 @@ module Bowser
18
18
  `#@native.innerHTML`
19
19
  end
20
20
 
21
- def clear
21
+ def inner_html= html
22
+ `#@native.innerHTML = html`
23
+ end
24
+
25
+ def children
26
+ elements = []
27
+
22
28
  %x{
23
- var native = #@native;
24
-
25
- if(native.nodeName === 'INPUT' || native.nodeName === 'TEXTAREA') {
26
- native.value = null;
27
- } else {
28
- var children = native.children;
29
- for(var i = 0; i < children.length; i++) {
30
- children[i].remove();
31
- }
32
- }
29
+ var children = #@native.children;
30
+ for(var i = 0; i < children.length; i++) {
31
+ elements[i] = #{Element.new(`children[i]`)};
32
+ }
33
33
  }
34
+
35
+ elements
36
+ end
37
+
38
+ def empty?
39
+ `#@native.children.length === 0`
40
+ end
41
+
42
+ def clear
43
+ if %w(input textarea).include? type
44
+ `#@native.value = null`
45
+ else
46
+ children.each do |child|
47
+ remove_child child
48
+ end
49
+ end
50
+
34
51
  self
35
52
  end
36
53
 
54
+ def remove_child child
55
+ `#@native.removeChild(child.native ? child.native : child)`
56
+ end
57
+
58
+ def type
59
+ `#@native.nodeName`.downcase
60
+ end
61
+
37
62
  def append node
38
- `#@native.appendChild(node)`
63
+ `#@native.appendChild(node.native ? node.native : node)`
39
64
  self
40
65
  end
41
66
 
@@ -44,10 +69,6 @@ module Bowser
44
69
  `!!#@native.checked`
45
70
  end
46
71
 
47
- def value
48
- `#@native.value`
49
- end
50
-
51
72
  # Convenience for when you only need a single file
52
73
  def file
53
74
  files.first
@@ -56,5 +77,48 @@ module Bowser
56
77
  def files
57
78
  FileList.new(`#@native.files`)
58
79
  end
80
+
81
+ # Fall back to native properties.
82
+ def method_missing message, *args, &block
83
+ camel_cased_message = message
84
+ .gsub(/_\w/) { |match| match[1].upcase }
85
+ .sub(/=$/, '')
86
+
87
+ # translate setting a property
88
+ if message.end_with? '='
89
+ return `#@native[camel_cased_message] = args[0]`
90
+ end
91
+
92
+ # translate `supported?` to `supported` or `isSupported`
93
+ if message.end_with? '?'
94
+ camel_cased_message = camel_cased_message.chop
95
+ property_type = `typeof(#@native[camel_cased_message])`
96
+ if property_type == 'undefined'
97
+ camel_cased_message = "is#{camel_cased_message[0].upcase}#{camel_cased_message[1..-1]}"
98
+ end
99
+ end
100
+
101
+ # If the native element doesn't have this property, bubble it up
102
+ super if `typeof(#@native[camel_cased_message]) === 'undefined'`
103
+
104
+ property = `#@native[camel_cased_message]`
105
+
106
+ if `property === false`
107
+ return false
108
+ else
109
+ property = `property || nil`
110
+ end
111
+
112
+ # If it's a method, call it. Otherwise, return it.
113
+ if `typeof(property) === 'function'`
114
+ `property.apply(#@native, args)`
115
+ else
116
+ property
117
+ end
118
+ end
119
+
120
+ def to_n
121
+ @native
122
+ end
59
123
  end
60
124
  end
@@ -50,5 +50,9 @@ module Bowser
50
50
  super
51
51
  end
52
52
  end
53
+
54
+ def to_n
55
+ @native
56
+ end
53
57
  end
54
58
  end
@@ -8,9 +8,9 @@ module Bowser
8
8
  module HTTP
9
9
  module_function
10
10
 
11
- def fetch(url)
11
+ def fetch(url, method: :get)
12
12
  promise = Promise.new
13
- request = Request.new(:get, url)
13
+ request = Request.new(method, url)
14
14
 
15
15
  connect_events_to_promise request, promise
16
16
 
@@ -19,9 +19,9 @@ module Bowser
19
19
  promise
20
20
  end
21
21
 
22
- def upload(url, data, content_type: 'application/json')
22
+ def upload(url, data, content_type: 'application/json', method: :post)
23
23
  promise = Promise.new
24
- request = Request.new(:post, url)
24
+ request = Request.new(method, url)
25
25
 
26
26
  connect_events_to_promise request, promise
27
27
 
@@ -30,9 +30,9 @@ module Bowser
30
30
  promise
31
31
  end
32
32
 
33
- def upload_files(url, files, key: 'files', key_suffix: '[]')
33
+ def upload_files(url, files, key: 'files', key_suffix: '[]', method: :post)
34
34
  promise = Promise.new
35
- request = Request.new(:post, url)
35
+ request = Request.new(method, url)
36
36
 
37
37
  connect_events_to_promise request, promise
38
38
 
@@ -46,8 +46,8 @@ module Bowser
46
46
  promise
47
47
  end
48
48
 
49
- def upload_file(url, file, key: 'file')
50
- upload_files(url, [file], key: key, key_suffix: nil)
49
+ def upload_file(url, file, key: 'file', method: :post)
50
+ upload_files(url, [file], key: key, key_suffix: nil, method: method)
51
51
  end
52
52
 
53
53
  def connect_events_to_promise(request, promise)
@@ -1,5 +1,5 @@
1
1
  require 'bowser/http/response'
2
- require 'bowser/http/event'
2
+ require 'bowser/event_target'
3
3
 
4
4
  module Bowser
5
5
  module HTTP
@@ -41,6 +41,14 @@ module Bowser
41
41
  module Location
42
42
  module_function
43
43
 
44
+ def hash
45
+ `window.location.hash`
46
+ end
47
+
48
+ def hash= hash
49
+ `window.location.hash = hash`
50
+ end
51
+
44
52
  def path
45
53
  `window.location.pathname`
46
54
  end
@@ -57,6 +65,10 @@ module Bowser
57
65
  module History
58
66
  module_function
59
67
 
68
+ def has_push_state?
69
+ `!!window.history.pushState`
70
+ end
71
+
60
72
  def push path
61
73
  `window.history.pushState({}, '', path)`
62
74
  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.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Gaskins
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-18 00:00:00.000000000 Z
11
+ date: 2016-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -82,6 +82,7 @@ files:
82
82
  - ".gitignore"
83
83
  - ".rspec"
84
84
  - ".travis.yml"
85
+ - CHANGELOG.md
85
86
  - CODE_OF_CONDUCT.md
86
87
  - Gemfile
87
88
  - LICENSE.md
@@ -99,7 +100,6 @@ files:
99
100
  - opal/bowser/event_target.rb
100
101
  - opal/bowser/file_list.rb
101
102
  - opal/bowser/http.rb
102
- - opal/bowser/http/event.rb
103
103
  - opal/bowser/http/form_data.rb
104
104
  - opal/bowser/http/request.rb
105
105
  - opal/bowser/http/response.rb
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  requirements: []
127
127
  rubyforge_project:
128
- rubygems_version: 2.4.5.1
128
+ rubygems_version: 2.6.6
129
129
  signing_key:
130
130
  specification_version: 4
131
131
  summary: Minimalist browser support for Opal apps
@@ -1,9 +0,0 @@
1
- module Bowser
2
- module HTTP
3
- class Event
4
- def initialize native
5
- @native = native
6
- end
7
- end
8
- end
9
- end