udongo 1.0.3 → 1.0.4
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/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:
|