infopark_cloud_connector 6.9.2.1.125136549 → 6.9.3.1.36404185
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.
- data/README +4 -2
- data/app/controllers/rails_connector/objs_controller.rb +35 -18
- data/app/helpers/rails_connector/cms_tag_helper.rb +5 -15
- data/app/helpers/rails_connector/display_helper.rb +105 -0
- data/app/helpers/rails_connector/editing_helper.rb +6 -0
- data/app/views/rails_connector/_editing_javascript.html.erb +2 -1
- data/config/ca-bundle.crt +3509 -0
- data/config/routes.rb +1 -0
- data/lib/assets/javascripts/infopark_editing.js +488 -208
- data/lib/assets/stylesheets/infopark_editing.css +71 -2
- data/lib/rails_connector/basic_obj.rb +46 -6
- data/lib/rails_connector/cms_rest_api.rb +26 -14
- data/lib/rails_connector/configuration.rb +199 -0
- data/lib/rails_connector/content_service.rb +27 -8
- data/lib/rails_connector/link.rb +0 -8
- data/lib/rails_connector/obj_data_from_hash.rb +3 -2
- metadata +6 -3
data/README
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
= Infopark Cloud Connector
|
2
2
|
|
3
|
-
Infopark Cloud Connector
|
3
|
+
Infopark Cloud Connector is part of {https://rubygems.org/gems/infopark_rails_connector Infopark Rails Connector}.
|
4
4
|
|
5
|
-
|
5
|
+
The Cloud Connector makes CMS objects maintained by means of the cloud-based Infopark CMS available to your Rails application. It offers easy-to-use functionality for rendering CMS content, doing searches, etc.
|
6
|
+
|
7
|
+
For more information about Infopark Rails and Cloud Connector, please visit {http://dev.infopark.net/ the Infopark Dev Center}. For details regarding recent changes to the Infopark CMS and the Cloud Connector can be found in our {http://dev.infopark.net/blog Dev Center Blog}.
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module RailsConnector
|
2
2
|
|
3
3
|
class ObjsController < WebserviceController
|
4
|
-
before_filter :load_object, only: [:show, :edit, :update, :destroy, :
|
4
|
+
before_filter :load_object, only: [:show, :edit, :update, :destroy, :widget_class_selection,
|
5
|
+
:create_widget, :edit_widget]
|
5
6
|
|
6
7
|
def show
|
7
8
|
render json: {markup: render_to_string(layout: false)}
|
@@ -16,9 +17,7 @@ module RailsConnector
|
|
16
17
|
end
|
17
18
|
|
18
19
|
def edit
|
19
|
-
markup
|
20
|
-
process(:edit, @obj, current_page, params[:field_name], @obj.widget_container)
|
21
|
-
render json: {markup: markup}
|
20
|
+
render json: {markup: render_to_string(@obj.edit_view_path, layout: false)}
|
22
21
|
end
|
23
22
|
|
24
23
|
def update
|
@@ -35,28 +34,30 @@ module RailsConnector
|
|
35
34
|
end
|
36
35
|
|
37
36
|
def page_class_selection
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
obj_classes['results'].each do |obj_class|
|
37
|
+
valid_page_classes = Obj.valid_page_classes_beneath(params[:parent_path]) || all_page_classes
|
38
|
+
valid_page_classes.map!(&:to_s)
|
39
|
+
|
40
|
+
page_class_names = valid_page_classes.map do |page_class_name|
|
43
41
|
begin
|
44
|
-
|
45
|
-
|
42
|
+
markup = render_to_string("#{page_class_name.underscore}/thumbnail")
|
43
|
+
{name: page_class_name, markup: markup}
|
46
44
|
rescue ActionView::MissingTemplate
|
47
45
|
end
|
48
46
|
end
|
49
|
-
|
47
|
+
|
48
|
+
render json: page_class_names.compact
|
50
49
|
end
|
51
50
|
|
52
51
|
def widget_class_selection
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
52
|
+
valid_widget_classes = @obj.valid_widget_classes_for(params[:field_name]) || all_widget_classes
|
53
|
+
valid_widget_classes.map!(&:to_s)
|
54
|
+
|
55
|
+
widgets_classes = valid_widget_classes.map do |widget_class_name|
|
56
|
+
markup = WidgetRenderer.new(request).process('thumbnail', widget_class_name.underscore)
|
57
|
+
{name: widget_class_name, markup: markup}
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
|
+
render json: widgets_classes
|
60
61
|
end
|
61
62
|
|
62
63
|
def create_widget
|
@@ -74,6 +75,12 @@ module RailsConnector
|
|
74
75
|
render json: {markup: render_to_string(layout: false)}
|
75
76
|
end
|
76
77
|
|
78
|
+
def edit_widget
|
79
|
+
markup = WidgetRenderer.new(request).
|
80
|
+
process(:edit, @obj, current_page, params[:field_name], @obj.widget_container)
|
81
|
+
render json: {markup: markup}
|
82
|
+
end
|
83
|
+
|
77
84
|
private
|
78
85
|
|
79
86
|
def load_object
|
@@ -101,6 +108,16 @@ module RailsConnector
|
|
101
108
|
Obj.find(params[:current_page_id]) if params[:current_page_id].present?
|
102
109
|
end
|
103
110
|
helper_method :current_page
|
111
|
+
|
112
|
+
def all_page_classes
|
113
|
+
page_classes = CmsRestApi.task_unaware_request(:get,
|
114
|
+
"revisions/#{Workspace.current.revision_id}/obj_classes")['results']
|
115
|
+
page_classes.map { |page_class| page_class['name'] }.sort
|
116
|
+
end
|
117
|
+
|
118
|
+
def all_widget_classes
|
119
|
+
Dir[Rails.root + 'app/widgets/*'].map { |path| File.basename(path).camelize }.sort
|
120
|
+
end
|
104
121
|
end
|
105
122
|
|
106
123
|
end
|
@@ -2,6 +2,7 @@ module RailsConnector
|
|
2
2
|
|
3
3
|
# @api public
|
4
4
|
module CmsTagHelper
|
5
|
+
FIELD_TYPES_WITH_ORIGINAL_CONTENT = %w[string text html enum multienum]
|
5
6
|
VOID_TAGS = %w[area base br col command embed hr img input keygen
|
6
7
|
link meta param source track wbr]
|
7
8
|
|
@@ -48,23 +49,12 @@ module RailsConnector
|
|
48
49
|
end
|
49
50
|
inner_html = safe_join(rendered_widgets)
|
50
51
|
else
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
block_result = capture { yield }
|
55
|
-
else
|
56
|
-
display_original_value(obj[attribute])
|
57
|
-
end
|
58
|
-
original_value ||= ''
|
59
|
-
# Concate with empty string to disable html_safe:
|
60
|
-
options['data-ip-field-original-content'] = '' + original_value
|
52
|
+
if inplace_editing_allowed? && FIELD_TYPES_WITH_ORIGINAL_CONTENT.include?(field_type)
|
53
|
+
original_content = MultiJson.encode(display_original_value(obj[attribute]))
|
54
|
+
options['data-ip-field-original-content'] = original_content
|
61
55
|
end
|
62
56
|
|
63
|
-
inner_html =
|
64
|
-
block_result || capture { yield }
|
65
|
-
else
|
66
|
-
display_value(obj[attribute])
|
67
|
-
end
|
57
|
+
inner_html = block_given? ? capture { yield } : display_value(obj[attribute])
|
68
58
|
end
|
69
59
|
|
70
60
|
if VOID_TAGS.include?(tag_name.to_s)
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module RailsConnector
|
2
|
+
|
3
|
+
# This module contains a helper that can be used to render attributes of the CMS models.
|
4
|
+
# @api public
|
5
|
+
module DisplayHelper
|
6
|
+
|
7
|
+
# For a consistent look of your site and easy maintenance, only the display helpers
|
8
|
+
# should be used to render an attribute <em>value</em> of a CMS model.
|
9
|
+
#
|
10
|
+
# <%= display_value @obj.title %>
|
11
|
+
# Renders the value, taking its type into account.
|
12
|
+
# * An HtmlString will be exported by converting its links
|
13
|
+
# * A Time will be exported in an international form: Year-Month-Day Hour:Minutes
|
14
|
+
# * A non-HTML String will be quoted
|
15
|
+
# * other values will be rendered unchanged
|
16
|
+
#
|
17
|
+
# @api public
|
18
|
+
def display_value(value)
|
19
|
+
case value
|
20
|
+
when HtmlString then convert_links(value).html_safe
|
21
|
+
when String then h(value)
|
22
|
+
when Time then h(l(value))
|
23
|
+
else value
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def display_original_value(value)
|
28
|
+
case value
|
29
|
+
when HtmlString then convert_links(value, :ignore_body_data_url => true).html_safe
|
30
|
+
else display_value(value)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Renders a field from the CMS, including an edit marker for the preview
|
35
|
+
# If the option :marker is +false+, no edit marker will be rendered.
|
36
|
+
#
|
37
|
+
# <%= display_field @obj, :title %>
|
38
|
+
#
|
39
|
+
# When creating an edit marker, all options except :marker are passed to {MarkerHelper#edit_marker}.
|
40
|
+
#
|
41
|
+
# @api public
|
42
|
+
def display_field(obj, attr, options = {})
|
43
|
+
options.reverse_merge!({
|
44
|
+
:marker => ![:id, :path, :created, :last_changed, :version].include?(attr.to_sym)
|
45
|
+
})
|
46
|
+
if options.delete :marker
|
47
|
+
edit_marker(obj, attr, options) do |obj, attr|
|
48
|
+
display_value obj[attr]
|
49
|
+
end
|
50
|
+
else
|
51
|
+
display_value obj[attr]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Legacy method - deprecated
|
56
|
+
#
|
57
|
+
# Use display_value and display_field instead
|
58
|
+
def display(*args)
|
59
|
+
if args.last.kind_of? Hash
|
60
|
+
options = args.pop
|
61
|
+
else
|
62
|
+
options = {}
|
63
|
+
end
|
64
|
+
return display_value(args.first) if args.size == 1
|
65
|
+
display_field(args[0], args[1], options)
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
LINK_PATTERN = '<?\binternallink:(\d+)\b>?'
|
71
|
+
LINK_EXPRESSION = %r(#{LINK_PATTERN})
|
72
|
+
|
73
|
+
def convert_links(content_attribute, cms_path_options = {})
|
74
|
+
return content_attribute unless content_attribute =~ LINK_EXPRESSION
|
75
|
+
link_map = content_attribute.source.text_links.each_with_object({}) do |link, map|
|
76
|
+
map[link.id.to_s] = link
|
77
|
+
end
|
78
|
+
content_attribute.gsub(%r(#{LINK_PATTERN}(['"]?))) do
|
79
|
+
link = link_map[$1.to_s]
|
80
|
+
if link.blank?
|
81
|
+
"#{CmsRoutingHelper::LINK_TO_UNREACHABLE}#{$2}"
|
82
|
+
else
|
83
|
+
uri = "#{cms_path(link, cms_path_options)}#{$2}"
|
84
|
+
html_link(link, uri)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def html_link(link, uri)
|
90
|
+
subst = uri
|
91
|
+
name, value =
|
92
|
+
case link.tag_name
|
93
|
+
when 'img', 'input'
|
94
|
+
['alt', link.title || ""]
|
95
|
+
when 'a', 'link'
|
96
|
+
['title', begin link.title unless link.title.blank? end]
|
97
|
+
end
|
98
|
+
if value
|
99
|
+
subst << %( #{name}="#{h(value)}")
|
100
|
+
end
|
101
|
+
subst << %( target="#{h(link.target)}") unless link.target.blank?
|
102
|
+
subst
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -16,6 +16,12 @@ module RailsConnector
|
|
16
16
|
Configuration.editing_auth_callback.call(request.env)
|
17
17
|
end
|
18
18
|
|
19
|
+
def current_page_has_edit_view?
|
20
|
+
@obj && lookup_context.find(@obj.edit_view_path).present?
|
21
|
+
rescue ActionView::MissingTemplate
|
22
|
+
false
|
23
|
+
end
|
24
|
+
|
19
25
|
end
|
20
26
|
|
21
27
|
end
|
@@ -9,7 +9,8 @@
|
|
9
9
|
})
|
10
10
|
);
|
11
11
|
infopark.obj.current_page_id = "<%= @obj.try(:id) %>";
|
12
|
-
infopark.
|
12
|
+
infopark.obj.current_page_has_edit_view = <%= current_page_has_edit_view? %>;
|
13
|
+
infopark.admin_gui_base_url = "<%= RailsConnector::CmsRestApi.configuration.url %>";
|
13
14
|
infopark.editing.initialize();
|
14
15
|
});
|
15
16
|
<% end %>
|