@plone/volto 16.21.3 → 16.22.1
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.
- package/.changelog.draft +21 -4
- package/.gitignore~ +71 -0
- package/.yarn/install-state.gz +0 -0
- package/CHANGELOG.md +60 -1
- package/cypress/support/commands.js +17 -0
- package/locales/ca/LC_MESSAGES/volto.po +37 -2
- package/locales/ca.json +1 -1
- package/locales/de/LC_MESSAGES/volto.po +38 -3
- package/locales/de.json +1 -1
- package/locales/en/LC_MESSAGES/volto.po +37 -2
- package/locales/en.json +1 -1
- package/locales/es/LC_MESSAGES/volto.po +37 -2
- package/locales/es.json +1 -1
- package/locales/eu/LC_MESSAGES/volto.po +37 -2
- package/locales/eu.json +1 -1
- package/locales/fi/LC_MESSAGES/volto.po +37 -2
- package/locales/fi.json +1 -1
- package/locales/fr/LC_MESSAGES/volto.po +37 -2
- package/locales/fr.json +1 -1
- package/locales/it/LC_MESSAGES/volto.po +229 -194
- package/locales/it.json +1 -1
- package/locales/ja/LC_MESSAGES/volto.po +37 -2
- package/locales/ja.json +1 -1
- package/locales/nl/LC_MESSAGES/volto.po +37 -2
- package/locales/nl.json +1 -1
- package/locales/pt/LC_MESSAGES/volto.po +37 -2
- package/locales/pt.json +1 -1
- package/locales/pt_BR/LC_MESSAGES/volto.po +37 -2
- package/locales/pt_BR.json +1 -1
- package/locales/ro/LC_MESSAGES/volto.po +37 -2
- package/locales/ro.json +1 -1
- package/locales/volto.pot +38 -3
- package/locales/volto.pot~ +4705 -0
- package/locales/zh_CN/LC_MESSAGES/volto.po +37 -2
- package/locales/zh_CN.json +1 -1
- package/news/4547.breaking~ +1 -0
- package/package.json +1 -1
- package/package.json~ +444 -0
- package/packages/volto-slate/package.json +1 -1
- package/packages/volto-slate/src/blocks/Table/TableBlockEdit.jsx +21 -212
- package/packages/volto-slate/src/blocks/Table/schema.js +122 -0
- package/packages/volto-slate/src/editor/plugins/StyleMenu/utils.js +14 -5
- package/packages/volto-slate/src/utils/blocks.js +7 -0
- package/packages/volto-slate/src/widgets/RichTextWidget.jsx +15 -8
- package/src/components/manage/Blocks/Image/schema.js +5 -1
- package/src/components/manage/Blocks/Search/components/Facets.jsx +6 -2
- package/src/components/manage/Blocks/Search/components/SearchInput.jsx +9 -2
- package/src/components/manage/Blocks/Search/hocs/withSearch.jsx +12 -1
- package/src/components/manage/Blocks/ToC/Schema.jsx +40 -7
- package/src/components/manage/Blocks/ToC/variations/HorizontalMenu.jsx +142 -8
- package/src/components/manage/Contents/Contents.jsx +8 -6
- package/src/components/manage/Contents/ContentsPropertiesModal.jsx +1 -13
- package/src/components/manage/Controlpanels/Groups/RenderGroups.jsx +2 -2
- package/src/components/manage/Controlpanels/Users/RenderUsers.jsx +2 -2
- package/src/components/manage/Controlpanels/Users/UsersControlpanel.jsx +25 -10
- package/src/components/manage/UniversalLink/UniversalLink.jsx +2 -6
- package/src/components/manage/UniversalLink/UniversalLink.test.jsx +36 -0
- package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +1 -1
- package/src/components/manage/Widgets/SelectUtils.js +1 -1
- package/src/components/theme/Error/ServerError.jsx +29 -0
- package/src/components/theme/Login/Login.jsx +1 -1
- package/src/components/theme/View/AlbumView.jsx +9 -1
- package/src/components/theme/View/EventView.jsx +6 -2
- package/src/components/theme/View/FileView.jsx +23 -18
- package/src/components/theme/View/ImageView.jsx +37 -32
- package/src/components/theme/View/LinkView.jsx +4 -1
- package/src/components/theme/View/ListingView.jsx +33 -27
- package/src/components/theme/View/SummaryView.jsx +47 -38
- package/src/components/theme/View/TabularView.jsx +59 -53
- package/src/config/Views.jsx +2 -0
- package/src/config/index.js +1 -0
- package/src/config/index.js~ +223 -0
- package/src/config/server.js +2 -0
- package/src/express-middleware/files.js +8 -6
- package/src/express-middleware/images.js +7 -1
- package/src/express-middleware/ok.js +16 -0
- package/src/helpers/Url/Url.js +22 -1
- package/src/helpers/Url/Url.test.js +41 -0
- package/src/middleware/api.js +14 -2
- package/src/reducers/actions/actions.js +7 -5
- package/src/reducers/actions/actions.test.js +70 -0
- package/src/server.jsx +9 -0
- package/theme/themes/pastanaga/extras/main.less +2 -1
- package/theme/themes/pastanaga/extras/toc.less +29 -0
- package/packages/volto-slate/build/messages/src/blocks/Table/TableBlockEdit.json +0 -90
- package/packages/volto-slate/build/messages/src/blocks/Text/DefaultTextBlockEditor.json +0 -6
- package/packages/volto-slate/build/messages/src/blocks/Text/DetachedTextBlockEditor.json +0 -6
- package/packages/volto-slate/build/messages/src/blocks/Text/SlashMenu.json +0 -6
- package/packages/volto-slate/build/messages/src/editor/plugins/AdvancedLink/index.json +0 -10
- package/packages/volto-slate/build/messages/src/editor/plugins/Link/index.json +0 -10
- package/packages/volto-slate/build/messages/src/editor/plugins/Table/index.json +0 -30
- package/packages/volto-slate/build/messages/src/elementEditor/messages.json +0 -10
- package/packages/volto-slate/build/messages/src/widgets/HtmlSlateWidget.json +0 -6
- package/packages/volto-slate/build/messages/src/widgets/RichTextWidgetView.json +0 -6
- package/pyvenv.cfg +0 -3
- package/share/man/man1/ttx.1 +0 -225
package/src/config/server.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import imagesMiddleware from '@plone/volto/express-middleware/images';
|
|
2
2
|
import filesMiddleware from '@plone/volto/express-middleware/files';
|
|
3
3
|
import robotstxtMiddleware from '@plone/volto/express-middleware/robotstxt';
|
|
4
|
+
import okMiddleware from '@plone/volto/express-middleware/ok';
|
|
4
5
|
import sitemapMiddleware from '@plone/volto/express-middleware/sitemap';
|
|
5
6
|
import staticsMiddleware from '@plone/volto/express-middleware/static';
|
|
6
7
|
import devProxyMiddleware from '@plone/volto/express-middleware/devproxy';
|
|
@@ -11,6 +12,7 @@ const settings = {
|
|
|
11
12
|
filesMiddleware(),
|
|
12
13
|
imagesMiddleware(),
|
|
13
14
|
robotstxtMiddleware(),
|
|
15
|
+
okMiddleware(),
|
|
14
16
|
sitemapMiddleware(),
|
|
15
17
|
staticsMiddleware(),
|
|
16
18
|
],
|
|
@@ -2,11 +2,13 @@ import express from 'express';
|
|
|
2
2
|
import { getAPIResourceWithAuth } from '@plone/volto/helpers';
|
|
3
3
|
|
|
4
4
|
const HEADERS = [
|
|
5
|
-
'
|
|
6
|
-
'
|
|
7
|
-
'
|
|
8
|
-
'
|
|
9
|
-
'
|
|
5
|
+
'accept-ranges',
|
|
6
|
+
'cache-control',
|
|
7
|
+
'content-disposition',
|
|
8
|
+
'content-range',
|
|
9
|
+
'content-type',
|
|
10
|
+
'x-sendfile',
|
|
11
|
+
'x-accel-redirect',
|
|
10
12
|
];
|
|
11
13
|
|
|
12
14
|
function filesMiddlewareFn(req, res, next) {
|
|
@@ -14,7 +16,7 @@ function filesMiddlewareFn(req, res, next) {
|
|
|
14
16
|
.then((resource) => {
|
|
15
17
|
// Just forward the headers that we need
|
|
16
18
|
HEADERS.forEach((header) => {
|
|
17
|
-
if (resource.
|
|
19
|
+
if (resource.headers[header]) {
|
|
18
20
|
res.set(header, resource.get(header));
|
|
19
21
|
}
|
|
20
22
|
});
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import { getAPIResourceWithAuth } from '@plone/volto/helpers';
|
|
3
3
|
|
|
4
|
-
const HEADERS = [
|
|
4
|
+
const HEADERS = [
|
|
5
|
+
'content-type',
|
|
6
|
+
'content-disposition',
|
|
7
|
+
'cache-control',
|
|
8
|
+
'x-sendfile',
|
|
9
|
+
'x-accel-redirect',
|
|
10
|
+
];
|
|
5
11
|
|
|
6
12
|
function imageMiddlewareFn(req, res, next) {
|
|
7
13
|
getAPIResourceWithAuth(req)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import config from '@plone/volto/registry';
|
|
3
|
+
|
|
4
|
+
const ok = function (req, res, next) {
|
|
5
|
+
res.type('text/plain');
|
|
6
|
+
res.set('Expires', 'Sat, 1 Jan 2000 00:00:00 GMT');
|
|
7
|
+
res.set('Cache-Control', 'max-age=0, must-revalidate, private');
|
|
8
|
+
res.send('ok');
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export default function () {
|
|
12
|
+
const middleware = express.Router();
|
|
13
|
+
middleware.all(config?.settings?.okRoute || '/ok', ok);
|
|
14
|
+
middleware.id = 'ok';
|
|
15
|
+
return middleware;
|
|
16
|
+
}
|
package/src/helpers/Url/Url.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module helpers/Url
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { last, memoize } from 'lodash';
|
|
6
|
+
import { last, memoize, isArray, isObject, isString } from 'lodash';
|
|
7
7
|
import { urlRegex, telRegex, mailRegex } from './urlRegex';
|
|
8
8
|
import prependHttp from 'prepend-http';
|
|
9
9
|
import config from '@plone/volto/registry';
|
|
@@ -251,6 +251,27 @@ export function isUrl(url) {
|
|
|
251
251
|
return urlRegex().test(url);
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
+
/**
|
|
255
|
+
* Get field url
|
|
256
|
+
* @method getFieldURL
|
|
257
|
+
* @param {object} data
|
|
258
|
+
* @returns {string | any} URL string value if field is of url type or any.
|
|
259
|
+
*/
|
|
260
|
+
export const getFieldURL = (data) => {
|
|
261
|
+
let url = data;
|
|
262
|
+
const _isObject = data && isObject(data) && !isArray(data);
|
|
263
|
+
if (_isObject && data['@type'] === 'URL') {
|
|
264
|
+
url = data['value'] ?? data['url'] ?? data['href'] ?? data;
|
|
265
|
+
} else if (_isObject) {
|
|
266
|
+
url = data['@id'] ?? data['url'] ?? data['href'] ?? data;
|
|
267
|
+
}
|
|
268
|
+
if (isArray(data)) {
|
|
269
|
+
url = data.map((item) => getFieldURL(item));
|
|
270
|
+
}
|
|
271
|
+
if (isString(url) && isInternalURL(url)) return flattenToAppURL(url);
|
|
272
|
+
return url;
|
|
273
|
+
};
|
|
274
|
+
|
|
254
275
|
/**
|
|
255
276
|
* Normalize URL, adds protocol (if required eg. user has not entered the protocol)
|
|
256
277
|
* @method normalizeUrl
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
isCmsUi,
|
|
11
11
|
isInternalURL,
|
|
12
12
|
isUrl,
|
|
13
|
+
getFieldURL,
|
|
13
14
|
normalizeUrl,
|
|
14
15
|
removeProtocol,
|
|
15
16
|
addAppURL,
|
|
@@ -260,6 +261,46 @@ describe('Url', () => {
|
|
|
260
261
|
expect(isUrl(href)).toBe(false);
|
|
261
262
|
});
|
|
262
263
|
});
|
|
264
|
+
describe('getFieldURL', () => {
|
|
265
|
+
it('returns app URL if the field is a string', () => {
|
|
266
|
+
const field = `${settings.apiPath}/foo/bar`;
|
|
267
|
+
expect(getFieldURL(field)).toBe('/foo/bar');
|
|
268
|
+
});
|
|
269
|
+
it('returns app URL if the field is an object with "@id"', () => {
|
|
270
|
+
const field = { '@id': '/foo/bar' };
|
|
271
|
+
expect(getFieldURL(field)).toBe('/foo/bar');
|
|
272
|
+
});
|
|
273
|
+
it('returns app URL if the field is an object with type URL', () => {
|
|
274
|
+
const field = { '@type': 'URL', value: '/foo/bar' };
|
|
275
|
+
expect(getFieldURL(field)).toBe('/foo/bar');
|
|
276
|
+
});
|
|
277
|
+
it('returns app URL if the field is an object with url or href properties', () => {
|
|
278
|
+
const fieldUrl = { url: '/foo/bar' };
|
|
279
|
+
const fieldHref = { href: '/foo/bar' };
|
|
280
|
+
expect(getFieldURL(fieldUrl)).toBe('/foo/bar');
|
|
281
|
+
expect(getFieldURL(fieldHref)).toBe('/foo/bar');
|
|
282
|
+
});
|
|
283
|
+
it('returns array of app URL if the field is an array of strings', () => {
|
|
284
|
+
const field = [
|
|
285
|
+
`${settings.apiPath}/foo/bar/1`,
|
|
286
|
+
`${settings.apiPath}/foo/bar/2`,
|
|
287
|
+
];
|
|
288
|
+
expect(getFieldURL(field)).toStrictEqual(['/foo/bar/1', '/foo/bar/2']);
|
|
289
|
+
});
|
|
290
|
+
it('returns array of app URL if the field is an array of objects', () => {
|
|
291
|
+
const field = [
|
|
292
|
+
{
|
|
293
|
+
'@type': 'URL',
|
|
294
|
+
value: `${settings.apiPath}/foo/bar/1`,
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
'@type': 'URL',
|
|
298
|
+
value: `${settings.apiPath}/foo/bar/2`,
|
|
299
|
+
},
|
|
300
|
+
];
|
|
301
|
+
expect(getFieldURL(field)).toStrictEqual(['/foo/bar/1', '/foo/bar/2']);
|
|
302
|
+
});
|
|
303
|
+
});
|
|
263
304
|
describe('normalizeUrl', () => {
|
|
264
305
|
it('normalizeUrl test', () => {
|
|
265
306
|
const href = `www.example.com`;
|
package/src/middleware/api.js
CHANGED
|
@@ -250,10 +250,22 @@ const apiMiddlewareFactory = (api) => ({ dispatch, getState }) => (next) => (
|
|
|
250
250
|
};
|
|
251
251
|
});
|
|
252
252
|
}
|
|
253
|
-
|
|
253
|
+
try {
|
|
254
|
+
return next({ ...rest, result, type: `${type}_SUCCESS` });
|
|
255
|
+
} catch (error) {
|
|
256
|
+
// There was an exception while processing reducers or downstream middleware.
|
|
257
|
+
next({
|
|
258
|
+
...rest,
|
|
259
|
+
error: { status: 500, error },
|
|
260
|
+
type: `${type}_FAIL`,
|
|
261
|
+
});
|
|
262
|
+
// Rethrow the original exception on the client side only,
|
|
263
|
+
// so it doesn't fall through to express on the server.
|
|
264
|
+
if (__CLIENT__) throw error;
|
|
265
|
+
}
|
|
254
266
|
},
|
|
255
267
|
(error) => {
|
|
256
|
-
// Only
|
|
268
|
+
// Only SSR can set ECONNREFUSED
|
|
257
269
|
if (error.code === 'ECONNREFUSED') {
|
|
258
270
|
next({
|
|
259
271
|
...rest,
|
|
@@ -57,11 +57,13 @@ export default function actions(state = initialState, action = {}) {
|
|
|
57
57
|
}
|
|
58
58
|
return state;
|
|
59
59
|
case `${LIST_ACTIONS}_SUCCESS`:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
)
|
|
64
|
-
|
|
60
|
+
// Even if the expander is set or not, if the LIST_ACTIONS is
|
|
61
|
+
// called, we want it to store the data if the actions data is
|
|
62
|
+
// not set in the expander data (['@components']) but in the "normal"
|
|
63
|
+
// action result (we look for the object property returned by the endpoint)
|
|
64
|
+
// Unfortunately, this endpoint returns all the actions in a plain object
|
|
65
|
+
// with no structure :(
|
|
66
|
+
if (action.result.object) {
|
|
65
67
|
return {
|
|
66
68
|
...state,
|
|
67
69
|
error: null,
|
|
@@ -207,4 +207,74 @@ describe('Actions reducer - (ACTIONS)GET_CONTENT', () => {
|
|
|
207
207
|
loading: false,
|
|
208
208
|
});
|
|
209
209
|
});
|
|
210
|
+
|
|
211
|
+
it('should handle (ACTIONS)LIST_ACTIONS (standalone with apiExpander enabled)', () => {
|
|
212
|
+
expect(
|
|
213
|
+
actions(undefined, {
|
|
214
|
+
type: `${LIST_ACTIONS}_SUCCESS`,
|
|
215
|
+
result: {
|
|
216
|
+
object: [],
|
|
217
|
+
object_buttons: [],
|
|
218
|
+
site_actions: [],
|
|
219
|
+
user: [
|
|
220
|
+
{
|
|
221
|
+
icon: '',
|
|
222
|
+
id: 'preferences',
|
|
223
|
+
title: 'Preferences',
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
icon: '',
|
|
227
|
+
id: 'dashboard',
|
|
228
|
+
title: 'Dashboard',
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
icon: '',
|
|
232
|
+
id: 'plone_setup',
|
|
233
|
+
title: 'Site Setup',
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
icon: '',
|
|
237
|
+
id: 'logout',
|
|
238
|
+
title: 'Log out',
|
|
239
|
+
},
|
|
240
|
+
],
|
|
241
|
+
document_actions: [],
|
|
242
|
+
portal_tabs: [],
|
|
243
|
+
},
|
|
244
|
+
}),
|
|
245
|
+
).toEqual({
|
|
246
|
+
error: null,
|
|
247
|
+
actions: {
|
|
248
|
+
object: [],
|
|
249
|
+
object_buttons: [],
|
|
250
|
+
site_actions: [],
|
|
251
|
+
user: [
|
|
252
|
+
{
|
|
253
|
+
icon: '',
|
|
254
|
+
id: 'preferences',
|
|
255
|
+
title: 'Preferences',
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
icon: '',
|
|
259
|
+
id: 'dashboard',
|
|
260
|
+
title: 'Dashboard',
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
icon: '',
|
|
264
|
+
id: 'plone_setup',
|
|
265
|
+
title: 'Site Setup',
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
icon: '',
|
|
269
|
+
id: 'logout',
|
|
270
|
+
title: 'Log out',
|
|
271
|
+
},
|
|
272
|
+
],
|
|
273
|
+
document_actions: [],
|
|
274
|
+
portal_tabs: [],
|
|
275
|
+
},
|
|
276
|
+
loaded: true,
|
|
277
|
+
loading: false,
|
|
278
|
+
});
|
|
279
|
+
});
|
|
210
280
|
});
|
package/src/server.jsx
CHANGED
|
@@ -263,6 +263,15 @@ server.get('/*', (req, res) => {
|
|
|
263
263
|
const readCriticalCss =
|
|
264
264
|
config.settings.serverConfig.readCriticalCss || defaultReadCriticalCss;
|
|
265
265
|
|
|
266
|
+
// If we are showing an "old browser" warning,
|
|
267
|
+
// make sure it doesn't get cached in a shared cache
|
|
268
|
+
const browserdetect = store.getState().browserdetect;
|
|
269
|
+
if (config.settings.notSupportedBrowsers.includes(browserdetect?.name)) {
|
|
270
|
+
res.set({
|
|
271
|
+
'Cache-Control': 'private',
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
|
|
266
275
|
if (context.url) {
|
|
267
276
|
res.redirect(flattenToAppURL(context.url));
|
|
268
277
|
} else if (context.error_code) {
|
|
@@ -26,7 +26,7 @@ body {
|
|
|
26
26
|
&.has-toolbar-menu-open,
|
|
27
27
|
&.has-mobile-menu-open {
|
|
28
28
|
// The body scroll locker when the toolbar or the mobile menu are active in mobile.
|
|
29
|
-
@media only screen and (max-width: @
|
|
29
|
+
@media only screen and (max-width: @largestTabletScreen) {
|
|
30
30
|
overflow: hidden;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -588,4 +588,5 @@ body.has-toolbar-collapsed .mobile-menu {
|
|
|
588
588
|
@import 'login';
|
|
589
589
|
@import 'language-selector';
|
|
590
590
|
@import 'views';
|
|
591
|
+
@import 'toc';
|
|
591
592
|
.loadUIOverrides();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
.table-of-contents.horizontalMenu.sticky-toc {
|
|
2
|
+
position: sticky;
|
|
3
|
+
z-index: 1;
|
|
4
|
+
top: 0;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.table-of-contents.horizontalMenu .hidden {
|
|
8
|
+
z-index: -1;
|
|
9
|
+
pointer-events: none;
|
|
10
|
+
visibility: hidden;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.table-of-contents.horizontalMenu .hidden-dropdown {
|
|
14
|
+
display: none !important;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.table-of-contents.horizontalMenu .item.dropdown {
|
|
18
|
+
position: absolute !important;
|
|
19
|
+
right: 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.table-of-contents.horizontalMenu > .ui.menu {
|
|
23
|
+
position: relative;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.table-of-contents.horizontalMenu .item.dropdown .focused > a {
|
|
27
|
+
border: 2px solid black !important;
|
|
28
|
+
border-radius: 4px;
|
|
29
|
+
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"id": "Insert row before",
|
|
4
|
-
"defaultMessage": "Insert row before"
|
|
5
|
-
},
|
|
6
|
-
{
|
|
7
|
-
"id": "Insert row after",
|
|
8
|
-
"defaultMessage": "Insert row after"
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": "Delete row",
|
|
12
|
-
"defaultMessage": "Delete row"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"id": "Insert col before",
|
|
16
|
-
"defaultMessage": "Insert col before"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"id": "Insert col after",
|
|
20
|
-
"defaultMessage": "Insert col after"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"id": "Delete col",
|
|
24
|
-
"defaultMessage": "Delete col"
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"id": "Hide headers",
|
|
28
|
-
"defaultMessage": "Hide headers"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"id": "Make the table sortable",
|
|
32
|
-
"defaultMessage": "Make the table sortable"
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"id": "Visible only in view mode",
|
|
36
|
-
"defaultMessage": "Visible only in view mode"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"id": "Fixed width table cells",
|
|
40
|
-
"defaultMessage": "Fixed width table cells"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"id": "Make the table compact",
|
|
44
|
-
"defaultMessage": "Make the table compact"
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
"id": "Reduce complexity",
|
|
48
|
-
"defaultMessage": "Reduce complexity"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"id": "Divide each row into separate cells",
|
|
52
|
-
"defaultMessage": "Divide each row into separate cells"
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"id": "Table color inverted",
|
|
56
|
-
"defaultMessage": "Table color inverted"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"id": "Stripe alternate rows with color",
|
|
60
|
-
"defaultMessage": "Stripe alternate rows with color"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"id": "Left",
|
|
64
|
-
"defaultMessage": "Left"
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"id": "Center",
|
|
68
|
-
"defaultMessage": "Center"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"id": "Right",
|
|
72
|
-
"defaultMessage": "Right"
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
"id": "Bottom",
|
|
76
|
-
"defaultMessage": "Bottom"
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
"id": "Middle",
|
|
80
|
-
"defaultMessage": "Middle"
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
"id": "Top",
|
|
84
|
-
"defaultMessage": "Top"
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
"id": "Table",
|
|
88
|
-
"defaultMessage": "Table"
|
|
89
|
-
}
|
|
90
|
-
]
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"id": "Delete table",
|
|
4
|
-
"defaultMessage": "Delete table"
|
|
5
|
-
},
|
|
6
|
-
{
|
|
7
|
-
"id": "Insert row before",
|
|
8
|
-
"defaultMessage": "Insert row before"
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": "Insert row after",
|
|
12
|
-
"defaultMessage": "Insert row after"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"id": "Delete row",
|
|
16
|
-
"defaultMessage": "Delete row"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"id": "Insert col before",
|
|
20
|
-
"defaultMessage": "Insert col before"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"id": "Insert col after",
|
|
24
|
-
"defaultMessage": "Insert col after"
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"id": "Delete col",
|
|
28
|
-
"defaultMessage": "Delete col"
|
|
29
|
-
}
|
|
30
|
-
]
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"id": "An error has occurred while editing \"{name}\" field. We have been notified and we are looking into it. Please save your work and retry. If the issue persists please contact the site administrator.",
|
|
4
|
-
"defaultMessage": "An error has occurred while editing \"{name}\" field. We have been notified and we are looking into it. Please save your work and retry. If the issue persists please contact the site administrator."
|
|
5
|
-
}
|
|
6
|
-
]
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"id": "An error has occurred while rendering \"{name}\" field. We have been notified and we are looking into it. If the issue persists please contact the site administrator.",
|
|
4
|
-
"defaultMessage": "An error has occurred while rendering \"{name}\" field. We have been notified and we are looking into it. If the issue persists please contact the site administrator."
|
|
5
|
-
}
|
|
6
|
-
]
|
package/pyvenv.cfg
DELETED