udongo 5.4.0 → 5.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/backend/application.js +2 -0
- data/app/assets/javascripts/backend/dirty-inputs.js +33 -0
- data/app/assets/javascripts/backend/seo.js +38 -0
- data/app/assets/stylesheets/backend/udongo.scss +4 -0
- data/app/helpers/backend/form_helper.rb +5 -0
- data/app/views/backend/_seo_form.html.erb +6 -2
- data/app/views/backend/_tags.html.erb +0 -2
- data/app/views/backend/articles/edit_translation.html.erb +1 -0
- data/app/views/backend/images/new.html.erb +1 -1
- data/app/views/backend/pages/edit_translation.html.erb +1 -1
- data/changelog.md +16 -0
- data/config/locales/en_backend.yml +1 -0
- data/config/locales/nl_backend.yml +1 -0
- data/config/routes.rb +2 -0
- data/lib/udongo/version.rb +1 -1
- data/readme.md +63 -0
- data/vendor/assets/javascripts/backend/jquery.throttle-debounce.min.js +9 -0
- data/vendor/assets/stylesheets/backend/tagit/{tagit-autocomplete.css → _autocomplete.scss} +1 -1
- data/vendor/assets/stylesheets/backend/tagit/{tagit.css → _base.scss} +0 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff6a2c5f11be6933246edd9840889f3e54565c1b
|
4
|
+
data.tar.gz: daa2e269f183b22722eb853480fdedbda50cf0e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e54b777799e616d3db6b1759655f1a2fac5d8d56954e41eeadf8606eeeb93be9a93003575720f29b010aee588727132ef7912e5442c7ce542728f54a65a62ce
|
7
|
+
data.tar.gz: 3562e610247ca7d202f4e331915d85fd1aac48c23d61dd810aec3190cbe4e23ff6b2366d6d15922b5ede0a1f080f71a2a1d69bbf59d07e38418420a1d85839c8
|
@@ -17,8 +17,10 @@
|
|
17
17
|
//= require jquery-ui/sortable
|
18
18
|
//= require backend/tether.min
|
19
19
|
//= require backend/bootstrap
|
20
|
+
//= require backend/jquery.throttle-debounce.min.js
|
20
21
|
//= require ckeditor/init
|
21
22
|
//= require backend/general
|
23
|
+
//= require backend/dirty-inputs
|
22
24
|
//= require backend/search
|
23
25
|
//= require backend/bootstrap-datepicker.min
|
24
26
|
//= require backend/datepickers
|
@@ -0,0 +1,33 @@
|
|
1
|
+
var dirty_inputs = dirty_inputs || {
|
2
|
+
message: null,
|
3
|
+
init: function() {
|
4
|
+
$('[data-dirty]').parents('form').find(':input').on('change, keydown', this.input_change_listener);
|
5
|
+
},
|
6
|
+
|
7
|
+
input_change_listener: function(e) {
|
8
|
+
// I have to set the message this way, because the trigger for the click
|
9
|
+
// warning probably won't have the context of the form that this method has.
|
10
|
+
var input = $(this);
|
11
|
+
dirty_inputs.message = input.parents('form').find('[data-dirty]').text();
|
12
|
+
input.data('dirty', true);
|
13
|
+
$('a').each(dirty_inputs.iterate_anchors_and_bind_click_warning);
|
14
|
+
},
|
15
|
+
|
16
|
+
anchor_click_warning_listener: function(e) {
|
17
|
+
if(!window.confirm(dirty_inputs.message)) {
|
18
|
+
e.stopPropagation();
|
19
|
+
e.preventDefault();
|
20
|
+
}
|
21
|
+
},
|
22
|
+
|
23
|
+
iterate_anchors_and_bind_click_warning: function(){
|
24
|
+
var anchor = $(this);
|
25
|
+
var events = $._data(anchor[0], 'events');
|
26
|
+
|
27
|
+
if(typeof events == 'undefined') {
|
28
|
+
anchor.on('click', dirty_inputs.anchor_click_warning_listener);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
};
|
32
|
+
|
33
|
+
$(function(){ dirty_inputs.init(); });
|
@@ -0,0 +1,38 @@
|
|
1
|
+
var seo = {
|
2
|
+
init: function() {
|
3
|
+
this.sluggable_input().on('keydown', this.keydown_listener);
|
4
|
+
this.sluggable_input().on('keyup', $.debounce(250, this.keyup_listener));
|
5
|
+
},
|
6
|
+
|
7
|
+
data: function(key) {
|
8
|
+
return $('[data-seo]').data(key);
|
9
|
+
},
|
10
|
+
|
11
|
+
keydown_listener: function(e) {
|
12
|
+
if(e.keyCode == 13) e.preventDefault();
|
13
|
+
},
|
14
|
+
|
15
|
+
keyup_listener: function(e) {
|
16
|
+
if(seo.slug_input().attr('disabled')) return;
|
17
|
+
var input = $(this);
|
18
|
+
|
19
|
+
$.ajax({
|
20
|
+
url: seo.data('path'),
|
21
|
+
data: { value: input.val() },
|
22
|
+
type: 'GET'
|
23
|
+
}).done(function(data){
|
24
|
+
seo.slug_input().val(data.result);
|
25
|
+
if(e.keyCode == 13) input.parents('form').submit();
|
26
|
+
});
|
27
|
+
},
|
28
|
+
|
29
|
+
slug_input: function() {
|
30
|
+
return $('input[id*="seo_slug"]');
|
31
|
+
},
|
32
|
+
|
33
|
+
sluggable_input: function() {
|
34
|
+
return $($('[data-seo]').data('sluggable-input'));
|
35
|
+
}
|
36
|
+
};
|
37
|
+
|
38
|
+
$(function(){ seo.init(); });
|
@@ -1,4 +1,8 @@
|
|
1
|
-
|
1
|
+
<% javascript 'backend/seo' %>
|
2
|
+
|
3
|
+
<% sluggable_field ||= 'title' %>
|
4
|
+
|
5
|
+
<%= content_tag :div, class: 'card', data: { seo: true, path: backend_seo_slugify_path, sluggable_input: "##{f.object_name}_#{sluggable_field}" } do %>
|
2
6
|
<div class="card-header">
|
3
7
|
<%= t 'b.msg.seo' %>
|
4
8
|
</div>
|
@@ -10,4 +14,4 @@
|
|
10
14
|
<%= f.input :seo_keywords, as: :string %>
|
11
15
|
<%= f.input :seo_custom, as: :text %>
|
12
16
|
</div>
|
13
|
-
|
17
|
+
<% end %>
|
@@ -6,6 +6,7 @@
|
|
6
6
|
<%= render 'backend/general_form_error', object: @translation %>
|
7
7
|
|
8
8
|
<%= simple_form_for([:backend, @translation], url: edit_translation_backend_article_path, html: { class: 'no-focus' }) do |f| %>
|
9
|
+
<%= trigger_dirty_inputs_warning %>
|
9
10
|
|
10
11
|
<div class="row">
|
11
12
|
<div class="col-md-12">
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<%= render 'backend/general_form_error', object: @translation %>
|
7
7
|
|
8
8
|
<%= simple_form_for([:backend, @translation], url: edit_translation_backend_page_path, html: { class: 'no-focus' }) do |f| %>
|
9
|
-
|
9
|
+
<%= trigger_dirty_inputs_warning %>
|
10
10
|
<div class="row">
|
11
11
|
<div class="col-md-12">
|
12
12
|
<!-- Content -->
|
data/changelog.md
CHANGED
@@ -1,8 +1,24 @@
|
|
1
|
+
5.5.0 - 2017-03-13
|
2
|
+
--
|
3
|
+
* When an SEO form has a slug, it's automatically calculated based on the title.
|
4
|
+
* Trigger a generic warning when trying to leave a page through an anchor when
|
5
|
+
the form contains unsaved changes.
|
6
|
+
* The dirty-inputs warning is now triggered on a form by calling the
|
7
|
+
```trigger_dirty_inputs_warning``` helper method.
|
8
|
+
* The sluggable autofill now plays nice when immediately hitting enter after
|
9
|
+
typing your title.
|
10
|
+
* Trigger a generic warning when trying to leave a page through an anchor when
|
11
|
+
the form contains unsaved changes.
|
12
|
+
* The dirty-inputs warning is now triggered on a form by calling the
|
13
|
+
```trigger_dirty_inputs_warning``` helper method.
|
14
|
+
|
15
|
+
|
1
16
|
5.4.0 - 2017-03-08
|
2
17
|
--
|
3
18
|
* When enabled, you can add images to articles from the assets module.
|
4
19
|
* Bugfix: the sortable scope for the ```Image``` wasn't properly set.
|
5
20
|
* Images are now enabled by default for articles.
|
21
|
+
* Fixed a missing image reference triggered by Tagit.
|
6
22
|
|
7
23
|
|
8
24
|
5.3.1 - 2017-03-07
|
@@ -97,6 +97,7 @@ en:
|
|
97
97
|
image: Image
|
98
98
|
text: Text
|
99
99
|
deleted: '%s was deleted.'
|
100
|
+
dirty_inputs_warning: "You are about to leave the page but your changes aren't saved yet.\nDo you still want to leave the page?"
|
100
101
|
edited: '%s was edited.'
|
101
102
|
flexible_content:
|
102
103
|
add_column: Add column
|
@@ -100,6 +100,7 @@ nl:
|
|
100
100
|
image: Afbeelding
|
101
101
|
text: Tekst
|
102
102
|
deleted: '%{actor} werd verwijderd.'
|
103
|
+
dirty_inputs_warning: "Je gaat de pagina verlaten maar je aanpassingen zijn nog niet bewaard.\nWil je nog steeds de pagina verlaten?"
|
103
104
|
edited: '%{actor} werd gewijzigd.'
|
104
105
|
flexible_content:
|
105
106
|
add_column: Kolom toevoegen
|
data/config/routes.rb
CHANGED
data/lib/udongo/version.rb
CHANGED
data/readme.md
CHANGED
@@ -50,6 +50,69 @@ Udongo.config.i18n.app.default_interface_locale = 'nl'
|
|
50
50
|
Udongo.config.i18n.app.interface_locales = %w(nl en)
|
51
51
|
```
|
52
52
|
|
53
|
+
## Forms
|
54
|
+
### Adding SEO fields to your page.
|
55
|
+
You can add SEO fields to your form by rendering a partial:
|
56
|
+
|
57
|
+
```erb
|
58
|
+
<%= simple_form_for([:backend, @your_model]) do |f| %>
|
59
|
+
...
|
60
|
+
<%= render 'backend/seo_form', f: f %>
|
61
|
+
...
|
62
|
+
<% end %>
|
63
|
+
```
|
64
|
+
This partial has support to let you base its SEO slug on whatever is typed in
|
65
|
+
an input element of your choice. In Udongo, this field is called the
|
66
|
+
**sluggable field**.
|
67
|
+
|
68
|
+
By default, the partial looks for a field called **title**. You can override
|
69
|
+
this name by passing ```sluggable_field``` to the partial, like so:
|
70
|
+
|
71
|
+
```erb
|
72
|
+
<%= simple_form_for([:backend, @your_model]) do |f| %>
|
73
|
+
...
|
74
|
+
<%# This will look for #backend_your_model_name as its sluggable field. %>
|
75
|
+
<%= render 'backend/seo_form', f: f, sluggable_field: :name %>
|
76
|
+
...
|
77
|
+
<% end %>
|
78
|
+
```
|
79
|
+
|
80
|
+
### Dirty inputs
|
81
|
+
Sometimes a user enters some data in a form and assumes that everything is
|
82
|
+
magically saved without submitting said form.
|
83
|
+
|
84
|
+
To warn a user that this is not default behaviour, you can trigger a warning
|
85
|
+
to show up whenever a user has changed input contents and clicks on any
|
86
|
+
```<a>``` element on the page.
|
87
|
+
|
88
|
+
Simply call the following helper method within your form tags:
|
89
|
+
|
90
|
+
```erb
|
91
|
+
<%= simple_form_for([:backend, @your_model]) do |f| %>
|
92
|
+
<%= trigger_dirty_inputs_warning %>
|
93
|
+
...
|
94
|
+
<% end %>
|
95
|
+
```
|
96
|
+
|
97
|
+
This renders the following HTML:
|
98
|
+
|
99
|
+
```html
|
100
|
+
<form class="simple_form" id="edit_your_model_1" action="/backend/your_models/1/edit" accept-charset="UTF-8" method="post">
|
101
|
+
...
|
102
|
+
<span data-dirty="false"></span>
|
103
|
+
...
|
104
|
+
</form>
|
105
|
+
```
|
106
|
+
|
107
|
+
You can also override the default message with your own:
|
108
|
+
|
109
|
+
```erb
|
110
|
+
<%= simple_form_for([:backend, @your_model]) do |f| %>
|
111
|
+
<%= trigger_dirty_inputs_warning(message: 'Are you sure you want to leave the page?') %>
|
112
|
+
...
|
113
|
+
<% end %>
|
114
|
+
```
|
115
|
+
|
53
116
|
## Flexible content
|
54
117
|
### types
|
55
118
|
```ruby
|
@@ -0,0 +1,9 @@
|
|
1
|
+
/*
|
2
|
+
* jQuery throttle / debounce - v1.1 - 3/7/2010
|
3
|
+
* http://benalman.com/projects/jquery-throttle-debounce-plugin/
|
4
|
+
*
|
5
|
+
* Copyright (c) 2010 "Cowboy" Ben Alman
|
6
|
+
* Dual licensed under the MIT and GPL licenses.
|
7
|
+
* http://benalman.com/about/license/
|
8
|
+
*/
|
9
|
+
(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
|
@@ -33,7 +33,7 @@
|
|
33
33
|
}
|
34
34
|
.ui-widget-content {
|
35
35
|
border: 1px solid #dddddd;
|
36
|
-
background: #f2f5f7 url(
|
36
|
+
background: #f2f5f7 asset-url('ui-bg_highlight-soft_75_cccccc_1x100.png') 50% top repeat-x;
|
37
37
|
color: #362b36;
|
38
38
|
}
|
39
39
|
.ui-corner-all, .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; }
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: udongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Davy Hellemans
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-03-
|
12
|
+
date: 2017-03-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -426,12 +426,14 @@ files:
|
|
426
426
|
- app/assets/javascripts/backend/application.js
|
427
427
|
- app/assets/javascripts/backend/bootstrap.js
|
428
428
|
- app/assets/javascripts/backend/datepickers.js
|
429
|
+
- app/assets/javascripts/backend/dirty-inputs.js
|
429
430
|
- app/assets/javascripts/backend/flexible_content.js
|
430
431
|
- app/assets/javascripts/backend/general.js
|
431
432
|
- app/assets/javascripts/backend/pages.js
|
432
433
|
- app/assets/javascripts/backend/plugins/autocomplete.js
|
433
434
|
- app/assets/javascripts/backend/plugins/tagbox.js
|
434
435
|
- app/assets/javascripts/backend/search.js
|
436
|
+
- app/assets/javascripts/backend/seo.js
|
435
437
|
- app/assets/javascripts/backend/sortable.js
|
436
438
|
- app/assets/javascripts/backend/tags.js
|
437
439
|
- app/assets/javascripts/backend/tree.js
|
@@ -499,6 +501,7 @@ files:
|
|
499
501
|
- app/forms/backend/translation_form.rb
|
500
502
|
- app/forms/backend/translation_with_seo_form.rb
|
501
503
|
- app/helpers/backend/dropdown_helper.rb
|
504
|
+
- app/helpers/backend/form_helper.rb
|
502
505
|
- app/helpers/backend/pagination_helper.rb
|
503
506
|
- app/helpers/icon_helper.rb
|
504
507
|
- app/helpers/link_helper.rb
|
@@ -851,6 +854,7 @@ files:
|
|
851
854
|
- vendor/assets/images/jstree/default/40px.png
|
852
855
|
- vendor/assets/images/jstree/default/throbber.gif
|
853
856
|
- vendor/assets/javascripts/backend/bootstrap-datepicker.min.js
|
857
|
+
- vendor/assets/javascripts/backend/jquery.throttle-debounce.min.js
|
854
858
|
- vendor/assets/javascripts/backend/jstree/jstree.min.js
|
855
859
|
- vendor/assets/javascripts/backend/jstree/libs/require.js
|
856
860
|
- vendor/assets/javascripts/backend/select2.min.js
|
@@ -862,8 +866,8 @@ files:
|
|
862
866
|
- vendor/assets/stylesheets/backend/jstree/default/style.min.scss
|
863
867
|
- vendor/assets/stylesheets/backend/jstree/default/style.scss
|
864
868
|
- vendor/assets/stylesheets/backend/select2.min.scss
|
865
|
-
- vendor/assets/stylesheets/backend/tagit/
|
866
|
-
- vendor/assets/stylesheets/backend/tagit/
|
869
|
+
- vendor/assets/stylesheets/backend/tagit/_autocomplete.scss
|
870
|
+
- vendor/assets/stylesheets/backend/tagit/_base.scss
|
867
871
|
- vendor/assets/stylesheets/jquery-ui.theme.min.css
|
868
872
|
homepage: http://udongo.be
|
869
873
|
licenses:
|