infopark_fiona7 1.2.0.2.3 → 1.5.2.0.0
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/Rakefile +33 -0
- data/app/assets/javascripts/fiona7_ui.js +82 -23
- data/app/assets/javascripts/scrivito_patches/ajax.js +222 -0
- data/app/assets/javascripts/scrivito_patches/ajax_error_handling.js +24 -0
- data/app/assets/javascripts/scrivito_patches/attribute_serializer.js +259 -0
- data/app/assets/javascripts/scrivito_patches/base_obj_path.js +17 -0
- data/app/assets/javascripts/scrivito_patches/binary_utils.js +33 -0
- data/app/assets/javascripts/scrivito_patches/cms_rest_api.js +490 -0
- data/app/assets/javascripts/scrivito_patches/models/api/basic_obj.js +650 -0
- data/app/assets/javascripts/scrivito_patches/models/binary_field_element.js +53 -0
- data/app/assets/javascripts/scrivito_patches/models/obj.js +74 -239
- data/app/assets/javascripts/scrivito_patches/obj_serializer.js +91 -0
- data/app/assets/stylesheets/fiona7.css.scss +12 -0
- data/app/assets/stylesheets/fiona7_ui.css.scss +18 -0
- data/app/controllers/fiona7/api_controller.rb +20 -0
- data/app/controllers/fiona7/sessions_controller.rb +2 -10
- data/app/controllers/fiona7_login_page_controller.rb +0 -3
- data/app/controllers/scrivito/obj_class_controller.rb +58 -0
- data/app/controllers/scrivito/objs_controller.rb +2 -38
- data/app/helpers/fiona7_override_helper.rb +25 -0
- data/app/views/fiona7/release/preview.html.erb +1 -1
- data/app/views/fiona7_login_page/index.html.erb +0 -6
- data/app/views/scrivito/ui/index.html.erb +2 -1
- data/app/views/scrivito/webservice/_workspace.json.jbuilder +8 -0
- data/config/locales/errors.yml +18 -0
- data/config/locales/workflow.yml +24 -0
- data/config/precedence_routes.rb +7 -14
- data/infopark_fiona7.gemspec +6 -4
- data/lib/fiona7/assert.rb +2 -2
- data/lib/fiona7/attribute_readers/factory.rb +4 -0
- data/lib/fiona7/attribute_type_mapper.rb +4 -1
- data/lib/fiona7/attribute_writers/binary_as_binary.rb +2 -2
- data/lib/fiona7/attribute_writers/binary_as_linklist.rb +2 -2
- data/lib/fiona7/attribute_writers/factory.rb +4 -0
- data/lib/fiona7/builder/indirect_blob_builder.rb +2 -2
- data/lib/fiona7/builder/lazy_blob_copier.rb +1 -1
- data/lib/fiona7/builder/obj_builder.rb +45 -12
- data/lib/fiona7/controllers/rest_api/error_handler.rb +49 -0
- data/lib/fiona7/controllers/rest_api/obj_controller.rb +34 -20
- data/lib/fiona7/controllers/rest_api/session_controller.rb +13 -0
- data/lib/fiona7/engine.rb +7 -10
- data/lib/fiona7/facet_builder.rb +5 -1
- data/lib/fiona7/naive_search_engine.rb +9 -0
- data/lib/fiona7/routers/rest_api.rb +17 -0
- data/lib/fiona7/scrivito_patches/attribute_content.rb +28 -0
- data/lib/fiona7/scrivito_patches/cms_routing.rb +14 -31
- data/lib/fiona7/scrivito_patches/page_config.rb +1 -0
- data/lib/fiona7/scrivito_user.rb +3 -2
- data/lib/fiona7/type_register.rb +4 -0
- data/lib/fiona7/verity_search_engine.rb +6 -17
- data/lib/fiona7/version.rb +1 -1
- data/lib/fiona7/workspace.rb +2 -0
- metadata +28 -14
- data/app/assets/javascripts/scrivito_patches/models/ajax.js +0 -99
- data/app/assets/javascripts/scrivito_patches/models/blob.js +0 -50
@@ -0,0 +1,17 @@
|
|
1
|
+
(function() {
|
2
|
+
_.extend(scrivito, {
|
3
|
+
path_for_id: function(id) {
|
4
|
+
return '/__scrivito/' + id;
|
5
|
+
},
|
6
|
+
|
7
|
+
id_from_path: function(url) {
|
8
|
+
// -- PATCH BEGINS HERE --
|
9
|
+
var match = /__scrivito\/([a-z0-9]{4,})/.exec(url);
|
10
|
+
// -- PATHC ENDS HERE --
|
11
|
+
|
12
|
+
if (match) {
|
13
|
+
return match[1];
|
14
|
+
}
|
15
|
+
}
|
16
|
+
});
|
17
|
+
})();
|
@@ -0,0 +1,33 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
(function () {
|
4
|
+
scrivito.BinaryUtils = {
|
5
|
+
validateBinaryOptions: function validateBinaryOptions(options) {
|
6
|
+
if (_.has(options, 'filename') && !options.filename) {
|
7
|
+
throw new scrivito.ArgumentError('filename cannot be blank');
|
8
|
+
}
|
9
|
+
|
10
|
+
if (_.has(options, 'content_type') && !options.content_type) {
|
11
|
+
throw new scrivito.ArgumentError('content_type cannot be blank');
|
12
|
+
}
|
13
|
+
|
14
|
+
if (_.has(options, 'contentType') && !options.contentType) {
|
15
|
+
throw new scrivito.ArgumentError('contentType cannot be blank');
|
16
|
+
}
|
17
|
+
},
|
18
|
+
|
19
|
+
isBlob: function isBlob(obj) {
|
20
|
+
return !!obj && _.isNumber(obj.size) && _.isString(obj.type);
|
21
|
+
},
|
22
|
+
|
23
|
+
isFile: function isFile(obj) {
|
24
|
+
return this.isBlob(obj) && _.isDate(obj.lastModifiedDate) && _.isString(obj.name);
|
25
|
+
},
|
26
|
+
|
27
|
+
// -- PATCH BEGINS HERE --
|
28
|
+
isBlobWithName: function isBlobWithName(obj) {
|
29
|
+
return typeof obj === 'object' && this.isBlob(obj.blob_to_upload);
|
30
|
+
}
|
31
|
+
};
|
32
|
+
})();
|
33
|
+
// -- PATCH ENDS HERE --
|
@@ -0,0 +1,490 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
|
4
|
+
|
5
|
+
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
6
|
+
|
7
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
8
|
+
|
9
|
+
(function () {
|
10
|
+
var MIN_REQUEST_TIME = 5;
|
11
|
+
var DEFAULT_REQUEST_TIMEOUT = 120000; // <-- PATCH HERE
|
12
|
+
var backendEndpoint = undefined;
|
13
|
+
var tenant = undefined;
|
14
|
+
|
15
|
+
scrivito.CmsRestApi = {
|
16
|
+
init: function init(endpoint, initTenant) {
|
17
|
+
backendEndpoint = endpoint;
|
18
|
+
tenant = initTenant;
|
19
|
+
},
|
20
|
+
|
21
|
+
get: function get(path, requestParams) {
|
22
|
+
return fetch('GET', path, requestParams);
|
23
|
+
},
|
24
|
+
|
25
|
+
put: function put(path, requestParams) {
|
26
|
+
return fetch('PUT', path, requestParams);
|
27
|
+
},
|
28
|
+
|
29
|
+
post: function post(path, requestParams) {
|
30
|
+
return fetch('POST', path, requestParams);
|
31
|
+
},
|
32
|
+
|
33
|
+
'delete': function _delete(path) {
|
34
|
+
return fetch('DELETE', path);
|
35
|
+
}
|
36
|
+
};
|
37
|
+
|
38
|
+
var Timer = (function () {
|
39
|
+
function Timer() {
|
40
|
+
var timeout = arguments.length <= 0 || arguments[0] === undefined ? DEFAULT_REQUEST_TIMEOUT : arguments[0];
|
41
|
+
|
42
|
+
_classCallCheck(this, Timer);
|
43
|
+
|
44
|
+
this.timesOutAt = Date.now() + timeout;
|
45
|
+
}
|
46
|
+
|
47
|
+
_createClass(Timer, [{
|
48
|
+
key: 'timedOut',
|
49
|
+
value: function timedOut() {
|
50
|
+
return this.remainingTime() < MIN_REQUEST_TIME;
|
51
|
+
}
|
52
|
+
}, {
|
53
|
+
key: 'remainingTime',
|
54
|
+
value: function remainingTime() {
|
55
|
+
return Math.max(this.timesOutAt - Date.now(), 0);
|
56
|
+
}
|
57
|
+
}, {
|
58
|
+
key: 'cover',
|
59
|
+
value: function cover(time) {
|
60
|
+
return time <= this.timesOutAt - MIN_REQUEST_TIME;
|
61
|
+
}
|
62
|
+
}]);
|
63
|
+
|
64
|
+
return Timer;
|
65
|
+
})();
|
66
|
+
|
67
|
+
function fetch(method, path, requestParams) {
|
68
|
+
return request(method, path, requestParams).then(function (result) {
|
69
|
+
if (result && result.task && _.size(result) === 1) {
|
70
|
+
return handleTask(result.task);
|
71
|
+
}
|
72
|
+
return result;
|
73
|
+
});
|
74
|
+
}
|
75
|
+
|
76
|
+
function request(method, path, requestParams) {
|
77
|
+
var timer = new Timer();
|
78
|
+
return retryOnceOnError(timer, method, function () {
|
79
|
+
return retryOnRateLimit(timer, function () {
|
80
|
+
return scrivito.SessionKeeper.performWithToken(function (token) {
|
81
|
+
var ajaxDeferred = ajax(method, path, requestParams, timer.remainingTime(), token);
|
82
|
+
return scrivito.Promise.resolve(ajaxDeferred)['catch'](checkAuthorization);
|
83
|
+
});
|
84
|
+
})['catch'](function (error) {
|
85
|
+
return raiseError(error);
|
86
|
+
});
|
87
|
+
});
|
88
|
+
}
|
89
|
+
|
90
|
+
function retryOnceOnError(timer, method, requestCallback) {
|
91
|
+
if (method === 'POST') {
|
92
|
+
return requestCallback();
|
93
|
+
}
|
94
|
+
|
95
|
+
return requestCallback()['catch'](function (error) {
|
96
|
+
if (!timer.timedOut()) {
|
97
|
+
if (error instanceof scrivito.BackendError) {
|
98
|
+
return requestCallback();
|
99
|
+
}
|
100
|
+
if (error instanceof scrivito.NetworkError) {
|
101
|
+
return requestCallback();
|
102
|
+
}
|
103
|
+
}
|
104
|
+
throw error;
|
105
|
+
});
|
106
|
+
}
|
107
|
+
|
108
|
+
function retryOnRateLimit(timer, requestCallback) {
|
109
|
+
var retry = function retry(retryCount) {
|
110
|
+
return requestCallback()['catch'](function (error) {
|
111
|
+
if (error.status === 429) {
|
112
|
+
var timeout = calculateTimeout(error.getResponseHeader('Retry-After'), retryCount);
|
113
|
+
if (timer.cover(Date.now() + timeout)) {
|
114
|
+
return scrivito.Promise.resolve(scrivito.waitMs(timeout)).then(function () {
|
115
|
+
return retry(retryCount + 1);
|
116
|
+
});
|
117
|
+
}
|
118
|
+
throw new scrivito.RateLimitExceededError('rate limit exceeded', 429);
|
119
|
+
}
|
120
|
+
throw error;
|
121
|
+
});
|
122
|
+
};
|
123
|
+
|
124
|
+
return retry(0);
|
125
|
+
}
|
126
|
+
|
127
|
+
function calculateTimeout(retryAfter, retryCount) {
|
128
|
+
var calculatedTimeout = Math.pow(2, retryCount) * 0.5 * 1000;
|
129
|
+
return Math.max(calculatedTimeout, retryAfter * 1000);
|
130
|
+
}
|
131
|
+
|
132
|
+
function raiseError(error) {
|
133
|
+
if (error.status === undefined || !_.isNumber(error.status)) {
|
134
|
+
throw error;
|
135
|
+
} else if (error.status === 0) {
|
136
|
+
throw new scrivito.NetworkError(error.statusText, error.status);
|
137
|
+
}
|
138
|
+
|
139
|
+
var errorBody = parseError(error);
|
140
|
+
var specificOutput = errorBody.error;
|
141
|
+
|
142
|
+
if (error.status === 403) {
|
143
|
+
throw new scrivito.AccessDeniedError(specificOutput, error.status, errorBody.code);
|
144
|
+
} else if (error.status.toString()[0] === '4' && specificOutput) {
|
145
|
+
throw new scrivito.ClientError(specificOutput, error.status, errorBody.code);
|
146
|
+
} else if (error.status === 500 && specificOutput) {
|
147
|
+
throw new scrivito.BackendError(specificOutput, error.status);
|
148
|
+
}
|
149
|
+
throw new scrivito.NetworkError(error.responseText, error.status);
|
150
|
+
}
|
151
|
+
|
152
|
+
function checkAuthorization(error) {
|
153
|
+
if (error.status === 401) {
|
154
|
+
var errorBody = parseError(error);
|
155
|
+
var specificOutput = errorBody.error;
|
156
|
+
throw new scrivito.UnauthorizedError(specificOutput, error.status, errorBody.code);
|
157
|
+
}
|
158
|
+
throw error;
|
159
|
+
}
|
160
|
+
|
161
|
+
function parseError(error) {
|
162
|
+
try {
|
163
|
+
return JSON.parse(error.responseText);
|
164
|
+
} catch (err) {
|
165
|
+
if (err instanceof SyntaxError) {
|
166
|
+
throw new scrivito.NetworkError(error.responseText, error.status);
|
167
|
+
}
|
168
|
+
throw err;
|
169
|
+
}
|
170
|
+
}
|
171
|
+
|
172
|
+
function prepareAjaxParams(method, path) {
|
173
|
+
var requestParams = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
|
174
|
+
|
175
|
+
var ajaxParams = {
|
176
|
+
path: path,
|
177
|
+
verb: method,
|
178
|
+
params: requestParams
|
179
|
+
};
|
180
|
+
|
181
|
+
return {
|
182
|
+
data: JSON.stringify(ajaxParams)
|
183
|
+
};
|
184
|
+
}
|
185
|
+
|
186
|
+
function ajax(method, path, requestParams, timeout, token) {
|
187
|
+
// -- PATCH BEGINS HERE --
|
188
|
+
if (ajaxWithFormDataRequired(requestParams) /* || true */) {
|
189
|
+
return ajaxWithFormData(method, path, requestParams, timeout, token);
|
190
|
+
}
|
191
|
+
// -- PATCH ENDS HERE --
|
192
|
+
|
193
|
+
var ajaxParams = prepareAjaxParams(method, path, requestParams);
|
194
|
+
var ajaxMethod = method === 'POST' ? 'POST' : 'PUT';
|
195
|
+
var url = '/_f7/tenants/' + tenant + '/perform'; // <-- PATCH HERE
|
196
|
+
|
197
|
+
return $.ajax(_.extend({
|
198
|
+
url: url,
|
199
|
+
method: ajaxMethod,
|
200
|
+
contentType: 'application/json; charset=utf-8',
|
201
|
+
dataType: 'json',
|
202
|
+
//headers: { Authorization: `Session ${token}` }, // <-- PATCH HERE
|
203
|
+
timeout: timeout,
|
204
|
+
cache: false, // Don't cache GET requests.
|
205
|
+
xhrFields: { withCredentials: true }
|
206
|
+
}, ajaxParams)).then(function (result, textStatus, xhr) {
|
207
|
+
return $.Deferred().resolve(result);
|
208
|
+
}, function (xhr, textStatus, xhrError) {
|
209
|
+
return $.Deferred().reject(xhr);
|
210
|
+
});
|
211
|
+
}
|
212
|
+
|
213
|
+
// -- PATCH BEGINS HERE --
|
214
|
+
function ajaxWithFormDataRequired(params) {
|
215
|
+
var objParams = params && params.obj;
|
216
|
+
var result = false;
|
217
|
+
|
218
|
+
if (!objParams) {
|
219
|
+
return result;
|
220
|
+
}
|
221
|
+
|
222
|
+
var _iteratorNormalCompletion = true;
|
223
|
+
var _didIteratorError = false;
|
224
|
+
var _iteratorError = undefined;
|
225
|
+
|
226
|
+
try {
|
227
|
+
for (var _iterator = Object.keys(objParams)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
228
|
+
var k = _step.value;
|
229
|
+
|
230
|
+
// if params[k] is an array
|
231
|
+
if (objParams[k].pop) {
|
232
|
+
// file uploads require form data
|
233
|
+
result = scrivito.BinaryUtils.isFile(objParams[k][1]) || scrivito.BinaryUtils.isBlob(objParams[k][1]) || scrivito.BinaryUtils.isBlobWithName(objParams[k][1]);
|
234
|
+
if (result) {
|
235
|
+
return result;
|
236
|
+
}
|
237
|
+
}
|
238
|
+
}
|
239
|
+
} catch (err) {
|
240
|
+
_didIteratorError = true;
|
241
|
+
_iteratorError = err;
|
242
|
+
} finally {
|
243
|
+
try {
|
244
|
+
if (!_iteratorNormalCompletion && _iterator['return']) {
|
245
|
+
_iterator['return']();
|
246
|
+
}
|
247
|
+
} finally {
|
248
|
+
if (_didIteratorError) {
|
249
|
+
throw _iteratorError;
|
250
|
+
}
|
251
|
+
}
|
252
|
+
}
|
253
|
+
|
254
|
+
return result;
|
255
|
+
}
|
256
|
+
|
257
|
+
function ajaxWithFormData(method, path, requestParams, timeout, token) {
|
258
|
+
var formData = paramsToFormData(method, path, requestParams);
|
259
|
+
var ajaxMethod = method === 'POST' ? 'POST' : 'PUT';
|
260
|
+
var url = '/_f7/tenants/' + tenant + '/perform';
|
261
|
+
|
262
|
+
return $.ajax(_.extend({
|
263
|
+
url: url,
|
264
|
+
method: ajaxMethod,
|
265
|
+
contentType: false,
|
266
|
+
processData: false,
|
267
|
+
data: formData,
|
268
|
+
timeout: timeout,
|
269
|
+
cache: false, // Don't cache GET requests.
|
270
|
+
xhrFields: { withCredentials: true }
|
271
|
+
})).then(function (result, textStatus, xhr) {
|
272
|
+
return $.Deferred().resolve(result);
|
273
|
+
}, function (xhr, textStatus, xhrError) {
|
274
|
+
return $.Deferred().reject(xhr);
|
275
|
+
});
|
276
|
+
}
|
277
|
+
|
278
|
+
function paramsToFormData(verb, path, params) {
|
279
|
+
var objParams = params && params.obj || {};
|
280
|
+
var fd = new FormData();
|
281
|
+
fd.append('verb', verb);
|
282
|
+
fd.append('path', path);
|
283
|
+
|
284
|
+
var _iteratorNormalCompletion2 = true;
|
285
|
+
var _didIteratorError2 = false;
|
286
|
+
var _iteratorError2 = undefined;
|
287
|
+
|
288
|
+
try {
|
289
|
+
for (var _iterator2 = Object.keys(objParams)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
290
|
+
var attr = _step2.value;
|
291
|
+
|
292
|
+
// attr is a [type, value] pair
|
293
|
+
if (typeof objParams[attr] === 'object' && objParams[attr].pop) {
|
294
|
+
var _objParams$attr = _slicedToArray(objParams[attr], 2);
|
295
|
+
|
296
|
+
var type = _objParams$attr[0];
|
297
|
+
var value = _objParams$attr[1];
|
298
|
+
|
299
|
+
if (value.pop) {
|
300
|
+
// multienum / stringlist / widgetlist
|
301
|
+
fd.append('params[obj][' + attr + '[]', type);
|
302
|
+
for (var i = 0; i < value.length; ++i) {
|
303
|
+
fd.append('params[obj][' + attr + '[][formdata$workaround][]', value[i]);
|
304
|
+
}
|
305
|
+
} else if (scrivito.BinaryUtils.isFile(value) || scrivito.BinaryUtils.isBlob(value)) {
|
306
|
+
// upload
|
307
|
+
fd.append('params[obj][' + attr + '][]', type);
|
308
|
+
fd.append('params[obj][' + attr + '][]', value);
|
309
|
+
} else if (scrivito.BinaryUtils.isBlobWithName(value)) {
|
310
|
+
fd.append('params[obj][' + attr + '][]', type);
|
311
|
+
fd.append('params[obj][' + attr + '][]', value.blob_to_upload, value.filename);
|
312
|
+
} else if (typeof value === 'object') {
|
313
|
+
// blob/copy rename
|
314
|
+
fd.append('params[obj][' + attr + '[]', type);
|
315
|
+
var _iteratorNormalCompletion3 = true;
|
316
|
+
var _didIteratorError3 = false;
|
317
|
+
var _iteratorError3 = undefined;
|
318
|
+
|
319
|
+
try {
|
320
|
+
for (var _iterator3 = Object.keys(value)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
321
|
+
var l = _step3.value;
|
322
|
+
|
323
|
+
fd.append('params[obj][' + attr + '][][' + l + ']', value[l]);
|
324
|
+
}
|
325
|
+
} catch (err) {
|
326
|
+
_didIteratorError3 = true;
|
327
|
+
_iteratorError3 = err;
|
328
|
+
} finally {
|
329
|
+
try {
|
330
|
+
if (!_iteratorNormalCompletion3 && _iterator3['return']) {
|
331
|
+
_iterator3['return']();
|
332
|
+
}
|
333
|
+
} finally {
|
334
|
+
if (_didIteratorError3) {
|
335
|
+
throw _iteratorError3;
|
336
|
+
}
|
337
|
+
}
|
338
|
+
}
|
339
|
+
} else if (typeof value !== 'undefined') {
|
340
|
+
fd.append('params[obj][' + attr + '][]', type);
|
341
|
+
fd.append('params[obj][' + attr + '][]', value);
|
342
|
+
}
|
343
|
+
// special handling for widget pool
|
344
|
+
} else if (attr === '_widget_pool') {
|
345
|
+
var value = objParams[attr];
|
346
|
+
var _iteratorNormalCompletion4 = true;
|
347
|
+
var _didIteratorError4 = false;
|
348
|
+
var _iteratorError4 = undefined;
|
349
|
+
|
350
|
+
try {
|
351
|
+
for (var _iterator4 = Object.keys(value)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
352
|
+
var widgetId = _step4.value;
|
353
|
+
|
354
|
+
var widget = value[widgetId];
|
355
|
+
var _iteratorNormalCompletion5 = true;
|
356
|
+
var _didIteratorError5 = false;
|
357
|
+
var _iteratorError5 = undefined;
|
358
|
+
|
359
|
+
try {
|
360
|
+
for (var _iterator5 = Object.keys(widget)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
|
361
|
+
var widgetAttr = _step5.value;
|
362
|
+
|
363
|
+
if (widget[widgetAttr].pop) {
|
364
|
+
var _widget$widgetAttr = _slicedToArray(widget[widgetAttr], 2);
|
365
|
+
|
366
|
+
var widgetAttrType = _widget$widgetAttr[0];
|
367
|
+
var widgetValue = _widget$widgetAttr[1];
|
368
|
+
|
369
|
+
// FIXME: Duplication
|
370
|
+
if (widgetValue.pop) {
|
371
|
+
// multienum / stringlist / widgetlist
|
372
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + '][]', widgetAttrType);
|
373
|
+
for (var i = 0; i < widgetValue.length; ++i) {
|
374
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + '][][formdata$workaround][]', widgetValue[i]);
|
375
|
+
}
|
376
|
+
} else if (scrivito.BinaryUtils.isFile(widgetValue) || scrivito.BinaryUtils.isBlob(widgetValue)) {
|
377
|
+
// upload
|
378
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + '][]', widgetAttrType);
|
379
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + '][]', widgetValue);
|
380
|
+
} else if (scrivito.BinaryUtils.isBlobWithName(widgetValue)) {
|
381
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + '][]', widgetAttrType);
|
382
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + '][]', widgetValue.blob_to_upload, widgetValue.filename);
|
383
|
+
} else if (typeof widgetValue === 'object') {
|
384
|
+
// blob/copy rename
|
385
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + '][]', widgetAttrType);
|
386
|
+
var _iteratorNormalCompletion6 = true;
|
387
|
+
var _didIteratorError6 = false;
|
388
|
+
var _iteratorError6 = undefined;
|
389
|
+
|
390
|
+
try {
|
391
|
+
for (var _iterator6 = Object.keys(widgetValue)[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
|
392
|
+
var l = _step6.value;
|
393
|
+
|
394
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + '][][' + l + ']', widgetValue[l]);
|
395
|
+
}
|
396
|
+
} catch (err) {
|
397
|
+
_didIteratorError6 = true;
|
398
|
+
_iteratorError6 = err;
|
399
|
+
} finally {
|
400
|
+
try {
|
401
|
+
if (!_iteratorNormalCompletion6 && _iterator6['return']) {
|
402
|
+
_iterator6['return']();
|
403
|
+
}
|
404
|
+
} finally {
|
405
|
+
if (_didIteratorError6) {
|
406
|
+
throw _iteratorError6;
|
407
|
+
}
|
408
|
+
}
|
409
|
+
}
|
410
|
+
} else {
|
411
|
+
// normal value
|
412
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + '][]', widgetAttrType);
|
413
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + '][]', widgetValue);
|
414
|
+
}
|
415
|
+
} else {
|
416
|
+
// hopefully a built-in attribute :-)
|
417
|
+
fd.append('params[obj][' + attr + '][' + widgetId + '][' + widgetAttr + ']', widget[widgetAttr]);
|
418
|
+
}
|
419
|
+
}
|
420
|
+
} catch (err) {
|
421
|
+
_didIteratorError5 = true;
|
422
|
+
_iteratorError5 = err;
|
423
|
+
} finally {
|
424
|
+
try {
|
425
|
+
if (!_iteratorNormalCompletion5 && _iterator5['return']) {
|
426
|
+
_iterator5['return']();
|
427
|
+
}
|
428
|
+
} finally {
|
429
|
+
if (_didIteratorError5) {
|
430
|
+
throw _iteratorError5;
|
431
|
+
}
|
432
|
+
}
|
433
|
+
}
|
434
|
+
}
|
435
|
+
} catch (err) {
|
436
|
+
_didIteratorError4 = true;
|
437
|
+
_iteratorError4 = err;
|
438
|
+
} finally {
|
439
|
+
try {
|
440
|
+
if (!_iteratorNormalCompletion4 && _iterator4['return']) {
|
441
|
+
_iterator4['return']();
|
442
|
+
}
|
443
|
+
} finally {
|
444
|
+
if (_didIteratorError4) {
|
445
|
+
throw _iteratorError4;
|
446
|
+
}
|
447
|
+
}
|
448
|
+
}
|
449
|
+
} else {
|
450
|
+
// hopefully a built-in attribute :-)
|
451
|
+
fd.append('params[obj][' + attr + ']', objParams[attr]);
|
452
|
+
}
|
453
|
+
}
|
454
|
+
} catch (err) {
|
455
|
+
_didIteratorError2 = true;
|
456
|
+
_iteratorError2 = err;
|
457
|
+
} finally {
|
458
|
+
try {
|
459
|
+
if (!_iteratorNormalCompletion2 && _iterator2['return']) {
|
460
|
+
_iterator2['return']();
|
461
|
+
}
|
462
|
+
} finally {
|
463
|
+
if (_didIteratorError2) {
|
464
|
+
throw _iteratorError2;
|
465
|
+
}
|
466
|
+
}
|
467
|
+
}
|
468
|
+
|
469
|
+
return fd;
|
470
|
+
}
|
471
|
+
|
472
|
+
// -- PATCH ENDS HERE --
|
473
|
+
|
474
|
+
function handleTask(task) {
|
475
|
+
switch (task.status) {
|
476
|
+
case 'success':
|
477
|
+
return task.result;
|
478
|
+
case 'error':
|
479
|
+
throw new scrivito.ClientError(task.message, undefined, task.code);
|
480
|
+
case 'open':
|
481
|
+
return scrivito.wait(2).then(function () {
|
482
|
+
return request('GET', 'tasks/' + task.id).then(function (result) {
|
483
|
+
return handleTask(result);
|
484
|
+
});
|
485
|
+
});
|
486
|
+
default:
|
487
|
+
throw new scrivito.ScrivitoError('Invalid task response (unknown status)');
|
488
|
+
}
|
489
|
+
}
|
490
|
+
})();
|