udongo 1.0.3 → 1.0.4
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/flexible_content.js +33 -0
- data/app/assets/javascripts/backend/sortable.js +1 -1
- data/app/assets/stylesheets/backend/pages/_flexible_content.scss +61 -0
- data/app/controllers/backend/admins_controller.rb +7 -7
- data/app/controllers/backend/content/rows/columns_controller.rb +7 -15
- data/app/controllers/backend/content/rows/images_controller.rb +1 -1
- data/app/controllers/backend/content/rows/texts_controller.rb +1 -1
- data/app/controllers/backend/content/rows_controller.rb +4 -13
- data/app/controllers/backend/email_templates_controller.rb +4 -4
- data/app/controllers/backend/emails_controller.rb +3 -3
- data/app/controllers/backend/forms/base_controller.rb +14 -0
- data/app/controllers/backend/forms/submissions_controller.rb +8 -0
- data/app/controllers/backend/forms_controller.rb +7 -0
- data/app/controllers/backend/navigation/items_controller.rb +8 -5
- data/app/controllers/backend/navigations_controller.rb +1 -1
- data/app/controllers/backend/pages_controller.rb +5 -5
- data/app/controllers/backend/redirects_controller.rb +4 -4
- data/app/controllers/backend/sessions_controller.rb +1 -1
- data/app/controllers/backend/snippets_controller.rb +6 -5
- data/app/controllers/backend/tagbox_controller.rb +4 -4
- data/app/controllers/backend_controller.rb +3 -3
- data/app/controllers/catch_all_controller.rb +1 -1
- data/app/controllers/redirects_controller.rb +1 -1
- data/app/decorators/application_decorator.rb +5 -0
- data/app/decorators/content_image_decorator.rb +1 -1
- data/app/decorators/content_row_decorator.rb +9 -0
- data/app/decorators/content_text_decorator.rb +1 -1
- data/app/decorators/form_decorator.rb +16 -0
- data/app/decorators/form_submission_decorator.rb +3 -0
- data/app/decorators/navigation_item_decorator.rb +2 -2
- data/app/decorators/page_decorator.rb +2 -2
- data/app/decorators/pagination_decorator.rb +4 -0
- data/app/decorators/redirect_decorator.rb +1 -1
- data/app/decorators/snippet_decorator.rb +1 -1
- data/app/forms/backend/snippet_form.rb +4 -18
- data/app/helpers/backend/pagination_helper.rb +1 -11
- data/app/helpers/icon_helper.rb +1 -1
- data/app/helpers/snippet_helper.rb +1 -1
- data/app/models/concerns/storable/collection.rb +48 -26
- data/app/models/concerns/translatable.rb +1 -1
- data/app/models/content_row.rb +4 -0
- data/app/models/form.rb +1 -0
- data/app/models/store_with_file.rb +2 -0
- data/app/views/backend/content/_image.html.erb +1 -8
- data/app/views/backend/content/_rows.html.erb +52 -49
- data/app/views/backend/emails/index.html.erb +2 -10
- data/app/views/backend/forms/index.html.erb +27 -0
- data/app/views/backend/forms/submissions/_filter.html.erb +16 -0
- data/app/views/backend/forms/submissions/index.html.erb +34 -0
- data/app/views/backend/redirects/index.html.erb +2 -10
- data/app/views/layouts/backend/_top_navigation.html.erb +1 -0
- data/changelog.md +14 -1
- data/config/locales/en_backend.yml +5 -5
- data/config/locales/nl_backend.yml +10 -10
- data/config/routes.rb +6 -6
- data/db/migrate/20160711114156_add_description_to_forms.rb +5 -0
- data/lib/generators/udongo/form/form_generator.rb +1 -1
- data/lib/tasks/udongo_tasks.rake +1 -1
- data/lib/udongo/config.rb +2 -1
- data/lib/udongo/configs/forms.rb +14 -0
- data/lib/udongo/flexible_content/column_width_calculator.rb +32 -0
- data/lib/udongo/form.rb +36 -0
- data/lib/udongo/forms/config.rb +11 -0
- data/lib/udongo/forms/submission_datagrid.rb +29 -0
- data/lib/udongo/forms/submission_filter.rb +33 -0
- data/lib/udongo/notification.rb +19 -0
- data/lib/udongo/object_path.rb +0 -2
- data/lib/udongo/version.rb +1 -1
- data/lib/udongo/will_paginate/options.rb +40 -0
- data/lib/udongo/will_paginate/renderer.rb +8 -4
- data/lib/udongo.rb +4 -11
- data/readme.md +145 -49
- metadata +24 -2
@@ -1,7 +1,4 @@
|
|
1
|
-
class Backend::SnippetForm
|
2
|
-
include ActiveModel::Model
|
3
|
-
include Virtus.model
|
4
|
-
|
1
|
+
class Backend::SnippetForm < Udongo::Form
|
5
2
|
attr_reader :snippet
|
6
3
|
|
7
4
|
attribute :identifier, String
|
@@ -18,28 +15,17 @@ class Backend::SnippetForm
|
|
18
15
|
end
|
19
16
|
|
20
17
|
def self.model_name
|
21
|
-
|
18
|
+
Snippet.model_name
|
22
19
|
end
|
23
20
|
|
24
21
|
def persisted?
|
25
22
|
!@snippet.new_record?
|
26
23
|
end
|
27
24
|
|
28
|
-
def save(params)
|
29
|
-
attributes.keys.each { |k| send("#{k}=", params[k]) }
|
30
|
-
|
31
|
-
if valid?
|
32
|
-
save_snippet
|
33
|
-
true
|
34
|
-
else
|
35
|
-
false
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
25
|
private
|
40
26
|
|
41
27
|
def unique_identifier
|
42
|
-
qry =
|
28
|
+
qry = Snippet.unscoped
|
43
29
|
qry = qry.where.not(identifier: @snippet.identifier) if persisted?
|
44
30
|
|
45
31
|
if qry.exists?(identifier: identifier)
|
@@ -47,7 +33,7 @@ class Backend::SnippetForm
|
|
47
33
|
end
|
48
34
|
end
|
49
35
|
|
50
|
-
def
|
36
|
+
def save_object
|
51
37
|
attributes.each { |k, v| @snippet.send("#{k}=", v) }
|
52
38
|
@snippet.save!
|
53
39
|
end
|
@@ -1,17 +1,7 @@
|
|
1
1
|
module Backend
|
2
2
|
module PaginationHelper
|
3
|
-
|
4
3
|
def udongo_paginate(collection, options = {})
|
5
|
-
options.
|
6
|
-
class: 'pagination',
|
7
|
-
inner_window: 1,
|
8
|
-
outer_window: 0,
|
9
|
-
renderer: Udongo::WillPaginate::Renderer,
|
10
|
-
previous_label: '<'.html_safe,
|
11
|
-
next_label: '>'.html_safe
|
12
|
-
)
|
13
|
-
|
14
|
-
will_paginate collection, options
|
4
|
+
will_paginate(collection, Udongo::WillPaginate::Options.new(options).values)
|
15
5
|
end
|
16
6
|
end
|
17
7
|
end
|
data/app/helpers/icon_helper.rb
CHANGED
@@ -4,52 +4,74 @@ module Concerns
|
|
4
4
|
def initialize(parent, category, config)
|
5
5
|
@parent = parent
|
6
6
|
@category = category
|
7
|
+
@config = config
|
7
8
|
|
8
|
-
init_attributes
|
9
|
-
init_values
|
9
|
+
init_attributes
|
10
|
+
init_values
|
11
|
+
end
|
12
|
+
|
13
|
+
def delete
|
14
|
+
stores.each { |s| s.destroy }
|
15
|
+
reset_values
|
10
16
|
end
|
11
17
|
|
12
18
|
def save
|
13
19
|
attributes.each do |name,value|
|
14
|
-
tmp =
|
15
|
-
collection: @category,
|
16
|
-
storable_type: @parent.class.name,
|
17
|
-
storable_id: @parent.id,
|
18
|
-
name: name
|
19
|
-
)
|
20
|
-
|
20
|
+
tmp = store(name)
|
21
21
|
tmp.value = value
|
22
22
|
tmp.save!
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
storable_id: @parent.id,
|
30
|
-
collection: @category,
|
31
|
-
).each { |s| s.destroy }
|
26
|
+
def store(name, file: false)
|
27
|
+
stores(file: file).find_or_initialize_by(name: name)
|
28
|
+
end
|
32
29
|
|
33
|
-
|
30
|
+
# You'll find that mounting an uploader on Store will prevent
|
31
|
+
# the saving of other attributes.
|
32
|
+
def stores(file: false)
|
33
|
+
klass = file ? StoreWithFile : Store
|
34
|
+
klass.where(storable: @parent, collection: @category)
|
35
|
+
end
|
36
|
+
|
37
|
+
def define_reader_method_for_uploader_field(field, options)
|
38
|
+
self.class.send(:define_method, field) do
|
39
|
+
StoreWithFile.mount_uploader :value, options[:type]
|
40
|
+
store(field, file: true).value
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def define_writer_method_for_uploader_field(field, options)
|
45
|
+
self.class.send(:define_method, "#{field}=") do |value|
|
46
|
+
# Right now, when we save a form with a filefield, you will
|
47
|
+
# notice in the database that the store value keeps updating
|
48
|
+
# with a new filename hash. It always "reuploads" the file.
|
49
|
+
s = store(field, file: true)
|
50
|
+
s.value = value
|
51
|
+
s.save
|
52
|
+
end
|
34
53
|
end
|
35
54
|
|
36
55
|
private
|
37
56
|
|
38
|
-
def init_attributes
|
57
|
+
def init_attributes
|
39
58
|
extend(Virtus.model)
|
40
59
|
|
41
|
-
config.fields.each do |field,options|
|
42
|
-
|
60
|
+
@config.fields.each do |field,options|
|
61
|
+
if options[:type].to_s.include?('Uploader')
|
62
|
+
define_reader_method_for_uploader_field(field, options)
|
63
|
+
define_writer_method_for_uploader_field(field, options)
|
64
|
+
else
|
65
|
+
attribute field, options[:type], default: options[:default], lazy: true
|
66
|
+
end
|
43
67
|
end
|
44
68
|
end
|
45
69
|
|
46
|
-
def init_values
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
).pluck(:name, :value).each do |field, value|
|
52
|
-
send "#{field}=", value if config.allowed?(field)
|
70
|
+
def init_values
|
71
|
+
stores.pluck(:name, :value).each do |field, value|
|
72
|
+
next unless @config.allowed?(field)
|
73
|
+
next if @config.fields[field.to_sym][:type].to_s.include?('Uploader')
|
74
|
+
send "#{field}=", value
|
53
75
|
end
|
54
76
|
end
|
55
77
|
|
data/app/models/content_row.rb
CHANGED
@@ -8,4 +8,8 @@ class ContentRow < ActiveRecord::Base
|
|
8
8
|
has_many :columns, class_name: 'ContentColumn', foreign_key: :row_id, dependent: :destroy
|
9
9
|
|
10
10
|
validates :locale, presence: true
|
11
|
+
|
12
|
+
def column_width_calculator
|
13
|
+
@column_width_calculator ||= Udongo::FlexibleContent::ColumnWidthCalculator.new(self)
|
14
|
+
end
|
11
15
|
end
|
data/app/models/form.rb
CHANGED
@@ -1,13 +1,6 @@
|
|
1
1
|
<% if object.present? && object.file.present? %>
|
2
2
|
|
3
|
-
|
4
|
-
<%= link_to object.url do %>
|
5
|
-
<%= image_tag object.file.size_1024x640.url, alt: '', class: 'img-fluid' %>
|
6
|
-
<% end %>
|
7
|
-
|
8
|
-
<% else %>
|
9
|
-
<%= image_tag object.file.size_1024x640.url, alt: '', class: 'img-fluid' %>
|
10
|
-
<% end %>
|
3
|
+
<%= image_tag object.file.size_1024x640.url, alt: '', class: 'img-fluid' %>
|
11
4
|
|
12
5
|
<% if object.caption.present? %>
|
13
6
|
<div class="text-center">
|
@@ -1,63 +1,66 @@
|
|
1
|
+
<% javascript 'backend/sortable' %>
|
2
|
+
<% javascript 'backend/flexible_content' %>
|
3
|
+
|
1
4
|
<div id="content-rows">
|
2
|
-
|
5
|
+
<div class="cards">
|
6
|
+
<% rows = model.content_rows.where(locale: locale) %>
|
3
7
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
<% if rows.empty? %>
|
9
|
+
<div class="card">
|
10
|
+
<div class="card-header">
|
11
|
+
<%= t 'b.flexible_content' %>
|
12
|
+
</div>
|
9
13
|
|
10
|
-
|
11
|
-
|
14
|
+
<div class="card-block">
|
15
|
+
<%= t 'b.msg.flexible_content.explanation' %>
|
16
|
+
</div>
|
12
17
|
</div>
|
13
|
-
|
14
|
-
<% end %>
|
15
|
-
|
16
|
-
<% rows.each do |row| %>
|
17
|
-
<div class="card" id="content-row-<%= row.id %>">
|
18
|
-
<div class="card-header">
|
19
|
-
<div class="btn-group" role="group">
|
20
|
-
<% unless row.first? %>
|
21
|
-
<%= link_to icon(:arrow_up, t('b.up')), move_up_backend_content_row_path(row), class: 'btn btn-info-outline' %>
|
22
|
-
<% end %>
|
18
|
+
<% end %>
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
20
|
+
<% rows.decorate.each do |row| %>
|
21
|
+
<div id="content-row-<%= row.id %>" class="card content-row" data-update-position="<%= update_position_backend_content_row_path(row) %>">
|
22
|
+
<div class="card-header handle">
|
23
|
+
<div class="btn-group" role="group">
|
24
|
+
<%= link_to icon(:trash, t('b.msg.flexible_content.delete_row')), backend_content_row_path(row), class: 'btn btn-secondary', method: :delete, data: { confirm: t('b.msg.confirm') } %>
|
25
|
+
</div>
|
30
26
|
</div>
|
31
|
-
</div>
|
32
27
|
|
33
|
-
|
34
|
-
|
35
|
-
<div class="col-xs-<%= column.width_xs %> col-sm-<%= column.width_sm %> col-md-<%= column.width_md %> col-lg-<%= column.width_lg %> col-xl-<%= column.width_xl %>">
|
28
|
+
<div class="row content-columns card-block">
|
29
|
+
<% row.columns.each do |column| %>
|
36
30
|
<% content = column.content.decorate %>
|
37
31
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
<% end %>
|
46
|
-
|
47
|
-
<% edit_link = send("edit_backend_content_#{content.content_type}_path", content) %>
|
48
|
-
<%= link_to icon(:pencil_square_o), edit_link, class: 'btn btn-secondary btn-sm' %>
|
49
|
-
<%= link_to icon(:trash), backend_content_row_column_path(row, column), class: 'btn btn-secondary btn-sm', method: :delete, data: { confirm: t('b.msg.confirm') } %>
|
50
|
-
<%= link_to icon(:wrench), edit_backend_content_row_column_path(row, column), class: 'btn btn-secondary btn-sm' %>
|
32
|
+
<div class="content-column col-xs-<%= column.width_xs %> col-sm-<%= column.width_sm %> col-md-<%= column.width_md %> col-lg-<%= column.width_lg %> col-xl-<%= column.width_xl %>" data-update-position="<%= update_position_backend_content_row_column_path(row, column) %>">
|
33
|
+
<div class="card handle">
|
34
|
+
<div class="card-block">
|
35
|
+
<% Udongo.config.flexible_content_types.each do |content_type| %>
|
36
|
+
<%= render("backend/content/#{content_type}", object: content) if content.content_type_is?(content_type) %>
|
37
|
+
<% end %>
|
38
|
+
</div>
|
51
39
|
|
52
|
-
|
53
|
-
|
54
|
-
|
40
|
+
<div class="card-footer">
|
41
|
+
<div class="btn-group" role="group">
|
42
|
+
<% edit_link = send("edit_backend_content_#{content.content_type}_path", content) %>
|
43
|
+
<%= link_to icon(:pencil_square_o), edit_link, class: 'btn btn-secondary btn-sm' %>
|
44
|
+
<%= link_to icon(:trash), backend_content_row_column_path(row, column), class: 'btn btn-secondary btn-sm', method: :delete, data: { confirm: t('b.msg.confirm') } %>
|
45
|
+
<%= link_to icon(:wrench), edit_backend_content_row_column_path(row, column), class: 'btn btn-secondary btn-sm' %>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
</div>
|
55
49
|
</div>
|
56
|
-
|
57
|
-
|
50
|
+
<% end %>
|
51
|
+
|
52
|
+
<% unless row.column_limit_reached? %>
|
53
|
+
<% if row.columns.blank? %>
|
54
|
+
<%= link_to icon(:plus, t('b.msg.flexible_content.add_column')), new_backend_content_row_column_path(row), class: 'btn btn-secondary btn-block' %>
|
55
|
+
<% else %>
|
56
|
+
<%= link_to icon(:plus, t('b.msg.flexible_content.add_column')), new_backend_content_row_column_path(row), class: 'btn btn-secondary hidden-xl-up full-width' %>
|
57
|
+
<%= link_to icon(:plus), new_backend_content_row_column_path(row), class: 'btn btn-secondary hidden-lg-down block' %>
|
58
|
+
<% end %>
|
59
|
+
<% end %>
|
60
|
+
</div>
|
58
61
|
</div>
|
59
|
-
|
60
|
-
|
62
|
+
<% end %>
|
63
|
+
</div>
|
61
64
|
|
62
|
-
<%= link_to icon(:plus, t('b.msg.flexible_content.add_row')), new_backend_content_row_path(klass: @model.class, id: @model.id, locale: locale), class: 'btn btn-
|
65
|
+
<%= link_to icon(:plus, t('b.msg.flexible_content.add_row')), new_backend_content_row_path(klass: @model.class, id: @model.id, locale: locale), class: 'btn btn-secondary btn-block' %>
|
63
66
|
</div>
|
@@ -33,18 +33,10 @@
|
|
33
33
|
</tr>
|
34
34
|
<% end %>
|
35
35
|
</tbody>
|
36
|
-
|
37
|
-
<% if will_paginate %>
|
38
|
-
<tfoot>
|
39
|
-
<tr>
|
40
|
-
<td colspan="6">
|
41
|
-
<%= will_paginate %>
|
42
|
-
</td>
|
43
|
-
</tr>
|
44
|
-
</tfoot>
|
45
|
-
<% end %>
|
46
36
|
</table>
|
47
37
|
|
38
|
+
<%= udongo_paginate @emails %>
|
39
|
+
|
48
40
|
<% else %>
|
49
41
|
<p><%= t 'b.msg.no_items' %></p>
|
50
42
|
<% end %>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<%= render 'backend/breadcrumbs' %>
|
2
|
+
|
3
|
+
<% if @forms.any? %>
|
4
|
+
<table class="table table-striped table-hover">
|
5
|
+
<thead class="thead-inverse">
|
6
|
+
<tr>
|
7
|
+
<th><%= t 'b.description' %></th>
|
8
|
+
<th> </th>
|
9
|
+
</tr>
|
10
|
+
</thead>
|
11
|
+
|
12
|
+
<tbody>
|
13
|
+
<% @forms.each do |f| %>
|
14
|
+
<tr>
|
15
|
+
<td><%= f.description %></td>
|
16
|
+
<td class="text-xs-right">
|
17
|
+
<%= link_to_edit [:backend, f] %>
|
18
|
+
<%= link_to icon(:list), backend_form_submissions_path(f) %>
|
19
|
+
</td>
|
20
|
+
</tr>
|
21
|
+
<% end %>
|
22
|
+
</tbody>
|
23
|
+
</table>
|
24
|
+
|
25
|
+
<% else %>
|
26
|
+
<p><%= t 'b.msg.no_items' %></p>
|
27
|
+
<% end %>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<% if @filter.fields.any? %>
|
2
|
+
<div class="filter">
|
3
|
+
<%= form_for :filter, url: backend_form_submissions_path, method: 'get', html: { class: 'form-inline' } do |f| %>
|
4
|
+
<div class="card">
|
5
|
+
<div class="card-block">
|
6
|
+
<% @filter.fields.each do |field| %>
|
7
|
+
<div class="form-group">
|
8
|
+
<%= text_field_tag "q[#{field.to_sym}]", @filter.params[field.to_sym], placeholder: t("b.#{field}"), class: 'form-control' %>
|
9
|
+
</div>
|
10
|
+
<% end %>
|
11
|
+
<%= button_tag t('b.filter'), class: 'btn btn-primary' %>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<%= render 'backend/breadcrumbs' %>
|
2
|
+
<%= render 'filter' %>
|
3
|
+
|
4
|
+
<% if @submissions.any? %>
|
5
|
+
<table class="table table-striped table-hover">
|
6
|
+
<thead class="thead-inverse">
|
7
|
+
<tr>
|
8
|
+
<% if @form.email_present? %>
|
9
|
+
<th><%= t('b.email') %></th>
|
10
|
+
<% end %>
|
11
|
+
<%= @form.datagrid.column_headers(@filter) %>
|
12
|
+
<th> </th>
|
13
|
+
</tr>
|
14
|
+
</thead>
|
15
|
+
|
16
|
+
<tbody>
|
17
|
+
<% @submissions.each do |s| %>
|
18
|
+
<tr>
|
19
|
+
<% if @form.email_present? %>
|
20
|
+
<td><%= mail_to s.data_object.email %></td>
|
21
|
+
<% end %>
|
22
|
+
<%= @form.datagrid.column_values(s) %>
|
23
|
+
<td class="text-xs-right">
|
24
|
+
<%= link_to icon(:pencil_square_o), edit_backend_form_submission_path(@form, s) %>
|
25
|
+
</td>
|
26
|
+
</tr>
|
27
|
+
<% end %>
|
28
|
+
</tbody>
|
29
|
+
</table>
|
30
|
+
|
31
|
+
<%= udongo_paginate @submissions %>
|
32
|
+
<% else %>
|
33
|
+
<p><%= t 'b.msg.no_items' %></p>
|
34
|
+
<% end %>
|
@@ -34,17 +34,9 @@
|
|
34
34
|
</tr>
|
35
35
|
<% end %>
|
36
36
|
</tbody>
|
37
|
-
|
38
|
-
<% if will_paginate %>
|
39
|
-
<tfoot>
|
40
|
-
<tr>
|
41
|
-
<td colspan="6">
|
42
|
-
<%= will_paginate %>
|
43
|
-
</td>
|
44
|
-
</tr>
|
45
|
-
</tfoot>
|
46
|
-
<% end %>
|
47
37
|
</table>
|
38
|
+
|
39
|
+
<%= udongo_paginate @redirects %>
|
48
40
|
<% else %>
|
49
41
|
<p><%= t 'b.msg.no_items' %></p>
|
50
42
|
<% end %>
|
@@ -3,6 +3,7 @@
|
|
3
3
|
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false"><%= icon(:list, t('b.content')) %></a>
|
4
4
|
<div class="dropdown-menu">
|
5
5
|
<%= link_to t('b.pages'), backend_pages_path, class: 'dropdown-item' %>
|
6
|
+
<%= link_to t('b.forms'), backend_forms_path, class: 'dropdown-item' %>
|
6
7
|
<%= link_to t('b.snippets'), backend_snippets_path, class: 'dropdown-item' %>
|
7
8
|
</div>
|
8
9
|
</li>
|
data/changelog.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
1.0.4 - 2016-07-23
|
2
|
+
--
|
3
|
+
* Add spec for the SnippetForm class.
|
4
|
+
* Add Udongo::Notification and use it in BackendController#translate_notice.
|
5
|
+
* Fix issue with storable config fields that are present in the DB, but are no
|
6
|
+
longer in the storable class.
|
7
|
+
* Flexible image preview no longer makes the URL previewable.
|
8
|
+
* Classes in lib/udongo/**/* are now loaded automatically.
|
9
|
+
* Restyled flexible content widget.
|
10
|
+
* You now get a suggested width when adding a new content column in the
|
11
|
+
flexible content widget. Values are based on previously set column widths.
|
12
|
+
* The codebase had a lot of useless double semicolons, which have been removed.
|
13
|
+
|
14
|
+
|
1
15
|
1.0.3 - 2016-06-06
|
2
16
|
--
|
3
17
|
* Bugfix: fix link to non existing css file.
|
@@ -47,7 +61,6 @@
|
|
47
61
|
* Fix nasty bug in the storable concern which made it impossible to work with
|
48
62
|
the << operator for strings and arrays.
|
49
63
|
* Bugfix: the link helpers can now also work with decorated objects.
|
50
|
-
* Upgrade to rails 4.2.6
|
51
64
|
|
52
65
|
|
53
66
|
0.0.13 - 2016-05-02
|
@@ -2,6 +2,7 @@ en:
|
|
2
2
|
b:
|
3
3
|
actions: Actions
|
4
4
|
add: Add
|
5
|
+
admin: Admin
|
5
6
|
admins: Admins
|
6
7
|
advanced: Advanced
|
7
8
|
cancel: Cancel
|
@@ -20,11 +21,13 @@ en:
|
|
20
21
|
email_templates: E-mail templates
|
21
22
|
enabled?: Enabled?
|
22
23
|
extra: Extra
|
24
|
+
filter: Filter
|
23
25
|
first_name: First name
|
24
26
|
flexible_content: Flexible content
|
25
27
|
forms: Forms
|
26
28
|
from: From
|
27
29
|
general: General
|
30
|
+
house_number: House number
|
28
31
|
html_content: HTML content
|
29
32
|
last_name: Last name
|
30
33
|
locale: Locale
|
@@ -33,6 +36,7 @@ en:
|
|
33
36
|
move: Move
|
34
37
|
name: Name
|
35
38
|
navigation: Navigation
|
39
|
+
navigation_item: Navigation item
|
36
40
|
new: New
|
37
41
|
none: None
|
38
42
|
not_yet_sent: Not yet sent
|
@@ -56,6 +60,7 @@ en:
|
|
56
60
|
status_code: Status code
|
57
61
|
subject: Subject
|
58
62
|
tags: Tags
|
63
|
+
telephone: Telephone
|
59
64
|
title: Title
|
60
65
|
to: To
|
61
66
|
up: Up
|
@@ -67,8 +72,6 @@ en:
|
|
67
72
|
added: '%s was added.'
|
68
73
|
admins:
|
69
74
|
account_details: Account details
|
70
|
-
added: The admin was added.
|
71
|
-
deleted: The admin was deleted.
|
72
75
|
personal_details: Personal details
|
73
76
|
changes_saved: The changes have been saved.
|
74
77
|
confirm: Are you sure?
|
@@ -91,11 +94,8 @@ en:
|
|
91
94
|
status_code: More info about the use of status codes.
|
92
95
|
incorrect_login: Incorret login credentials.
|
93
96
|
navigation:
|
94
|
-
added: The navigation item was added.
|
95
97
|
custom: Custom
|
96
|
-
deleted: The navigation item was deleted.
|
97
98
|
no_items: There are no items.
|
98
|
-
|
99
99
|
saved: '%s was saved.'
|
100
100
|
seo: SEO
|
101
101
|
status_codes:
|