udongo 5.4.0 → 5.5.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 +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:
|