infopark_cloud_connector 6.9.0.3.197272233 → 6.9.1.3.22208381
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/app/controllers/rails_connector/blobs_controller.rb +10 -0
- data/app/controllers/rails_connector/objs_controller.rb +37 -41
- data/app/controllers/rails_connector/tasks_controller.rb +11 -0
- data/app/controllers/rails_connector/webservice_controller.rb +36 -0
- data/app/controllers/rails_connector/workspaces_controller.rb +33 -0
- data/app/helpers/rails_connector/cms_asset_helper.rb +100 -0
- data/app/helpers/rails_connector/cms_tag_helper.rb +82 -7
- data/app/views/rails_connector/_editing_javascript.html.erb +8 -2
- data/app/views/rails_connector/objs/create_widget.html.erb +1 -1
- data/config/locales/de.rails_connector.models.yml +6 -0
- data/config/locales/en.rails_connector.models.yml +6 -0
- data/config/routes.rb +17 -1
- data/lib/assets/fonts/infopark_icons-webfont.eot +0 -0
- data/lib/assets/fonts/infopark_icons-webfont.ttf +0 -0
- data/lib/assets/fonts/infopark_icons-webfont.woff +0 -0
- data/lib/assets/images/ip_logo_app.png +0 -0
- data/lib/assets/images/ip_logo_app2x.png +0 -0
- data/lib/assets/images/rails_connector/image_placeholder.png +0 -0
- data/lib/assets/javascripts/infopark_editing.js +1386 -287
- data/lib/assets/stylesheets/infopark_editing.css +866 -345
- data/lib/rails_connector/basic_obj.rb +8 -0
- data/lib/rails_connector/migrations/cms_backend.rb +6 -10
- data/lib/rails_connector/migrations/migration_dsl.rb +29 -1
- data/lib/rails_connector/obj_data_from_service.rb +1 -1
- data/lib/rails_connector/widget_renderer.rb +2 -2
- metadata +14 -4
@@ -1,41 +1,42 @@
|
|
1
1
|
module RailsConnector
|
2
2
|
|
3
|
-
class ObjsController <
|
4
|
-
rescue_from ClientError do |exception|
|
5
|
-
render json: {error: exception.message}, status: exception.http_code
|
6
|
-
end
|
7
|
-
|
8
|
-
before_filter :merge_correctly_parsed_json_params
|
9
|
-
before_filter :restrict_non_allow_access
|
3
|
+
class ObjsController < WebserviceController
|
10
4
|
before_filter :load_object, only: [:update, :destroy, :create_widget]
|
11
5
|
|
12
|
-
|
6
|
+
def create
|
7
|
+
created_obj = CmsRestApi.post(
|
8
|
+
"revisions/#{Workspace.current.revision_id}/objs",
|
9
|
+
{obj: obj_params}
|
10
|
+
)
|
11
|
+
render json: created_obj
|
12
|
+
end
|
13
13
|
|
14
14
|
def update
|
15
|
-
raise "Required parameter 'obj' is missing." unless params[:obj].present?
|
16
|
-
raise "Parameter 'obj' is not a hash." unless params[:obj].is_a?(Hash)
|
17
|
-
|
18
|
-
convert_html_keys = params[:obj].keys.select do |key|
|
19
|
-
@obj.type_of_attribute(key.to_s) == 'html'
|
20
|
-
end
|
21
|
-
|
22
|
-
convert_html_keys.each do |key|
|
23
|
-
params[:obj][key] = ContentConversion.convert_html_links(
|
24
|
-
params[:obj][key], request.host, request.port)
|
25
|
-
end
|
26
|
-
|
27
15
|
changed_obj = CmsRestApi.put(
|
28
16
|
"revisions/#{Workspace.current.revision_id}/objs/#{params[:id]}",
|
29
|
-
{
|
17
|
+
{obj: obj_params}
|
30
18
|
)
|
31
|
-
render :
|
19
|
+
render json: changed_obj
|
32
20
|
end
|
33
21
|
|
34
22
|
def destroy
|
35
|
-
|
23
|
+
@obj.destroy
|
36
24
|
render json: {}
|
37
25
|
end
|
38
26
|
|
27
|
+
def page_class_selection
|
28
|
+
thumbnails = {}
|
29
|
+
obj_classes = CmsRestApi.get("revisions/#{Workspace.current.revision_id}/obj_classes")
|
30
|
+
obj_classes['results'].each do |obj_class|
|
31
|
+
begin
|
32
|
+
name = obj_class['name']
|
33
|
+
thumbnails[name] = render_to_string("#{name.underscore}/thumbnail")
|
34
|
+
rescue ActionView::MissingTemplate
|
35
|
+
end
|
36
|
+
end
|
37
|
+
render json: thumbnails
|
38
|
+
end
|
39
|
+
|
39
40
|
def widget_class_selection
|
40
41
|
widgets = {}
|
41
42
|
Dir[Rails.root + 'app/widgets/*'].each do |widget_path|
|
@@ -53,7 +54,7 @@ module RailsConnector
|
|
53
54
|
}})
|
54
55
|
|
55
56
|
@widget = Obj.find(widget['id'])
|
56
|
-
@
|
57
|
+
@current_page = Obj.find(params[:current_page_id]) if params[:current_page_id].present?
|
57
58
|
|
58
59
|
render json: {markup: render_to_string(layout: false)}
|
59
60
|
end
|
@@ -64,25 +65,20 @@ module RailsConnector
|
|
64
65
|
@obj = Obj.find(params[:id])
|
65
66
|
end
|
66
67
|
|
67
|
-
def
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
68
|
+
def obj_params
|
69
|
+
params[:obj].tap do |p|
|
70
|
+
raise "Required parameter 'obj' is missing." unless p.present?
|
71
|
+
raise "Parameter 'obj' is not a hash." unless p.is_a?(Hash)
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
Configuration.editing_auth_callback.call(request.env)
|
78
|
-
end
|
73
|
+
if @obj
|
74
|
+
convert_html_keys = p.keys.select do |key|
|
75
|
+
@obj.type_of_attribute(key.to_s) == 'html'
|
76
|
+
end
|
79
77
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
request.body.rewind
|
85
|
-
params.merge!(ActiveSupport::JSON.decode(body)) if body.present?
|
78
|
+
convert_html_keys.each do |key|
|
79
|
+
p[key] = ContentConversion.convert_html_links(p[key], request.host, request.port)
|
80
|
+
end
|
81
|
+
end
|
86
82
|
end
|
87
83
|
end
|
88
84
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module RailsConnector
|
2
|
+
|
3
|
+
class WebserviceController < ActionController::Base
|
4
|
+
rescue_from ClientError do |exception|
|
5
|
+
render json: {error: exception.message}, status: exception.http_code
|
6
|
+
end
|
7
|
+
|
8
|
+
before_filter :merge_correctly_parsed_json_params
|
9
|
+
before_filter :authorize
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def authorize
|
14
|
+
unless allow_access?
|
15
|
+
render text: 'Forbidden', status: 403
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# If +true+, allow access to ObjsController, else deny access.
|
20
|
+
# See {RailsConnector::Configuration.editing_auth} for details.
|
21
|
+
# @return [Bool]
|
22
|
+
def allow_access?
|
23
|
+
Configuration.editing_auth_callback.call(request.env)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Workaround for https://github.com/rails/rails/issues/8832
|
27
|
+
def merge_correctly_parsed_json_params
|
28
|
+
if request.format.json?
|
29
|
+
body = request.body.read
|
30
|
+
request.body.rewind
|
31
|
+
params.merge!(ActiveSupport::JSON.decode(body)) if body.present?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module RailsConnector
|
2
|
+
|
3
|
+
class WorkspacesController < WebserviceController
|
4
|
+
def index
|
5
|
+
render json: CmsRestApi.get('workspaces')
|
6
|
+
end
|
7
|
+
|
8
|
+
def create
|
9
|
+
render json: CmsRestApi.post('workspaces', {workspace: workspace_params})
|
10
|
+
end
|
11
|
+
|
12
|
+
def update
|
13
|
+
render json: CmsRestApi.put("workspaces/#{params[:id]}", {workspace: workspace_params})
|
14
|
+
end
|
15
|
+
|
16
|
+
def destroy
|
17
|
+
render json: CmsRestApi.delete("workspaces/#{params[:id]}")
|
18
|
+
end
|
19
|
+
|
20
|
+
def publish
|
21
|
+
render json: CmsRestApi.put("workspaces/#{params[:id]}/publish", {})
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def workspace_params
|
27
|
+
raise "Required parameter 'workspace' is missing." unless params[:workspace].present?
|
28
|
+
raise "Parameter 'workspace' is not a hash." unless params[:workspace].is_a?(Hash)
|
29
|
+
params[:workspace]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module RailsConnector
|
2
|
+
|
3
|
+
# This module contains helpers that can be used to reference images and other assets stored in the CMS.
|
4
|
+
#
|
5
|
+
# @api public
|
6
|
+
module CmsAssetHelper
|
7
|
+
|
8
|
+
# Calculates an HTML image tag for an image stored in the CMS.
|
9
|
+
#
|
10
|
+
# @note There are two different signatures of this method: the first one generates an HTML image tag with no
|
11
|
+
# inplace editing possible, the second one generated an HTML image tag for inplace editing.
|
12
|
+
#
|
13
|
+
# @overload cms_image_tag target, tag_options={}
|
14
|
+
# @note If you do not specify an HTML +alt+ attribute, the helper method will use +target+'s +display_title+.
|
15
|
+
# Calculates HTML image tag (no inplace editing possible).
|
16
|
+
#
|
17
|
+
# @param [Obj, Link] target Target containing image stored in CMS.
|
18
|
+
# @param [Hash] tag_options Additional HTML attributes for the tag.
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
# cms_image_tag @target
|
22
|
+
# cms_image_tag @target, alt: 'Interesting picture', class: 'my_image'
|
23
|
+
#
|
24
|
+
# @overload cms_image_tag obj, linklist, tag_options={}, editing_options={}
|
25
|
+
# @note If you do not specify an HTML +alt+ attribute, the helper method will use +obj+'s +display_title+.
|
26
|
+
# Calculates HTML image tag for inplace editing.
|
27
|
+
#
|
28
|
+
# @param [Obj] obj Obj with an attribute of type {LinkList}.
|
29
|
+
# @param [String, Symbol] linklist Name of {LinkList} attribute, which contains the image.
|
30
|
+
# @param [Hash] tag_options Additional HTML attributes for the tag.
|
31
|
+
#
|
32
|
+
# @param [Hash] editing_options Additional options for inplace editing.
|
33
|
+
# @option editing_options [String] :placeholder ('/assets/rails_connector/image_placeholder.png') URL or path to image to be displayed if target is missing.
|
34
|
+
#
|
35
|
+
# @example
|
36
|
+
# cms_image_tag @obj, :my_linklist
|
37
|
+
# cms_image_tag @obj, :my_linklist, alt: 'Interesting picture', class: 'my_image'
|
38
|
+
# cms_image_tag @obj, :my_linklist, {}, placeholder: image_path('my_placeholder.png')
|
39
|
+
# cms_image_tag @obj, :my_linklist, {class: 'my_image'}, placeholder: 'http://placehold.it/350x150'
|
40
|
+
#
|
41
|
+
# @return [String] HTML image tag
|
42
|
+
# @api public
|
43
|
+
def cms_image_tag(*args)
|
44
|
+
if args.second.nil? || args.second.is_a?(Hash)
|
45
|
+
target = args.first
|
46
|
+
if target.is_a?(LinkList)
|
47
|
+
ActiveSupport::Deprecation.warn(%{
|
48
|
+
Calling "cms_image_tag" with a "LinkList" is not allowed anymore.
|
49
|
+
Please use following syntax instead: cms_image_tag(@obj, :linklist).
|
50
|
+
})
|
51
|
+
end
|
52
|
+
|
53
|
+
tag_options = args.second || {}
|
54
|
+
tag_options.symbolize_keys!
|
55
|
+
tag_options[:src] = cms_path(target)
|
56
|
+
tag_options[:alt] ||= display_title(target)
|
57
|
+
else
|
58
|
+
obj = args.first
|
59
|
+
attribute_name = args.second
|
60
|
+
target = obj[attribute_name]
|
61
|
+
tag_options = args.third || {}
|
62
|
+
editing_options = args.fourth || {}
|
63
|
+
|
64
|
+
tag_options.symbolize_keys!
|
65
|
+
editing_options.symbolize_keys!
|
66
|
+
|
67
|
+
tag_options[:src] ||= begin
|
68
|
+
target_path = cms_path(target)
|
69
|
+
if target_path == RailsConnector::DefaultCmsRoutingHelper::LINK_TO_EMPTY_LINKLIST
|
70
|
+
editing_options[:placeholder] || image_path('rails_connector/image_placeholder.png')
|
71
|
+
else
|
72
|
+
target_path
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
if inplace_editing_allowed?
|
77
|
+
tag_options.merge!(
|
78
|
+
'data-ip-resource-source-obj-id' => obj.id,
|
79
|
+
'data-ip-resource-source-field-name' => attribute_name
|
80
|
+
)
|
81
|
+
end
|
82
|
+
|
83
|
+
tag_options.reverse_merge!(alt: display_title(target))
|
84
|
+
end
|
85
|
+
|
86
|
+
tag('img', tag_options)
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def display_title(target)
|
92
|
+
if target.respond_to?(:display_title)
|
93
|
+
return target.display_title
|
94
|
+
elsif target.respond_to?(:first) && target.first.respond_to?(:display_title)
|
95
|
+
return target.first.display_title
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
@@ -13,7 +13,7 @@ module RailsConnector
|
|
13
13
|
# @param tag_name [String, Symbol] Name of the html tag (e.g. +:h1+ or +:div+).
|
14
14
|
# @param obj [Obj] A {Obj} from which attribute is read.
|
15
15
|
# @param attribute [String, Symbol] Which attribute of the Obj should be rendered.
|
16
|
-
# @param options [Hash] Additional options, which are passed to +content_tag+. Use them to add HTML
|
16
|
+
# @param options [Hash] Additional options, which are passed to +content_tag+. Use them to add HTML attributes to the tag.
|
17
17
|
# @return [String] The rendered html tag
|
18
18
|
#
|
19
19
|
# Example Usage:
|
@@ -21,14 +21,18 @@ module RailsConnector
|
|
21
21
|
# (renders an <h2> tag containing the text of the +headline+ attribute of +@obj+ and assigns the tag a css class called +very_important+.)
|
22
22
|
# @api public
|
23
23
|
def cms_tag(tag_name, obj, attribute, options = {})
|
24
|
-
|
24
|
+
begin
|
25
|
+
field_type = obj.type_of_attribute(attribute.to_s)
|
26
|
+
rescue RailsConnectorError => e
|
27
|
+
return content_tag(tag_name, '', options)
|
28
|
+
end
|
25
29
|
|
26
30
|
options = options.merge({
|
27
31
|
'data-ip-field-id' => obj.id,
|
28
32
|
'data-ip-field-obj-class' => obj.obj_class,
|
29
33
|
'data-ip-field-name' => attribute,
|
30
34
|
'data-ip-field-type' => field_type,
|
31
|
-
}) if
|
35
|
+
}) if inplace_editing_allowed?
|
32
36
|
|
33
37
|
if field_type == 'widget'
|
34
38
|
rendered_widgets = obj.widgets(attribute).map do |widget|
|
@@ -36,7 +40,7 @@ module RailsConnector
|
|
36
40
|
end
|
37
41
|
inner_html = safe_join(rendered_widgets)
|
38
42
|
else
|
39
|
-
if
|
43
|
+
if inplace_editing_allowed?
|
40
44
|
original_value = display_original_value(obj[attribute]) || ''
|
41
45
|
# Concate with empty string to disable html_safe:
|
42
46
|
options['data-ip-field-original-content'] = '' + original_value
|
@@ -47,15 +51,86 @@ module RailsConnector
|
|
47
51
|
content_tag(tag_name, inner_html, options)
|
48
52
|
end
|
49
53
|
|
50
|
-
|
51
|
-
|
54
|
+
class List
|
55
|
+
|
56
|
+
attr_reader :output
|
57
|
+
|
58
|
+
def initialize(template)
|
59
|
+
@template = template
|
60
|
+
end
|
61
|
+
|
62
|
+
# @param tag_name [String, Symbol] Name of the html tag (e.g. +:div+ or +:span+).
|
63
|
+
# @param options [Hash] Additional options, which are passed to +content_tag+. Use them to add HTML attributes to the tag.
|
64
|
+
# @return [String] The rendered html tag
|
65
|
+
#
|
66
|
+
# @example Render a <div> tag containing the text "random content" and assigns the tag a css class called +very_important+.
|
67
|
+
# <%= list.tag :div, class: "very_important" do %>
|
68
|
+
# random content
|
69
|
+
# <% end %>
|
70
|
+
def tag(tag_name, options = {}, &block)
|
71
|
+
if @output.present?
|
72
|
+
raise '"list.tag" can only be called once per iteration!'
|
73
|
+
else
|
74
|
+
@output = @template.content_tag(tag_name, options, &block) + "\n"
|
75
|
+
|
76
|
+
nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
# @param tag_name [String, Symbol] Name of the html tag (e.g. +:h1+ or +:div+).
|
83
|
+
# @param obj [Obj] A {Obj} from which method_name is read.
|
84
|
+
# @param method_name [String, Symbol] Which method_name of the Obj should be rendered. Currently only +toclist+ is supported
|
85
|
+
# @param options [Hash] Additional options, which are passed to +content_tag+. Use them to add HTML attributes to the tag.
|
86
|
+
# @yieldparam [List] list An instance, where +tag+ should be called once.
|
87
|
+
# @yieldparam [Obj] child Each child of +toclist+
|
88
|
+
# @return [String] The rendered html tag
|
89
|
+
#
|
90
|
+
# @example
|
91
|
+
# <%= cms_tag_list :div, @obj, :toclist, class: "very_important" do |list, child| %>
|
92
|
+
# <%= list.tag :div, class: "also_important" do %>
|
93
|
+
# <%= link_to cms_path(child) do %>
|
94
|
+
# <%= cms_tag :span, child, :title %>
|
95
|
+
# <% end %>
|
96
|
+
# <% end %>
|
97
|
+
# <% end %>
|
98
|
+
#
|
99
|
+
# # results for an obj with two children in
|
100
|
+
#
|
101
|
+
# <div class="very_important">
|
102
|
+
# <div class="also_important"><a href="/child1"><span>Child 1</span></a></div>
|
103
|
+
# <div class="also_important"><a href="/child2"><span>Child 2</span></a></div>
|
104
|
+
# </div>
|
105
|
+
def cms_tag_list(tag_name, obj, method_name, options = {})
|
106
|
+
if method_name.to_s == 'toclist'
|
107
|
+
items = obj.toclist
|
108
|
+
else
|
109
|
+
raise "#{method_name} is not (yet) supported. Currently only toclist is supported."
|
110
|
+
end
|
111
|
+
|
112
|
+
inner_html = "\n".html_safe
|
113
|
+
|
114
|
+
items.each do |item|
|
115
|
+
list = List.new(self)
|
116
|
+
|
117
|
+
yield list, item
|
118
|
+
|
119
|
+
inner_html << list.output
|
120
|
+
end
|
121
|
+
|
122
|
+
options = options.merge({
|
123
|
+
'data-ip-child-list-path' => obj.path,
|
124
|
+
}) if inplace_editing_allowed?
|
125
|
+
|
126
|
+
content_tag(tag_name, inner_html, options)
|
52
127
|
end
|
53
128
|
|
54
129
|
def render_widget(widget, obj, field_name, container)
|
55
130
|
options = {
|
56
131
|
'data-ip-widget-id' => widget.id,
|
57
132
|
'data-ip-widget-obj-class' => widget.obj_class,
|
58
|
-
} if
|
133
|
+
} if inplace_editing_allowed?
|
59
134
|
|
60
135
|
content_tag(:div, options || {}) do
|
61
136
|
WidgetRenderer.new(request).process('show', widget, obj, field_name, container)
|
@@ -2,8 +2,14 @@
|
|
2
2
|
<%= javascript_tag do %>
|
3
3
|
$(function() {
|
4
4
|
infopark.i18n.set_locale("<%= I18n.locale %>");
|
5
|
-
infopark.editing.
|
6
|
-
|
5
|
+
infopark.editing.set_workspace(
|
6
|
+
infopark.workspace.from_data({
|
7
|
+
id: "<%= escape_javascript(RailsConnector::Workspace.current.id).html_safe %>",
|
8
|
+
title: "<%= escape_javascript(RailsConnector::Workspace.current.title).html_safe %>"
|
9
|
+
})
|
10
|
+
);
|
11
|
+
infopark.obj.current_page_id = "<%= @obj.try(:id) %>";
|
7
12
|
infopark.admin_gui_base_url = "<%= RailsConnector::CmsRestApi.credentials[:url] %>";
|
13
|
+
infopark.editing.initialize();
|
8
14
|
});
|
9
15
|
<% end %>
|