infopark_fiona7 0.70.0.3 → 0.71.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/fiona7_ui.js +5 -112
- data/app/assets/javascripts/scrivito_patches/models/blob.js +29 -0
- data/app/assets/javascripts/scrivito_patches/models/obj.js +369 -0
- data/app/controllers/fiona7/release_controller.rb +23 -2
- data/app/controllers/scrivito/cms_dispatch_controller.rb +1 -1
- data/app/controllers/scrivito/objs_controller.rb +4 -0
- data/infopark_fiona7.gemspec +1 -1
- data/lib/fiona7/builder/obj_builder.rb +6 -2
- data/lib/fiona7/builder/obj_class_builder.rb +33 -0
- data/lib/fiona7/controllers/content_service/obj_controller.rb +1 -0
- data/lib/fiona7/controllers/rest_api/workspace_controller.rb +1 -0
- data/lib/fiona7/json/obj_decorator.rb +10 -2
- data/lib/fiona7/naive_search_engine.rb +5 -1
- data/lib/fiona7/scrivito_patches/attribute_content.rb +15 -1
- data/lib/fiona7/scrivito_patches/attribute_serializer.rb +1 -0
- data/lib/fiona7/scrivito_patches/basic_obj.rb +9 -5
- data/lib/fiona7/scrivito_patches/binary.rb +25 -11
- data/lib/fiona7/scrivito_patches/cms_rest_api.rb +3 -2
- data/lib/fiona7/scrivito_patches/type_computer.rb +2 -0
- data/lib/fiona7/scrivito_patches/workspace.rb +10 -0
- data/lib/fiona7/shadow_classes.rb +6 -2
- data/lib/fiona7/type_loader.rb +1 -1
- data/lib/fiona7/type_register.rb +28 -3
- data/lib/fiona7/type_synchronizer.rb +1 -1
- data/lib/fiona7/version.rb +1 -1
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b01a9b4b8f32420a4dbc9a71b7715e4b435064fe
|
4
|
+
data.tar.gz: 52cd4e1ead233d6687abea23efc30c8356a34fcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43a8472b368e2b0c97215dc78a9695b3b163b20fbda466b5be8661bbbe1ee245ad265b475758c78b1595d43964c34f9d450e4d1faf42272bd33b0e439f973b03
|
7
|
+
data.tar.gz: 7f7076b7cc9d09f4fb082b9a19776ceb98132c78c1d425cc17e021091f229056aee960cf222604ee97895e4ea390f2598e4c85bd36b66f1b5a8be7f5a465f9e4
|
@@ -1,114 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
var _ = window._;
|
5
|
-
var $ = window.$;
|
6
|
-
|
7
|
-
var format_date = function(date) {
|
8
|
-
return date.getUTCFullYear().toString() +
|
9
|
-
format_date_number(date.getUTCMonth() + 1) + // Month numbers are starting at 0.
|
10
|
-
format_date_number(date.getUTCDate()) +
|
11
|
-
format_date_number(date.getUTCHours()) +
|
12
|
-
format_date_number(date.getUTCMinutes()) +
|
13
|
-
format_date_number(date.getUTCSeconds());
|
14
|
-
};
|
15
|
-
|
16
|
-
var format_date_number = function(number) {
|
17
|
-
var string = number.toString();
|
18
|
-
return string.length === 1 ? '0' + string : string;
|
19
|
-
};
|
20
|
-
|
21
|
-
var convert_attributes = function(data) {
|
22
|
-
var collected_promises = _.map(data, function(value, field_name) {
|
23
|
-
if (value instanceof Date) {
|
24
|
-
return $.Deferred().resolve([field_name, format_date(value)]);
|
25
|
-
} else if (value instanceof window.File) {
|
26
|
-
return $.Deferred().resolve([field_name, value]);
|
27
|
-
return scrivito.blob.create(value).then(function(value) {
|
28
|
-
return [field_name, value];
|
29
|
-
});
|
30
|
-
} else {
|
31
|
-
return $.Deferred().resolve([field_name, value]);
|
32
|
-
}
|
33
|
-
});
|
34
|
-
|
35
|
-
return $.when.apply(this, collected_promises).then(function() {
|
36
|
-
return _.object(arguments);
|
37
|
-
});
|
38
|
-
};
|
39
|
-
|
40
|
-
var convert_widget_pool = function(widget_pool) {
|
41
|
-
if(widget_pool) {
|
42
|
-
var conversion_promises = _.map(widget_pool, function(attributes, widget_id) {
|
43
|
-
return convert_attributes(attributes).then(function(attributes) {
|
44
|
-
return [widget_id, attributes];
|
45
|
-
});
|
46
|
-
});
|
47
|
-
|
48
|
-
return $.when.apply(this, conversion_promises).then(function() {
|
49
|
-
return _.object(arguments);
|
50
|
-
});
|
51
|
-
} else {
|
52
|
-
return $.Deferred().resolve(widget_pool);
|
53
|
-
}
|
54
|
-
};
|
55
|
-
|
56
|
-
var prepare_attributes = function(data) {
|
57
|
-
return convert_widget_pool(data._widget_pool).then(function(widget_pool) {
|
58
|
-
return convert_attributes(data).then(function(attributes) {
|
59
|
-
attributes._widget_pool = widget_pool;
|
60
|
-
return attributes;
|
61
|
-
});
|
62
|
-
});
|
63
|
-
};
|
64
|
-
|
65
|
-
scrivito.obj.create_original = scrivito.obj.create;
|
66
|
-
scrivito.obj.create = function (data) {
|
67
|
-
var blob;
|
68
|
-
|
69
|
-
if (data['blob']) {
|
70
|
-
blob = data['blob'];
|
71
|
-
delete data['blob'];
|
72
|
-
}
|
73
|
-
return prepare_attributes(data).then(function(attributes) {
|
74
|
-
var fd, defer, url, base_url = window.location.protocol + '//' + window.location.host + '/__scrivito/';
|
75
|
-
url = base_url + 'objs';
|
76
|
-
|
77
|
-
fd = new FormData();
|
78
|
-
|
79
|
-
$.each(attributes, function (key, value) {
|
80
|
-
if (typeof value !== 'undefined') {
|
81
|
-
fd.append('obj[' + key + ']', value);
|
82
|
-
}
|
83
|
-
});
|
84
|
-
|
85
|
-
if (typeof blob !== 'undefined') {
|
86
|
-
fd.append('obj[blob]', blob);
|
87
|
-
}
|
88
|
-
|
89
|
-
defer = $.Deferred();
|
90
|
-
|
91
|
-
$.ajax({
|
92
|
-
url: url,
|
93
|
-
type: 'POST',
|
94
|
-
data: fd,
|
95
|
-
processData: false,
|
96
|
-
contentType: false
|
97
|
-
})
|
98
|
-
.error(function (xhr, text, error) {
|
99
|
-
scrivito.alert(text);
|
100
|
-
defer.reject(text);
|
101
|
-
})
|
102
|
-
.success(function (new_data) {
|
103
|
-
defer.resolve(scrivito.obj.create_instance(new_data));
|
104
|
-
});
|
105
|
-
|
106
|
-
return defer.promise();
|
107
|
-
});
|
108
|
-
};
|
109
|
-
|
110
|
-
}());
|
111
|
-
|
1
|
+
//= require scrivito_patches/models/blob
|
2
|
+
//= require scrivito_patches/models/obj
|
3
|
+
//= require_self
|
112
4
|
|
113
5
|
(function() {
|
114
6
|
var scrivito = window.scrivito;
|
@@ -256,6 +148,7 @@
|
|
256
148
|
actions = ["release"];
|
257
149
|
|
258
150
|
scrivito.gui.on('document', function(cms_document) {
|
151
|
+
console.log('adding release button');
|
259
152
|
var obj = cms_document.page();
|
260
153
|
|
261
154
|
_.each(actions, function(action,idx) {
|
@@ -295,7 +188,7 @@
|
|
295
188
|
menu.push(scrivito.command_separator.create_instance({id: 'fiona7.zz_sparator'}));
|
296
189
|
cms_document.set_menu(menu);
|
297
190
|
|
298
|
-
scrivito.configure_menu_order(['fiona7.*', '*']);
|
191
|
+
//scrivito.configure_menu_order(['fiona7.*', '*']);
|
299
192
|
});
|
300
193
|
|
301
194
|
return;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
(function() {
|
2
|
+
_.extend(scrivito, {
|
3
|
+
blob: {
|
4
|
+
create: function(obj_id, binary) {
|
5
|
+
var uploaded_binary = binary.is_uploaded_binary ? binary : scrivito.blob.upload_binary(binary);
|
6
|
+
return $.Deferred().resolve(uploaded_binary);
|
7
|
+
},
|
8
|
+
|
9
|
+
// For testing purpose only.
|
10
|
+
get_form_data: function() {
|
11
|
+
return new FormData();
|
12
|
+
},
|
13
|
+
|
14
|
+
upload_binary: function(params) {
|
15
|
+
var blob = params.blob || params.file;
|
16
|
+
if (!blob) { $.error('need blob or file'); }
|
17
|
+
if (!params.content_type) { params.content_type = blob.type; }
|
18
|
+
if (!params.filename) {
|
19
|
+
if (params.blob) { $.error('blob needs a filename'); }
|
20
|
+
params.filename = blob.name;
|
21
|
+
}
|
22
|
+
params.filename = params.filename.replace(/[^\w\-_\.$]/g, '-');
|
23
|
+
|
24
|
+
return $.extend(params, {is_uploaded_binary: true});
|
25
|
+
}
|
26
|
+
}
|
27
|
+
});
|
28
|
+
|
29
|
+
}());
|
@@ -0,0 +1,369 @@
|
|
1
|
+
(function() {
|
2
|
+
_.extend(scrivito, {
|
3
|
+
obj: {
|
4
|
+
serialize_value: function(value) {
|
5
|
+
if (_.isDate(value)) {
|
6
|
+
return serialize_date(value);
|
7
|
+
} else {
|
8
|
+
return value;
|
9
|
+
}
|
10
|
+
},
|
11
|
+
|
12
|
+
create_instance: function(params) {
|
13
|
+
var that = {
|
14
|
+
id: function() {
|
15
|
+
return params.id;
|
16
|
+
},
|
17
|
+
|
18
|
+
obj_class: function() {
|
19
|
+
return params.obj_class;
|
20
|
+
},
|
21
|
+
|
22
|
+
description_for_editor: function() {
|
23
|
+
return params.description_for_editor;
|
24
|
+
},
|
25
|
+
|
26
|
+
modification: function() {
|
27
|
+
return params.modification;
|
28
|
+
},
|
29
|
+
|
30
|
+
is_new: function() {
|
31
|
+
return that.modification() === 'new';
|
32
|
+
},
|
33
|
+
|
34
|
+
is_edited: function() {
|
35
|
+
return that.modification() === 'edited';
|
36
|
+
},
|
37
|
+
|
38
|
+
is_deleted: function() {
|
39
|
+
return that.modification() === 'deleted';
|
40
|
+
},
|
41
|
+
|
42
|
+
has_children: function() {
|
43
|
+
return !!params.has_children;
|
44
|
+
},
|
45
|
+
|
46
|
+
has_conflict: function() {
|
47
|
+
return !!params.has_conflict;
|
48
|
+
},
|
49
|
+
|
50
|
+
has_restriction : function() {
|
51
|
+
return that.restriction_messages().length > 0;
|
52
|
+
},
|
53
|
+
|
54
|
+
restriction_messages: function() {
|
55
|
+
return params.restriction_messages || [];
|
56
|
+
},
|
57
|
+
|
58
|
+
is_binary: function() {
|
59
|
+
return !!params.is_binary;
|
60
|
+
},
|
61
|
+
|
62
|
+
has_details_view: function() {
|
63
|
+
return !!params.has_details_view;
|
64
|
+
},
|
65
|
+
|
66
|
+
tooltip: function() {
|
67
|
+
if (editing_state()) {
|
68
|
+
return scrivito.t('obj.tooltip.' + editing_state());
|
69
|
+
}
|
70
|
+
},
|
71
|
+
|
72
|
+
last_changed: function() {
|
73
|
+
return params.last_changed;
|
74
|
+
},
|
75
|
+
|
76
|
+
parent_path: function() {
|
77
|
+
return params.parent_path;
|
78
|
+
},
|
79
|
+
|
80
|
+
save: function(attrs) {
|
81
|
+
return prepare_attrs(that.id(), attrs).then(function(prepared_attrs) {
|
82
|
+
return persist_obj_data(prepared_attrs, that.id());
|
83
|
+
});
|
84
|
+
},
|
85
|
+
|
86
|
+
destroy: function() {
|
87
|
+
return scrivito.ajax('DELETE', 'objs/' + that.id()).then(function(result) {
|
88
|
+
return result.redirect_to;
|
89
|
+
});
|
90
|
+
},
|
91
|
+
|
92
|
+
destroy_widget: function(widget_id) {
|
93
|
+
return scrivito.ajax('PUT',
|
94
|
+
'objs/' + that.id() + '/destroy_widget?widget_id=' + widget_id);
|
95
|
+
},
|
96
|
+
|
97
|
+
revert: function() {
|
98
|
+
return scrivito.ajax('PUT', 'objs/' + that.id() + '/revert');
|
99
|
+
},
|
100
|
+
|
101
|
+
revert_widget: function(widget_id) {
|
102
|
+
return scrivito.ajax('PUT', 'objs/'+that.id()+'/revert_widget?widget_id='+widget_id);
|
103
|
+
},
|
104
|
+
|
105
|
+
conflicting_workspaces: function() {
|
106
|
+
return scrivito.ajax('GET', 'objs/' + that.id() + '/conflicting_workspaces').then(
|
107
|
+
function(workspace_datas) {
|
108
|
+
return scrivito.workspace.from_data_collection(workspace_datas);
|
109
|
+
});
|
110
|
+
},
|
111
|
+
|
112
|
+
is_outdated: function() {
|
113
|
+
return scrivito.ajax('GET', 'objs/' + that.id() + '/is_outdated').then(
|
114
|
+
function(result) { return result.is_outdated; });
|
115
|
+
},
|
116
|
+
|
117
|
+
restore: function() {
|
118
|
+
return scrivito.ajax('PUT', 'objs/' + that.id() + '/restore');
|
119
|
+
},
|
120
|
+
|
121
|
+
restore_widget: function(widget_id) {
|
122
|
+
return scrivito.ajax('PUT', 'objs/'+that.id()+'/restore_widget?widget_id='+widget_id);
|
123
|
+
},
|
124
|
+
|
125
|
+
details_src: function() {
|
126
|
+
// TODO unify with ajax url generation
|
127
|
+
return '/__scrivito/page_details/' + that.id();
|
128
|
+
},
|
129
|
+
|
130
|
+
mark_resolved: function() {
|
131
|
+
return scrivito.ajax('PUT', 'objs/' + that.id() + '/mark_resolved');
|
132
|
+
},
|
133
|
+
|
134
|
+
copy_to: function(path) {
|
135
|
+
var attrs = {data: {parent_path: path}};
|
136
|
+
return scrivito.ajax('POST', 'objs/'+that.id()+'/copy', attrs).then(function(data) {
|
137
|
+
return scrivito.obj.create_instance(data);
|
138
|
+
});
|
139
|
+
},
|
140
|
+
|
141
|
+
duplicate: function() {
|
142
|
+
return scrivito.ajax('POST', 'objs/'+that.id()+'/duplicate').then(function(data) {
|
143
|
+
return scrivito.obj.create_instance(data);
|
144
|
+
});
|
145
|
+
},
|
146
|
+
|
147
|
+
transfer_modifications_to: function(workspace_id) {
|
148
|
+
return scrivito.ajax('PUT', 'objs/'+that.id()+'/transfer_modifications',
|
149
|
+
{data: {workspace_id: workspace_id}});
|
150
|
+
},
|
151
|
+
|
152
|
+
reload: function() {
|
153
|
+
return scrivito.ajax('GET', 'objs/'+that.id()).then(function(data) {
|
154
|
+
params.has_conflict = data.has_conflict;
|
155
|
+
params.modification = data.modification;
|
156
|
+
});
|
157
|
+
},
|
158
|
+
|
159
|
+
reload_widget: function(widget_id) {
|
160
|
+
return scrivito.ajax('GET', 'objs/'+that.id()+'/widget?widget_id='+widget_id);
|
161
|
+
}
|
162
|
+
};
|
163
|
+
|
164
|
+
var editing_state = function() {
|
165
|
+
if (that.is_new()) {
|
166
|
+
return 'is_new';
|
167
|
+
}
|
168
|
+
|
169
|
+
if (that.is_edited()) {
|
170
|
+
return 'is_edited';
|
171
|
+
}
|
172
|
+
|
173
|
+
if (that.is_deleted()) {
|
174
|
+
return 'is_deleted';
|
175
|
+
}
|
176
|
+
};
|
177
|
+
|
178
|
+
return that;
|
179
|
+
},
|
180
|
+
|
181
|
+
fetch_class_selection: function(path, params) {
|
182
|
+
if (params) { path += '?'+$.param(params); }
|
183
|
+
return scrivito.ajax('GET', path).then(function(selection) {
|
184
|
+
var names = _.pluck(selection, 'name');
|
185
|
+
var recent = scrivito.obj_class_selection.recent(names);
|
186
|
+
var popular = _.intersection(scrivito.popular_obj_classes, names);
|
187
|
+
return {
|
188
|
+
all: _.sortBy(selection, 'name'),
|
189
|
+
recent: _.map(recent, function(name) { return _.findWhere(selection, {name: name}); }),
|
190
|
+
popular: _.map(popular, function(name) { return _.findWhere(selection, {name: name}); })
|
191
|
+
};
|
192
|
+
});
|
193
|
+
},
|
194
|
+
|
195
|
+
fetch_page_class_selection: function(params) {
|
196
|
+
return scrivito.obj.fetch_class_selection('objs/page_class_selection', params);
|
197
|
+
},
|
198
|
+
|
199
|
+
create: function(attrs) {
|
200
|
+
return prepare_attrs(scrivito.random_id(), attrs).then(function(prepared_attrs) {
|
201
|
+
return persist_obj_data(prepared_attrs).then(function (data) {
|
202
|
+
scrivito.obj_class_selection.store(prepared_attrs._obj_class);
|
203
|
+
return scrivito.obj.create_instance(data);
|
204
|
+
});
|
205
|
+
});
|
206
|
+
},
|
207
|
+
|
208
|
+
transfer_modifications: function(objs, workspace_id) {
|
209
|
+
return $.when.apply(null, _.map(objs, function(obj) {
|
210
|
+
return obj.transfer_modifications_to(workspace_id).then(function(result) {
|
211
|
+
if (result.status !== 'success') { return {obj: obj, reason: result.reason}; }
|
212
|
+
});
|
213
|
+
})).then(function() { return $.Deferred().resolve(_.compact(arguments)); });
|
214
|
+
}
|
215
|
+
}
|
216
|
+
});
|
217
|
+
|
218
|
+
var obj_url = function (obj_id) {
|
219
|
+
var url = window.location.protocol + '//' + window.location.host + '/__scrivito/objs';
|
220
|
+
if (typeof obj_id !== 'undefined') {
|
221
|
+
url = url + "/" + obj_id;
|
222
|
+
}
|
223
|
+
return url;
|
224
|
+
};
|
225
|
+
|
226
|
+
var persist_obj_data = function (attributes, obj_id) {
|
227
|
+
var has_binary=false;
|
228
|
+
var fd, defer, url, type;
|
229
|
+
|
230
|
+
$.each(attributes, function (key, value) {
|
231
|
+
if (value && value.is_uploaded_binary) {
|
232
|
+
has_binary=true;
|
233
|
+
} else if (instance_of_anywhere(value, 'File')) {
|
234
|
+
has_binary=true
|
235
|
+
}
|
236
|
+
});
|
237
|
+
|
238
|
+
// use standard handling for cases without binary upload
|
239
|
+
if (!has_binary) {
|
240
|
+
if (typeof obj_id !== 'undefined') {
|
241
|
+
return scrivito.ajax('PUT', 'objs/'+obj_id, {data: {obj: attributes}});
|
242
|
+
} else {
|
243
|
+
return scrivito.ajax('POST', 'objs', {data: {obj: attributes}});
|
244
|
+
}
|
245
|
+
}
|
246
|
+
|
247
|
+
// use special handling for uploads
|
248
|
+
fd = new FormData();
|
249
|
+
url = obj_url(obj_id);
|
250
|
+
type = (typeof obj_id !== 'undefined') ? 'PUT' : 'POST';
|
251
|
+
|
252
|
+
$.each(attributes, function (key, value) {
|
253
|
+
if ((typeof value === 'object') && (key == '_widget_pool')) {
|
254
|
+
$.each(value, function (subkey, subval) {
|
255
|
+
if (typeof value !== 'undefined') {
|
256
|
+
fd.append('obj[' + key + ']' + '[' + subkey + ']', subval);
|
257
|
+
}
|
258
|
+
});
|
259
|
+
} else if (value && value.is_uploaded_binary && value.filename) {
|
260
|
+
fd.append('obj[' + key + ']', value.blob || value.file, value.filename);
|
261
|
+
} else if (typeof value !== 'undefined') {
|
262
|
+
fd.append('obj[' + key + ']', value);
|
263
|
+
}
|
264
|
+
});
|
265
|
+
|
266
|
+
defer = $.Deferred();
|
267
|
+
|
268
|
+
$.ajax({
|
269
|
+
url: url,
|
270
|
+
type: type,
|
271
|
+
data: fd,
|
272
|
+
processData: false,
|
273
|
+
contentType: false
|
274
|
+
})
|
275
|
+
.error(function (xhr, text_status, error) {
|
276
|
+
var error_message;
|
277
|
+
var error_code;
|
278
|
+
try {
|
279
|
+
var error_json = JSON.parse(xhr.responseText);
|
280
|
+
error_message = error_json.error;
|
281
|
+
error_code = error_json.code;
|
282
|
+
} catch (SyntaxError) {}
|
283
|
+
|
284
|
+
if (!error_message) {
|
285
|
+
error_message = error;
|
286
|
+
}
|
287
|
+
scrivito.display_ajax_error(error_message);
|
288
|
+
defer.reject(error_message);
|
289
|
+
})
|
290
|
+
.success(function (new_data) {
|
291
|
+
defer.resolve((new_data));
|
292
|
+
});
|
293
|
+
|
294
|
+
return defer.promise();
|
295
|
+
};
|
296
|
+
|
297
|
+
var is_file = function(object) {
|
298
|
+
return object &&
|
299
|
+
_.isFunction(object.slice) &&
|
300
|
+
_.isDate(object.lastModifiedDate) &&
|
301
|
+
_.isString(object.name);
|
302
|
+
};
|
303
|
+
|
304
|
+
var instance_of_anywhere = function (object, ctor_name) {
|
305
|
+
var i, val=false, possible_ctor;
|
306
|
+
for (i=0; i < window.frames.length; ++i) {
|
307
|
+
possible_ctor = window.frames[i][ctor_name];
|
308
|
+
if ((typeof possible_ctor === 'function') && (object instanceof possible_ctor)) {
|
309
|
+
val = true;
|
310
|
+
}
|
311
|
+
}
|
312
|
+
return val;
|
313
|
+
};
|
314
|
+
|
315
|
+
var format_date_number = function(number) {
|
316
|
+
var string = number.toString();
|
317
|
+
return string.length === 1 ? '0' + string : string;
|
318
|
+
};
|
319
|
+
|
320
|
+
var serialize_date = function(date) {
|
321
|
+
return date.getUTCFullYear().toString() +
|
322
|
+
'-' + format_date_number(date.getUTCMonth() + 1) + // Month numbers are starting at 0.
|
323
|
+
'-' + format_date_number(date.getUTCDate()) +
|
324
|
+
'T' + format_date_number(date.getUTCHours()) +
|
325
|
+
':' + format_date_number(date.getUTCMinutes()) +
|
326
|
+
':' + format_date_number(date.getUTCSeconds()) +
|
327
|
+
'Z';
|
328
|
+
};
|
329
|
+
|
330
|
+
var convert_attrs = function(obj_id, attrs) {
|
331
|
+
var collected_promises = _.map(attrs, function(value, field_name) {
|
332
|
+
if (is_file(value)) {
|
333
|
+
return $.Deferred().resolve([field_name, value]);
|
334
|
+
} else if (value && value.is_uploaded_binary) {
|
335
|
+
return $.Deferred().resolve([field_name, value]);
|
336
|
+
}
|
337
|
+
return $.Deferred().resolve([field_name, scrivito.obj.serialize_value(value)]);
|
338
|
+
});
|
339
|
+
|
340
|
+
return $.when.apply(this, collected_promises).then(function() {
|
341
|
+
return _.object(arguments);
|
342
|
+
});
|
343
|
+
};
|
344
|
+
|
345
|
+
var convert_widget_pool = function(obj_id, widget_pool) {
|
346
|
+
if (widget_pool) {
|
347
|
+
var conversion_promises = _.map(widget_pool, function(attrs, widget_id) {
|
348
|
+
return convert_attrs(obj_id, attrs).then(function(converted_attrs) {
|
349
|
+
return [widget_id, converted_attrs];
|
350
|
+
});
|
351
|
+
});
|
352
|
+
|
353
|
+
return $.when.apply(this, conversion_promises).then(function() {
|
354
|
+
return _.object(arguments);
|
355
|
+
});
|
356
|
+
} else {
|
357
|
+
return $.Deferred().resolve(widget_pool);
|
358
|
+
}
|
359
|
+
};
|
360
|
+
|
361
|
+
var prepare_attrs = function(obj_id, attrs) {
|
362
|
+
return convert_widget_pool(obj_id, attrs._widget_pool).then(function(widget_pool) {
|
363
|
+
return convert_attrs(obj_id, attrs).then(function(converted_attrs) {
|
364
|
+
converted_attrs._widget_pool = widget_pool;
|
365
|
+
return converted_attrs;
|
366
|
+
});
|
367
|
+
});
|
368
|
+
};
|
369
|
+
}());
|
@@ -5,12 +5,16 @@ module Fiona7
|
|
5
5
|
|
6
6
|
@obj = WriteObj.find(params[:id])
|
7
7
|
|
8
|
+
|
9
|
+
@releasable.merge(referenced_objects(@obj))
|
8
10
|
@releasable.merge(widgets(@obj))
|
9
11
|
@releasable << @obj
|
10
12
|
|
11
13
|
@releasable.each do |obj|
|
12
|
-
obj.
|
13
|
-
|
14
|
+
if obj.really_edited?
|
15
|
+
obj.take
|
16
|
+
obj.release!
|
17
|
+
end
|
14
18
|
end
|
15
19
|
|
16
20
|
render json: {}
|
@@ -21,5 +25,22 @@ module Fiona7
|
|
21
25
|
links = @obj[:X_widget_pool] || []
|
22
26
|
WriteObj.where(obj_id: links.map {|l| l.destination_object_id }).to_a
|
23
27
|
end
|
28
|
+
|
29
|
+
def referenced_objects(obj)
|
30
|
+
referenced = Set.new
|
31
|
+
|
32
|
+
type_definition = Fiona7::TypeRegister.instance.read_mangled(obj.obj_class)
|
33
|
+
type_definition.attributes.each do |attribute|
|
34
|
+
if attribute.type == :reference || attribute.type == :referencelist
|
35
|
+
(obj[attribute.real_name] || []).each do |link|
|
36
|
+
if link.internal?
|
37
|
+
referenced << link.destination_object
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
referenced
|
44
|
+
end
|
24
45
|
end
|
25
46
|
end
|
@@ -3,7 +3,7 @@ module Scrivito
|
|
3
3
|
class CmsDispatchController < ActionController::Metal
|
4
4
|
include ActionController::Redirecting
|
5
5
|
include Rails.application.routes.url_helpers
|
6
|
-
include Scrivito::
|
6
|
+
include Scrivito::ControllerHelper
|
7
7
|
|
8
8
|
def process(action)
|
9
9
|
CmsEnv.new(env).load
|
data/infopark_fiona7.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.files = Dir["{app,config,db,lib}/**/*", "Rakefile", "README.md", "infopark_fiona7.gemspec"]
|
18
18
|
|
19
19
|
s.add_dependency "rails", "~> 4.2.2"
|
20
|
-
s.add_dependency "scrivito", "= 0.
|
20
|
+
s.add_dependency "scrivito", "= 0.71"
|
21
21
|
s.add_dependency "scrivito_sdk"
|
22
22
|
s.add_dependency "scrivito_editors"
|
23
23
|
s.add_dependency "infopark_fiona_connector", "= 7.0.1.beta2"
|
@@ -117,7 +117,7 @@ module Fiona7
|
|
117
117
|
(claimed_type, value) = *possible_pair
|
118
118
|
attribute = type_definition.find_attribute(attribute_name)
|
119
119
|
if attribute.nil?
|
120
|
-
debugger
|
120
|
+
#debugger
|
121
121
|
raise "Attribute #{attribute_name} not found in #{@obj_class}"
|
122
122
|
end
|
123
123
|
|
@@ -215,7 +215,11 @@ module Fiona7
|
|
215
215
|
@obj.set(attribute_name.to_s, value)
|
216
216
|
#end
|
217
217
|
when :stringlist
|
218
|
-
|
218
|
+
if Fiona7.mode == :legacy && attribute_name.to_s == "channels"
|
219
|
+
@obj.set(:channels, value || [])
|
220
|
+
else
|
221
|
+
@obj.set(attribute_name.to_s, value.to_json)
|
222
|
+
end
|
219
223
|
when :html
|
220
224
|
converted_links = LinkConverter::ScrivitoToFiona.new(WriteObj, value.to_s).convert
|
221
225
|
@obj.set(attribute_name.to_s, converted_links)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'fiona7/assert'
|
1
2
|
|
2
3
|
module Fiona7
|
3
4
|
module Builder
|
@@ -36,6 +37,38 @@ module Fiona7
|
|
36
37
|
raw_attribute.set(:helpText, ::ActiveSupport::JSON.encode({type: attribute[:type]}))
|
37
38
|
raw_attribute.set(:values, attribute[:values]) if attribute[:values]
|
38
39
|
raw_attribute.save!
|
40
|
+
else
|
41
|
+
cms_attribute = RailsConnector::Attribute.find_by_attribute_name(attribute[:real_name])
|
42
|
+
raw_attribute = Reactor::Cm::Attribute.get(attribute[:real_name].to_s)
|
43
|
+
|
44
|
+
if attribute[:type] == :reference || attribute[:type] == :referencelist
|
45
|
+
if cms_attribute.attribute_type == "linklist"
|
46
|
+
raw_attribute.set(:helpText, ::ActiveSupport::JSON.encode({type: attribute[:type]}))
|
47
|
+
raw_attribute.save!
|
48
|
+
else
|
49
|
+
Assert.constraint(false, "Type #{attribute[:type]} requested for #{attribute[:real_name]}, but is #{cms_attribute.attribute_type}")
|
50
|
+
end
|
51
|
+
elsif attribute[:type] == :enum || attribute[:type] == :multienum
|
52
|
+
if cms_attribute.attribute_type == "multienum" || cms_attribute.attribute_type == "enum"
|
53
|
+
if attribute[:values]
|
54
|
+
# do not remove values
|
55
|
+
values = cms_attribute.values + attribute[:values]
|
56
|
+
raw_attribute.set(:values, values)
|
57
|
+
raw_attribute.save!
|
58
|
+
end
|
59
|
+
else
|
60
|
+
if !((attribute[:type] == :enum && cms_attribute.attribute_type == "string") ||
|
61
|
+
(attribute[:type] == :multienum && cms_attribute.attribute_type == "text"))
|
62
|
+
Assert.constraint(false, "Type #{attribute[:type]} requested for #{attribute[:real_name]}, but is #{cms_attribute.attribute_type}")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
elsif cms_attribute.attribute_type == "text"
|
66
|
+
if attribute[:type] != :string && attribute[:type] != :stringlist
|
67
|
+
Assert.constraint(false, "Type #{attribute[:type]} requested for #{attribute[:real_name]}, but is #{cms_attribute.attribute_type}")
|
68
|
+
end
|
69
|
+
elsif attribute[:real_type].to_s != cms_attribute.attribute_type
|
70
|
+
Assert.constraint(false, "Type #{attribute[:type]} requested for #{attribute[:real_name]}, but is #{cms_attribute.attribute_type}")
|
71
|
+
end
|
39
72
|
end
|
40
73
|
end
|
41
74
|
end
|
@@ -89,8 +89,12 @@ module Fiona7
|
|
89
89
|
when :enum, :multienum, :text, :string
|
90
90
|
@obj[real_attribute_name]
|
91
91
|
when :stringlist
|
92
|
-
|
93
|
-
|
92
|
+
if Fiona7.mode == :legacy && real_attribute_name == "channels"
|
93
|
+
@obj["channels"] || []
|
94
|
+
else
|
95
|
+
# TODO: get rid of this rescue nil
|
96
|
+
::JSON.parse(@obj[real_attribute_name]) rescue nil
|
97
|
+
end
|
94
98
|
else
|
95
99
|
Assert.success(
|
96
100
|
false,
|
@@ -98,6 +102,10 @@ module Fiona7
|
|
98
102
|
)
|
99
103
|
end
|
100
104
|
|
105
|
+
# TODO: better handling for attribute types
|
106
|
+
if virtual_attribute_type == :text
|
107
|
+
virtual_attribute_type = :string
|
108
|
+
end
|
101
109
|
attrs[virtual_attribute_name] = [val, virtual_attribute_type]
|
102
110
|
end
|
103
111
|
end
|
@@ -126,7 +126,11 @@ module Fiona7
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
when :prefix, :prefix_search
|
129
|
-
|
129
|
+
if !@all.is_a?(Array) && field.to_sym == :_path
|
130
|
+
@all = @all.where("path LIKE ?", "#{value}%")
|
131
|
+
else
|
132
|
+
@all = @all.to_a.select {|o| o.send(:[], resolve_field_name(o,field)).to_s.start_with?(value) }
|
133
|
+
end
|
130
134
|
when :greater_than
|
131
135
|
@all = @all.to_a.select {|o| o.send(:[], resolve_field_name(o,field)).to_s > (value) }
|
132
136
|
when :less_than
|
@@ -10,7 +10,21 @@ module Scrivito
|
|
10
10
|
orig_attribute(name, type, options)
|
11
11
|
ensure
|
12
12
|
if self.name.present?
|
13
|
-
|
13
|
+
# to_s is friendly to shadowclassing
|
14
|
+
Fiona7::TypeRegister.instance.add_usr_attr(self.to_s, name, type, options[:values])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# support shadow classes
|
19
|
+
def description_for_editor
|
20
|
+
to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
def register_attribute_definitions(obj_class)
|
24
|
+
type_register = Fiona7::TypeRegister.instance
|
25
|
+
self.attribute_definitions.each do |attribute_definition|
|
26
|
+
# to_s instead of name for shadowclassing
|
27
|
+
type_register.add_usr_attr(obj_class, attribute_definition.name, attribute_definition.type, attribute_definition.values.presence)
|
14
28
|
end
|
15
29
|
end
|
16
30
|
end
|
@@ -5,6 +5,7 @@ module Scrivito
|
|
5
5
|
def serialize_binary_value(attribute_value, attribute_definition)
|
6
6
|
case attribute_value
|
7
7
|
when File then attribute_value
|
8
|
+
when FutureBinary then attribute_value.file_to_be_uploaded
|
8
9
|
when UploadedBinary then attribute_value.params
|
9
10
|
else
|
10
11
|
raise_validation_error(attribute_definition.name,
|
@@ -14,10 +14,18 @@ module Scrivito
|
|
14
14
|
id.to_s
|
15
15
|
end
|
16
16
|
|
17
|
+
# optimized away
|
17
18
|
def outdated?
|
18
19
|
false
|
19
20
|
end
|
20
21
|
|
22
|
+
# optimized away
|
23
|
+
def transfer_modifications_to(target_workspace)
|
24
|
+
return unless modification
|
25
|
+
raise TransferModificationsModifiedError,
|
26
|
+
"Already modified in workspace #{target_workspace.id}"
|
27
|
+
end
|
28
|
+
|
21
29
|
def copy_binaries(attributes)
|
22
30
|
# TODO: what to do?
|
23
31
|
attributes
|
@@ -88,13 +96,9 @@ module Scrivito
|
|
88
96
|
end
|
89
97
|
ensure
|
90
98
|
if subclass.name.present?
|
91
|
-
|
92
|
-
subclass.attribute_definitions.each do |attribute_definition|
|
93
|
-
type_register.add_usr_attr(subclass.name, attribute_definition.name, attribute_definition.type, attribute_definition.values.presence)
|
94
|
-
end
|
99
|
+
subclass.register_attribute_definitions(subclass.to_s)
|
95
100
|
end
|
96
101
|
end
|
97
|
-
|
98
102
|
end
|
99
103
|
end
|
100
104
|
end
|
@@ -35,9 +35,15 @@ module Fiona7
|
|
35
35
|
protected
|
36
36
|
attr_accessor :binary_id, :transformation, :obj
|
37
37
|
|
38
|
+
def cache(key, &block)
|
39
|
+
# TODO: make path this configurable
|
40
|
+
@@cache = ActiveSupport::Cache::FileStore.new(Rails.root + '/tmp/cache') unless defined?(@@cache)
|
41
|
+
@@cache.fetch("#{self.binary_id}-#{key}", &block)
|
42
|
+
end
|
43
|
+
|
38
44
|
def load_obj
|
39
45
|
if Fiona7.mode == :legacy
|
40
|
-
Fiona7::
|
46
|
+
Fiona7::EditedObj.find(self.binary_id)
|
41
47
|
else
|
42
48
|
Fiona7::InternalReleasedObj.find(self.binary_id)
|
43
49
|
end
|
@@ -68,19 +74,27 @@ module Fiona7
|
|
68
74
|
end
|
69
75
|
|
70
76
|
def width
|
71
|
-
|
72
|
-
self.image
|
73
|
-
|
74
|
-
|
77
|
+
self.cache("#{self.last_changed}-width") do
|
78
|
+
if self.image
|
79
|
+
self.image[:width]
|
80
|
+
else
|
81
|
+
0
|
82
|
+
end
|
75
83
|
end
|
84
|
+
rescue
|
85
|
+
0
|
76
86
|
end
|
77
87
|
|
78
88
|
def height
|
79
|
-
|
80
|
-
self.image
|
81
|
-
|
82
|
-
|
89
|
+
self.cache("#{self.last_changed}-height") do
|
90
|
+
if self.image
|
91
|
+
self.image[:height]
|
92
|
+
else
|
93
|
+
0
|
94
|
+
end
|
83
95
|
end
|
96
|
+
rescue
|
97
|
+
0
|
84
98
|
end
|
85
99
|
|
86
100
|
def mime_type
|
@@ -412,7 +426,7 @@ module Fiona7
|
|
412
426
|
attr_writer :blob_id, :access_type, :verb, :transformation
|
413
427
|
def blob
|
414
428
|
if Fiona7.mode == :legacy
|
415
|
-
@blob ||= Fiona7::
|
429
|
+
@blob ||= Fiona7::EditedObj.find(blob_id.to_i)
|
416
430
|
else
|
417
431
|
@blob ||= Fiona7::InternalReleasedObj.find(blob_id.to_i)
|
418
432
|
end
|
@@ -459,7 +473,7 @@ module Fiona7
|
|
459
473
|
end
|
460
474
|
|
461
475
|
def validate_transformation!
|
462
|
-
MetaBinary.new(self.blob_id, self.transformation).valid? || raise(Scrivito::TransformationDefinitionError.new("Invalid transformation", "binary.unprocessable.image.transform.
|
476
|
+
MetaBinary.new(self.blob_id, self.transformation).valid? || raise(Scrivito::TransformationDefinitionError.new("Invalid transformation", "binary.unprocessable.image.transform.config.invalid"))
|
463
477
|
end
|
464
478
|
end
|
465
479
|
end
|
@@ -2,8 +2,9 @@ require 'scrivito/cms_rest_api.rb'
|
|
2
2
|
|
3
3
|
module Scrivito
|
4
4
|
class CmsRestApi
|
5
|
-
# Stub
|
6
|
-
def self.
|
5
|
+
# Stub upload_future_binary since the uploads are handled directly in ruby.
|
6
|
+
def self.upload_future_binary(future_binary, obj_id)
|
7
|
+
file = future_binary.file_to_be_uploaded
|
7
8
|
# TODO: code deduplication with obj builder
|
8
9
|
parent = Fiona7::WriteObj.find(obj_id.to_i)
|
9
10
|
ext = ::File.extname(file.path).to_s[1..-1]
|
@@ -11,5 +11,15 @@ module Scrivito
|
|
11
11
|
def outdated?
|
12
12
|
false
|
13
13
|
end
|
14
|
+
|
15
|
+
# fix silly assumptions
|
16
|
+
def self.use(id_or_title)
|
17
|
+
self.current = if id_or_title =~ /(published|rtc)/
|
18
|
+
find(id_or_title)
|
19
|
+
else
|
20
|
+
find_by_title(id_or_title) or
|
21
|
+
raise ResourceNotFound, "Could not find #{self} with title #{id_or_title}"
|
22
|
+
end
|
23
|
+
end
|
14
24
|
end
|
15
25
|
end
|
@@ -45,7 +45,9 @@ module ShadowClasses
|
|
45
45
|
Class.new(scrivito_obj_class) do
|
46
46
|
include ::ShadowClassesSupport
|
47
47
|
end
|
48
|
-
)
|
48
|
+
).tap do |klass|
|
49
|
+
klass.register_attribute_definitions(name)
|
50
|
+
end
|
49
51
|
end
|
50
52
|
elsif type == 'Widget'
|
51
53
|
parent_class = 'Widget'.safe_constantize || Scrivito::BasicWidget
|
@@ -54,7 +56,9 @@ module ShadowClasses
|
|
54
56
|
Class.new(parent_class) do
|
55
57
|
include ::ShadowClassesSupport
|
56
58
|
end
|
57
|
-
)
|
59
|
+
).tap do |klass|
|
60
|
+
klass.register_attribute_definitions(name)
|
61
|
+
end
|
58
62
|
end
|
59
63
|
|
60
64
|
end
|
data/lib/fiona7/type_loader.rb
CHANGED
@@ -26,11 +26,11 @@ module Fiona7
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def load(type_definition)
|
29
|
-
#puts "loading #{obj_class}"
|
30
29
|
if Fiona7.mode == :legacy
|
31
30
|
type_definition.add_attr('title', :string, 'title', :string)
|
32
31
|
type_definition.add_attr('valid_from', :date, 'valid_from', :date)
|
33
32
|
type_definition.add_attr('valid_until', :date, 'valid_until', :date)
|
33
|
+
type_definition.add_attr('channels', :stringlist, 'channels', :stringlist)
|
34
34
|
|
35
35
|
if self.rc_obj_class.obj_type == 'publication' || self.rc_obj_class.obj_type == 'document'
|
36
36
|
type_definition.add_attr('body', :html, 'body', :html)
|
data/lib/fiona7/type_register.rb
CHANGED
@@ -103,7 +103,6 @@ module Fiona7
|
|
103
103
|
|
104
104
|
def type_definition
|
105
105
|
type_definition = TypeDefinition.new(self.obj_class)
|
106
|
-
pp values
|
107
106
|
values.each do |name, possible_pair|
|
108
107
|
next if name =~ /\A_/ # built-in attribute
|
109
108
|
next unless possible_pair.kind_of?(Array) && possible_pair.length == 2
|
@@ -158,7 +157,7 @@ module Fiona7
|
|
158
157
|
end
|
159
158
|
|
160
159
|
def ad_hoc_synchronize(type_definition)
|
161
|
-
puts "Ad hoc synchronize of #{type_definition.name}"
|
160
|
+
#puts "Ad hoc synchronize of #{type_definition.name}"
|
162
161
|
obj_class = type_definition.name
|
163
162
|
|
164
163
|
existing_definition = self.usr_defs[obj_class]
|
@@ -187,6 +186,32 @@ module Fiona7
|
|
187
186
|
self.cms_defs[obj_class].present?
|
188
187
|
end
|
189
188
|
|
189
|
+
def type_compatible?(attr_name, cms_type, usr_type)
|
190
|
+
if cms_type == usr_type
|
191
|
+
true
|
192
|
+
else
|
193
|
+
case [cms_type, usr_type]
|
194
|
+
when [:multienum, :stringlist]
|
195
|
+
# this case can occur when a multienum
|
196
|
+
# was properly created, but is only ad-hoc written
|
197
|
+
# the API provides stringlist as a valid type
|
198
|
+
true
|
199
|
+
when [:stringlist, :multienum]
|
200
|
+
# this case can occur when a multienum
|
201
|
+
# was initially ad-hoc created, but now
|
202
|
+
# has a proper definition
|
203
|
+
# also: channels in legacy mode
|
204
|
+
true
|
205
|
+
when [:text, :string]
|
206
|
+
true
|
207
|
+
else
|
208
|
+
#raise "Attribute types for #{attr_name} incompatible: CMS uses #{cms_type} but the application provided #{usr_type}"
|
209
|
+
puts "Attribute types for #{attr_name} incompatible: CMS uses #{cms_type} but the application provided #{usr_type}"
|
210
|
+
false
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
190
215
|
def defs_compatible?(cms_def, usr_def)
|
191
216
|
cms_attr_map = {}
|
192
217
|
cms_def.attrs.each do |attr|
|
@@ -195,7 +220,7 @@ module Fiona7
|
|
195
220
|
|
196
221
|
usr_def.attrs.each do |attr|
|
197
222
|
return false if !cms_attr_map[attr.name]
|
198
|
-
return false if attr.
|
223
|
+
return false if !type_compatible?(attr.name, cms_attr_map[attr.name].type, attr.type)
|
199
224
|
end
|
200
225
|
|
201
226
|
return true
|
@@ -45,7 +45,7 @@ module Fiona7
|
|
45
45
|
|
46
46
|
def builder_attributes
|
47
47
|
self.type_definition.attrs.map do |attribute_definition|
|
48
|
-
next if ['title', 'body'].include?(attribute_definition.real_name)
|
48
|
+
next if ['title', 'body', 'valid_from', 'valid_until', 'channels'].include?(attribute_definition.real_name)
|
49
49
|
|
50
50
|
desc = {
|
51
51
|
real_name: attribute_definition.real_name,
|
data/lib/fiona7/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: infopark_fiona7
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.71.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomasz Przedmojski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: '0.71'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: '0.71'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: scrivito_sdk
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -135,6 +135,8 @@ files:
|
|
135
135
|
- app/assets/images/fiona7-marker.png
|
136
136
|
- app/assets/javascripts/fiona7.js
|
137
137
|
- app/assets/javascripts/fiona7_ui.js
|
138
|
+
- app/assets/javascripts/scrivito_patches/models/blob.js
|
139
|
+
- app/assets/javascripts/scrivito_patches/models/obj.js
|
138
140
|
- app/assets/stylesheets/fiona7-login.css.scss
|
139
141
|
- app/assets/stylesheets/fiona7.css.scss
|
140
142
|
- app/assets/stylesheets/fiona7_ui.css.scss
|
@@ -254,3 +256,4 @@ signing_key:
|
|
254
256
|
specification_version: 4
|
255
257
|
summary: scrivito-compatible interface for classic Fiona
|
256
258
|
test_files: []
|
259
|
+
has_rdoc:
|