beyond_canvas 0.6.4.pre → 0.7.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/Gemfile.lock +9 -9
- data/app/assets/javascripts/beyond_canvas.js +1 -0
- data/app/assets/javascripts/buttons.js +65 -0
- data/app/assets/javascripts/flash.js +8 -5
- data/app/assets/stylesheets/_beyond_canvas.sass +2 -0
- data/app/assets/stylesheets/components/_actions.sass +5 -0
- data/app/assets/stylesheets/components/_buttons.sass +15 -0
- data/app/assets/stylesheets/components/spinner.sass +38 -0
- data/app/views/beyond_canvas/shared/_head.html.slim +6 -6
- data/lib/beyond_canvas.rb +3 -1
- data/lib/beyond_canvas/version.rb +1 -1
- data/lib/generators/templates/beyond_canvas.rb +3 -0
- data/lib/generators/templates/beyond_canvas_form_utils.rb +11 -8
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57ce3075063f9f943f9b4a4fa47580696046a4d23563e70a3fc1a40c578592f9
|
4
|
+
data.tar.gz: b7a63f7471c95a67c8c436a6291826878d79acf913faeb13539f3604c1341820
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb70bf7931a673e05d1040923d9c4fdfaffd1c50a6a9f03e3b5b9aca0937c488d03923b6971a9c69d871ab0f6291493dec782399b6097d69e24cbc12aad841c8
|
7
|
+
data.tar.gz: 93f84bcd9bc6027fe4e25ea77213ae8a818d6edb0c4f0f683d71da5ff9fb7fbd14768aaa80edf31197a04a01661ce58de76561afd34f0a03d6269651163408fb
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
### v0.7.0.pre
|
2
|
+
|
3
|
+
* deprecations
|
4
|
+
* Use custom `stylesheet_link_tag` and `javascript_include_tag` on head
|
5
|
+
|
6
|
+
* enhancements
|
7
|
+
* Make `lib/generators/templates/beyond_canvas_form_utils.rb` rubocop compatible
|
8
|
+
|
9
|
+
* features
|
10
|
+
* Add loading buttons
|
11
|
+
|
1
12
|
### v0.6.4.pre
|
2
13
|
|
3
14
|
* bug-fixes
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
beyond_canvas (0.
|
4
|
+
beyond_canvas (0.7.0.pre)
|
5
5
|
bourbon (~> 5.1)
|
6
6
|
inline_svg (~> 1.5)
|
7
7
|
sassc-rails (~> 2.1)
|
@@ -34,13 +34,13 @@ GEM
|
|
34
34
|
thor (~> 0.19)
|
35
35
|
builder (3.2.4)
|
36
36
|
colorize (0.8.1)
|
37
|
-
concurrent-ruby (1.1.
|
38
|
-
crass (1.0.
|
37
|
+
concurrent-ruby (1.1.6)
|
38
|
+
crass (1.0.6)
|
39
39
|
erubi (1.9.0)
|
40
|
-
ffi (1.
|
41
|
-
i18n (1.
|
40
|
+
ffi (1.12.2)
|
41
|
+
i18n (1.8.2)
|
42
42
|
concurrent-ruby (~> 1.0)
|
43
|
-
inline_svg (1.
|
43
|
+
inline_svg (1.7.0)
|
44
44
|
activesupport (>= 3.0)
|
45
45
|
nokogiri (>= 1.6)
|
46
46
|
loofah (2.4.0)
|
@@ -48,10 +48,10 @@ GEM
|
|
48
48
|
nokogiri (>= 1.5.9)
|
49
49
|
method_source (0.9.2)
|
50
50
|
mini_portile2 (2.4.0)
|
51
|
-
minitest (5.
|
52
|
-
nokogiri (1.10.
|
51
|
+
minitest (5.14.0)
|
52
|
+
nokogiri (1.10.8)
|
53
53
|
mini_portile2 (~> 2.4.0)
|
54
|
-
rack (2.
|
54
|
+
rack (2.2.2)
|
55
55
|
rack-test (1.1.0)
|
56
56
|
rack (>= 1.0, < 3)
|
57
57
|
rails-dom-testing (2.0.3)
|
@@ -0,0 +1,65 @@
|
|
1
|
+
$(document).ready(function() {
|
2
|
+
('use strict');
|
3
|
+
|
4
|
+
$('[class^="button"]').each(function() {
|
5
|
+
var button = $(this);
|
6
|
+
|
7
|
+
// Add width attribute and save old width
|
8
|
+
button.width(button.width());
|
9
|
+
button.data('oldWidth', button.width());
|
10
|
+
|
11
|
+
// Add the spinner
|
12
|
+
button.prepend(`
|
13
|
+
<div class="spinner">
|
14
|
+
<div class="bounce1"></div>
|
15
|
+
<div class="bounce2"></div>
|
16
|
+
<div class="bounce3"></div>
|
17
|
+
</div>`
|
18
|
+
);
|
19
|
+
|
20
|
+
// Bind ajax:success and ajax:error to the form the button belongs to
|
21
|
+
button
|
22
|
+
.closest('form')
|
23
|
+
.on('ajax:success', function() {
|
24
|
+
hideSpinner(button);
|
25
|
+
enableActionElements();
|
26
|
+
})
|
27
|
+
.on('ajax:error', function() {
|
28
|
+
hideSpinner(button);
|
29
|
+
enableActionElements();
|
30
|
+
});
|
31
|
+
});
|
32
|
+
|
33
|
+
// Bind click event to buttons
|
34
|
+
$('[class^="button"]').click(function() {
|
35
|
+
disableActionElements();
|
36
|
+
showSpinner($(this));
|
37
|
+
});
|
38
|
+
});
|
39
|
+
|
40
|
+
function showSpinner(button) {
|
41
|
+
// Adjust the width of the button
|
42
|
+
button.width(button.width() + $('.spinner').outerWidth(true));
|
43
|
+
// Show the spinner
|
44
|
+
setTimeout(function() {
|
45
|
+
button.find('.spinner').css('display', 'flex');
|
46
|
+
}, 125);
|
47
|
+
}
|
48
|
+
|
49
|
+
function hideSpinner(button) {
|
50
|
+
// Hide the spinner
|
51
|
+
button.find('.spinner').hide();
|
52
|
+
// Adjust the width of the button
|
53
|
+
button.width(button.data('oldWidth'));
|
54
|
+
}
|
55
|
+
|
56
|
+
function disableActionElements() {
|
57
|
+
$('a, input[type="submit"], input[type="button"], input[type="reset"], button').each(function() {
|
58
|
+
$(this).addClass('actions--disabled');
|
59
|
+
});
|
60
|
+
}
|
61
|
+
function enableActionElements() {
|
62
|
+
$('a, input[type="submit"], input[type="button"], input[type="reset"], button').each(function() {
|
63
|
+
$(this).removeClass("actions--disabled");
|
64
|
+
});
|
65
|
+
}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
document.
|
2
|
-
'use strict'
|
1
|
+
$(document).ready(function() {
|
2
|
+
('use strict');
|
3
3
|
|
4
4
|
$('.flash').each(function() {
|
5
5
|
$(this).css('right', -$(this).width() + 'px');
|
@@ -14,8 +14,11 @@ document.addEventListener('turbolinks:load', function() {
|
|
14
14
|
});
|
15
15
|
|
16
16
|
function closeAlert() {
|
17
|
-
$('.flash')
|
18
|
-
|
19
|
-
|
17
|
+
$('.flash')
|
18
|
+
.removeClass('flash--shown')
|
19
|
+
.delay(700)
|
20
|
+
.queue(function() {
|
21
|
+
$(this).remove();
|
22
|
+
});
|
20
23
|
}
|
21
24
|
});
|
@@ -6,6 +6,7 @@
|
|
6
6
|
|
7
7
|
@import 'utilities/mixins'
|
8
8
|
|
9
|
+
@import 'components/actions'
|
9
10
|
@import 'components/buttons'
|
10
11
|
@import 'components/cards'
|
11
12
|
@import 'components/comments'
|
@@ -18,3 +19,4 @@
|
|
18
19
|
@import 'components/notices'
|
19
20
|
@import 'components/relative'
|
20
21
|
@import 'components/tables'
|
22
|
+
@import 'components/spinner'
|
@@ -2,11 +2,14 @@
|
|
2
2
|
+padding($button-padding)
|
3
3
|
@if $button-box-shadow != true
|
4
4
|
padding-top: 7px
|
5
|
+
align-items: center
|
5
6
|
border-radius: $button-border-radius
|
6
7
|
border-width: 1px
|
7
8
|
border-style: solid
|
8
9
|
cursor: pointer
|
10
|
+
display: flex
|
9
11
|
font-weight: $button-font-weight
|
12
|
+
justify-content: flex-end
|
10
13
|
line-height: 1
|
11
14
|
outline: none
|
12
15
|
transition: $main-transition
|
@@ -15,6 +18,12 @@
|
|
15
18
|
+background-color-darken($background, 10%)
|
16
19
|
color: $color
|
17
20
|
|
21
|
+
.spinner
|
22
|
+
display: none
|
23
|
+
|
24
|
+
> div
|
25
|
+
background-color: $color
|
26
|
+
|
18
27
|
&:hover
|
19
28
|
border-color: darken($background, 10%)
|
20
29
|
|
@@ -23,6 +32,12 @@
|
|
23
32
|
border-color: $background
|
24
33
|
color: $background
|
25
34
|
|
35
|
+
.spinner
|
36
|
+
display: none
|
37
|
+
|
38
|
+
> div
|
39
|
+
background-color: $background
|
40
|
+
|
26
41
|
&:hover
|
27
42
|
background-color: lighten($background, 40%)
|
28
43
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
.spinner
|
2
|
+
display: flex
|
3
|
+
margin-right: 12px
|
4
|
+
width: 24px
|
5
|
+
text-align: center
|
6
|
+
|
7
|
+
> div
|
8
|
+
margin: 0 !important
|
9
|
+
width: 8px
|
10
|
+
height: 8px
|
11
|
+
border-radius: 100%
|
12
|
+
display: inline-block
|
13
|
+
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both
|
14
|
+
animation: sk-bouncedelay 1.4s infinite ease-in-out both
|
15
|
+
|
16
|
+
.bounce1
|
17
|
+
-webkit-animation-delay: -0.32s
|
18
|
+
animation-delay: -0.32s
|
19
|
+
|
20
|
+
.bounce2
|
21
|
+
-webkit-animation-delay: -0.16s
|
22
|
+
animation-delay: -0.16s
|
23
|
+
|
24
|
+
@-webkit-keyframes sk-bouncedelay
|
25
|
+
0%, 80%, 100%
|
26
|
+
-webkit-transform: scale(0)
|
27
|
+
|
28
|
+
40%
|
29
|
+
-webkit-transform: scale(1)
|
30
|
+
|
31
|
+
@keyframes sk-bouncedelay
|
32
|
+
0%, 80%, 100%
|
33
|
+
-webkit-transform: scale(0)
|
34
|
+
transform: scale(0)
|
35
|
+
|
36
|
+
40%
|
37
|
+
-webkit-transform: scale(1)
|
38
|
+
transform: scale(1)
|
@@ -3,10 +3,10 @@ head
|
|
3
3
|
meta content='width=device-width, initial-scale=1.0' name='viewport' /
|
4
4
|
link crossorigin="anonymous" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" rel="stylesheet" /
|
5
5
|
script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
|
7
|
+
- stylesheet_link_tag = BeyondCanvas.configuration.stylesheet_link_tag
|
8
|
+
- javascript_include_tag = BeyondCanvas.configuration.javascript_include_tag
|
9
|
+
= stylesheet_link_tag(stylesheet_link_tag) unless stylesheet_link_tag.nil?
|
10
|
+
= javascript_include_tag(javascript_include_tag) unless javascript_include_tag.nil?
|
11
|
+
|
12
12
|
= render 'beyond_canvas/custom/public_head'
|
data/lib/beyond_canvas.rb
CHANGED
@@ -26,10 +26,12 @@ module BeyondCanvas
|
|
26
26
|
end
|
27
27
|
|
28
28
|
class Configuration
|
29
|
-
attr_accessor :public_logo
|
29
|
+
attr_accessor :public_logo, :stylesheet_link_tag, :javascript_include_tag
|
30
30
|
|
31
31
|
def initialize
|
32
32
|
@public_logo = nil
|
33
|
+
@stylesheet_link_tag = nil
|
34
|
+
@javascript_include_tag = nil
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
@@ -1,19 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
# Adds form__error class to the inputs after sending a form when errors
|
4
|
+
ActionView::Base.field_error_proc = proc do |html_tag, _instance|
|
5
|
+
include ActionView::Helpers::SanitizeHelper
|
6
|
+
|
4
7
|
if html_tag =~ /<(input|textarea|select)/
|
5
|
-
error_class =
|
8
|
+
error_class = 'form__error'
|
6
9
|
|
7
10
|
doc = Nokogiri::XML(html_tag)
|
8
11
|
doc.children.each do |field|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
next if field['type'] == 'hidden'
|
13
|
+
|
14
|
+
next if field['class'] =~ /\berror\b/
|
15
|
+
|
16
|
+
field['class'] = "#{field['class']} #{error_class}".strip
|
14
17
|
end
|
15
18
|
|
16
|
-
doc.to_html
|
19
|
+
sanitize doc.to_html
|
17
20
|
else
|
18
21
|
html_tag
|
19
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beyond_canvas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Unai Abrisketa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -98,8 +98,10 @@ files:
|
|
98
98
|
- README.md
|
99
99
|
- Rakefile
|
100
100
|
- app/assets/javascripts/beyond_canvas.js
|
101
|
+
- app/assets/javascripts/buttons.js
|
101
102
|
- app/assets/javascripts/flash.js
|
102
103
|
- app/assets/stylesheets/_beyond_canvas.sass
|
104
|
+
- app/assets/stylesheets/components/_actions.sass
|
103
105
|
- app/assets/stylesheets/components/_buttons.sass
|
104
106
|
- app/assets/stylesheets/components/_cards.sass
|
105
107
|
- app/assets/stylesheets/components/_comments.sass
|
@@ -112,6 +114,7 @@ files:
|
|
112
114
|
- app/assets/stylesheets/components/_notices.sass
|
113
115
|
- app/assets/stylesheets/components/_relative.sass
|
114
116
|
- app/assets/stylesheets/components/_tables.sass
|
117
|
+
- app/assets/stylesheets/components/spinner.sass
|
115
118
|
- app/assets/stylesheets/settings/_reset_css.sass
|
116
119
|
- app/assets/stylesheets/settings/_typography.sass
|
117
120
|
- app/assets/stylesheets/settings/_variables.sass
|