releaf-core 0.2.1 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +19 -21
- data/app/assets/javascripts/releaf/application.js +1 -2
- data/app/assets/javascripts/releaf/include/field.type_date_or_datetime_or_time.js +19 -21
- data/app/assets/javascripts/releaf/include/field.type_richtext.js +31 -9
- data/app/assets/javascripts/releaf/include/localization.js +3 -8
- data/app/assets/javascripts/releaf/include/nested_fields.js +1 -1
- data/app/assets/javascripts/releaf/include/remote_validator.js +7 -4
- data/app/assets/javascripts/releaf/include/sortable.js +1 -1
- data/app/assets/javascripts/releaf/include/{profile_settings.js → store_settings.js} +4 -10
- data/app/assets/javascripts/releaf/include/toolbox.js +7 -11
- data/app/assets/stylesheets/releaf/layout/fields.scss +1 -0
- data/app/assets/stylesheets/releaf/layout/header.scss +1 -0
- data/app/assets/stylesheets/releaf/layout/search.scss +15 -0
- data/app/builders/releaf/builders/base.rb +11 -9
- data/app/builders/releaf/builders/confirm_destroy_dialog_builder.rb +2 -2
- data/app/builders/releaf/builders/confirm_dialog_builder.rb +3 -3
- data/app/builders/releaf/builders/edit_builder.rb +51 -6
- data/app/builders/releaf/builders/form_builder/associated_set_field.rb +37 -0
- data/app/builders/releaf/builders/form_builder/associations.rb +153 -0
- data/app/builders/releaf/builders/form_builder/boolean_fields.rb +12 -0
- data/app/builders/releaf/builders/form_builder/date_fields.rb +30 -0
- data/app/builders/releaf/builders/form_builder/fields.rb +10 -0
- data/app/builders/releaf/builders/form_builder/file_fields.rb +47 -0
- data/app/builders/releaf/builders/form_builder/i18n_fields.rb +75 -0
- data/app/builders/releaf/builders/form_builder/label.rb +34 -0
- data/app/builders/releaf/builders/form_builder/number_fields.rb +13 -0
- data/app/builders/releaf/builders/form_builder/richtext_fields.rb +28 -0
- data/app/builders/releaf/builders/form_builder/text_fields.rb +43 -0
- data/app/builders/releaf/builders/form_builder.rb +8 -489
- data/app/builders/releaf/builders/index_builder.rb +10 -3
- data/app/builders/releaf/builders/page/header_builder.rb +23 -59
- data/app/builders/releaf/builders/page/layout_builder.rb +125 -115
- data/app/builders/releaf/builders/page/menu_builder.rb +96 -106
- data/app/builders/releaf/builders/refused_destroy_dialog_builder.rb +7 -12
- data/app/builders/releaf/builders/resource_view.rb +4 -4
- data/app/builders/releaf/builders/table_builder.rb +20 -30
- data/app/builders/releaf/builders/toolbox_builder.rb +1 -1
- data/app/builders/releaf/builders/utilities/date_fields.rb +100 -0
- data/app/builders/releaf/builders/utilities/resolve_attribute_field_method_name.rb +80 -0
- data/app/builders/releaf/builders/view.rb +5 -2
- data/app/builders/releaf/settings/form_builder.rb +18 -0
- data/app/builders/releaf/settings/table_builder.rb +9 -0
- data/app/controllers/releaf/action_controller.rb +174 -0
- data/app/controllers/releaf/{core/errors_controller.rb → errors_controller.rb} +1 -1
- data/app/controllers/releaf/root_controller.rb +23 -0
- data/app/controllers/releaf/settings_controller.rb +22 -0
- data/app/helpers/releaf/application_helper.rb +1 -1
- data/app/lib/releaf/action_controller/ajax.rb +24 -0
- data/app/lib/releaf/action_controller/breadcrumbs.rb +26 -0
- data/app/lib/releaf/action_controller/builders.rb +34 -0
- data/app/lib/releaf/action_controller/features.rb +47 -0
- data/app/lib/releaf/action_controller/notifications.rb +28 -0
- data/app/lib/releaf/action_controller/resources.rb +59 -0
- data/app/{controllers/concerns/releaf → lib/releaf/action_controller}/richtext_attachments.rb +1 -1
- data/app/lib/releaf/action_controller/search.rb +22 -0
- data/app/lib/releaf/action_controller/urls.rb +49 -0
- data/app/lib/releaf/action_controller/views.rb +29 -0
- data/app/lib/releaf/assets_resolver.rb +51 -0
- data/app/lib/releaf/build_errors_hash.rb +81 -0
- data/app/lib/releaf/controller_definition.rb +22 -0
- data/app/lib/releaf/controller_group_definition.rb +12 -0
- data/app/lib/releaf/{core/default_searchable_fields.rb → default_searchable_fields.rb} +1 -1
- data/app/lib/releaf/{core/resource_base.rb → resource_base.rb} +14 -6
- data/app/lib/releaf/{core/resource_fields.rb → resource_fields.rb} +1 -1
- data/app/lib/releaf/{core/resource_params.rb → resource_params.rb} +3 -3
- data/app/lib/releaf/resource_table_fields.rb +10 -0
- data/app/lib/releaf/{core/resource_utilities.rb → resource_utilities.rb} +2 -2
- data/app/lib/releaf/{core/responders → responders}/access_denied_responder.rb +2 -2
- data/app/lib/releaf/{core/responders → responders}/after_save_responder.rb +3 -3
- data/app/lib/releaf/{core/responders → responders}/confirm_destroy_responder.rb +1 -1
- data/app/lib/releaf/{core/responders → responders}/destroy_responder.rb +1 -1
- data/app/lib/releaf/{core/responders → responders}/error_responder.rb +1 -1
- data/app/lib/releaf/{core/responders → responders}/feature_disabled_responder.rb +2 -2
- data/app/lib/releaf/{core/responders → responders}/page_not_found_responder.rb +2 -2
- data/app/lib/releaf/responders.rb +31 -0
- data/app/lib/releaf/{core/search.rb → search.rb} +1 -1
- data/app/lib/releaf/settings/normalize_value.rb +45 -0
- data/app/lib/releaf/settings/register.rb +45 -0
- data/app/models/releaf/settings.rb +25 -13
- data/app/services/array/reorder.rb +82 -0
- data/app/views/releaf/{base → action}/confirm_destroy.ruby +0 -0
- data/app/views/releaf/{base → action}/create_releaf_richtext_attachment.haml +0 -0
- data/app/views/releaf/{base → action}/edit.ruby +0 -0
- data/app/views/releaf/{base → action}/index.ruby +0 -0
- data/app/views/releaf/{base → action}/new.ruby +0 -0
- data/app/views/releaf/{base → action}/refused_destroy.ruby +0 -0
- data/app/views/releaf/{base → action}/show.ruby +0 -0
- data/app/views/releaf/{base → action}/toolbox.ruby +0 -0
- data/lib/generators/dummy/install_generator.rb +5 -0
- data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/books.js +23 -0
- data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/nodes.js +1 -0
- data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/other_site/other_nodes.js +1 -0
- data/lib/generators/dummy/templates/assets/stylesheets/controllers/admin/nodes.scss +1 -0
- data/lib/generators/dummy/templates/assets/stylesheets/controllers/admin/other_site/other_nodes.scss +1 -0
- data/lib/generators/dummy/templates/builders/admin/books/form_builder.rb +11 -1
- data/lib/generators/dummy/templates/config/routes.rb +31 -7
- data/lib/generators/dummy/templates/controllers/admin/authors_controller.rb +3 -6
- data/lib/generators/dummy/templates/controllers/admin/books_controller.rb +1 -1
- data/lib/generators/dummy/templates/controllers/admin/chapters_controller.rb +1 -1
- data/lib/generators/dummy/templates/controllers/admin/nodes_controller.rb +3 -0
- data/lib/generators/dummy/templates/controllers/admin/other_site/other_nodes_controller.rb +3 -0
- data/lib/generators/dummy/templates/controllers/admin/publishers_controller.rb +1 -1
- data/lib/generators/dummy/templates/controllers/application_controller.rb +27 -5
- data/lib/generators/dummy/templates/controllers/concerns/node_controller.rb +13 -3
- data/lib/generators/dummy/templates/controllers/contacts_controller.rb +3 -1
- data/lib/generators/dummy/templates/initializers/releaf.rb +31 -25
- data/lib/generators/dummy/templates/migrations/create_home_pages.rb +1 -0
- data/lib/generators/dummy/templates/migrations/create_other_nodes.rb +29 -0
- data/lib/generators/dummy/templates/models/author.rb +2 -2
- data/lib/generators/dummy/templates/models/book.rb +0 -2
- data/lib/generators/dummy/templates/models/chapter.rb +0 -2
- data/lib/generators/dummy/templates/models/home_page.rb +1 -0
- data/lib/generators/dummy/templates/models/other_site/other_node.rb +7 -0
- data/lib/generators/dummy/templates/models/publisher.rb +0 -5
- data/lib/generators/dummy/templates/models/text_page.rb +0 -1
- data/lib/generators/dummy/templates/views/contacts/show.html.haml +1 -1
- data/lib/generators/dummy/templates/views/layouts/application.html.haml +9 -1
- data/lib/generators/dummy/templates/views/text_pages/show.haml +1 -1
- data/lib/generators/releaf/templates/initializers/releaf.rb +6 -17
- data/lib/generators/releaf/templates/migrations/create_releaf_translations.rb +13 -14
- data/lib/generators/releaf/templates/seeds/seeds.rb +28 -32
- data/lib/releaf/{core/application.rb → application.rb} +5 -4
- data/lib/releaf/{core/component.rb → component.rb} +6 -2
- data/lib/releaf/configuration.rb +95 -0
- data/lib/releaf/core_ext/array/reorder.rb +5 -0
- data/lib/releaf/engine.rb +12 -0
- data/lib/releaf/exceptions.rb +5 -0
- data/lib/releaf/instance_cache.rb +72 -0
- data/lib/releaf/{core → rails_ext}/validation_error_codes.rb +1 -1
- data/lib/releaf/root/configuration.rb +6 -0
- data/lib/releaf/root/default_controller_resolver.rb +37 -0
- data/lib/releaf/root/settings_manager.rb +12 -0
- data/lib/releaf/root.rb +17 -0
- data/lib/releaf/{core/route_mapper.rb → route_mapper.rb} +6 -6
- data/lib/releaf/service.rb +11 -0
- data/lib/releaf/settings_ui.rb +7 -0
- data/lib/releaf/version.rb +1 -1
- data/lib/releaf-core.rb +38 -9
- data/spec/builders/{builders → releaf/builders}/association_reflector_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/base_spec.rb +17 -21
- data/spec/builders/{builders → releaf/builders}/collection_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/confirm_destroy_dialog_builder_spec.rb +5 -5
- data/spec/builders/{builders → releaf/builders}/confirm_dialog_builder_spec.rb +9 -7
- data/spec/builders/{builders → releaf/builders}/edit_builder_spec.rb +127 -20
- data/spec/builders/releaf/builders/form_builder/associations_spec.rb +129 -0
- data/spec/builders/releaf/builders/form_builder/date_fields_spec.rb +86 -0
- data/spec/builders/releaf/builders/form_builder/i18n_fields_spec.rb +48 -0
- data/spec/builders/releaf/builders/form_builder/label_spec.rb +106 -0
- data/spec/builders/releaf/builders/form_builder/number_fields_spec.rb +37 -0
- data/spec/builders/releaf/builders/form_builder_spec.rb +228 -0
- data/spec/builders/{builders → releaf/builders}/index_builder_spec.rb +29 -10
- data/spec/builders/releaf/builders/page/header_builder_spec.rb +65 -0
- data/spec/builders/releaf/builders/page/layout_builder_spec.rb +170 -0
- data/spec/builders/releaf/builders/page/menu_builder_spec.rb +345 -0
- data/spec/builders/{builders → releaf/builders}/pagination_builder_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/resource_dialog_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/resource_view_spec.rb +8 -8
- data/spec/builders/{builders → releaf/builders}/show_builder_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/table_builder_spec.rb +31 -75
- data/spec/builders/{builders → releaf/builders}/template_spec.rb +0 -0
- data/spec/builders/{builders → releaf/builders}/toolbox_builder_spec.rb +4 -4
- data/spec/builders/{builders → releaf/builders}/toolbox_spec.rb +0 -0
- data/spec/builders/releaf/builders/utilities/date_fields_spec.rb +125 -0
- data/spec/builders/releaf/builders/utilities/resolve_attribute_field_method_name_spec.rb +318 -0
- data/spec/builders/{builders → releaf/builders}/view_spec.rb +1 -1
- data/spec/builders/{builders_spec.rb → releaf/builders_spec.rb} +0 -0
- data/spec/builders/releaf/settings/form_builder_spec.rb +48 -0
- data/spec/builders/{core → releaf}/settings/table_builder_spec.rb +6 -4
- data/spec/controllers/concerns/releaf/richtext_attachments_spec.rb +1 -1
- data/spec/controllers/releaf/{base_controller_spec.rb → action_controller_spec.rb} +132 -161
- data/spec/controllers/releaf/root_controller_spec.rb +40 -0
- data/spec/controllers/releaf/settings_controller_spec.rb +52 -0
- data/spec/error_hash_builder_spec.rb +83 -0
- data/spec/ext/array_reorder_spec.rb +12 -0
- data/spec/features/ajaxbox_spec.rb +6 -6
- data/spec/features/errors_spec.rb +2 -1
- data/spec/features/index_table_spec.rb +6 -3
- data/spec/features/richtext_attachments_spec.rb +2 -2
- data/spec/features/richtext_custom_config_spec.rb +28 -0
- data/spec/features/richtext_embed_spec.rb +1 -1
- data/spec/features/richtext_spec.rb +10 -1
- data/spec/features/search_spec.rb +1 -1
- data/spec/features/settings_spec.rb +10 -5
- data/spec/helpers/application_helper_spec.rb +4 -6
- data/spec/lib/releaf/action_controller/features_spec.rb +171 -0
- data/spec/lib/releaf/action_controller/search_spec.rb +84 -0
- data/spec/lib/releaf/{core/application_spec.rb → application_spec.rb} +7 -6
- data/spec/lib/releaf/assets_resolver_spec.rb +130 -0
- data/spec/lib/releaf/build_errors_hash_spec.rb +141 -0
- data/spec/lib/releaf/configuration_spec.rb +205 -0
- data/spec/lib/releaf/controller_definition_spec.rb +49 -0
- data/spec/lib/releaf/controller_group_definition_spec.rb +27 -0
- data/spec/lib/releaf/{core/default_searchable_fields_spec.rb → default_searchable_fields_spec.rb} +1 -1
- data/spec/lib/releaf/instance_cache_spec.rb +98 -0
- data/spec/lib/releaf/{core/resource_base_spec.rb → resource_base_spec.rb} +59 -21
- data/spec/lib/releaf/{core/resource_fields_spec.rb → resource_fields_spec.rb} +1 -1
- data/spec/lib/releaf/{core/resource_params_spec.rb → resource_params_spec.rb} +3 -5
- data/spec/lib/releaf/resource_table_fields_spec.rb +20 -0
- data/spec/lib/releaf/{core/resource_utilities_spec.rb → resource_utilities_spec.rb} +1 -1
- data/spec/lib/releaf/{core/responders → responders}/access_denied_responder_spec.rb +1 -1
- data/spec/lib/releaf/{core/responders → responders}/after_save_responder_spec.rb +9 -8
- data/spec/lib/releaf/{core/responders → responders}/confirm_destroy_responder_spec.rb +2 -2
- data/spec/lib/releaf/{core/responders → responders}/destroy_responder_spec.rb +2 -2
- data/spec/lib/releaf/{core/responders → responders}/error_responder_spec.rb +4 -4
- data/spec/lib/releaf/{core/responders → responders}/feature_disabled_responder_spec.rb +1 -1
- data/spec/lib/releaf/{core/responders → responders}/page_not_found_responder_spec.rb +1 -1
- data/spec/lib/releaf/{core/responders_spec.rb → responders_spec.rb} +14 -14
- data/spec/lib/releaf/root/configuration_spec.rb +9 -0
- data/spec/lib/releaf/root/default_controller_resolver_spec.rb +108 -0
- data/spec/lib/releaf/root_spec.rb +13 -0
- data/spec/lib/releaf/service_spec.rb +20 -0
- data/spec/lib/releaf/settings/normalize_value_spec.rb +103 -0
- data/spec/lib/releaf/settings/register_spec.rb +135 -0
- data/spec/lib/releaf/settings_manager_spec.rb +22 -0
- data/spec/lib/validation_error_codes_spec.rb +1 -1
- data/spec/misc/factories_spec.rb +0 -12
- data/spec/models/settings_spec.rb +74 -32
- data/spec/routing/route_mapper_spec.rb +5 -5
- data/spec/rspec_helpers/test_helpers_spec.rb +1 -1
- data/spec/rspec_helpers/test_spec.rb +14 -0
- data/spec/{lib/releaf/core/item_orderer_spec.rb → services/array/reorder_spec.rb} +32 -53
- metadata +299 -224
- data/app/builders/releaf/builders/orderer.rb +0 -5
- data/app/builders/releaf/builders/tags/releaf_associated_set_field.rb +0 -40
- data/app/builders/releaf/core/settings/form_builder.rb +0 -21
- data/app/builders/releaf/core/settings/table_builder.rb +0 -11
- data/app/controllers/concerns/releaf/breadcrumbs.rb +0 -42
- data/app/controllers/releaf/base_controller.rb +0 -458
- data/app/controllers/releaf/core/settings_controller.rb +0 -50
- data/app/helpers/releaf/javascript_helper.rb +0 -75
- data/app/lib/releaf/core/assets_resolver.rb +0 -58
- data/app/lib/releaf/core/error_formatter.rb +0 -103
- data/app/lib/releaf/core/item_orderer.rb +0 -102
- data/app/lib/releaf/core/resource_table_fields.rb +0 -10
- data/app/lib/releaf/core/responders.rb +0 -31
- data/app/lib/releaf/core/template_field_type_mapper.rb +0 -127
- data/lib/generators/dummy/templates/controllers/concerns/.keep +0 -0
- data/lib/releaf/core/builders_autoload.rb +0 -27
- data/lib/releaf/core/configuration.rb +0 -101
- data/lib/releaf/core/engine.rb +0 -35
- data/lib/releaf/core/exceptions.rb +0 -38
- data/lib/releaf/core/settings_ui_component.rb +0 -7
- data/releaf-core.gemspec +0 -35
- data/spec/builders/builders/form_builder_spec.rb +0 -562
- data/spec/builders/builders/orderer_spec.rb +0 -22
- data/spec/builders/builders/page/header_builder_spec.rb +0 -143
- data/spec/builders/builders/page/layout_builder_spec.rb +0 -73
- data/spec/builders/builders/page/menu_builder_spec.rb +0 -160
- data/spec/builders/core/settings/form_builder_spec.rb +0 -69
- data/spec/controllers/releaf/core/settings_controller_spec.rb +0 -31
- data/spec/lib/releaf/core/assets_resolver_spec.rb +0 -113
- data/spec/lib/releaf/core/configuration_spec.rb +0 -230
- data/spec/lib/releaf/core/error_formatter_spec.rb +0 -242
- data/spec/lib/releaf/core/resource_table_fields_spec.rb +0 -18
- data/spec/lib/releaf/core/template_field_type_mapper_spec.rb +0 -311
@@ -1,155 +1,165 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module Releaf::Builders::Page
|
2
|
+
class LayoutBuilder
|
3
|
+
include Releaf::Builders::Base
|
4
|
+
include Releaf::Builders::Template
|
5
|
+
|
6
|
+
def output(&block)
|
7
|
+
doctype.html_safe << tag(:html) do
|
8
|
+
head << body(&block)
|
9
|
+
end
|
10
|
+
end
|
4
11
|
|
5
|
-
|
6
|
-
|
7
|
-
head << body(&block)
|
12
|
+
def doctype
|
13
|
+
"<!DOCTYPE html>"
|
8
14
|
end
|
9
|
-
end
|
10
15
|
|
11
|
-
|
12
|
-
|
13
|
-
|
16
|
+
def head
|
17
|
+
tag(:head) do
|
18
|
+
head_blocks
|
19
|
+
end
|
20
|
+
end
|
14
21
|
|
15
|
-
|
16
|
-
|
17
|
-
|
22
|
+
def body
|
23
|
+
tag(:body, body_atttributes) do
|
24
|
+
body_content{ yield } << assets(:javascripts, :javascript_include_tag)
|
25
|
+
end
|
18
26
|
end
|
19
|
-
end
|
20
27
|
|
21
|
-
|
22
|
-
|
23
|
-
|
28
|
+
def body_atttributes
|
29
|
+
{class: body_classes, "data-settings-path" => settings_path}
|
30
|
+
end
|
31
|
+
|
32
|
+
def settings_path
|
33
|
+
url_for(action: "store_settings", controller: "/releaf/root", only_path: true)
|
24
34
|
end
|
25
|
-
end
|
26
35
|
|
27
|
-
|
28
|
-
if access_control.authorized?
|
36
|
+
def body_content(&block)
|
29
37
|
header << menu << tag(:main, id: "main", &block) << notifications
|
30
|
-
else
|
31
|
-
yield
|
32
38
|
end
|
33
|
-
end
|
34
39
|
|
35
|
-
|
36
|
-
|
37
|
-
|
40
|
+
def notifications
|
41
|
+
tag(:div, nil, class: 'notifications', 'data' => {'close-text' => t("Close")})
|
42
|
+
end
|
38
43
|
|
39
|
-
|
40
|
-
|
41
|
-
|
44
|
+
def header
|
45
|
+
tag(:header, header_builder.new(template).output)
|
46
|
+
end
|
42
47
|
|
43
|
-
|
44
|
-
|
45
|
-
|
48
|
+
def header_builder
|
49
|
+
Releaf::Builders::Page::HeaderBuilder
|
50
|
+
end
|
46
51
|
|
47
|
-
|
48
|
-
|
49
|
-
|
52
|
+
def menu
|
53
|
+
tag(:aside, menu_builder.new(template).output)
|
54
|
+
end
|
50
55
|
|
51
|
-
|
52
|
-
|
53
|
-
|
56
|
+
def menu_builder
|
57
|
+
Releaf::Builders::Page::MenuBuilder
|
58
|
+
end
|
54
59
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
60
|
+
def assets(type, tag_method)
|
61
|
+
safe_join do
|
62
|
+
send(type).collect do |asset|
|
63
|
+
template.send(tag_method, asset)
|
64
|
+
end
|
59
65
|
end
|
60
66
|
end
|
61
|
-
end
|
62
67
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
68
|
+
def body_classes
|
69
|
+
list = []
|
70
|
+
list << "application-#{Rails.application.class.parent_name.downcase}"
|
71
|
+
list += controller_body_classes
|
72
|
+
list << "view-#{controller.active_view}" if controller.respond_to? :active_view
|
73
|
+
list << "side-compact" if layout_settings("releaf.side.compact")
|
74
|
+
list
|
75
|
+
end
|
71
76
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
+
def controller_classes
|
78
|
+
ancestors = controller.class.ancestors.grep(Class)
|
79
|
+
slice_index = ancestors.index(Releaf::ActionController) || (ancestors.index(controller.class) + 1)
|
80
|
+
ancestors[0, slice_index].reverse
|
81
|
+
end
|
77
82
|
|
78
|
-
|
79
|
-
|
80
|
-
|
83
|
+
def controller_body_classes
|
84
|
+
controller_classes.collect do|c_class|
|
85
|
+
"controller-" + c_class.name.gsub(/Controller$/, "").underscore.tr( '_/', '-' )
|
86
|
+
end
|
81
87
|
end
|
82
|
-
end
|
83
88
|
|
84
|
-
|
85
|
-
|
86
|
-
|
89
|
+
def head_blocks
|
90
|
+
[title, content_type, favicons, ms_tile, assets(:stylesheets, :stylesheet_link_tag), csrf]
|
91
|
+
end
|
87
92
|
|
88
|
-
|
89
|
-
|
90
|
-
|
93
|
+
def controller_name
|
94
|
+
params[:controller]
|
95
|
+
end
|
91
96
|
|
92
|
-
|
93
|
-
|
94
|
-
|
97
|
+
def assets_resolver
|
98
|
+
Releaf::AssetsResolver
|
99
|
+
end
|
95
100
|
|
96
|
-
|
97
|
-
|
98
|
-
|
101
|
+
def stylesheets
|
102
|
+
assets_resolver.controller_assets(controller_name, :stylesheets)
|
103
|
+
end
|
99
104
|
|
100
|
-
|
101
|
-
|
102
|
-
|
105
|
+
def javascripts
|
106
|
+
assets_resolver.controller_assets(controller_name, :javascripts)
|
107
|
+
end
|
103
108
|
|
104
|
-
|
105
|
-
|
106
|
-
|
109
|
+
def csrf
|
110
|
+
template.csrf_meta_tags
|
111
|
+
end
|
107
112
|
|
108
|
-
|
109
|
-
|
110
|
-
|
113
|
+
def content_type
|
114
|
+
meta(content: 'text/html; charset=utf-8', 'http-equiv': 'Content-Type')
|
115
|
+
end
|
111
116
|
|
112
|
-
|
113
|
-
|
114
|
-
controller.page_title
|
117
|
+
def meta(options)
|
118
|
+
tag(:meta, nil, options)
|
115
119
|
end
|
116
|
-
end
|
117
120
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
+
def title
|
122
|
+
tag(:title) do
|
123
|
+
controller.page_title
|
124
|
+
end
|
125
|
+
end
|
121
126
|
|
122
|
-
|
123
|
-
|
124
|
-
|
127
|
+
def favicon_path
|
128
|
+
File.join('releaf', 'icons')
|
129
|
+
end
|
125
130
|
|
126
|
-
|
127
|
-
|
128
|
-
|
131
|
+
def ms_tile_path
|
132
|
+
favicon_path
|
133
|
+
end
|
129
134
|
|
130
|
-
|
131
|
-
|
132
|
-
|
135
|
+
def ms_tile_color
|
136
|
+
'#151515'
|
137
|
+
end
|
133
138
|
|
134
|
-
|
135
|
-
|
136
|
-
|
139
|
+
def favicon(source, options = {})
|
140
|
+
controller.view_context.favicon_link_tag(File.join(favicon_path, source), options)
|
141
|
+
end
|
137
142
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
apple_favicon("apple-touch-icon-152x152-precomposed.png", sizes: "152x152"),
|
142
|
-
apple_favicon("apple-touch-icon-114x114-precomposed.png", sizes: "114x114"),
|
143
|
-
apple_favicon("apple-touch-icon-72x72-precomposed.png", sizes: "72x72"),
|
144
|
-
favicon("favicon.png", type: 'image/png', rel: 'icon'),
|
145
|
-
]
|
146
|
-
end
|
143
|
+
def apple_favicon(source, options = {})
|
144
|
+
favicon(source, options.merge(rel: 'apple-touch-icon-precomposed', type: 'image/png'))
|
145
|
+
end
|
147
146
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
147
|
+
def favicons
|
148
|
+
[
|
149
|
+
apple_favicon("favicon.png"),
|
150
|
+
apple_favicon("apple-touch-icon-152x152-precomposed.png", sizes: "152x152"),
|
151
|
+
apple_favicon("apple-touch-icon-114x114-precomposed.png", sizes: "114x114"),
|
152
|
+
apple_favicon("apple-touch-icon-72x72-precomposed.png", sizes: "72x72"),
|
153
|
+
favicon("favicon.png", type: 'image/png', rel: 'icon'),
|
154
|
+
]
|
155
|
+
end
|
156
|
+
|
157
|
+
def ms_tile
|
158
|
+
tile_path = ActionController::Base.helpers.image_path(File.join(ms_tile_path, 'msapplication-tile-144x144.png'))
|
159
|
+
[
|
160
|
+
meta(name: 'msapplication-TileColor', content: ms_tile_color),
|
161
|
+
meta(name: 'msapplication-TileImage', content: tile_path)
|
162
|
+
]
|
163
|
+
end
|
154
164
|
end
|
155
165
|
end
|
@@ -1,140 +1,130 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
self.access_control = access_control
|
10
|
-
build_list(list)
|
1
|
+
module Releaf::Builders::Page
|
2
|
+
class MenuBuilder
|
3
|
+
include Releaf::InstanceCache
|
4
|
+
include Releaf::Builders::Base
|
5
|
+
include Releaf::Builders::Template
|
6
|
+
|
7
|
+
def output
|
8
|
+
compacter << tag(:nav, menu_level(Releaf.application.config.menu))
|
11
9
|
end
|
12
10
|
|
13
|
-
def
|
14
|
-
|
11
|
+
def active?(item)
|
12
|
+
instance_cache("active_#{item.class.name}_#{item.name}") do
|
13
|
+
if controller_group?(item)
|
14
|
+
item.controllers.find{|subitem| active?(subitem) }.present?
|
15
|
+
else
|
16
|
+
item.controller_name == controller.short_name
|
17
|
+
end
|
18
|
+
end
|
15
19
|
end
|
16
20
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
+
def menu_level(items)
|
22
|
+
level_content = items.map{|item| menu_item(item) }.compact
|
23
|
+
tag(:ul){ level_content } if level_content.present?
|
24
|
+
end
|
21
25
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
else
|
30
|
-
nil
|
26
|
+
def menu_item(item)
|
27
|
+
tag(:li, item_attributes(item)) do
|
28
|
+
if controller_group?(item)
|
29
|
+
menu_item_group(item)
|
30
|
+
else
|
31
|
+
menu_item_single(item)
|
32
|
+
end
|
31
33
|
end
|
32
34
|
end
|
33
35
|
|
34
|
-
def
|
35
|
-
|
36
|
+
def controller_group?(item)
|
37
|
+
item.respond_to? :controllers
|
36
38
|
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def output
|
40
|
-
menu_items = Menu.build(Releaf.application.config.menu, access_control)
|
41
|
-
compacter << tag(:nav, menu_level(menu_items))
|
42
|
-
end
|
43
39
|
|
44
|
-
|
45
|
-
|
46
|
-
|
40
|
+
def menu_item_single(item)
|
41
|
+
tag(:a, class: "trigger", href: item.path) do
|
42
|
+
item_name_content(item)
|
43
|
+
end
|
47
44
|
end
|
48
|
-
end
|
49
45
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
item_name_content(item) << item_collapser(item)
|
55
|
-
end << menu_level(item[:items])
|
56
|
-
else
|
57
|
-
tag(:a, class: "trigger", href: url_for(item[:url_helper])) do
|
58
|
-
item_name_content(item)
|
59
|
-
end
|
60
|
-
end
|
46
|
+
def menu_item_group(item)
|
47
|
+
tag(:span, class: "trigger") do
|
48
|
+
item_name_content(item) << item_collapser(item)
|
49
|
+
end << menu_level(item.controllers)
|
61
50
|
end
|
62
|
-
end
|
63
51
|
|
64
|
-
|
65
|
-
|
66
|
-
|
52
|
+
def collapsed_item?(item)
|
53
|
+
controller_group?(item) && !active?(item) && layout_settings("releaf.menu.collapsed.#{item.name}") == true
|
54
|
+
end
|
67
55
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
56
|
+
def item_attributes(item)
|
57
|
+
attributes = {
|
58
|
+
class: item_classes(item),
|
59
|
+
data: {
|
60
|
+
name: item.name
|
61
|
+
}
|
73
62
|
}
|
74
|
-
}
|
75
63
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
attributes
|
81
|
-
end
|
64
|
+
attributes.delete(:class) if attributes[:class].empty?
|
65
|
+
attributes
|
66
|
+
end
|
82
67
|
|
68
|
+
def item_classes(item)
|
69
|
+
list = []
|
70
|
+
list << "collapsed" if collapsed_item?(item)
|
71
|
+
list << "active" if active?(item)
|
72
|
+
list
|
73
|
+
end
|
83
74
|
|
84
|
-
|
85
|
-
|
86
|
-
|
75
|
+
def item_name_content(item)
|
76
|
+
item_full_name = item.localized_name
|
77
|
+
item_abbreviation = item_name_abbreviation( item_full_name )
|
87
78
|
|
88
|
-
|
89
|
-
|
79
|
+
tag(:abbr, item_abbreviation, title: item_full_name) + tag(:span, item_full_name, class: "name")
|
80
|
+
end
|
90
81
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
82
|
+
def item_name_abbreviation( item_full_name )
|
83
|
+
return "" if item_full_name.blank?
|
84
|
+
# use the first two letters after the last slash that is not preceded by a space
|
85
|
+
# to avoid identical abbreviations for namespaced items in case of missing translations
|
86
|
+
# but still use the first word in cases of user-entered slashes, e.g. "Inputs / Outputs"
|
87
|
+
item_full_name.split(/(?<!\s)\//).last.to_s[0..1].mb_chars.capitalize
|
88
|
+
end
|
98
89
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
90
|
+
def item_collapser(item)
|
91
|
+
tag(:span, class: "collapser") do
|
92
|
+
tag(:button, type: "button") do
|
93
|
+
item_collapser_icon(item)
|
94
|
+
end
|
103
95
|
end
|
104
96
|
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def compact_side?
|
108
|
-
layout_settings('releaf.side.compact')
|
109
|
-
end
|
110
97
|
|
111
|
-
|
112
|
-
|
113
|
-
icon("chevron-right")
|
114
|
-
else
|
115
|
-
icon(collapsed_item?(item) ? "chevron-down" : "chevron-up")
|
98
|
+
def compact_side?
|
99
|
+
layout_settings('releaf.side.compact')
|
116
100
|
end
|
117
|
-
end
|
118
101
|
|
119
|
-
|
120
|
-
tag(:div, class: "compacter") do
|
102
|
+
def item_collapser_icon(item)
|
121
103
|
if compact_side?
|
122
|
-
|
123
|
-
title_attribute = 'title-expand'
|
104
|
+
icon("chevron-right")
|
124
105
|
else
|
125
|
-
|
126
|
-
title_attribute = 'title-collapse'
|
106
|
+
icon(collapsed_item?(item) ? "chevron-down" : "chevron-up")
|
127
107
|
end
|
128
|
-
button(nil, icon_name, title: compacter_data[title_attribute], data: compacter_data )
|
129
108
|
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def compacter_data
|
133
|
-
{
|
134
|
-
'title-expand' => t("Expand", scope: :admin),
|
135
|
-
'title-collapse' => t("Collapse", scope: :admin)
|
136
|
-
}
|
137
|
-
end
|
138
109
|
|
110
|
+
def compacter
|
111
|
+
tag(:div, class: "compacter") do
|
112
|
+
if compact_side?
|
113
|
+
icon_name = "angle-double-right"
|
114
|
+
title_attribute = 'title-expand'
|
115
|
+
else
|
116
|
+
icon_name = "angle-double-left"
|
117
|
+
title_attribute = 'title-collapse'
|
118
|
+
end
|
119
|
+
button(nil, icon_name, title: compacter_data[title_attribute], data: compacter_data )
|
120
|
+
end
|
121
|
+
end
|
139
122
|
|
123
|
+
def compacter_data
|
124
|
+
{
|
125
|
+
'title-expand' => t("Expand", scope: :admin),
|
126
|
+
'title-collapse' => t("Collapse", scope: :admin)
|
127
|
+
}
|
128
|
+
end
|
129
|
+
end
|
140
130
|
end
|
@@ -2,10 +2,11 @@ class Releaf::Builders::RefusedDestroyDialogBuilder
|
|
2
2
|
include Releaf::Builders::ResourceDialog
|
3
3
|
|
4
4
|
def section_body
|
5
|
+
message = "Deletion of %{resource} restricted due to existing relations:"
|
5
6
|
tag(:div, class: "body") do
|
6
7
|
[
|
7
8
|
icon("ban"),
|
8
|
-
tag(:div, t(
|
9
|
+
tag(:div, t(message, default: message, resource: resource_title(resource)), class: "description"),
|
9
10
|
restricted_relations
|
10
11
|
]
|
11
12
|
end
|
@@ -22,13 +23,7 @@ class Releaf::Builders::RefusedDestroyDialogBuilder
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def relation_description(relation, key)
|
25
|
-
|
26
|
-
unless relation[:controller].nil?
|
27
|
-
I18n.t(relation[:controller], scope: 'admin.controllers')
|
28
|
-
else
|
29
|
-
I18n.t(key, scope: 'admin.controllers')
|
30
|
-
end
|
31
|
-
) << " (#{relation[:objects].count})"
|
26
|
+
"#{resource.class.human_attribute_name(key)} (#{relation[:objects].count})"
|
32
27
|
end
|
33
28
|
|
34
29
|
def relation_objects(relation)
|
@@ -41,10 +36,10 @@ class Releaf::Builders::RefusedDestroyDialogBuilder
|
|
41
36
|
|
42
37
|
def relation_objects_item(item, relation)
|
43
38
|
tag(:li) do
|
44
|
-
|
45
|
-
|
39
|
+
if relation[:controller].nil?
|
40
|
+
resource_title(item)
|
46
41
|
else
|
47
|
-
|
42
|
+
link_to(resource_title(item), controller: relation[:controller], action: "edit", id: item)
|
48
43
|
end
|
49
44
|
end
|
50
45
|
end
|
@@ -58,7 +53,7 @@ class Releaf::Builders::RefusedDestroyDialogBuilder
|
|
58
53
|
|
59
54
|
def footer_primary_tools
|
60
55
|
[
|
61
|
-
button(t("Ok"), "check", href:
|
56
|
+
button(t("Ok"), "check", href: index_path, data: {type: 'cancel'})
|
62
57
|
]
|
63
58
|
end
|
64
59
|
|
@@ -14,13 +14,13 @@ module Releaf::Builders::ResourceView
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def section_header_text
|
17
|
-
resource.new_record? ? t("Create new resource") :
|
17
|
+
resource.new_record? ? t("Create new resource") : resource_title(resource)
|
18
18
|
end
|
19
19
|
|
20
20
|
def section_header_extras
|
21
21
|
return unless feature_available? :toolbox
|
22
22
|
tag(:div, class: "extras toolbox-wrap") do
|
23
|
-
toolbox(resource,
|
23
|
+
toolbox(resource, index_path: index_path)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -45,10 +45,10 @@ module Releaf::Builders::ResourceView
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def back_to_list?
|
48
|
-
feature_available?(:index) && params[:
|
48
|
+
feature_available?(:index) && params[:index_path].present?
|
49
49
|
end
|
50
50
|
|
51
51
|
def back_to_list_button
|
52
|
-
button(t("Back to list"), "caret-left", class: "secondary", href:
|
52
|
+
button(t("Back to list"), "caret-left", class: "secondary", href: index_path)
|
53
53
|
end
|
54
54
|
end
|