Merge branch 'recogito:main' into i18n-french

This commit is contained in:
Olivier Berten 2021-08-02 10:13:54 +02:00 committed by GitHub
commit 1f31e2d74c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 59 additions and 15 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "@recogito/recogito-client-core", "name": "@recogito/recogito-client-core",
"version": "1.3.5", "version": "1.4.4",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@recogito/recogito-client-core", "name": "@recogito/recogito-client-core",
"version": "1.3.5", "version": "1.4.4",
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"dependencies": { "dependencies": {
"@babel/polyfill": "^7.10.4", "@babel/polyfill": "^7.10.4",

View File

@ -1,8 +1,9 @@
{ {
"name": "@recogito/recogito-client-core", "name": "@recogito/recogito-client-core",
"version": "1.3.5", "version": "1.4.4",
"description": "Core functions, classes and components for RecogitoJS", "description": "Core functions, classes and components for RecogitoJS",
"main": "src/index.js", "main": "src/index.js",
"sideEffects": ["themes/default/*"],
"scripts": { "scripts": {
"test": "NODE_ENV=test ./node_modules/.bin/mocha --require @babel/register" "test": "NODE_ENV=test ./node_modules/.bin/mocha --require @babel/register"
}, },

View File

@ -13,7 +13,8 @@ export const PURPOSES = [
{'value': 'linking', 'label': 'Linking'}, {'value': 'linking', 'label': 'Linking'},
{'value': 'moderating', 'label': 'Moderating'}, {'value': 'moderating', 'label': 'Moderating'},
{'value': 'questioning', 'label': 'Questioning'}, {'value': 'questioning', 'label': 'Questioning'},
{'value': 'replying', 'label': 'Replying'} {'value': 'replying', 'label': 'Replying'},
{'value': 'supplementing', 'label': 'Transcription'}
] ]
const PurposeSelect = props => { const PurposeSelect = props => {
@ -34,4 +35,4 @@ const PurposeSelect = props => {
} }
export default PurposeSelect; export default PurposeSelect;

View File

@ -59,22 +59,34 @@ const isReactComponent = component => {
*/ */
export const getWidget = arg => { export const getWidget = arg => {
const instantiate = (widget, config) => { const instantiate = (widget, config, force) => {
// Check if user forced explicit type
if (typeof widget === 'string' || widget instanceof String) { if (typeof widget === 'string' || widget instanceof String) {
// Built-in
return React.createElement(BUILTIN_WIDGETS[widget], config); return React.createElement(BUILTIN_WIDGETS[widget], config);
} else if (isReactComponent(widget)) { } else {
return React.createElement(widget, config); // Plugin
} else if (typeof widget === 'function' || widget instanceof Function) { if (force?.toLowerCase() === 'react') {
return <WrappedWidget widget={widget} config={config} /> return React.createElement(widget, config);
} else { } else if (force?.toLowerCase() === 'plainjs') {
throw `${widget} is not a valid plugin` return <WrappedWidget widget={widget} config={config} />
} else {
// Auto-detect
if (isReactComponent(widget)) {
return React.createElement(widget, config);
} else if (typeof widget === 'function' || widget instanceof Function) {
return <WrappedWidget widget={widget} config={config} />
} else {
throw `${widget} is not a valid plugin`
}
}
} }
} }
// First, check 'top-level' vs. 'nested object' case // First, check 'top-level' vs. 'nested object' case
if (arg.widget) { if (arg.widget) {
const { widget, ...config } = arg; const { widget, force, ...config } = arg;
return instantiate(widget, config); return instantiate(widget, config, force);
} else { } else {
// No object with args -> instantiate arg directly // No object with args -> instantiate arg directly
return instantiate(arg); return instantiate(arg);

View File

@ -1,12 +1,42 @@
import Polyglot from 'node-polyglot'; import Polyglot from 'node-polyglot';
import * as timeago from 'timeago.js'; import * as timeago from 'timeago.js';
import messages_ar from './messages_ar.json';
import messages_cs from './messages_cs.json';
import messages_de from './messages_de.json';
import messages_el from './messages_el.json';
import messages_es from './messages_es.json';
import messages_gl from './messages_gl.json';
import messages_hi from './messages_hi.json';
import messages_it from './messages_it.json';
import messages_nl from './messages_nl.json';
import messages_pt from './messages_pt.json';
import messages_sv from './messages_sv.json';
import messages_tr from './messages_tr.json';
import messages_ur from './messages_ur.json';
const MESSAGES = {
ar: messages_ar,
cs: messages_cs,
de: messages_de,
el: messages_el,
es: messages_es,
gl: messages_gl,
hi: messages_hi,
it: messages_it,
nl: messages_nl,
pt: messages_pt,
sv: messages_sv,
tr: messages_tr,
ur: messages_ur
}
const i18n = new Polyglot({ allowMissing: true }); const i18n = new Polyglot({ allowMissing: true });
i18n.init = (lang, opt_messages) => { i18n.init = (lang, opt_messages) => {
if (lang) { if (lang) {
i18n.locale(lang); i18n.locale(lang);
i18n.extend(require(`./messages_${lang}.json`)); i18n.extend(MESSAGES[lang]);
} }
if (opt_messages) if (opt_messages)