unpoly-rails 0.22.1 → 0.23.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.
Potentially problematic release.
This version of unpoly-rails might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/design/positioning.txt +28 -0
- data/dist/unpoly.css +27 -20
- data/dist/unpoly.js +171 -59
- data/dist/unpoly.min.css +1 -1
- data/dist/unpoly.min.js +3 -3
- data/lib/assets/javascripts/unpoly/browser.js.coffee +12 -0
- data/lib/assets/javascripts/unpoly/bus.js.coffee +21 -22
- data/lib/assets/javascripts/unpoly/form.js.coffee +9 -5
- data/lib/assets/javascripts/unpoly/layout.js.coffee +3 -2
- data/lib/assets/javascripts/unpoly/link.js.coffee +3 -2
- data/lib/assets/javascripts/unpoly/navigation.js.coffee +2 -2
- data/lib/assets/javascripts/unpoly/proxy.js.coffee +11 -9
- data/lib/assets/javascripts/unpoly/tooltip.js.coffee +9 -2
- data/lib/assets/javascripts/unpoly/util.js.coffee +79 -11
- data/lib/assets/stylesheets/unpoly/tooltip.css.sass +32 -22
- data/lib/unpoly/rails/version.rb +1 -1
- data/spec_app/Gemfile.lock +1 -1
- data/spec_app/app/assets/images/grid.png +0 -0
- data/spec_app/app/assets/javascripts/integration_test.coffee +2 -0
- data/spec_app/app/assets/javascripts/jasmine_specs.coffee +7 -0
- data/spec_app/app/assets/stylesheets/integration_test.sass +24 -0
- data/spec_app/app/assets/stylesheets/jasmine_specs.sass +1 -0
- data/spec_app/app/controllers/{test_controller.rb → binding_test_controller.rb} +1 -1
- data/spec_app/app/controllers/css_test_controller.rb +5 -0
- data/spec_app/app/controllers/form_test/basics_controller.rb +14 -0
- data/spec_app/app/controllers/form_test/uploads_controller.rb +15 -0
- data/spec_app/app/controllers/pages_controller.rb +5 -0
- data/spec_app/app/views/css_test/tooltip.erb +15 -0
- data/spec_app/app/views/form_test/basics/new.erb +33 -0
- data/spec_app/app/views/form_test/submission_result.erb +30 -0
- data/spec_app/app/views/form_test/uploads/new.erb +27 -0
- data/spec_app/app/views/layouts/integration_test.erb +14 -0
- data/spec_app/app/views/pages/start.erb +25 -0
- data/spec_app/config/initializers/assets.rb +4 -1
- data/spec_app/config/routes.rb +8 -2
- data/spec_app/spec/controllers/{test_controller_spec.rb → binding_test_controller_spec.rb} +1 -1
- data/spec_app/spec/javascripts/helpers/parse_form_data.js.coffee +9 -0
- data/spec_app/spec/javascripts/support/jasmine.yml +2 -2
- data/spec_app/spec/javascripts/up/form_spec.js.coffee +21 -1
- data/spec_app/spec/javascripts/up/tooltip_spec.js.coffee +54 -17
- metadata +21 -13
- data/spec_app/app/assets/javascripts/application.js +0 -20
- data/spec_app/app/assets/stylesheets/application.css +0 -17
- data/spec_app/app/assets/stylesheets/blocks/card.css.sass +0 -11
- data/spec_app/app/assets/stylesheets/blocks/controls.css.sass +0 -7
- data/spec_app/app/assets/stylesheets/blocks/menu.css.sass +0 -13
- data/spec_app/app/assets/stylesheets/blocks/panel.css.sass +0 -8
- data/spec_app/app/assets/stylesheets/jasmine_specs.css +0 -5
- data/spec_app/app/controllers/concerns/.keep +0 -0
- data/spec_app/app/views/layouts/application.html.erb +0 -12
data/lib/unpoly/rails/version.rb
CHANGED
data/spec_app/Gemfile.lock
CHANGED
Binary file
|
@@ -0,0 +1,24 @@
|
|
1
|
+
//= require unpoly
|
2
|
+
|
3
|
+
body
|
4
|
+
margin: 0
|
5
|
+
background: image-url('grid.png') repeat
|
6
|
+
font-family: arial, sans-serif
|
7
|
+
|
8
|
+
.example
|
9
|
+
margin: 50px
|
10
|
+
|
11
|
+
.button
|
12
|
+
display: inline-block
|
13
|
+
height: 50px
|
14
|
+
line-height: 50px
|
15
|
+
padding-left: 25px
|
16
|
+
padding-right: 25px
|
17
|
+
background-color: #e21
|
18
|
+
color: white
|
19
|
+
text-decoration: none
|
20
|
+
&:hover
|
21
|
+
background-color: #fa1
|
22
|
+
|
23
|
+
dt
|
24
|
+
font-weight: bold
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require unpoly
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div class="example">
|
2
|
+
<a class="button" href="#" up-tooltip="Tooltip text" up-position="top">Top tooltip</a>
|
3
|
+
</div>
|
4
|
+
|
5
|
+
<div class="example">
|
6
|
+
<a class="button" href="#" up-tooltip="Tooltip text" up-position="bottom">Bottom tooltip</a>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div class="example">
|
10
|
+
<a class="button" href="#" up-tooltip="Tooltip text" up-position="left">Left tooltip</a>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="example">
|
14
|
+
<a class="button" href="#" up-tooltip="Tooltip text" up-position="right">Right tooltip</a>
|
15
|
+
</div>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<div class="example">
|
2
|
+
|
3
|
+
<h2>Basic form</h2>
|
4
|
+
|
5
|
+
<%= form_tag "/form_test/basic", method: :post, 'up-target' => '.result' do %>
|
6
|
+
|
7
|
+
<p>
|
8
|
+
<input type="text" name="text-param" value="text-value" />
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<p>
|
12
|
+
<input type="password" name="password-param" value="password-value" />
|
13
|
+
</p>
|
14
|
+
|
15
|
+
<p>
|
16
|
+
<select name="select-param">
|
17
|
+
<option value="select-value">select-label</option>
|
18
|
+
</select>
|
19
|
+
</p>
|
20
|
+
|
21
|
+
<p>
|
22
|
+
<button type="submit">Submit</button>
|
23
|
+
</p>
|
24
|
+
|
25
|
+
<% end %>
|
26
|
+
|
27
|
+
<h3>Submission result</h3>
|
28
|
+
|
29
|
+
<div class="result">
|
30
|
+
Results of the form submission will be shown here.
|
31
|
+
</div>
|
32
|
+
|
33
|
+
</div>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<% require "base64" %>
|
2
|
+
|
3
|
+
<div class="result">
|
4
|
+
|
5
|
+
<p>
|
6
|
+
Submitted <code>params</code> were:
|
7
|
+
</p>
|
8
|
+
|
9
|
+
<dl>
|
10
|
+
<% params.each do |key, value| %>
|
11
|
+
<dt><code><%= key %></code></dt>
|
12
|
+
<dd>
|
13
|
+
<% if value.is_a?(String) %>
|
14
|
+
<pre><code><%= value %></code></pre>
|
15
|
+
<% elsif value.is_a?(ActionDispatch::Http::UploadedFile) %>
|
16
|
+
<% if value.original_filename.ends_with?('.jpg') %>
|
17
|
+
<img src="data:image/jpeg;base64,<%= Base64.encode64(value.read) %>">
|
18
|
+
<% elsif value.original_filename.ends_with?('.png') %>
|
19
|
+
<img src="data:image/png;base64,<%= Base64.encode64(value.read) %>">
|
20
|
+
<% else %>
|
21
|
+
<%= value.original_filename %> (<%= value.size %> bytes)
|
22
|
+
<% end %>
|
23
|
+
<% else %>
|
24
|
+
<%= value.inspect %>
|
25
|
+
<% end %>
|
26
|
+
</dd>
|
27
|
+
<% end %>
|
28
|
+
</dl>
|
29
|
+
|
30
|
+
</div>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<div class="example">
|
2
|
+
|
3
|
+
<h2>Form with file uploads</h2>
|
4
|
+
|
5
|
+
<%= form_tag "/form_test/upload", method: :post, multipart: true, 'up-target' => '.result' do %>
|
6
|
+
|
7
|
+
<p>
|
8
|
+
<input type="text" name="text-param" value="text-value" />
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<p>
|
12
|
+
<input type="file" name="file-param" />
|
13
|
+
</p>
|
14
|
+
|
15
|
+
<p>
|
16
|
+
<button type="submit">Submit</button>
|
17
|
+
</p>
|
18
|
+
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<h3>Submission result</h3>
|
22
|
+
|
23
|
+
<div class="result">
|
24
|
+
Results of the form submission will be shown here.
|
25
|
+
</div>
|
26
|
+
|
27
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Integration test - Unpoly</title>
|
5
|
+
<%= stylesheet_link_tag 'integration_test', media: 'all' %>
|
6
|
+
<%= javascript_include_tag 'integration_test' %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<div class="page">
|
11
|
+
<%= yield %>
|
12
|
+
</div>
|
13
|
+
</body>
|
14
|
+
</html>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<div class="example">
|
2
|
+
|
3
|
+
<h1>Unpoly tests</h1>
|
4
|
+
|
5
|
+
<h2>Unit tests</h2>
|
6
|
+
|
7
|
+
<ul>
|
8
|
+
<li><%= link_to 'Jasmine specs', '/specs' %></li>
|
9
|
+
</ul>
|
10
|
+
|
11
|
+
<h2>Integration tests</h2>
|
12
|
+
|
13
|
+
<ul>
|
14
|
+
<li><%= link_to 'Tooltip', '/css_test/tooltip' %></li>
|
15
|
+
</ul>
|
16
|
+
|
17
|
+
<ul>
|
18
|
+
<li><%= link_to 'Form (basic)', '/form_test/basic/new' %></li>
|
19
|
+
</ul>
|
20
|
+
|
21
|
+
<ul>
|
22
|
+
<li><%= link_to 'Form (upload)', '/form_test/upload/new' %></li>
|
23
|
+
</ul>
|
24
|
+
|
25
|
+
</div>
|
@@ -8,4 +8,7 @@ Rails.application.config.assets.version = '1.0'
|
|
8
8
|
|
9
9
|
# Precompile additional assets.
|
10
10
|
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
11
|
-
|
11
|
+
|
12
|
+
|
13
|
+
Rails.application.config.assets.precompile += %w( application.js application.css )
|
14
|
+
Rails.application.config.assets.precompile += %w( jasmine_specs.js jasmine_specs.css integration_test.js integration_test.css )
|
data/spec_app/config/routes.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
2
|
|
3
3
|
mount JasmineRails::Engine => '/specs' if defined?(JasmineRails)
|
4
|
-
root to:
|
4
|
+
root to: 'pages#start'
|
5
5
|
|
6
|
-
get '
|
6
|
+
get 'binding_test/:action', controller: 'binding_test'
|
7
|
+
get 'css_test/:action', controller: 'css_test'
|
8
|
+
|
9
|
+
namespace :form_test do
|
10
|
+
resource :basic, only: [:new, :create]
|
11
|
+
resource :upload, only: [:new, :create]
|
12
|
+
end
|
7
13
|
|
8
14
|
end
|
@@ -17,12 +17,12 @@ css_dir: "app/assets/stylesheets"
|
|
17
17
|
# list of file expressions to include as source files
|
18
18
|
# relative path from src_dir
|
19
19
|
src_files:
|
20
|
-
- "
|
20
|
+
- "jasmine_specs.{js.coffee,js,coffee}"
|
21
21
|
|
22
22
|
# list of file expressions to include as css files
|
23
23
|
# relative path from css_dir
|
24
24
|
css_files:
|
25
|
-
- "
|
25
|
+
- "jasmine_specs.{css.sass,css,sass}"
|
26
26
|
|
27
27
|
# path to parent directory of spec_files
|
28
28
|
# relative path from Rails.root
|
@@ -166,9 +166,29 @@ describe 'up.form', ->
|
|
166
166
|
@respondWith('<div class="response">new-text</div>')
|
167
167
|
expect(up.browser.url()).toEqual(@hrefBeforeExample)
|
168
168
|
|
169
|
+
describe 'in a form with file inputs', ->
|
170
|
+
|
171
|
+
beforeEach ->
|
172
|
+
@$form.affix('input[name="file-field"][type="file"]')
|
173
|
+
|
174
|
+
describeCapability 'canFormData', ->
|
175
|
+
|
176
|
+
it 'transfers the form fields via FormData', ->
|
177
|
+
up.submit(@$form)
|
178
|
+
data = @lastRequest().data()
|
179
|
+
expect(u.isFormData(data)).toBe(true)
|
180
|
+
|
181
|
+
describeFallback 'canFormData', ->
|
182
|
+
|
183
|
+
it 'falls back to a vanilla form submission', ->
|
184
|
+
form = @$form.get(0)
|
185
|
+
spyOn(form, 'submit')
|
186
|
+
up.submit(@$form)
|
187
|
+
expect(form.submit).toHaveBeenCalled()
|
188
|
+
|
169
189
|
describeFallback 'canPushState', ->
|
170
190
|
|
171
|
-
it '
|
191
|
+
it 'falls back to a vanilla form submission', ->
|
172
192
|
$form = affix('form[action="/path/to"][method="put"][up-target=".response"]')
|
173
193
|
form = $form.get(0)
|
174
194
|
spyOn(form, 'submit')
|
@@ -4,36 +4,73 @@ describe 'up.tooltip', ->
|
|
4
4
|
|
5
5
|
describe 'up.tooltip.attach', ->
|
6
6
|
|
7
|
-
it 'opens a
|
8
|
-
$link = affix('span')
|
9
|
-
$link.css(
|
10
|
-
position: 'absolute'
|
11
|
-
left: '200px'
|
12
|
-
top: '200px'
|
13
|
-
width: '50px'
|
14
|
-
height: '50px'
|
15
|
-
)
|
7
|
+
it 'opens a tooltip with the given text', ->
|
8
|
+
$link = affix('span')
|
16
9
|
up.tooltip.attach($link, html: 'tooltip text')
|
17
10
|
$tooltip = $('.up-tooltip')
|
18
|
-
expect($tooltip).toBeInDOM()
|
19
11
|
expect($tooltip).toHaveText('tooltip text')
|
20
|
-
|
21
|
-
|
22
|
-
expect(tooltipBox.top).toBeAround(linkBox.top - tooltipBox.height, 15)
|
23
|
-
expect(tooltipBox.left).toBeAround(linkBox.left + 0.5 * (linkBox.width - tooltipBox.width), 15)
|
24
|
-
|
25
|
-
it 'allows HTML for the tooltip text when contents are given as .html option', ->
|
12
|
+
|
13
|
+
it 'allows HTML for the tooltip text when contents are given as { html } option', ->
|
26
14
|
$link = affix('span')
|
27
15
|
up.tooltip.attach($link, html: '<b>text</b>')
|
28
16
|
$tooltip = $('.up-tooltip')
|
29
17
|
expect($tooltip.html()).toEqual('<b>text</b>')
|
30
18
|
|
31
|
-
it 'escapes HTML for the tooltip text when contents given as
|
19
|
+
it 'escapes HTML for the tooltip text when contents given as { text } option', ->
|
32
20
|
$link = affix('span')
|
33
21
|
up.tooltip.attach($link, text: '<b>text</b>')
|
34
22
|
$tooltip = $('.up-tooltip')
|
35
23
|
expect($tooltip.html()).toEqual('<b>text</b>')
|
36
24
|
|
25
|
+
describe 'positioning', ->
|
26
|
+
|
27
|
+
beforeEach ->
|
28
|
+
@$link = affix('span').text('button label')
|
29
|
+
@$link.css(
|
30
|
+
position: 'absolute'
|
31
|
+
left: '200px'
|
32
|
+
top: '200px'
|
33
|
+
width: '50px'
|
34
|
+
height: '50px'
|
35
|
+
)
|
36
|
+
@linkBox = up.util.measure(@$link, relative: true)
|
37
|
+
|
38
|
+
describe 'with { position: "top" }', ->
|
39
|
+
|
40
|
+
it 'centers the tooltip above the given element', ->
|
41
|
+
up.tooltip.attach(@$link, html: 'tooltip text', position: 'top')
|
42
|
+
$tooltip = $('.up-tooltip')
|
43
|
+
tooltipBox = up.util.measure($tooltip, relative: true)
|
44
|
+
expect(tooltipBox.top).toBeAround(@linkBox.top - tooltipBox.height, 15)
|
45
|
+
expect(tooltipBox.left).toBeAround(@linkBox.left + 0.5 * (@linkBox.width - tooltipBox.width), 15)
|
46
|
+
|
47
|
+
describe 'with { position: "right" }', ->
|
48
|
+
|
49
|
+
it 'centers the tooltip at the right side of the given element', ->
|
50
|
+
up.tooltip.attach(@$link, html: 'tooltip text', position: 'right')
|
51
|
+
$tooltip = $('.up-tooltip')
|
52
|
+
tooltipBox = up.util.measure($tooltip, relative: true)
|
53
|
+
expect(tooltipBox.top).toBeAround(@linkBox.top + 0.5 * (@linkBox.height - tooltipBox.height), 15)
|
54
|
+
expect(tooltipBox.left).toBeAround(@linkBox.left + @linkBox.width, 15)
|
55
|
+
|
56
|
+
describe 'with { position: "bottom" }', ->
|
57
|
+
|
58
|
+
it 'centers the tooltip below the given element', ->
|
59
|
+
up.tooltip.attach(@$link, html: 'tooltip text', position: 'bottom')
|
60
|
+
$tooltip = $('.up-tooltip')
|
61
|
+
tooltipBox = up.util.measure($tooltip, relative: true)
|
62
|
+
expect(tooltipBox.top).toBeAround(@linkBox.top + @linkBox.height, 15)
|
63
|
+
expect(tooltipBox.left).toBeAround(@linkBox.left + 0.5 * (@linkBox.width - tooltipBox.width), 15)
|
64
|
+
|
65
|
+
describe 'with { position: "left" }', ->
|
66
|
+
|
67
|
+
it 'centers the tooltip at the left side of the given element', ->
|
68
|
+
up.tooltip.attach(@$link, html: 'tooltip text', position: 'left')
|
69
|
+
$tooltip = $('.up-tooltip')
|
70
|
+
tooltipBox = up.util.measure($tooltip, relative: true)
|
71
|
+
expect(tooltipBox.top).toBeAround(@linkBox.top + 0.5 * (@linkBox.height - tooltipBox.height), 15)
|
72
|
+
expect(tooltipBox.left).toBeAround(@linkBox.left - tooltipBox.width, 15)
|
73
|
+
|
37
74
|
it 'closes an existing tooltip'
|
38
75
|
|
39
76
|
describe 'with position option', ->
|