@entryscape/rdforms 10.8.1 → 10.9.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.
- package/dist/rdforms.bmd.js +38 -6
- package/dist/rdforms.bootstrap.js +43 -11
- package/dist/rdforms.jquery.js +37 -5
- package/dist/rdforms.node.js +159 -138
- package/dist/rdforms.react.js +57 -25
- package/package.json +3 -3
- package/src/template/Item.js +3 -0
- package/src/view/Editor.js +3 -0
- package/src/view/Presenter.js +17 -0
- package/src/view/View.js +29 -2
- package/src/view/bmd/style.css +2 -1
- package/src/view/bootstrap/labels.js +15 -10
- package/src/view/jquery/components.js +18 -0
- package/src/view/jquery/style.css +3 -2
- package/src/view/react/choiceEditors/ChoiceLookupAndInlineSearch.js +1 -1
- package/src/view/react/components.js +26 -0
- package/src/view/react/labels.js +16 -9
- package/src/view/react/style.css +15 -3
- package/src/view/react/text.js +29 -9
- package/src/view/renderingContext.js +6 -0
- package/src/view/resources/nls.json +3 -1
- package/src/view/resources/rdforms.css +45 -0
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"application profile",
|
|
9
9
|
"linked data"
|
|
10
10
|
],
|
|
11
|
-
"version": "10.
|
|
11
|
+
"version": "10.9.0",
|
|
12
12
|
"main": "dist/rdforms.node.js",
|
|
13
13
|
"browser": "dist/rdforms.react.js",
|
|
14
14
|
"module": "main.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@emotion/react": "^11.4.1",
|
|
20
20
|
"@emotion/styled": "^11.3.0",
|
|
21
|
-
"@entryscape/rdfjson": "^2.
|
|
21
|
+
"@entryscape/rdfjson": "^2.6.0",
|
|
22
22
|
"@fortawesome/fontawesome-free": "^5.8.1",
|
|
23
23
|
"@mui/icons-material": "^5.0.3",
|
|
24
24
|
"@mui/material": "^5.0.3",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"react-dom": "^17.0.2",
|
|
45
45
|
"react-hooks-lib": "^0.1.5",
|
|
46
46
|
"regenerator-runtime": "^0.13.2",
|
|
47
|
-
"select2": "4.0.
|
|
47
|
+
"select2": "4.0.8",
|
|
48
48
|
"selectize-bootstrap4-theme": "^2.0.2",
|
|
49
49
|
"sizzle": "^2.3.3",
|
|
50
50
|
"terser-webpack-plugin": "^1.3.0",
|
package/src/template/Item.js
CHANGED
package/src/view/Editor.js
CHANGED
package/src/view/Presenter.js
CHANGED
|
@@ -103,4 +103,21 @@ export default class Presenter extends View {
|
|
|
103
103
|
addComponent(fieldDiv, binding) {
|
|
104
104
|
renderingContext.renderPresenter(fieldDiv, binding, this.context);
|
|
105
105
|
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Truncate for presentations when:
|
|
109
|
+
* - not a group (repeated labels does not look nice being truncated)
|
|
110
|
+
* - if truncate setting is enabled on the presenter or the individual item ('truncate' and not 'noTruncate' is set)
|
|
111
|
+
* - if the truncate limit is exceeded
|
|
112
|
+
*
|
|
113
|
+
* @param item
|
|
114
|
+
* @param bindings
|
|
115
|
+
* @return {number}
|
|
116
|
+
*/
|
|
117
|
+
truncateAt(item, bindings) {
|
|
118
|
+
return item.getType() !== 'group' &&
|
|
119
|
+
bindings && bindings.length > this.truncateLimit &&
|
|
120
|
+
(this.truncate || item.hasStyle('truncate')) &&
|
|
121
|
+
!item.hasStyle('noTruncate') ? this.truncateLimit : -1;
|
|
122
|
+
}
|
|
106
123
|
}
|
package/src/view/View.js
CHANGED
|
@@ -20,6 +20,8 @@ export default class View {
|
|
|
20
20
|
this.compact = params.compact !== false;
|
|
21
21
|
this.showDescription = params.showDescription === true;
|
|
22
22
|
this.styleCls = params.styleCls || '';
|
|
23
|
+
this.truncateLimit = params.truncateLimit !== undefined ? params.truncateLimit : 10;
|
|
24
|
+
this.truncate = params.truncate !== undefined ? params.truncate : false;
|
|
23
25
|
if (Array.isArray(params.filterPredicates)) {
|
|
24
26
|
this.filterPredicates =
|
|
25
27
|
params.filterPredicates.reduce((prev, current) => { prev[current] = true; return prev; }, {});
|
|
@@ -223,11 +225,16 @@ export default class View {
|
|
|
223
225
|
this.context = { view: this };
|
|
224
226
|
lastRow = this.addRow(lastRow, bindings[0], true);
|
|
225
227
|
} else {
|
|
228
|
+
const truncateLimit = this.truncateAt(item, bindings);
|
|
226
229
|
for (let i = 0; i < bindings.length; i++) {
|
|
227
230
|
// Add row with label if first row of same item or the binding is a group.
|
|
228
231
|
this.context = { view: this };
|
|
229
232
|
lastRow = this.addRow(lastRow, bindings[i], i === 0 ||
|
|
230
|
-
bindings[i] instanceof GroupBinding);
|
|
233
|
+
bindings[i] instanceof GroupBinding, i, truncateLimit);
|
|
234
|
+
}
|
|
235
|
+
if (truncateLimit !== -1) {
|
|
236
|
+
const rdformsFields = renderingContext.domQuery('.rdformsFields', lastRow);
|
|
237
|
+
if (rdformsFields) renderingContext.addTruncateControl(rdformsFields, this.context);
|
|
231
238
|
}
|
|
232
239
|
}
|
|
233
240
|
} else {
|
|
@@ -250,7 +257,7 @@ export default class View {
|
|
|
250
257
|
* @param {Boolean} includeLabel, tells if a label should be added, if undefined a label is
|
|
251
258
|
* added only when the binding is a GroupBinding.
|
|
252
259
|
*/
|
|
253
|
-
addRow(lastRow, binding, includeLabel) {
|
|
260
|
+
addRow(lastRow, binding, includeLabel, index, truncateLimit) {
|
|
254
261
|
let _includeLabel = includeLabel;
|
|
255
262
|
let fieldDiv;
|
|
256
263
|
let newRow;
|
|
@@ -269,6 +276,12 @@ export default class View {
|
|
|
269
276
|
newRow = this.createRowNode(lastRow, binding, item);
|
|
270
277
|
const n = renderingContext.domCreate('div', newRow);
|
|
271
278
|
renderingContext.domClassToggle(n, 'rdformsFields', true);
|
|
279
|
+
if (truncateLimit !== -1) {
|
|
280
|
+
renderingContext.domClassToggle(n, 'rdformsTruncated', true);
|
|
281
|
+
}
|
|
282
|
+
if (item.hasStyle('inline')) {
|
|
283
|
+
renderingContext.domClassToggle(n, 'rdformsInline', true);
|
|
284
|
+
}
|
|
272
285
|
fieldDiv = renderingContext.domCreate('div', n);
|
|
273
286
|
this.createEndOfRowNode(newRow, binding, item);
|
|
274
287
|
} else {
|
|
@@ -277,9 +290,15 @@ export default class View {
|
|
|
277
290
|
if (rdformsFields != null) {
|
|
278
291
|
fieldDiv = renderingContext.domCreate('div', rdformsFields);
|
|
279
292
|
renderingContext.domClassToggle(fieldDiv, 'rdformsRepeatedValue', true);
|
|
293
|
+
if (truncateLimit !== -1 && index >= truncateLimit) {
|
|
294
|
+
renderingContext.domClassToggle(fieldDiv, 'rdformsMaybeTruncated', true);
|
|
295
|
+
}
|
|
280
296
|
} else { // Unless we have an non-expanded row.
|
|
281
297
|
const n = renderingContext.domCreate('div', lastRow);
|
|
282
298
|
renderingContext.domClassToggle(n, 'rdformsFields', true);
|
|
299
|
+
if (item.hasStyle('inline')) {
|
|
300
|
+
renderingContext.domClassToggle(n, 'rdformsInline', true);
|
|
301
|
+
}
|
|
283
302
|
fieldDiv = renderingContext.domCreate('div', n);
|
|
284
303
|
this.createEndOfRowNode(newRow, binding, item);
|
|
285
304
|
}
|
|
@@ -333,6 +352,10 @@ export default class View {
|
|
|
333
352
|
if (binding && this.filterBinding(binding)) {
|
|
334
353
|
renderingContext.domClassToggle(rowNode, 'hiddenProperty', true);
|
|
335
354
|
}
|
|
355
|
+
|
|
356
|
+
if (item.hasStyle('card')) {
|
|
357
|
+
renderingContext.domClassToggle(rowNode, 'rdformsCard', true);
|
|
358
|
+
}
|
|
336
359
|
return rowNode;
|
|
337
360
|
}
|
|
338
361
|
|
|
@@ -425,4 +448,8 @@ export default class View {
|
|
|
425
448
|
isMultiValued(item) {
|
|
426
449
|
return false;
|
|
427
450
|
}
|
|
451
|
+
|
|
452
|
+
truncateAt(item, bindings) {
|
|
453
|
+
return -1;
|
|
454
|
+
}
|
|
428
455
|
}
|
package/src/view/bmd/style.css
CHANGED
|
@@ -111,7 +111,8 @@
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
.rdformsEditor .cardgroupEditor>.rdformsFields>.rdformsGroup,
|
|
114
|
-
.cardgroup>.rdformsFields>.rdformsGroup
|
|
114
|
+
.cardgroup>.rdformsFields>.rdformsGroup,
|
|
115
|
+
.rdformsCard>.rdformsFields>.rdformsGroup {
|
|
115
116
|
border-radius: 2px;
|
|
116
117
|
color: rgba(0,0,0, 0.87);
|
|
117
118
|
background: #fff;
|
|
@@ -21,15 +21,18 @@ renderingContext.renderEditorLabel = (rowNode, binding, item, context) => {
|
|
|
21
21
|
const $label = jquery('<span class="rdformsLabel" tabindex="0">').text(label).appendTo($labelDiv);
|
|
22
22
|
const card = item.getCardinality();
|
|
23
23
|
const b = context.view.messages;
|
|
24
|
-
if
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
// Only show mark if there is a property that allows the item to have an expression on its own
|
|
25
|
+
if (item.getProperty()) {
|
|
26
|
+
if (card.min > 0) {
|
|
27
|
+
jquery('<span class="rdformsMark rdformsMandatoryMark">').text(b.mandatoryMark)
|
|
28
|
+
.appendTo($labelDiv);
|
|
29
|
+
} else if (card.pref > 0) {
|
|
30
|
+
jquery('<span class="rdformsMark rdformsRecommendedMark">').text(b.recommendedMark)
|
|
31
|
+
.appendTo($labelDiv);
|
|
32
|
+
} else {
|
|
33
|
+
jquery('<span class="rdformsMark rdformsOptionalMark">').text(b.optionalMark)
|
|
34
|
+
.appendTo($labelDiv);
|
|
35
|
+
}
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
// Buttons of various sorts
|
|
@@ -39,7 +42,9 @@ renderingContext.renderEditorLabel = (rowNode, binding, item, context) => {
|
|
|
39
42
|
(card.max === null || card.max !== card.min)) {
|
|
40
43
|
// If not table or min and max are not the same, then add buttons.
|
|
41
44
|
if (item.getType() === 'group') {
|
|
42
|
-
|
|
45
|
+
if (item.getProperty()) {
|
|
46
|
+
renderingContext.addGroupButtons(rowNode, $labelDiv[0], binding, context);
|
|
47
|
+
}
|
|
43
48
|
} else {
|
|
44
49
|
renderingContext.addCreateChildButton(rowNode, $labelDiv[0], binding, context);
|
|
45
50
|
}
|
|
@@ -42,3 +42,21 @@ renderingContext.domClassToggle = (node, classStr, addOrRemove) => {
|
|
|
42
42
|
};
|
|
43
43
|
|
|
44
44
|
renderingContext.prePresenterViewRenderer = renderingContext.preEditorViewRenderer;
|
|
45
|
+
|
|
46
|
+
renderingContext.addTruncateControl = (fieldsDiv, context) => {
|
|
47
|
+
const bundle = context.view.messages;
|
|
48
|
+
const showMore = renderingContext.domCreate('button', fieldsDiv);
|
|
49
|
+
renderingContext.domClassToggle(showMore, 'rdformsShowMore', true);
|
|
50
|
+
showMore.innerText = bundle.showMore;
|
|
51
|
+
showMore.onclick = () => {
|
|
52
|
+
renderingContext.domClassToggle(fieldsDiv, 'rdformsTruncated', false);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const showLess = renderingContext.domCreate('button', fieldsDiv);
|
|
56
|
+
renderingContext.domClassToggle(showLess, 'rdformsShowLess', true);
|
|
57
|
+
|
|
58
|
+
showLess.innerText = bundle.showLess;
|
|
59
|
+
showLess.onclick = () => {
|
|
60
|
+
renderingContext.domClassToggle(fieldsDiv, 'rdformsTruncated', true);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
@@ -20,8 +20,9 @@
|
|
|
20
20
|
margin-bottom: 0.5em;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
.rdformsEditor .cardgroupEditor>.rdformsFields>.rdformsGroup
|
|
24
|
-
.cardgroup>.rdformsFields>.rdformsGroup
|
|
23
|
+
.rdformsEditor .cardgroupEditor>.rdformsFields>.rdformsGroup,
|
|
24
|
+
.cardgroup>.rdformsFields>.rdformsGroup,
|
|
25
|
+
.rdformsCard>.rdformsFields>.rdformsGroup {
|
|
25
26
|
padding: 2px 5px 5px 10px;
|
|
26
27
|
margin-right: -5px;
|
|
27
28
|
margin-bottom: 14px;
|
|
@@ -95,7 +95,7 @@ export default (props) => {
|
|
|
95
95
|
value.original.upgrade(props.binding, (upgradedChoice) => {
|
|
96
96
|
setValue(editLocalizedChoice(upgradedChoice));
|
|
97
97
|
setError(upgradedChoice.mismatch === true);
|
|
98
|
-
});
|
|
98
|
+
}, props.field);
|
|
99
99
|
};
|
|
100
100
|
|
|
101
101
|
const ngId = useNamedGraphId(binding, props.context);
|
|
@@ -2,6 +2,7 @@ import React, { useState, useEffect, useRef } from 'react';
|
|
|
2
2
|
import WarningIcon from '@mui/icons-material/Warning';
|
|
3
3
|
import ErrorIcon from '@mui/icons-material/Error';
|
|
4
4
|
import OfflineBoltIcon from '@mui/icons-material/OfflineBolt';
|
|
5
|
+
import Button from '@mui/material/Button';
|
|
5
6
|
import renderingContext from '../renderingContext';
|
|
6
7
|
import './labels';
|
|
7
8
|
import './text';
|
|
@@ -223,6 +224,7 @@ renderingContext.preEditorRenderer = (fieldDiv, binding, context) => {
|
|
|
223
224
|
if (binding.getItem().getType() !== 'group' && context.noCardinalityButtons !== true) {
|
|
224
225
|
context.controlDiv = newStruct('div', fieldDiv);
|
|
225
226
|
renderingContext.domClassToggle(context.controlDiv, 'rdformsFieldControl');
|
|
227
|
+
|
|
226
228
|
// eslint-disable-next-line no-unused-vars
|
|
227
229
|
const RemoveButton = renderingContext.addRemoveButton(fieldDiv, binding, context);
|
|
228
230
|
context.controlDiv.appendChild(<RemoveButton key={`${binding.getHash()}_removeButton`}></RemoveButton>);
|
|
@@ -250,3 +252,27 @@ renderingContext.renderValidationMessage = (fieldDiv, type, message) => {
|
|
|
250
252
|
};
|
|
251
253
|
|
|
252
254
|
renderingContext.multiValueSupport = true;
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
renderingContext.addTruncateControl = (fieldsDiv, context) => {
|
|
258
|
+
const Component = () => {
|
|
259
|
+
const [truncated, setTruncated] = useState(true);
|
|
260
|
+
const bundle = context.view.messages;
|
|
261
|
+
const showLess = () => {
|
|
262
|
+
renderingContext.domClassToggle(fieldsDiv, 'rdformsTruncated', true);
|
|
263
|
+
setTruncated(true);
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
const showMore = () => {
|
|
267
|
+
renderingContext.domClassToggle(fieldsDiv, 'rdformsTruncated', false);
|
|
268
|
+
setTruncated(false);
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
return <>
|
|
272
|
+
{truncated ?
|
|
273
|
+
(<Button className="rdformsShowMore" size="small" onClick={showMore}>{bundle.showMore}</Button>) :
|
|
274
|
+
(<Button className="rdformsShowLess" size="small" onClick={showLess}>{bundle.showLess}</Button>)}
|
|
275
|
+
</>;
|
|
276
|
+
};
|
|
277
|
+
fieldsDiv.appendChild(<Component></Component>);
|
|
278
|
+
};
|
package/src/view/react/labels.js
CHANGED
|
@@ -118,18 +118,23 @@ renderingContext.renderEditorLabel = (rowNode, binding, item, context) => {
|
|
|
118
118
|
const b = context.view.messages;
|
|
119
119
|
let mark;
|
|
120
120
|
|
|
121
|
-
if
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
121
|
+
// Only show mark if there is a property that allows the item to have an expression on its own
|
|
122
|
+
if (item.getProperty()) {
|
|
123
|
+
if (card.min > 0) {
|
|
124
|
+
mark = <span className="rdformsMark rdformsMandatoryMark">{b.mandatoryMark}</span>;
|
|
125
|
+
} else if (card.pref > 0) {
|
|
126
|
+
mark = <span className="rdformsMark rdformsRecommendedMark">{b.recommendedMark}</span>;
|
|
127
|
+
} else {
|
|
128
|
+
mark = <span className="rdformsMark rdformsOptionalMark">{b.optionalMark}</span>;
|
|
129
|
+
}
|
|
127
130
|
}
|
|
128
131
|
let Button;
|
|
129
132
|
if (binding == null) {
|
|
130
133
|
Button = renderingContext.addExpandButton(rowNode, null, item, context);
|
|
131
134
|
} else if (item.getType() === 'group' && !context.view.showAsTable(item)) {
|
|
132
|
-
|
|
135
|
+
if (item.getProperty()) {
|
|
136
|
+
Button = renderingContext.addRemoveButton(rowNode, binding, context);
|
|
137
|
+
}
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
const view = context.view;
|
|
@@ -160,11 +165,13 @@ const ERR = (props) => {
|
|
|
160
165
|
const [code, setCode] = useState(binding.getCardinalityTracker().getCode());
|
|
161
166
|
useEffect(() => {
|
|
162
167
|
const cardTr = binding.getCardinalityTracker();
|
|
163
|
-
const
|
|
168
|
+
const checkAndSetCode = () => {
|
|
164
169
|
const newCode = cardTr.getCode();
|
|
165
170
|
renderingContext.domClassToggle(rowNode, 'rdformsError', newCode !== CODES.UNKNOWN);
|
|
166
171
|
setCode(newCode);
|
|
167
|
-
}
|
|
172
|
+
};
|
|
173
|
+
checkAndSetCode(); // We call it here to be sure, not depending on a potential callback from cardTr
|
|
174
|
+
const listener = cardTr.addListener(checkAndSetCode);
|
|
168
175
|
return () => cardTr.removeListener(listener);
|
|
169
176
|
}, []);
|
|
170
177
|
if (code === CODES.UNKNOWN) {
|
package/src/view/react/style.css
CHANGED
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.rdformsEditor .cardgroupEditor>.rdformsFields>.rdformsGroup,
|
|
42
|
-
.cardgroup>.rdformsFields>.rdformsGroup
|
|
42
|
+
.cardgroup>.rdformsFields>.rdformsGroup,
|
|
43
|
+
.rdformsCard>.rdformsFields>.rdformsGroup {
|
|
43
44
|
padding: 6px 6px 6px 12px;
|
|
44
45
|
margin-right: -5px;
|
|
45
46
|
margin-bottom: 14px;
|
|
@@ -171,7 +172,8 @@ div.MuiTooltip-tooltip {
|
|
|
171
172
|
padding-bottom: 0;
|
|
172
173
|
}
|
|
173
174
|
.rdformsEditor .cardgroupEditor>.rdformsFields>.rdformsGroup,
|
|
174
|
-
.cardgroup>.rdformsFields>.rdformsGroup
|
|
175
|
+
.cardgroup>.rdformsFields>.rdformsGroup,
|
|
176
|
+
.rdformsCard>.rdformsFields>.rdformsGroup {
|
|
175
177
|
margin-bottom: 5px;
|
|
176
178
|
}
|
|
177
179
|
|
|
@@ -201,7 +203,8 @@ div.MuiTooltip-tooltip {
|
|
|
201
203
|
}
|
|
202
204
|
|
|
203
205
|
.rdformsEditor .rdformsError.cardgroupEditor>.rdformsFields>.rdformsGroup,
|
|
204
|
-
.rdformsError.cardgroup>.rdformsFields>.rdformsGroup
|
|
206
|
+
.rdformsError.cardgroup>.rdformsFields>.rdformsGroup,
|
|
207
|
+
.rdformsError.rdformsCard>.rdformsFields>.rdformsGroup {
|
|
205
208
|
margin-right: 11px;
|
|
206
209
|
}
|
|
207
210
|
|
|
@@ -231,4 +234,13 @@ div.MuiTooltip-tooltip {
|
|
|
231
234
|
|
|
232
235
|
.Mui-disabled.rdformsDatatypeOption {
|
|
233
236
|
color: red;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.rdformsPresenter .rdformsShowLess,
|
|
240
|
+
.rdformsPresenter .rdformsShowMore {
|
|
241
|
+
margin-left: 0;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.rdformsPresenter .rdformsInline {
|
|
245
|
+
padding-left: 0em;
|
|
234
246
|
}
|
package/src/view/react/text.js
CHANGED
|
@@ -81,16 +81,36 @@ presenters.itemtype('text').nodetype('URI').style('image').register((fieldDiv, b
|
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
// Presenter for text.
|
|
84
|
-
presenters.itemtype('text').register((fieldDiv, binding, context) => {
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
/*presenters.itemtype('text').style('inline').register((fieldDiv, binding, context) => {
|
|
85
|
+
const language = binding.getLanguage();
|
|
86
|
+
|
|
87
|
+
// HERE
|
|
88
|
+
const val2binding = {};
|
|
89
|
+
// eslint-disable-next-line no-return-assign
|
|
90
|
+
parentBinding.getChildBindingsFor(item).forEach(b => (val2binding[b.getValue()] = b));
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
const lbl = binding.getItem().hasStyle('showValue') ? binding.getValue() : binding.getGist();
|
|
94
|
+
if (language) {
|
|
95
|
+
fieldDiv.appendChild(<span lang={language} key={binding.getHash()}>{lbl}</span>);
|
|
87
96
|
} else {
|
|
88
|
-
|
|
97
|
+
fieldDiv.appendChild(<span key={binding.getHash()}>{lbl}</span>);
|
|
89
98
|
}
|
|
99
|
+
});*/
|
|
90
100
|
|
|
101
|
+
presenters.itemtype('text').register((fieldDiv, binding, context) => {
|
|
102
|
+
const item = binding.getItem();
|
|
91
103
|
const language = binding.getLanguage();
|
|
92
|
-
if (
|
|
93
|
-
|
|
104
|
+
if (!item.hasStyle('inline')) {
|
|
105
|
+
if (item.hasStyle('multiline')) {
|
|
106
|
+
renderingContext.domClassToggle(fieldDiv, 'rdformsMultiline', true);
|
|
107
|
+
} else {
|
|
108
|
+
renderingContext.domClassToggle(fieldDiv, 'rdformsSingleline', true);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (context.view.showLanguage && language) {
|
|
112
|
+
fieldDiv.appendChild(<span className="rdformsLanguage" key={`lang_${binding.getHash()}`}>{language}</span>);
|
|
113
|
+
}
|
|
94
114
|
}
|
|
95
115
|
|
|
96
116
|
// The text is shown as a link to the parents bindings URI if:
|
|
@@ -99,9 +119,9 @@ presenters.itemtype('text').register((fieldDiv, binding, context) => {
|
|
|
99
119
|
// 3) The current item is first in the parents list of children.
|
|
100
120
|
// 4) The parent binding corresponds to a URI
|
|
101
121
|
const parentBinding = binding.getParent();
|
|
102
|
-
if (
|
|
122
|
+
if (item.hasStyle('label')
|
|
103
123
|
&& context.view.topLevel !== true
|
|
104
|
-
&& parentBinding != null && parentBinding.getItem().getChildren()[0] ===
|
|
124
|
+
&& parentBinding != null && parentBinding.getItem().getChildren()[0] === item
|
|
105
125
|
&& parentBinding.getStatement() != null && parentBinding.getStatement().getType() === 'uri') {
|
|
106
126
|
const attrs = system.attachLinkBehaviour(fieldDiv, binding, parentBinding);
|
|
107
127
|
const component = attrs.component || null;
|
|
@@ -115,7 +135,7 @@ presenters.itemtype('text').register((fieldDiv, binding, context) => {
|
|
|
115
135
|
parentBinding.getStatement().getValue()}><span>{vmap ?
|
|
116
136
|
utils.getLocalizedValue(vmap).value || val : val}</span>{component}</a>);
|
|
117
137
|
} else {
|
|
118
|
-
const lbl =
|
|
138
|
+
const lbl = item.hasStyle('showValue') ? binding.getValue() : binding.getGist();
|
|
119
139
|
if (language) {
|
|
120
140
|
fieldDiv.appendChild(<span lang={language} key={binding.getHash()}>{lbl}</span>);
|
|
121
141
|
} else {
|
|
@@ -317,6 +317,8 @@ const renderingContext = {
|
|
|
317
317
|
},
|
|
318
318
|
fillEditorTable(/* table, bindings, context */) {
|
|
319
319
|
},
|
|
320
|
+
addTruncateControl(/* fieldsDiv */) {
|
|
321
|
+
}
|
|
320
322
|
};
|
|
321
323
|
|
|
322
324
|
system.getChoice = renderingContext.getChoice;
|
|
@@ -334,6 +336,8 @@ const groupPresenter = (fieldDiv, binding, context) => {
|
|
|
334
336
|
showDescription: context.view.showDescription,
|
|
335
337
|
defaultLanguage: context.view.defaultLanguage,
|
|
336
338
|
filterTranslations: context.view.filterTranslations,
|
|
339
|
+
truncate: context.view.truncate,
|
|
340
|
+
truncateLimit: context.view.truncateLimit,
|
|
337
341
|
includeLevel: context.view.includeLevel, // Copied from groupEditor, was this.includeLevel but that 'this' does not make sense here
|
|
338
342
|
}, fieldDiv);
|
|
339
343
|
};
|
|
@@ -351,6 +355,8 @@ const groupEditor = (fieldDiv, binding, context) => {
|
|
|
351
355
|
topLevel: false,
|
|
352
356
|
compact: context.view.compact,
|
|
353
357
|
showDescription: context.view.showDescription,
|
|
358
|
+
truncate: context.view.truncate,
|
|
359
|
+
truncateLimit: context.view.truncateLimit,
|
|
354
360
|
includeLevel: context.view.includeLevel,
|
|
355
361
|
}, fieldDiv);
|
|
356
362
|
context.view._subEditors.push(subView);
|
|
@@ -55,5 +55,7 @@
|
|
|
55
55
|
"dependencyField": "This field depends on another field, please review the field it depends on or remove this value.",
|
|
56
56
|
"wrongValueField": "This is an invalid value, please change or remove it.",
|
|
57
57
|
"wrongDatatypeField": "The value has an invalid datatype, please change or remove it.",
|
|
58
|
-
"openLinkExternally": "Open link externally"
|
|
58
|
+
"openLinkExternally": "Open link externally",
|
|
59
|
+
"showMore": "Show more",
|
|
60
|
+
"showLess": "Show less"
|
|
59
61
|
}
|
|
@@ -739,4 +739,49 @@ a.rdformsUrl:hover {
|
|
|
739
739
|
.rdformsDescription {
|
|
740
740
|
font-style: italic;
|
|
741
741
|
margin-bottom: 10px;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
.rdformsPresenter .rdformsInline>.rdformsRepeatedValue,
|
|
745
|
+
.rdformsPresenter .rdformsInline>.rdformsOrigin {
|
|
746
|
+
border: 1px solid #E6E6E6;
|
|
747
|
+
padding: 4px 8px;
|
|
748
|
+
margin-top: initial;
|
|
749
|
+
margin-right: 5px;
|
|
750
|
+
border-radius: 4px;
|
|
751
|
+
margin-bottom: 5px;
|
|
752
|
+
display: inline-block;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
.rdformsPresenter .rdformsShowLess,
|
|
756
|
+
.rdformsPresenter .rdformsShowMore {
|
|
757
|
+
margin-left: 1em;
|
|
758
|
+
margin-top: 5px;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
.rdformsPresenter .rdformsInline>.rdformsShowLess,
|
|
762
|
+
.rdformsPresenter .rdformsInline>.rdformsShowMore {
|
|
763
|
+
margin-left: 0;
|
|
764
|
+
margin-top: initial;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
.rdformsPresenter .rdformsTruncated>.rdformsMaybeTruncated {
|
|
768
|
+
display: none;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
.rdformsPresenter .rdformsTruncated>.rdformsShowLess {
|
|
772
|
+
display: none;
|
|
773
|
+
}
|
|
774
|
+
.rdformsPresenter .rdformsShowMore {
|
|
775
|
+
display: none;
|
|
776
|
+
}
|
|
777
|
+
.rdformsPresenter .rdformsTruncated>.rdformsShowMore {
|
|
778
|
+
display: initial;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
.rdformsPresenter .rdformsInline>.rdformsField {
|
|
782
|
+
margin-left: 0;
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
.rdformsPresenter .rdformsInline {
|
|
786
|
+
padding-left: 1em;
|
|
742
787
|
}
|