scrivito_sdk 0.65.2 → 0.66.0.rc1
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/controllers/scrivito/binary_redirect_controller.rb +19 -0
- data/app/controllers/scrivito/objs_controller.rb +6 -2
- data/app/controllers/scrivito/webservice_controller.rb +1 -1
- data/app/controllers/scrivito/workspaces_controller.rb +1 -7
- data/app/helpers/scrivito_helper.rb +115 -64
- data/app/views/scrivito/objs/is_outdated.json.jbuilder +1 -0
- data/app/views/scrivito/ui/index.html.erb +1 -0
- data/config/ca-bundle.crt +1 -1
- data/config/precedence_routes.rb +6 -4
- data/config/routes.rb +1 -1
- data/lib/assets/images/scrivito/source_too_large.png +0 -0
- data/lib/assets/images/scrivito/source_type_invalid.png +0 -0
- data/lib/assets/javascripts/scrivito_ui.js +2975 -357
- data/lib/assets/stylesheets/scrivito_sdk.css +1 -3
- data/lib/assets/stylesheets/scrivito_ui.css +1 -3
- data/lib/generators/scrivito/install/templates/scrivito/migrate/install_scrivito_migration.rb +0 -2
- data/lib/generators/scrivito/migration/templates/migration.erb +6 -8
- data/lib/scrivito/attribute_content.rb +16 -52
- data/lib/scrivito/attribute_deserializer.rb +3 -5
- data/lib/scrivito/attribute_serializer.rb +42 -45
- data/lib/scrivito/backend/content_state_node.rb +71 -19
- data/lib/scrivito/backend/index.rb +20 -0
- data/lib/scrivito/backend/obj_data_cache.rb +157 -31
- data/lib/scrivito/backend/obj_data_from_rest.rb +1 -0
- data/lib/scrivito/backend/obj_load.rb +10 -6
- data/lib/scrivito/backend/obj_query.rb +2 -1
- data/lib/scrivito/backend/parent_path_index.rb +5 -1
- data/lib/scrivito/backend/path_index.rb +5 -1
- data/lib/scrivito/backend/permalink_index.rb +18 -10
- data/lib/scrivito/basic_obj.rb +62 -42
- data/lib/scrivito/basic_widget.rb +5 -5
- data/lib/scrivito/binary.rb +154 -13
- data/lib/scrivito/binary_param_verifier.rb +31 -0
- data/lib/scrivito/binary_rewrite.rb +35 -0
- data/lib/scrivito/cache_middleware.rb +5 -0
- data/lib/scrivito/child_list_tag.rb +3 -3
- data/lib/scrivito/cms_backend.rb +89 -57
- data/lib/scrivito/cms_data_cache.rb +21 -4
- data/lib/scrivito/cms_dispatch_controller.rb +13 -0
- data/lib/scrivito/cms_field_tag.rb +16 -3
- data/lib/scrivito/cms_rest_api.rb +2 -2
- data/lib/scrivito/cms_routing.rb +41 -18
- data/lib/scrivito/configuration.rb +22 -0
- data/lib/scrivito/content_state.rb +1 -9
- data/lib/scrivito/content_state_caching.rb +0 -20
- data/lib/scrivito/controller_actions.rb +3 -2
- data/lib/scrivito/controller_runtime.rb +16 -8
- data/lib/scrivito/dialog_size_helper.rb +11 -0
- data/lib/scrivito/diff.rb +0 -2
- data/lib/scrivito/editing_context.rb +24 -13
- data/lib/scrivito/editing_context_middleware.rb +6 -1
- data/lib/scrivito/errors.rb +18 -0
- data/lib/scrivito/image_tag.rb +55 -0
- data/lib/scrivito/link.rb +12 -0
- data/lib/scrivito/membership_collection.rb +3 -2
- data/lib/scrivito/migrations/cms_backend.rb +6 -13
- data/lib/scrivito/migrations/migrator.rb +2 -23
- data/lib/scrivito/migrations/workspace_lock.rb +23 -11
- data/lib/scrivito/named_link.rb +1 -1
- data/lib/scrivito/obj_collection.rb +1 -1
- data/lib/scrivito/obj_data_from_service.rb +0 -7
- data/lib/scrivito/obj_search_enumerator.rb +2 -2
- data/lib/scrivito/parent_path.rb +9 -0
- data/lib/scrivito/routing_helper.rb +2 -2
- data/lib/scrivito/user.rb +2 -2
- data/lib/scrivito/user_definition.rb +2 -2
- data/lib/scrivito/widget_garbage_collection.rb +2 -2
- data/lib/scrivito/widget_tag.rb +6 -3
- data/lib/scrivito/workspace.rb +60 -41
- data/lib/scrivito/workspace_data.rb +40 -4
- data/lib/scrivito/workspace_data_from_service.rb +0 -10
- data/lib/scrivito_sdk.rb +0 -16
- metadata +12 -12
- data/lib/scrivito/attribute.rb +0 -152
- data/lib/scrivito/attribute_collection.rb +0 -66
- data/lib/scrivito/attribute_definition_migrator.rb +0 -188
- data/lib/scrivito/cms_rest_api/legacy_attribute_serializer.rb +0 -105
- data/lib/scrivito/image_tag_helper.rb +0 -46
- data/lib/scrivito/obj_class.rb +0 -258
- data/lib/scrivito/obj_class_collection.rb +0 -71
- data/lib/scrivito/obj_class_data.rb +0 -37
- data/lib/tasks/migrate_attribute_definitions.rake +0 -6
@@ -27,17 +27,16 @@ module CmsDataCache
|
|
27
27
|
end
|
28
28
|
|
29
29
|
SCHEMA = {
|
30
|
-
workspace_data: 'workspace/#{workspace_id}',
|
31
|
-
|
32
30
|
# CONTENT SERVICE
|
33
31
|
content_state: 'content/#{content_state_id}',
|
34
32
|
obj_data: 'content/#{content_state_id}/obj/#{index}/#{key}',
|
35
|
-
|
33
|
+
workspace_data: 'workspace/#{workspace_id}',
|
36
34
|
|
37
35
|
# REST API
|
38
36
|
obj_data_rest: 'obj/#{cache_id}/#{index}/#{key}',
|
39
37
|
content_state_node: 'csn/#{content_state_id}',
|
40
|
-
|
38
|
+
workspace_state: 'wrkstt/#{workspace_id}',
|
39
|
+
tag_data: 'tagd/#{tag}'
|
41
40
|
}
|
42
41
|
|
43
42
|
SCHEMA.each do |name, schema|
|
@@ -59,6 +58,24 @@ module CmsDataCache
|
|
59
58
|
cache.write("#{schema}", data)
|
60
59
|
end
|
61
60
|
END
|
61
|
+
|
62
|
+
# for test purposes
|
63
|
+
class_eval(<<-END, __FILE__, __LINE__ + 1)
|
64
|
+
def evict_#{name}(#{params_code})
|
65
|
+
cache.write("#{schema}", nil)
|
66
|
+
end
|
67
|
+
END
|
68
|
+
end
|
69
|
+
|
70
|
+
def write_data_to_tag(data)
|
71
|
+
tag = Digest::SHA1.base64digest(Marshal::dump(data))
|
72
|
+
write_tag_data(tag, data)
|
73
|
+
|
74
|
+
tag
|
75
|
+
end
|
76
|
+
|
77
|
+
def read_data_from_tag(tag)
|
78
|
+
read_tag_data(tag)
|
62
79
|
end
|
63
80
|
|
64
81
|
private
|
@@ -17,6 +17,11 @@ module Scrivito
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
if obj_not_found? && editing_context.workspace_changed?
|
21
|
+
redirect_to scrivito_path(Obj.homepage)
|
22
|
+
return self.response
|
23
|
+
end
|
24
|
+
|
20
25
|
controller = target_controller(env)
|
21
26
|
env["action_dispatch.request.path_parameters"]["controller"] = controller.controller_path
|
22
27
|
|
@@ -35,6 +40,14 @@ module Scrivito
|
|
35
40
|
Rails.application.routes.url_helpers
|
36
41
|
end
|
37
42
|
|
43
|
+
def scrivito_engine
|
44
|
+
Scrivito::SdkEngine.routes.url_helpers
|
45
|
+
end
|
46
|
+
|
47
|
+
def editing_context
|
48
|
+
EditingContextMiddleware.from_request(request)
|
49
|
+
end
|
50
|
+
|
38
51
|
def target_controller(env)
|
39
52
|
return default_controller if obj_not_found?
|
40
53
|
controller = "#{loaded_obj.controller_name}Controller".constantize
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Scrivito
|
2
2
|
|
3
3
|
# this class is the server-side equivalent of the JavaScript class `cms_field_element`
|
4
|
-
class CmsFieldTag < Struct.new(:view, :tag_name, :obj_or_widget, :
|
4
|
+
class CmsFieldTag < Struct.new(:view, :tag_name, :obj_or_widget, :editing_options)
|
5
5
|
FIELD_TYPES_WITH_ORIGINAL_CONTENT = %w[
|
6
6
|
binary
|
7
7
|
date
|
@@ -11,7 +11,7 @@ class CmsFieldTag < Struct.new(:view, :tag_name, :obj_or_widget, :field_name, :w
|
|
11
11
|
reference
|
12
12
|
referencelist
|
13
13
|
string
|
14
|
-
|
14
|
+
stringlist
|
15
15
|
]
|
16
16
|
|
17
17
|
include TagRenderer
|
@@ -21,7 +21,7 @@ class CmsFieldTag < Struct.new(:view, :tag_name, :obj_or_widget, :field_name, :w
|
|
21
21
|
raise ArgumentError, 'No block allowed for widgetlist fields' if block_given?
|
22
22
|
modifications = modification_info || []
|
23
23
|
rendered_widgets = default_content.each_with_index.map do |widget, index|
|
24
|
-
WidgetTag.new(view, widget, modifications[index], widget_template_name).render
|
24
|
+
WidgetTag.new(view, widget, modifications[index], widget_template_name, inner_tag).render
|
25
25
|
end
|
26
26
|
view.safe_join(rendered_widgets)
|
27
27
|
else
|
@@ -59,6 +59,7 @@ class CmsFieldTag < Struct.new(:view, :tag_name, :obj_or_widget, :field_name, :w
|
|
59
59
|
end
|
60
60
|
|
61
61
|
if field_type == 'widgetlist'
|
62
|
+
options["private-field-widget-inner-tag"] = inner_tag
|
62
63
|
options['private-field-widget-allowed-classes'] = build_valid_widget_classes.to_json
|
63
64
|
options['private-field-widget-template'] = widget_template_name
|
64
65
|
end
|
@@ -83,6 +84,18 @@ class CmsFieldTag < Struct.new(:view, :tag_name, :obj_or_widget, :field_name, :w
|
|
83
84
|
end
|
84
85
|
end
|
85
86
|
|
87
|
+
def widget_template_name
|
88
|
+
editing_options[:widget_template_name]
|
89
|
+
end
|
90
|
+
|
91
|
+
def field_name
|
92
|
+
editing_options[:field_name]
|
93
|
+
end
|
94
|
+
|
95
|
+
def inner_tag
|
96
|
+
editing_options[:inner_tag] || WidgetTag::DEFAULT_TAG
|
97
|
+
end
|
98
|
+
|
86
99
|
def field_type
|
87
100
|
@field_type ||= obj_or_widget.type_of_attribute(field_name)
|
88
101
|
end
|
@@ -18,11 +18,11 @@ module Scrivito
|
|
18
18
|
#
|
19
19
|
# @example Specify a poll interval (in seconds; default: 2) to use in case the response
|
20
20
|
# is a task reference response and the final response is polled for:
|
21
|
-
# Scrivito::CmsRestApi.put('workspace/
|
21
|
+
# Scrivito::CmsRestApi.put('workspace/001384beff9e5845/publish', nil, :interval => 10)
|
22
22
|
#
|
23
23
|
# @example Return immediately with the first response (without polling in case it is a
|
24
24
|
# task reference response):
|
25
|
-
# Scrivito::CmsRestApi.task_unaware_request(:put, 'workspace/
|
25
|
+
# Scrivito::CmsRestApi.task_unaware_request(:put, 'workspace/001384beff9e5845/publish', nil)
|
26
26
|
#
|
27
27
|
class CmsRestApi
|
28
28
|
METHOD_TO_NET_HTTP_CLASS = {
|
data/lib/scrivito/cms_routing.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Scrivito
|
2
2
|
|
3
|
-
class CmsRouting < Struct.new(:request, :main_app)
|
3
|
+
class CmsRouting < Struct.new(:request, :main_app, :scrivito_engine, :image_options)
|
4
4
|
LINK_TO_EMPTY_LINKLIST = "#__empty_linklist"
|
5
5
|
LINK_TO_EMPTY_BLOB = "#__empty_blob"
|
6
6
|
|
@@ -9,8 +9,8 @@ class CmsRouting < Struct.new(:request, :main_app)
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def path_or_url(target, path_or_url, options = {})
|
12
|
-
if
|
13
|
-
|
12
|
+
if needs_editing_context?(target)
|
13
|
+
path_or_url_needs_editing_context(target, path_or_url, options)
|
14
14
|
else
|
15
15
|
path_or_url_without_editing_context(target, path_or_url, options)
|
16
16
|
end
|
@@ -31,7 +31,11 @@ class CmsRouting < Struct.new(:request, :main_app)
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
if editing_context.display_mode == 'editing'
|
35
|
+
id_path_or_url_for_objs(obj, :path, options)
|
36
|
+
else
|
37
|
+
path_or_url(obj, :path, options)
|
38
|
+
end
|
35
39
|
else
|
36
40
|
"#__target_object_not_reachable"
|
37
41
|
end
|
@@ -41,9 +45,9 @@ class CmsRouting < Struct.new(:request, :main_app)
|
|
41
45
|
|
42
46
|
private
|
43
47
|
|
44
|
-
def
|
48
|
+
def path_or_url_needs_editing_context(target, path_or_url, options)
|
45
49
|
path_or_url_without_editing_context(target, path_or_url,
|
46
|
-
|
50
|
+
options.merge(editing_context.to_params))
|
47
51
|
end
|
48
52
|
|
49
53
|
def path_or_url_without_editing_context(target, path_or_url, options)
|
@@ -58,33 +62,30 @@ class CmsRouting < Struct.new(:request, :main_app)
|
|
58
62
|
return LINK_TO_EMPTY_LINKLIST
|
59
63
|
end
|
60
64
|
elsif target.is_a?(Binary)
|
61
|
-
target
|
65
|
+
binary_url(target, path_or_url)
|
62
66
|
else
|
63
67
|
raise "scrivito_path or scrivito_url was called with an instance of #{target.class}. "+
|
64
68
|
"It must only be called with an Obj or a Link or a non-empty LinkList."
|
65
69
|
end
|
66
70
|
end
|
67
71
|
|
68
|
-
def path_or_url_for_links(link, path_or_url, options
|
72
|
+
def path_or_url_for_links(link, path_or_url, options)
|
69
73
|
url = basic_url_or_path_for_link(link, path_or_url,
|
70
|
-
|
74
|
+
Rack::Utils.parse_nested_query(link.query).merge(options))
|
71
75
|
url = url + "##{link.fragment}" if link.fragment.present?
|
72
76
|
url
|
73
77
|
end
|
74
78
|
|
75
|
-
def path_or_url_for_objs(obj, path_or_url, options
|
76
|
-
if editing_context.display_mode == "editing"
|
77
|
-
return id_path_or_url_for_objs(obj, path_or_url, options)
|
78
|
-
end
|
79
|
-
|
79
|
+
def path_or_url_for_objs(obj, path_or_url, options)
|
80
80
|
permalink = obj.permalink
|
81
81
|
if permalink
|
82
|
-
main_app
|
82
|
+
main_app
|
83
|
+
.public_send("scrivito_permalink_#{path_or_url}", options.merge(:permalink => permalink))
|
83
84
|
elsif obj.homepage?
|
84
85
|
main_app.public_send("scrivito_root_#{path_or_url}", options)
|
85
86
|
elsif obj.binary?
|
86
|
-
if obj.
|
87
|
-
|
87
|
+
if binary = obj.binary
|
88
|
+
binary_url(binary, path_or_url)
|
88
89
|
else
|
89
90
|
LINK_TO_EMPTY_BLOB
|
90
91
|
end
|
@@ -112,7 +113,7 @@ class CmsRouting < Struct.new(:request, :main_app)
|
|
112
113
|
EditingContextMiddleware.from_request(request)
|
113
114
|
end
|
114
115
|
|
115
|
-
def
|
116
|
+
def needs_editing_context?(target)
|
116
117
|
editor_authenticated? && (!target.is_a?(Link) || target.internal?)
|
117
118
|
end
|
118
119
|
|
@@ -139,6 +140,28 @@ class CmsRouting < Struct.new(:request, :main_app)
|
|
139
140
|
def extract_query(uri)
|
140
141
|
Rack::Utils.parse_query(uri.query)
|
141
142
|
end
|
143
|
+
|
144
|
+
def binary_url(binary, path_or_url)
|
145
|
+
binary = transform_binary(binary)
|
146
|
+
if url_from_cache = binary.url_from_cache
|
147
|
+
BinaryRewrite.call(request, url_from_cache)
|
148
|
+
else
|
149
|
+
encrypted_params = BinaryParamVerifier.generate(binary)
|
150
|
+
scrivito_engine.public_send("binary_#{path_or_url}", encrypted_params: encrypted_params)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def transform_binary(binary)
|
155
|
+
if transformation_definition = image_options[:transform]
|
156
|
+
binary.transform(transformation_definition)
|
157
|
+
else
|
158
|
+
binary
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def image_options
|
163
|
+
super || {}
|
164
|
+
end
|
142
165
|
end
|
143
166
|
|
144
167
|
end
|
@@ -207,6 +207,7 @@ module Scrivito
|
|
207
207
|
self.endpoint = 'api.scrivito.com'
|
208
208
|
self.check_batch_size = 100
|
209
209
|
self.legacy_routing = false
|
210
|
+
self.default_image_transformation = {}
|
210
211
|
end
|
211
212
|
|
212
213
|
#
|
@@ -234,6 +235,27 @@ module Scrivito
|
|
234
235
|
|
235
236
|
attr_accessor :choose_homepage_callback, :check_batch_size
|
236
237
|
|
238
|
+
#
|
239
|
+
# Set the default {Scrivito::Binary#transform image transformation}.
|
240
|
+
#
|
241
|
+
# @api beta
|
242
|
+
#
|
243
|
+
# When delivering binary Objs, the default image transformation will be applied if
|
244
|
+
# {Scrivito::BasicObj#apply_image_transformation? Obj#apply_image_transformation?} returns
|
245
|
+
# +true+.
|
246
|
+
#
|
247
|
+
# If not changed the default image transformation is an empty transformation (an empty +Hash+).
|
248
|
+
# Set it to +false+ to disabled the default image transformation completely.
|
249
|
+
#
|
250
|
+
# @param [Hash] value the {Scrivito::Binary#transform transformation definition}
|
251
|
+
#
|
252
|
+
# @see Scrivito::Binary#transform
|
253
|
+
# @see Scrivito::BasicObj#apply_image_transformation?
|
254
|
+
#
|
255
|
+
attr_writer :default_image_transformation
|
256
|
+
|
257
|
+
attr_reader :default_image_transformation
|
258
|
+
|
237
259
|
# Configure a callback to be invoked when the Scrivito SDK delivers the homepage.
|
238
260
|
# The given callback will receive the rack env
|
239
261
|
# and must return an {BasicObj Obj} to be used as the homepage.
|
@@ -48,14 +48,6 @@ class ContentState < Struct.new(:content_state_id, :changes, :changes_index, :fr
|
|
48
48
|
CmsDataCache.read_obj_data(content_state_id, index, key)
|
49
49
|
end
|
50
50
|
|
51
|
-
def save_obj_classes_data(data)
|
52
|
-
CmsDataCache.write_obj_classes_data(content_state_id, data)
|
53
|
-
end
|
54
|
-
|
55
|
-
def find_obj_classes_data
|
56
|
-
CmsDataCache.read_obj_classes_data(content_state_id)
|
57
|
-
end
|
58
|
-
|
59
51
|
# Fetches and caches the ancestor.
|
60
52
|
# Returns nil if there is no ancestor.
|
61
53
|
def from_content_state
|
@@ -82,7 +74,7 @@ class ContentState < Struct.new(:content_state_id, :changes, :changes_index, :fr
|
|
82
74
|
id_index.add(hash['id'])
|
83
75
|
if path = hash['modified_path']
|
84
76
|
path_index.add(path)
|
85
|
-
ppath_index.add(
|
77
|
+
ppath_index.add(ParentPath.of(path)) if path != '/'
|
86
78
|
end
|
87
79
|
end
|
88
80
|
end
|
@@ -38,26 +38,6 @@ module ContentStateCaching
|
|
38
38
|
nil
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
42
|
-
def store_obj_classes_data(content_state, data)
|
43
|
-
content_state.save_obj_classes_data(data)
|
44
|
-
end
|
45
|
-
|
46
|
-
def find_obj_classes_data(current_content_state)
|
47
|
-
visitor = ContentStateVisitor.new(current_content_state)
|
48
|
-
|
49
|
-
cache_lookup_depth.times do |depth|
|
50
|
-
return unless content_state = visitor.visit_next
|
51
|
-
if obj_classes_data = content_state.find_obj_classes_data
|
52
|
-
if depth >= cache_replication_depth
|
53
|
-
current_content_state.save_obj_classes_data(obj_classes_data)
|
54
|
-
end
|
55
|
-
return obj_classes_data
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
nil
|
60
|
-
end
|
61
41
|
end
|
62
42
|
|
63
43
|
self.cache_replication_depth = 5
|
@@ -39,7 +39,8 @@ module ControllerActions
|
|
39
39
|
|
40
40
|
def show_widget
|
41
41
|
widget = load_widget
|
42
|
-
widget_tag = Scrivito::WidgetTag.new(view_context, widget, nil,
|
42
|
+
widget_tag = Scrivito::WidgetTag.new(view_context, widget, nil,
|
43
|
+
params[:template_name], params[:inner_tag])
|
43
44
|
render text: widget_tag.render, layout: false
|
44
45
|
end
|
45
46
|
|
@@ -71,7 +72,7 @@ module ControllerActions
|
|
71
72
|
# This method indicates if this controller should be used automatically when an +Obj+ is
|
72
73
|
# requested via the SDK's standard routes. It returns +true+ by default.
|
73
74
|
#
|
74
|
-
#
|
75
|
+
# Override it to return +false+ if you do want your controller to be excluded from +Obj+
|
75
76
|
# dispatching.
|
76
77
|
#
|
77
78
|
# @api public
|
@@ -7,28 +7,36 @@ module ControllerRuntime
|
|
7
7
|
|
8
8
|
protected
|
9
9
|
|
10
|
-
attr_internal :
|
10
|
+
attr_internal :scrivito_runtime
|
11
11
|
|
12
12
|
def cleanup_view_runtime
|
13
|
-
|
13
|
+
self.scrivito_runtime = reset_scrivito_runtime
|
14
|
+
|
14
15
|
runtime = super
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
|
17
|
+
scrivito_rt_after_render = reset_scrivito_runtime
|
18
|
+
self.scrivito_runtime += scrivito_rt_after_render
|
19
|
+
|
20
|
+
runtime - scrivito_rt_after_render
|
18
21
|
end
|
19
22
|
|
20
23
|
def append_info_to_payload(payload)
|
21
24
|
super
|
22
|
-
payload[:
|
25
|
+
payload[:scrivito_runtime] =
|
26
|
+
(self.scrivito_runtime || 0) + reset_scrivito_runtime
|
23
27
|
end
|
24
28
|
|
25
29
|
module ClassMethods
|
26
30
|
def log_process_action(payload)
|
27
|
-
messages,
|
28
|
-
messages << ("Scrivito: %.1fms" %
|
31
|
+
messages, scrivito_runtime = super, payload[:scrivito_runtime]
|
32
|
+
messages << ("Scrivito: %.1fms" % scrivito_runtime.to_f)
|
29
33
|
messages
|
30
34
|
end
|
31
35
|
end
|
36
|
+
|
37
|
+
def reset_scrivito_runtime
|
38
|
+
Scrivito::LogSubscriber.reset_runtime
|
39
|
+
end
|
32
40
|
end
|
33
41
|
|
34
42
|
end # module Scrivito
|
data/lib/scrivito/diff.rb
CHANGED
@@ -5,11 +5,13 @@ class EditingContext
|
|
5
5
|
# +:selected_workspace_id+: The id of the selected workspace. If empty +published+ workspace is used.
|
6
6
|
# +:display_mode+: Can be +view+, +editing+, +added+ or +deleted+. If empty +view+ is used.
|
7
7
|
# +:editor+: A block, which is lazy evaluated on first access, to determine the editor (details see {Scrivito::Configuration.editing_auth})
|
8
|
+
# +:workspace_changed+: A boolean, determining if the workspace has been changed with this request.
|
8
9
|
# @param [Hash] options
|
9
10
|
def initialize(options = {})
|
10
11
|
@selected_workspace_id = options[:selected_workspace_id]
|
11
12
|
@display_mode = options[:display_mode] || "view"
|
12
13
|
@editor_callback = options[:editor] || proc { false }
|
14
|
+
@workspace_changed = !!options[:workspace_changed]
|
13
15
|
end
|
14
16
|
|
15
17
|
def editor
|
@@ -34,6 +36,10 @@ class EditingContext
|
|
34
36
|
editor.present?
|
35
37
|
end
|
36
38
|
|
39
|
+
def workspace_changed?
|
40
|
+
@workspace_changed
|
41
|
+
end
|
42
|
+
|
37
43
|
# @return [String]
|
38
44
|
def display_mode
|
39
45
|
if authenticated_editor? && !selected_workspace.published?
|
@@ -80,31 +86,36 @@ class EditingContext
|
|
80
86
|
|
81
87
|
def find_selected_workspace
|
82
88
|
if @selected_workspace_id
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
+
workspace =
|
90
|
+
begin
|
91
|
+
Workspace.find(@selected_workspace_id)
|
92
|
+
rescue
|
93
|
+
Rails.logger.info "Workspace with ID #{@selected_workspace_id} is " +
|
94
|
+
"not available, using 'published' instead."
|
95
|
+
|
96
|
+
published_workspace
|
89
97
|
end
|
90
|
-
|
91
|
-
|
98
|
+
|
99
|
+
if editor && editor.can?(:read, workspace)
|
100
|
+
workspace
|
101
|
+
else
|
102
|
+
published_workspace
|
92
103
|
end
|
93
104
|
else
|
94
|
-
|
105
|
+
published_workspace
|
95
106
|
end
|
96
107
|
end
|
97
108
|
|
98
109
|
def find_visible_workspace
|
99
110
|
if authenticated_editor?
|
100
|
-
display_mode == 'deleted' ?
|
111
|
+
display_mode == 'deleted' ? published_workspace : selected_workspace
|
101
112
|
else
|
102
|
-
|
113
|
+
published_workspace
|
103
114
|
end
|
104
115
|
end
|
105
116
|
|
106
|
-
def
|
107
|
-
Workspace.
|
117
|
+
def published_workspace
|
118
|
+
Workspace.published
|
108
119
|
end
|
109
120
|
|
110
121
|
# @return [Revision] or +nil+
|